1 ΑΣΚΗΣΗ 1 Σε τρεις πίνακες αποθηκεύουμε το ονοματεπώνυμο, την θέση και τα έτη εργασίας 48 υπαλήλων μιας εταιρείας. Η θέση σημειώνεται με το γράμμα Τ ή το γράμμα Δ αν ο υπάλληλος είναι τεχνικός ή διοικητικός αντίστοιχα. Τα έτη εργασίας μπορεί να είναι ακέραιος αριθμός από το 1 έως το 35. Να γραφεί αλγόριθμος που : α) Να εισάγει τα στοιχεία στους πίνακες. Να γίνεται έλεγχος ορθής καταχώρησης της θέσης και των ετών εργασίας. β) Να υπολογίζει το ποσοστό (%) των τεχνικών και το ποσοστό (%) των διοικητικών της εταιρείας και να τα εμφανίζει με κατάλληλο μήνυμα. γ) Να εμφανίζει το όνομα του τεχνικού με τα λιγότερα έτη εργασίας. Σε περίπτωση που υπάρχουν παραπάνω από ένας τεχνικοί, με αυτό το χαρακτηριστικό να τους εμφανίζει όλους 1. Στις ασκήσεις με πίνακα, ο σχεδιασμός των πινάκων βοηθάει στο να κατανοήσουμε τα δεδομένα και την οργάνωσή τους (τι ακριβώς περιέχεται σε κάθε θέση (κελί) του πίνακα και σε τι αναφέρεται αυτή η τιμή).. Για τον έλεγχο ορθής καταχώρησης τοποθετούμε την εντολή Διάβασε μέσα στην επαναληπτική δομή Αρχή_επανάληψης... Μέχρις_ότου. Αλγόριθμος ΑΣΚΗΣΗ_1! α) Διάβασε Ον[i] Αρχή_επανάληψης Διάβασε Ε[i] Μέχρις_ότου Ε[i] > 0 και Ε[i] < = 35 Κάθε κελί πε- Κάθε κελί περιέχει Κάθε κελί περιέριέχει το ονο- την θέση ενός χει τα έτη ματεπώνυμο υπαλλήλου. εργασίας ενός ενός υπαλλήλου στην εταιρεία υπαλλήλου. Αρχή_επανάληψης Διάβασε Θ[ί] Μέχρις_ότου Θ[i] = 'Τ' ή Θ[i] = 'Δ'! β) πλήθοςτ 0! Για τον υπολογισμό ποσοστού υπολογίζουμε πρώτα το πλήθος πλήθοςδ 0 Αν Θ[i] = 'Τ' τότε πλήθοςτ πλήθοςτ + 1
Αλλιώς πλήθοςδ πλήθοςδ + 1 ποστ πλήθοςτ* 100/48 ποσδ πλήθοςδ* 100/48 Εμφάνισε 'Ποσοστό Τεχνικών: ', ποστ Εμφάνισε 'Ποσοστό διοικητικών υπαλλήλων: ', ποσδ! γ) min Ε[1] Για i από μέχρι 48 Αν Ε[i] < min τότε min Ε[i] Εμφάνισε Τεχνικοί με τα λιγότερα έτη εργασίας: Αν Ε[i] = min τότε Γράψε Ον[i] Τέλος ΑΣΚΗΣΗ_1 ΑΣΚΗΣΗ Ένα βιβλιοπωλείο διαθέτει 5 υποκαταστήματα σε τέσσερις περιοχές της Αθήνας. Σε όλα τα υποκαταστήματα πωλούνται βιβλία τεσσάρων κατηγοριών επιστημονικά, λογοτεχνικά, ιστορικά και σχολικά. Το κεντρικό βιβλιοπωλείο θέλει να οργανώσει σε πίνακες τα δεδομένα αυτά ώστε να μπορεί να υπολογίζει τις πωλήσεις από κάθε κατηγορία βιβλίων που έκανε κάθε υποκατάστημα τον χρόνο που πέρασε. Να γραφεί αλγόριθμος ο οποίος : α) Θα εισάγει σε έναν πίνακα Κ, τις κατηγορίες των βιβλίων, σε έναν πίνακα Υ την περιοχή του κάθε υποκαταστήματος, και σε έναν πίνακα Π τις πωλήσεις κάθε υποκαταστήματος για κάθε κατηγορία βιβλίου. Κατά την εισαγωγή των στοιχείων να γίνεται έλεγχος ορθής καταχώρησης της κατηγορίας βιβλίου : 'Ε' για τα επιστημονικά, 'Λ' για τα λογοτεχνικά, 'Ι' για τα ιστορικά, και 'Σ' για σχολικά β) Θα υπολογίζει τον αριθμό λογοτεχνικών βιβλίων που πούλησαν όλα τα υποκαταστήματα συνολικά και θα το εμφανίζει με κατάλληλο μήνυμα. γ) Θα εμφανίζει την περιοχή του 3 ου υποκαταστήματος και τον αριθμό των πωλήσεων που έκανε (για όλες τις κατηγορίες βιβλίων μαζί ) 3. Όταν ο υπολογισμός αφορά μια γραμμή ή μια στήλη ενός δισδιάστατου πίνακα, τότε χρησιμοποιούμε απλή επανάληψη στον υπολογισμό των ζητουμένων. Η επανάληψη αφορά τη γραμμή ή τη στήλη, ανάλογα με το ποια μεταβάλλεται.
4. Όταν διαβάζουμε πίνακες μονοδιάστατους και δισδιάστατους, τότε αν ο μονοδιάστατος αντιστοιχεί στις γραμμές του δισδιάστατου θα χρησιμοποιούμε τη μεταβλητή i στην επανάληψη. Αν ο μονοδιάστατος αντιστοιχεί στις στήλες του δισδιάστατου θα χρησιμοποιούμε τη μεταβλητή j στην επανάληψη. Αλγόριθμος ΑΣΚΗΣΗ_! α) Για i από 1 μέχρι 4 Αρχή_επανάληψης Διάβασε Κ[i] Μέχρις_ότου Κ[i]='Ε' ή Κ[i]='Λ' ή Κ[i]='Ι' ή Κ[i]='Σ' Για i από 1 μέχρι 4 Για j από 1 μέχρι 5 Διάβασε Π[ϊ, j] Για j από 1 μέχρι 5 Διάβασε Υ[j]! β) άθροισμα 0 Για j από 1 μέχρι 5 άθροισμα άθροισμα + Π[, j] Γράψε 'Συνολικά Λογοτεχνικά βιβλία που πουλήθηκαν: ', άθροισμα! γ) 1 3 4 Κ Κάθε κελί περιέχει το όνομα κάθε μιας ατηγορίας βιβλίων Υ 1 3 4 5 Κάθε κελί περιέχει την περιοχή του υποκαταστήματος. Π 1 3 4 1 3 4 5 Κάθε κελί περιέχει τα βιβλία που πουλήθηκαν από κάθε κατηγορία και κάθε υποκαταστημα Κάθε γραμμή αφορά μια κατηγορία. Η 1 η γραμμή την κατηγορία Ε Η η γραμμή την κατηγορία Λ κ.ο.κ. Κάθε στήλη αφορά ένα υποκατάστημα Η 1 η στήλη το 1 υποκατάστημα κ.ο.κ. 3 άθροισμα 0 Για i από 1 μέχρι 4 άθροισμα άθροισμα + Π[i, 3] Γράψε Υ[3], άθροισμα Τέλος ΑΣΚΗΣΗ_ ΑΣΚΗΣΗ 3 Σε έναν μονοδιάστατο πίνακα ΚΩΔ, 10 θέσεων εισάγουμε τον κωδικό αριθμό δέκα προϊόντων που υπάρχουν σε μια αποθήκη. Σε έναν δισδιάτατο πίνακα ΤΕΜ[10,1] εισάγουμε για κάθε προϊόν, τον αριθμό τεμαχίων που εισήχθησαν στην αποθήκη κατά την διάρκεια του τελευταίου έτους, ανά μήνα. Να γραφεί αλγόριθμος ο οποίος:
α) Θα εισάγει τα στοιχεία στους πίνακες ΚΩΔ και ΤΕΜ 4 β) Θα ελέγχει αν υπάρχει προίόν με κωδικό «Ζ431» και αν υπάρχει, θα εμφανίζει για κάθε μήνα τον αριθμό τεμαχίων (του προϊόντος αυτού) που εισάχθηκαν στη αποθήκη. Αν δεν υπάρχει προϊόν με αυτόν τον κωδικό αριθμό θα εμφανίζει το μήνυμα «Δεν υπάρχει προϊόν με αυτόν τον κωδικό στην αποθήκη». γ) θα υπολογίζει για κάθε προίόν, τον μέσο όρο τεμαχίων ανα μήνα, που εισάχθηκαν στην αποθήκη κατά την διάρκεια του τελευταίου έτους και θα τον εμφανίζει, μετά από τον κωδικό προϊόντος. δ) θα εμφανίζει το προϊόν (κωδικό προϊόντος) για το οποίο έγινε εισαγωγή περισσότερων τεμαχίων στην αποθήκη τον μήνα Μάρτιο. 5. Όταν η άσκηση ζητά την εξέταση ενός μη ταξινομημένου πίνακα για το αν υπάρχει ένα στοιχείο ή όχι, τότε χρησιμοποιούμε τον αλγόριθμο της Σειριακής Αναζήτησης Αλγόριθμος ΑΣΚΗΣΗ_3!α) Διάβασε ΚΩΔ[ί] Διάβασε ΤΕΜ[i, j] 1... 10 ΚΩΔ Πίνακας ΚΩΔ: Κάθε κελί περιέχει τον κωδικό ενός προϊόντος. ΤΕΜ αθρ 1 1..... 10 10 1 3..... 1 Πίνακας ΤΕΜ: Κάθε κελί περιέχει τον αριθμό των τεμαχίων που εισάχθηκαν στην αποθήκη ανά μήνα. Κάθε γραμμή περιέχει τον αριθμό των τεμαχίων ένος συγκεκριμένου προϊόντος. Η 1 η γραμμή αντιστοιχεί στον αριθμό των τεμαχίων του προϊόντος με κωδικό ΚΩΔ[1], Η η γραμμή αντιστοιχεί στον αριθμό των τεμαχίων του προϊόντος με κωδικό ΚΩΔ[1], κ.ο.κ.! β) Κάθε στήλη αφορά ένα μήνα βρέθηκε Ψευδής Η 1 η στήλη τον 1 μήνα, η η i 1 στήλη τον μήνα κ.ο.κ. Όσο i <= 10 και βρέθηκε = ψευδής επανάλαβε Αν ΚΩΔ[i] = 'Ζ431' τότε βρέθηκε Αληθής Εμφάνισε 'μήνας ', j, ' εισήχθησαν τεμάχια ', TEM[i, j] i i + 1 Αν βρέθηκε = Ψευδής τότε Γράψε "Δεν υπάρχει προϊόν με αυτόν τον κωδικό στην αποθήκη"
!γ) 5 αθρ[ί] 0! ο πίνακας αθρ[10] κατασκευάστηκε για να αποθηκεύσει! τα αθοίσματα των γραμμών του ΤΕΜ[i,j] αθρ[i] αθρ[i] + ΤΕΜ[i,j] MΟ αθρ[i]/1 Γράψε ΚΩΔ[i], ' Μέσος όρος τεμαχίων ανά μήνα: ', ΜΟ!δ) max ΤΕΜ[1,3] ΚΩΔ_max ΚΩΔ[1] Για i από μέχρι 10 Αν ΤΕΜ[i,3] > max τότε max ΤΕΜ[i,3] ΚΩΔ_max ΚΩΔ[i] Γράψε ' Τον Μάρτιο τα περισσότερα τεμάχια που εισάχθηκαν ήταν για το προϊόν με κωδικό: ', ΚΩΔ_max ΤΈΛΟΣ ΑΣΚΗΣΗ_3 ΑΣΚΗΣΗ 4 Ένα νοσοκομείο διαθέτει πέντε τμήματα (καρδιολογικό, γαστρεντερολογικό, πνευμονολογικό, νευρολογικό, ορθοπεδικό). Κάθε τμήμα διαθέτει κλινικές με δυνατότητα νοσηλείας ασθενών. Η Διοίκηση του νοσοκομείου στα πλαίσια μιας στατιστικής μελέτης που κάνει, καταγράφει τον αριθμό των αρρώστων που νοσηλεύτηκαν σε κάθε τμήμα για κάθε έναν από τους δώδεκα μήνες του έτους που πέρασε. Να γραφεί αλγόριθμος ο οποίος: α) Θα διαβάζει τα ονόματα των τμημάτων του νοσοκομείου και των αριθμό των ασθενών που νοσηλεύτηκαν κάθε μήνα σε κάθε ένα από τα τμήματα του νοσοκομείου, το έτος που πέρασε. β) Θα υπολογίζει πόσοι ασθενείς νοσηλεύονται τον μήνα κατά μέσο όρο σε κάθε τμήμα, και θα το εμφανίζει αφού πρώτα εμφανίσει το όνομα του αντίστοιχου τμήματος. Η εμφάνιση θα γίνεται με την μορφή <ΤΜΗΜΑ > <Μέσος όρος ασθενών ανά μήνα :...> γ) Θα βρίσκει και θα εμφανίζει το τμήμα στο οποίο σημειώθηκε ο μικρότερος αριθμός ασθενών που νοσηλεύτηκαν συνολικά στην διάρκεια του έτους που πέρασε. δ) Θα βρίσκει και θα εμφανίζει με κατάλληλο μήνυμα, τον μήνα του έτους που πέρασε, κατά τον οποίο το νοσοκομείο είχε τον μεγαλύτερο αριθμό νοσηλευομένων
ε) Θα βρίσκει και θα εμφανίζει σε ποιο τμήμα σημειώθηκε ο μεγαλύτερος αριθμός ασθενών που νοσηλεύτηκαν, και ποιο μήνα έγινε αυτό 6 6. Όταν ζητείται άθροισμα, μέσος όρος, πλήθος, ποσοστό, min, max κατά γραμμή ή στήλη σε έναν πίνακα δύο διαστάσεων, τότε σε απλή επανάληψη αρχικοποιούμε τα ζητούμενα, κατόπιν σε διπλή επανάληψη γίνεται υπολογισμός και σε απλή επανάληψη γίνεται η εμφάνιση των αποτελεσμάτων. Αλγόριθμος ΑΣΚΗΣΗ_4! α) Διάβασε Τ[i] Διάβασε Ν[i,j]! β) αθρ_τμήμα[i] 0 Τ Ν αθρ_τμήμα 1 1 1 3 3 3 4 4 4 5 5 5 1 1 αθρ_μήνα Πίνακας Τ: Κάθε κελί περιέχει το όνομα ενός τμήματος. 1 1 Πίνακας Ν: Κάθε κελί περιέχει τον αριθμό ασθενών που νοσηλεύτηκαν. Κάθε γραμμή περιέχει τον αριθμό ασθενών ενός τμήματος που νοσηλεύτηκαν. Η 1 η γραμμή τους ασθενείς του 1 ου τμήματος, η η τους ασθενείς του ου, κ.ο.κ. Κάθε στήλη περιέχει τον αριθμό ασθενών που νοσηλεύτηκαν κατά την διάρκεια ενός μήνα (από όλα τα τμήματα). Η 1 η στήλη τους ασθενείς του Ιανουαρίου από όλα τα τμήματα, η η στήλη τους ασθενείς του Φεβρουαρίου κ.ο.κ.! δημιουργούμε νέο πίνακα αθρ_τμήμα[5] και τον! αρχικοποιούμε θέτοντας αρχική τιμή μηδέν σε κάθε κελί του! Εκχωρούμε στον πίνακα αθρ_τμήμα[5], το άθροισμα των ασθενών ανα!τμήμα (άθροισμα γραμμής) αθρ_τμήμα[i] αθρ_τμήμα[i] + Ν[i,j] Γράψε Τ[i], ' Μέσος όρος ασθενών ανά μήνα : ', αθρ_τμήμα [i] / 1! γ) min αθρ_τμήμα [1] Tmin T[1] Για i από μέχρι 5 Αν αθρ_τμήμα [i] < min τότε min αθρ_τμήμα [i] Tmin T[i] Γράψε T[i]!Εμφάνιση του τμήματος με τον μικρότερο αριθμό νοσηλευομένων
7! δ) αθρ_μήνα[i] 0! δημιουργούμε νέο πίνακα αθρ_μήνα[1] και τον! αρχικοποιούμε θέτοντας αρχική τιμή μηδέν σε κάθε κελί του! Εκχωρούμε στον πίνακα αθρ_μήνα[1], το άθροισμα των ασθενών (όλων των!τμημάτων ) ανα μήνα (άθροισμα στήλης) αθρ_μήνα[i] αθρ_μήνα[i] + Ν[i,j] max αθρ_μήνα [1] μηνας_max 1 Για j από μέχρι 1 Αν αθρ_μήνα [j] > max τότε max αθρ_μήνα [j] μηνας_max j! βρίσκουμε το μέγιστο στοιχείο του πίνακα αθρ_μήνα[1]!εμφάνιση του μήνα με τον μεγαλύτερο αριθμό νοσηλευομένων Γράψε 'Μήνας με τους περισσότερους νοσηλευόμενους : ', μηνας_max! ε) max Ν[1,1]! βρίσκουμε το μέγιστο στοιχείο του πίνακα Ν[5,1] και μετά Tmax T[1]! βρίσκουμε σε ποιο τμήμα (στοιχείο του πίνακα Τ[5]) αντιστοιχεί μηνας_max 1! και σε ποιο μήνα (στήλη j ) αντιστοιχεί Αν Ν[i, j] > max τότε max Ν[i, j] Tmax T[i] μηνας_max j Γράψε 'Ο μεγαλύτερος αριθμός ασθενών σημειώθηκε στο τμήμα ', Tmax, 'τον ', μηνας_max, 'ο μήνα' ΤΈΛΟΣ ΑΣΚΗΣΗ_4