3 η Ε π α ν α λ η π τ ι κ ή Ά σ κ η σ η Το τμήμα Πληροφορικής του Οικονομικού Πανεπιστημίου Αθηνών διατηρεί μια βάση δεδομένων με τα στοιχεία των φοιτητών του (μέγιστος αριθμός φοιτητών 200). Σε κάθε φοιτητή έχει αντιστοιχισθεί ένας αριθμός μητρώου που αποτελείται από έναν πενταψήφιο αριθμό Τα πρώτα δυο ψηφία αποτελούν το σχολικό έτος που εισήχθη στο πανεπιστήμιο και τα υπόλοιπα τρία είναι ο αύξων αριθμός εγγραφής στο πανεπιστημιακό αυτό τμήμα (για παράδειγμα ο φοιτητής με αριθμό μητρώου 01003 εισήχθη το σχολικό έτος 2001-2002 και έχει γραφτεί τρίτος στη γραμματεία του τμήματος). Να αναπτύξετε πρόγραμμα με τη χρήση υποπρογραμμάτων όπου: 1. Να διαβάζει το πλήθος των φοιτητών του τμήματος, το όνομα και επώνυμο των φοιτητών. Ακόμη, για κάθε φοιτητή πρέπει να εισάγεται από το χρήστη η βαθμολογία του στα 12 μαθήματα του πρώτου έτους φοίτησης. Σημειώνεται ότι πρέπει να εισαχθούν από το χρήστη και τα ονόματα των 12 μαθημάτων σε έναν ξεχωριστό μονοδιάστατο πίνακα 2. Να υπολογίζει τους μέσους όρους των μαθητών και να εκτυπώνει τον γενικό μέσο όλων των φοιτητών του πρώτου έτους 3. Να διαβάζει το όνομα ενός φοιτητή και να εκτυπώνει το μέσο όρο της βαθμολογίας του 4. Να εντοπίζει και να εκτυπώνει το όνομα του φοιτητή που έχει το μεγαλύτερο μέσο όρο; 5. Να εντοπίζει ποιοι είναι οι 3 φοιτητές που δικαιούνται υποτροφία από το ΙΚΥ 1
Σύμφωνα με την εκφώνηση πρέπει το πρόβλημα να διαχωριστεί σε υποπροβλήματα τα οποία στη ΓΛΩΣΣΑ θα αποτελούν διαδικασίες ή συναρτήσεις. Τα υποπρογράμματα που θα χρησιμοποιήσουμε θα είναι: Α. Διαδικασία Είσοδος_Δεδομένων: Για την εισαγωγή των δεδομένων από το χρήστη (ερώτημα 1) Β. Διαδικασία Υπολογισμός_ΜΟ: Για την δημιουργία του πίνακα των μέσων όρων (ερώτημα 2) Γ. Συνάρτηση Υπολογισμός_Συνολικού_ΜΟ: Για τον υπολογισμό και εκτύπωση του συνολικού μέσου όρου (ερώτημα 2) Δ. Διαδικασία Εκτύπωση_Μέσου_Όρου_Φοιτητής: Για την εκτύπωση του μέσου όρου συγκεκριμένου φοιτητή το όνομα του οποίου έχει εισαχθεί από το χρήστη στο κυρίως πρόγραμμα (ερώτημα 3) Ε. Διαδικασία Εύρεση_Μεγ_ΜΟ: Για την εύρεση και εκτύπωση του μεγαλύτερου μέσου όρου (ερώτημα 4) ΣΤ. Διαδικασία Ταξινόμηση: Ταξινομεί τον πίνακα με του μέσους όρους >(ερώτημα 5) Ζ. Διαδικασία Εκτύπωση_top3: Εκτυπώνει τους 3 φοιτητές με τον μεγαλύτερο μέσο όρο (ερώτημα 5). Απαραίτητη προϋπόθεση είναι να έχει προηγηθεί ταξινόμηση του πίνακα με τους μέσους όρους Η. Κυρίως Πρόγραμμα 2
1Α. Για την αποθήκευση προς επεξεργασία των παραπάνω δεδομένων θα πρέπει να χρησιμοποιηθούν 3 πίνακες. Ο πρώτος είναι ένας μονοδιάστατος πίνακας 200 θέσεων (το μέγιστο δυνατό) με το όνομα ΟΝΟΜΑΤΑ που θα περιέχει τα ονόματα των φοιτητών του τμήματος και επομένως θα είναι τύπου χαρακτήρων Ο δεύτερος είναι ένας μονοδιάστατος πίνακας 12 θέσεων με το όνομα ΜΑΘΗΜΑΤΑ που θα περιέχει τα ονόματα των μαθημάτων του πρώτου έτους και επομένως θα είναι επίσης, τύπου χαρακτήρων. Επίσης, θα χρησιμοποιήσουμε έναν δισδιάστατο πίνακα ΒΑΘΜΟΙ *200,12+ ως εξής: Το στοιχείο *i, j+ του πίνακα περιέχει τις πωλήσεις του φοιτητή i (του οποίου το όνομα θα είναι ΟΝΟΜΑΤΑ*i+) για το μάθημα j (το j παίρνει τιμές στο διάστημα 1 έως 12) ή πιο συγκεκριμένα για το μάθημα ΜΑΘΗΜΑΤΑ*j+. Άρα, ο πίνακας ΒΑΘΜΟΙ είναι περιέχει πραγματικούς αριθμούς Σχηματικά: Για παράδειγμα ο φοιτητής Μολέτης (Ν-1 γραμμή) στο μάθημα Προγραμματισμός (στήλη 2) πήρε βαθμό 8 Για την ανάγνωση των παραπάνω δεδομένων θα γραφτεί μια διαδικασία με όνομα Είσοδος_Δεδομένων. Οι παράμετροι που θα περάσει η διαδικασία στο 3
κυρίως πρόγραμμα είναι: το πλήθος των σπουδαστών, τα ονόματα των μαθημάτων, τα ονόματα και οι βαθμοί των φοιτητών ΓΙΑΓΙΚΑΙΑ Δίζνδνο_δεδνκέλωλ (Πιήζνο_Φνηηεηώλ, Μαζήκαηα, Ολόκαηα_Φνηηεηώλ, Βαζκνί_Φνηηεηώλ) ΥΑΡΑΚΣΗΡΔ: Μαζήκαηα[12], Ολόκαηα_Φνηηεηώλ[200] ΠΡΑΓΜΑΣΙΚΔ: Βαζκνί_Φνηηεηώλ[200,12] ΑΚΔΡΑΙΔ: Πιήζνο_Φνηηεηώλ, i, j! Γηάβαζκα ηνπ πιήζνπο ηωλ θνηηεηώλ _ΔΠΑΝΑΛΗΦΗ ΓΡΑΦΔ Γώζε ηo πιήζνο ηωλ θνηηεηώλ ΓΙΑΒΑΔ Πιήζνο_Φνηηεηώλ ΜΔΥΡΙ_ΟΣΟΤ (Πιήζνο_Φνηηεηώλ >0) ΚΑΙ (Πιήζνο_Φνηηεηώλ <=200)! Γηάβαζκα ηωλ νλνκάηωλ ηωλ καζεκάηωλ ΓΙΑ j ΑΠΟ 1 ΜΔΥΡΙ 12 ΓΡΑΦΔ Γώζε ηo όλνκα ηνπ καζήκαηνο, j ΓΙΑΒΑΔ Μαζήκαηα[j]! Γηάβαζκα ηωλ νλνκάηωλ ηωλ θνηηεηώλ ΓΙΑ i ΑΠΟ 1 ΜΔΥΡΙ Πιήζνο_Φνηηεηώλ ΓΡΑΦΔ Γώζε ηo όλνκα ηνπ καζεηή, i ΓΙΑΒΑΔ Ολόκαηα_Φνηηεηώλ[i]! Γηάβαζκα ηωλ βαζκώλ ηωλ θνηηεηώλ ΓΙΑ i ΑΠΟ 1 ΜΔΥΡΙ Πιήζνο_Φνηηεηώλ ΓΙΑ j ΑΠΟ 1 ΜΔΥΡΙ 12 _ΔΠΑΝΑΛΗΦΗ ΓΡΑΦΔ Γώζε ηo βαζκό ηνπ θνηηεηή,ολόκαηα_φνηηεηώλ[i], γηα ην κάζεκα, Μαζήκαηα[j] ΓΙΑΒΑΔ Βαζκνί_Φνηηεηώλ[i, j] ΜΔΥΡΙ_ΟΣΟΤ (Βαζκνί_Φνηηεηώλ[i, j]>0) ΚΑΙ (Βαζκνί_Φνηηεηώλ[i, j]<=10) 2B. Θα χρησιμοποιήσουμε μια διαδικασία για τη δημιουργία του πίνακα μέσων όρων και μια συνάρτηση για την εύρεση του συνολικού μέσου όρου, η εκτύπωση του οποίου θα πραγματοποιηθεί στο κυρίως πρόγραμμα Η πρώτη διαδικασία με όνομα Υπολογισμός_ΜΟ είναι η εξής: ΓΙΑΓΙΚΑΙΑ Τπνινγηζκόο_ΜΟ (Πιήζνο_Φνηηεηώλ, Βαζκνί_Φνηηεηώλ, Μέζνο_Όξνο_Φνηηεηώλ) ΠΡΑΓΜΑΣΙΚΔ: Βαζκνί_Φνηηεηώλ[200,12], Μέζνο_Όξνο_Φνηηεηώλ[200] ΑΚΔΡΑΙΔ: Πιήζνο_Φνηηεηώλ, i, j, άζξνηζκα! Γεκηνπξγία ηνπ πίλαθα Μέζωλ Όξωλ ΓΙΑ i ΑΠΟ 1 ΜΔΥΡΙ Πιήζνο_Φνηηεηώλ άζξνηζκα <- 0 ΓΙΑ j ΑΠΟ 1 ΜΔΥΡΙ 12 4
άζξνηζκα <- άζξνηζκα + Βαζκνί_Φνηηεηώλ[i, j] Μέζνο_Όξνο_Φνηηεηώλ[i] <- άζξνηζκα / 12 Η συνάρτηση για τον υπολογισμό του συνολικού μέσου όρου και την εκτύπωσή του είναι η εξής: ΤΝΑΡΣΗΗ Τπνινγηζκόο_πλνιηθνύ_ΜΟ (Πιήζνο_Φνηηεηώλ, Μέζνο_Όξνο_Φνηηεηώλ) : ΠΡΑΓΜΑΣΙΚΗ ΠΡΑΓΜΑΣΙΚΔ: Μέζνο_Όξνο_Φνηηεηώλ[200] ΑΚΔΡΑΙΔ : Πιήζνο_Φνηηεηώλ, i, άζξνηζκα! Τπνινγηζκόο ηνπ ζπλνιηθνύ κέζνπ όξνπ άζξνηζκα <-0 ΓΙΑ i ΑΠΟ 1 ΜΔΥΡΙ Πιήζνο_Φνηηεηώλ άζξνηζκα <-άζξνηζκα + Βαζκνί_Φνηηεηώλ[i, j] Τπνινγηζκόο_πλνιηθνύ_ΜΟ <-άζξνηζκα / Πιήζνο_Φνηηεηώλ! Δθηύπωζε ηνπ ζπλνιηθνύ κέζνπ όξνπ ΣΔΛΟ_ΤΝΑΡΣΗΗ 3Δ. Η διαδικασία που θα υλοποιηθεί πρέπει να έχει ως όρισμα εισόδου το όνομα ενός φοιτητή (αυτό θα διαβαστεί από το χρήστη στο κυρίως πρόγραμμα) στη συνέχεια με τον αλγόριθμο της σειριακής αναζήτησης θα εντοπίζει τη θέση που βρίσκεται στον πίνακα Ονόματα_Φοιτητών ο φοιτητής αυτός και θα εντυπώνει το στοιχείο της αντίστοιχης θέσης του πίνακα Μέσος_Όρος_Φοιτητών ΓΙΑΓΙΚΑΙΑ Δθηύπωζε_Μέζνπ_Όξνπ_Φνηηεηήο (Γνζέλ_Όλνκα, Πιήζνο_Φνηηεηώλ, Ολόκαηα_Φνηηεηώλ, Μέζνο_Όξνο_Φνηηεηώλ) ΥΑΡΑΚΣΗΡΔ: Γνζέλ_Όλνκα, Ολόκαηα_Φνηηεηώλ[200] ΠΡΑΓΜΑΣΙΚΔ: Μέζνο_Όξνο_Φνηηεηώλ[200] ΑΚΔΡΑΙΔ: Πιήζνο_Φνηηεηώλ, i, ζέζε_βξέζεθε ΛΟΓΙΚΔ: βξέζεθε! Αλαδήηεζε κε ηνλ αιγόξηζκν ζεηξηαθήο αλαδήηεζεο γηα ηελ εύξεζε ηεο ζέζεο ηνπ δνζέληνο νλόκαηνο βξέζεθε <-ΦΔΤΓΗ ζέζε_βξέζεθε <-0 i <-1 ΟΟ (βξέζεθε = ΦΔΤΓΗ) ΚΑΙ (i <= Πιήζνο_Φνηηεηώλ) ΔΠΑΝΑΛΑΒΔ ΑΝ (Ολόκαηα_Φνηηεηώλ[i] = Γνζέλ_Όλνκα) ΣΟΣΔ βξέζεθε <-ΑΛΗΘΗ ζέζε_βξέζεθε <-i ΑΛΛΙΧ i <-i + 1 ΣΔΛΟ_ΑΝ ΑΝ (βξέζεθε = ΦΔΤΓΗ) ΣΟΣΔ ΓΡΑΦΔ 'Σν όλνκα πνπ δόζεθε δελ αλήθεη ζε θνηηεηή' 5
ΑΛΛΙΧ ΓΡΑΦΔ 'Ο θνηηεηήο', Γνζέλ_Όλνκα,' έρεη κέζν όξν', Μέζνο_Όξνο_Φνηηεηώλ[ζέζε_βξέζεθε] ΣΔΛΟ_ΑΝ 4E. Τα δεδομένα εισόδου στη διαδικασία Εύρεση_Μεγ_ΜΟ είναι το πλήθος των φοιτητών, ο πίνακας με τα ονόματα των φοιτητών καθώς και αυτός που περιέχει τους μέσους όρους ΓΙΑΓΙΚΑΙΑ Δύξεζε_Μεγ_ΜΟ (Πιήζνο_Φνηηεηώλ, Ολόκαηα_Φνηηεηώλ, Μέζνο_Όξνο_Φνηηεηώλ) ΥΑΡΑΚΣΗΡΔ: Ολόκαηα_Φνηηεηώλ[200] ΠΡΑΓΜΑΣΙΚΔ: Μέζνο_Όξνο_Φνηηεηώλ[200], κέγηζηνο ΑΚΔΡΑΙΔ: Πιήζνο_Φνηηεηώλ, i, ζέζε_βξέζεθε! Αλαδήηεζε γηα ηε ζέζε ηνπ κεγίζηνπ κέζνπ όξνπ κέγηζηνο <-Μέζνο_Όξνο_Φνηηεηώλ[1] ζέζε_βξέζεθε <-1 ΓΙΑ i ΑΠΟ 2 ΜΔΥΡΙ Πιήζνο_Φνηηεηώλ ΑΝ (Μέζνο_Όξνο_Φνηηεηώλ[i] > κέγηζηνο) ΣΟΣΔ κέγηζηνο <-Μέζνο_Όξνο_Φνηηεηώλ[i] ζέζε_βξέζεθε <-i ΣΔΛΟ_ΑΝ! Δθηύπωζε ηνπ νλόκαηνο πνπ θαηέρεη ηε ζέζε ηεο κεηαβιεηήο ζέζε_βξέζεθε ΓΡΑΦΔ 'Ο θνηηεηήο', Ολόκαηα_Φνηηεηώλ[ζέζε_βξέζεθε],' έρεη ην κεγαιύηεξν κέζν όξν πνπ είλαη: ', κέγηζηνο 5ΣΤ. Αρχικά πρέπει να ταξινομηθεί ο πίνακας με τους μέσους όρους των φοιτητών. Για το σκοπό αυτό πρέπει να χρησιμοποιηθεί ο αλγόριθμος της φυσαλίδας όπως αυτός έχει οριστεί στο κεφάλαιο 3. Προσοχή πρέπει να δοθεί στην αδυναμία χρήσης της εντολής Αντιμετάθεσε που μπορεί να χρησιμοποιηθεί σε έναν αλγόριθμο αλλά δεν είναι ορισμένη στη γλώσσα προγραμματισμού ΓΛΩΣΣΑ Αντίστοιχα πρέπει να αναδιαταχθούν τα στοιχεία του πίνακα που περιέχει τα ονόματα των φοιτητών ώστε να η αντιστοιχία που έχει περιγραφεί στο ερώτημα 1 να διατηρηθεί και με τον πίνακα που περιέχει τους μέσου όρους ΓΙΑΓΙΚΑΙΑ Σαμηλόκεζε (Πιήζνο_Φνηηεηώλ, Ολόκαηα_Φνηηεηώλ, Μέζνο_Όξνο_Φνηηεηώλ) ΥΑΡΑΚΣΗΡΔ: Ολόκαηα_Φνηηεηώλ[200], temp_όλνκα ΠΡΑΓΜΑΣΙΚΔ: Μέζνο_Όξνο_Φνηηεηώλ[200], temp_βαζκόο 6
ΑΚΔΡΑΙΔ: Πιήζνο_Φνηηεηώλ, i, j! Αιγόξηζκνο ηαμηλόκεζεο θπζαιίδαο γηα ηελ ηαμηλόκεζε ηνπ πίλαθα ηωλ κέζωλ όξωλ ΓΙΑ i ΑΠΟ 2 ΜΔΥΡΙ Πιήζνο_Φνηηεηώλ ΓΙΑ j ΑΠΟ Πιήζνο_Φνηηεηώλ ΜΔΥΡΙ i ΜΔ_ΒΗΜΑ -1 ΑΝ (Μέζνο_Όξνο_Φνηηεηώλ[j-1] > Μέζνο_Όξνο_Φνηηεηώλ[j]) ΣΟΣΔ! Αληηκεηάζεζε ζηνηρείωλ πίλαθα Μέζνο_Όξνο_Φνηηεηώλ temp_βαζκόο <-Μέζνο_Όξνο_Φνηηεηώλ[j-1] Μέζνο_Όξνο_Φνηηεηώλ[j-1] <-Μέζνο_Όξνο_Φνηηεηώλ[j] Μέζνο_Όξνο_Φνηηεηώλ[j] <-temp_βαζκόο! Αληίζηνηρε αληηκεηάζεζε ζηνηρείωλ πίλαθα Ολόκαηα_Φνηηεηώλ temp_όλνκα <-Ολόκαηα_Φνηηεηώλ[j-1] Ολόκαηα_Φνηηεηώλ[j-1] <-Ολόκαηα_Φνηηεηώλ[j] Ολόκαηα_Φνηηεηώλ[j] <-temp_όλνκα ΣΔΛΟ_ΑΝ Μετά την εκτέλεση της παραπάνω διαδικασίας εκτελείται η Εκτύπωση_top3 η οποία θα εκτυπώσει τα ονόματα και τους μέσους όρους των τριών πρώτων φοιτητών στην κατάταξη. ΓΙΑΓΙΚΑΙΑ Δθηύπωζε_top3 (Πιήζνο_Φνηηεηώλ, Ολόκαηα_Φνηηεηώλ, Μέζνο_Όξνο_Φνηηεηώλ) ΥΑΡΑΚΣΗΡΔ : Ολόκαηα_Φνηηεηώλ[200] ΠΡΑΓΜΑΣΙΚΔ : Μέζνο_Όξνο_Φνηηεηώλ[200] ΑΚΔΡΑΙΔ : Πιήζνο_Φνηηεηώλ, i! Λόγω αύμνπζαο δηάηαμεο ηνπ πίλαθα κέζωλ όξωλ εθηππώλω ηεο 3 ηειεπηαίεο ζέζεηο ηωλ δπν πηλάθωλ ΓΙΑ i ΑΠΟ Πιήζνο_Φνηηεηώλ ΜΔΥΡΙ (Πιήζνο_Φνηηεηώλ-2) ΜΔ_ΒΗΜΑ -1 ΓΡΑΦΔ 'O', Πιήζνο_Φνηηεηώλ-i+1,' νο θνηηεηήο είλαη ν', Ολόκαηα_Φνηηεηώλ[i],' κε κέζν όξν:', Μέζνο_Όξνο_Φνηηεηώλ [i] Το Κυρίως πρόγραμμα που εκτελεί τα παραπάνω υποπρογράμματα και προηγείται από αυτά παρουσιάζεται στη συνέχεια ΠΡΟΓΡΑΜΜΑ Μεραλνγξάθεζε_ηκήκαηνο_Πιεξνθνξηθήο ΥΑΡΑΚΣΗΡΔ: ΜΑΘΗΜΑΣΑ[12], ΟΝΟΜΑΣΑ[200], όλνκα_πξνο_αλαδήηεζε ΠΡΑΓΜΑΣΙΚΔ: ΒΑΘΜΟΙ[200,12], ΜΔΟ_ΟΡΟ[200], πλ_μο ΑΚΔΡΑΙΔ: ΠΛΗΘΟ, i, j! Δξώηεκα 1 ΚΑΛΔΔ Δίζνδνο_δεδνκέλωλ (ΠΛΗΘΟ, ΜΑΘΗΜΑΣΑ, ΟΝΟΜΑΣΑ, ΒΑΘΜΟΙ)! Δξώηεκα 2 ΚΑΛΔΔ Τπνινγηζκόο_ΜΟ (ΠΛΗΘΟ, ΒΑΘΜΟΙ, ΜΔΟ_ΟΡΟ) πλ_μο <-Τπνινγηζκόο_πλνιηθνύ_ΜΟ (ΠΛΗΘΟ, ΜΔΟ_ΟΡΟ) ΓΡΑΦΔ Ο ζπλνιηθόο κέζνο όξνο είλαη, πλ_μο! Δξώηεκα 3, πξνεγείηαη δηάβαζκα νλόκαηνο από ην ρξήζηε 7
ΓΡΑΦΔ Γώζηε ην όλνκα ελόο θνηηεηή γηα αλαδήηεζε ΓΙΑΒΑΔ όλνκα_πξνο_αλαδήηεζε ΚΑΛΔΔ Δθηύπωζε_Μέζνπ_Όξνπ_Φνηηεηώλ (όλνκα_πξνο_αλαδήηεζε, ΠΛΗΘΟ, ΟΝΟΜΑΣΑ, ΜΔΟ_ΟΡΟ)! Δξώηεκα 4 ΚΑΛΔΔ Δύξεζε_Μεγ_ΜΟ (ΠΛΗΘΟ, ΟΝΟΜΑΣΑ, ΜΔΟ_ΟΡΟ)! Δξώηεκα 5 ΚΑΛΔΔ Σαμηλόκεζε (ΠΛΗΘΟ, ΟΝΟΜΑΣΑ, ΜΔΟ_ΟΡΟ) ΚΑΛΔΔ Δθηύπωζε_top3 (ΠΛΗΘΟ, ΟΝΟΜΑΣΑ, ΜΔΟ_ΟΡΟ) ΣΔΛΟ_ΠΡΟΓΡΑΜΜΑΣΟ 8