Διαδικαστικός Προγραμματισμός Ενότητα 8: Παραδείγματα με μονοδιάστατους πίνακες, συναρτήσεις, δείκτες, πέρασμα παραμέτρων με αναφορά Καθηγήτρια Μαρία Σατρατζέμη
Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς. 2
Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο Μακεδονίας» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. 3
Σκοποί ενότητας Σας δίνεται ο σκελετός του προγράμματος example1.c, όπου δηλώνεται το πρωτότυπο και η υλοποίηση των συναρτήσεων ReadData και findmax. Χρησιμοποιείστε κατάλληλα τις παραπάνω συναρτήσεις για να λύσετε τα παρακάτω προβλήματα. 4
Συνάρτηση ReadData Η συνάρτηση ReadData είναι μια void συνάρτηση και χρησιμοποιείται για να διαβάζονται ακέραιοι αριθμοί και να καταχωρούνται σε ένα μονοδιάστατο πίνακα (τυπική παράμετρος pin) του οποίου το τρέχον μέγεθος είναι γνωστό (τυπική παράμετρος size). Είναι μια συνάρτηση που μπορεί να χρησιμοποιηθεί σ οποιοδήποτε πρόγραμμα που απαιτεί το διάβασμα ακεραίων αριθμών όταν είναι γνωστό το πλήθος τους. Ο πίνακας και το τρέχον μέγεθος του τα οποία μεταβιβάζονται στη συνάρτηση ReadData ως ορίσματα θα πρέπει να έχουν δηλωθεί πριν κληθεί η συνάρτηση. 5
Συνάρτηση findmax Η συνάρτηση findmax είναι μια συνάρτηση που χρησιμοποιείται για να προσδιορισθεί το μέγιστο στοιχείο ενός μονοδιάστατου πίνακα. Δέχεται τον μονοδιάστατο πίνακα (τυπική παράμετρος pin) και το τρέχον μέγεθος του πίνακα (τυπική παράμετρος size) και επιστρέφει το μέγιστο στοιχείο του πίνακα. Ο πίνακας και το τρέχον μέγεθος του τα οποία μεταβιβάζονται στη συνάρτηση findmax ως ορίσματα θα πρέπει να έχουν δηλωθεί πριν κληθεί η συνάρτηση. 6
Πρόβλημα 1.1 Σε ένα δημοτικό σχολείο οι βαθμοί των μαθητών των 2 τελευταίων τάξεων (Ε, Στ ) αποθηκεύονται σε 2 μονοδιάστατους πίνακες, δηλαδή οι βαθμοί της Ε τάξης στον πίνακα class1, οι βαθμοί της Στ τάξης στον πίνακα class2. Η Ε τάξη έχει 8 και η Στ 5 μαθητές. Χρησιμοποιώντας τις παραπάνω συναρτήσεις κάντε ένα πρόγραμμα που: 1. θα διαβάζει τους βαθμούς κάθε τάξης και θα τους καταχωρεί στον αντίστοιχο πίνακα 2. θα υπολογίζει το μεγαλύτερο βαθμό κάθε τάξης. 3. Θα εμφανίζει το μεγαλύτερο βαθμό κάθε τάξης. Η εμφάνιση θα γίνεται στη main χωρίς χρήση συνάρτησης. 7
Πρόβλημα 1.1α Στο ίδιο δημοτικό σχολείο αποφασίζουν ότι εκτός από το μεγαλύτερο βαθμό κάθε τάξης θέλουν να γνωρίζουν και ποιος μαθητής τον πέτυχε. Χρησιμοποιήστε και τροποποιήστε κατάλληλα τον κώδικα της συνάρτησης findmax ώστε να γράψτε μια νέα συνάρτηση την findmaxpos, η οποία θα επιστρέφει το μεγαλύτερο βαθμό της αντίστοιχης τάξης (μεγαλύτερη τιμή πίνακα) και τον αντίστοιχο μαθητή (τη θέση του μεγαλύτερου στοιχείου στο αντίστοιχο πίνακα). Δηλώστε το πρωτότυπο, την υλοποίηση της συνάρτησης findmaxpos και καλέστε την από την main για να υπολογίζει για κάθε τάξη το μεγαλύτερο βαθμό και τον μαθητή που τον πέτυχε. Η εμφάνιση του μεγαλύτερου βαθμού και του αντίστοιχου μαθητή θα γίνεται στη main χωρίς χρήση συνάρτησης. 8
Πρόβλημα 1.2 Σε ένα δημοτικό σχολείο οι βαθμοί των μαθητών των 2 τελευταίων τάξεων (Ε, Στ ) αποθηκεύονται σε 2 μονοδιάστατους πίνακες, δηλαδή οι βαθμοί της Ε τάξης στον πίνακα class1, οι βαθμοί της Στ τάξης στον πίνακα class2. Γνωρίζουμε ότι κάθε τάξη μπορεί να έχει μέχρι και 15 μαθητές. Χρησιμοποιώντας τις παραπάνω συναρτήσεις κάντε ένα πρόγραμμα που: 1. Θα διαβάζει το πλήθος των μαθητών της κάθε τάξης (Ε και Στ αντίστοιχα) θα γίνεται έλεγχος ώστε να μη δοθεί πλήθος μαθητών μεγαλύτερο του μέγιστου πλήθους μαθητών ανά τάξη (15 μαθητές). 2. θα διαβάζει τους βαθμούς κάθε τάξης και θα τους καταχωρεί στον αντίστοιχο πίνακα 3. θα υπολογίζει το μεγαλύτερο βαθμό κάθε τάξης 4. Θα εμφανίζει το μεγαλύτερο βαθμό κάθε τάξης 5. θα υπολογίζει το μεγαλύτερο βαθμό κάθε τάξης και τον μαθητή που τον πέτυχε. 6. Θα εμφανίζει το μεγαλύτερο βαθμό κάθε τάξης και τον μαθητή που τον πέτυχε. Η εμφάνιση θα γίνεται στη main χωρίς χρήση συνάρτησης. 9
Πρόβλημα 1.3 Σε ένα δημοτικό σχολείο οι βαθμοί των μαθητών των 2 τελευταίων τάξεων (Ε, Στ ) αποθηκεύονται σε 2 μονοδιάστατους πίνακες, δηλαδή οι βαθμοί της Ε τάξης στον πίνακα class1, οι βαθμοί της Στ τάξης στον πίνακα class2. Γνωρίζουμε ότι κάθε τάξη μπορεί να έχει μέχρι και 15 μαθητές. Χρησιμοποιώντας τις παραπάνω συναρτήσεις κάντε ένα πρόγραμμα που: 1. θα διαβάζει τους βαθμούς κάθε τάξης και θα τους καταχωρεί στον αντίστοιχο πίνακα. Το διάβασμα των βαθμών θα καθορίζεται με τη βοήθεια ερώτησης ( Continue ->0, stop->1 ), δηλαδή ο χρήστης θα ρωτάται από το πρόγραμμα αν θέλει να συνεχίσει να καταχωρεί βαθμούς ή όχι δίνοντας 0 ή 1 αντίστοιχα. 2. θα υπολογίζει το μεγαλύτερο βαθμό κάθε τάξης 3. Θα εμφανίζει το μεγαλύτερο βαθμό κάθε τάξης 4. θα υπολογίζει το μεγαλύτερο βαθμό κάθε τάξης και τον μαθητή που τον πέτυχε. 5. Θα εμφανίζει το μεγαλύτερο βαθμό κάθε τάξης και τον μαθητή που τον πέτυχε. Η εμφάνιση θα γίνεται στη main χωρίς χρήση συνάρτησης 10
Πρόβλημα 1.4 Σε ένα δημοτικό σχολείο οι βαθμοί των μαθητών των 2 τελευταίων τάξεων (Ε, Στ ) αποθηκεύονται σε 2 μονοδιάστατους πίνακες, δηλαδή οι βαθμοί της Ε τάξης στον πίνακα class1, οι βαθμοί της Στ τάξης στον πίνακα class2. Γνωρίζουμε ότι κάθε τάξη μπορεί να έχει μέχρι και 15 μαθητές. Χρησιμοποιώντας τις παραπάνω συναρτήσεις κάντε ένα πρόγραμμα που: 1. Θα διαβάζει το πλήθος των μαθητών της κάθε τάξης (Ε και Στ αντίστοιχα) θα γίνεται έλεγχος ώστε να μη δοθεί πλήθος μαθητών μεγαλύτερο του μέγιστου πλήθους μαθητών ανά τάξη (15 μαθητές). 2. θα διαβάζει τους βαθμούς κάθε τάξης και θα τους καταχωρεί στον αντίστοιχο πίνακα. Ο πίνακας θα έχει δημιουργηθεί δυναμικά σύμφωνα με το πλήθος των μαθητών κάθε τάξης. 3. θα υπολογίζει το μεγαλύτερο βαθμό κάθε τάξης 4. Θα εμφανίζει το μεγαλύτερο βαθμό κάθε τάξης 5. θα υπολογίζει το μεγαλύτερο βαθμό κάθε τάξης και τον μαθητή που τον πέτυχε. 6. Θα εμφανίζει το μεγαλύτερο βαθμό κάθε τάξης και τον μαθητή που τον πέτυχε. Η εμφάνιση θα γίνεται στη main χωρίς χρήση συνάρτησης. 11
Τέλος Ενότητας