Εργαστήριο 6 Εντολές Επανάληψης Τα Εργαστηριακά Προγράμματα Η δομή Επιλογής στη PASCAL H δομή Επανάληψης στη PASCAL Η εντολή επανάληψης for Σκοπός Η εντολή επανάληψης while. 1
ΕΡΓΑΣΤΗΡΙΟ 6 Εισαγωγή στο Προγραμματισμό με τη PASCAL & τη MATLAB Εντολές Επανάληψης Απαντήσεις Ενότητα 1: Θεωρητικό Μέρος 1. Η λειτουργία της εντολής επανάληψης σ ένα πρόγραμμα, είναι: (α) Να επαναλαμβάνει διαρκώς, χωρίς τέλος, μία λειτουργία του προγράμματος. (β) Να ελέγχει διαρκώς μία συνθήκη, εκτελώντας ή όχι μία εντολή του προγράμματος, στη βάση αυτής της συνθήκης. (γ) Να επαναλαμβάνει την εκτέλεση των εντολών ενός προγράμματος, μέχρι να εκπληρωθεί μία συνθήκη. (δ) Να επαναλαμβάνει μία ομάδα εντολών ενός προγράμματος, στη βάση μίας συνθήκης. 2. Η συνθήκη στην εντολή επανάληψης while: (α) Μπορεί μόνον να είναι μία απλή συνθήκη που συγκρίνει δύο αριθμούς. (β) Μπορεί να εξετάζει σχέσεις ισότητας ή ανισότητας μόνον μεταξύ αριθμητικών τιμών. (γ) Μπορεί να συγκρίνει όχι μόνο αριθμητικές τιμές, αλλά χαρακτήρες και κείμενο. (δ) Μπορεί να συγκρίνει μόνο ακέραιες τιμές.. 3. Με την εντολή for: (α) Μπορούμε να επαναλαμβάνουμε την εκτέλεση εντολών ενός προγράμματος, αλλά θα πρέπει να ξέρουμε πόσες φορές θα πρέπει να επαναληφθούν αυτές οι εντολές, όταν γράφουμε το πρόγραμμα. (β) Μπορούμε να επαναλαμβάνουμε την εκτέλεση των εντολών ενός προγράμματος ορισμένες φορές, αλλά δεν χρειάζεται να ξέρουμε πόσες φορές θα επαναληφθούν αυτές οι εντολές, όταν γράφουμε το πρόγραμμα. (γ) Μπορούμε να επαναλαμβάνουμε την εκτέλεση μίας ομάδας εντολών ενός 2
προγράμματος, ορισμένες φορές, στη βάση μίας συνθήκης. (δ) Μπορούμε να επαναλαμβάνουμε την εκτέλεση μίας ομάδας εντολών ενός προγράμματος, τόσες φορές, όσες καθορίζονται από μία συνθήκη. 4. Ποια είναι η βασική χρησιμότητα της εντολής επανάληψης σ ένα πρόγραμμα. Γιατί δηλαδή, η δυνατότητα της επανάληψης ορισμένων εντολών ενός προγράμματος μπορεί να είναι απαραίτητη σ ένα πρόγραμμα? Στα περισσότερα προγράμματα που θα γράψουμε, θα χρειάζεται το πρόγραμμα να επαναλαμβάνει μία λειτουργία πολλές φορές. Για παράδειγμα, ας πάρουμε, ένα πρόγραμμα που η λειτουργία του είναι να διαβάζει μετρήσεις από έναν αισθητήρα, έστω έναν αισθητήρα θερμοκρασίας και να αναλύει αυτές τις μετρήσεις, υπολογίζοντας τη μέση τιμή τους, στη διάρκεια μίας ώρας ή μίας ημέρας. Αυτό το πρόγραμμα, θα πρέπει να επαναλαμβάνει πολλές φορές την εξής λειτουργία, δηλαδή τα εξής βήματα: Να διαβάζει τη μέτρηση από τον αισθητήρα, σε τακτικά χρονικά διαστήματα, για παράδειγμα, κάθε λεπτό της ώρας. Να χρησιμοποιεί κάθε νέα μέτρηση που διαβάζει από τον αισθητήρα, για να υπολογίσει τη καινούργια μέση τιμή θερμοκρασίας που μετράει με τον αισθητήρα, στο χρονικό διάστημα της μέτρησης. Ενότητα 2: Εργαστηριακό Μέρος 5. Γράψτε ένα πρόγραμμα για να υπολογίζει τις τιμές της συνάρτησης f (x) = 1/3x 3 4x 2 + 15x + 3 για τιμές του x από 1 έως 12. 3
Εικόνα 1: Το πρόγραμμα του ερωτήματος 5 που υπολογίζει τη συνάρτηση f (x) = 1/3x 3 4x 2 + 15x + 3, για δώδεκα τιμές του x, από 1 έως 12. 4
Εικόνα 2: Τα αποτελέσματα από την εκτέλεση του προγράμματος που υπολογίζει τη συνάρτηση f (x) = 1/3x 3 4x 2 + 15x + 3, για τιμές του x, από 1 έως 12. 6. Μία ενδιαφέρουσα εφαρμογή των υπολογιστών είναι η σχεδίαση γραφημάτων που ονομάζονται ιστογράμματα. Γράψτε ένα πρόγραμμα που να διαβάζει έναν αριθμό από την οθόνη, ανάμεσα στο 1 και το 30. Το πρόγραμμα θα πρέπει να εκτυπώνει αυτό το αριθμό και δίπλα στον αριθμό, τόσους συνεχόμενους αστερίσκους, όσους η τιμή του συγκεκριμένου αριθμού. Για παράδειγμα, αν το πρόγραμμα διαβάσει από την οθόνη τον αριθμό 9, τότε θα πρέπει να εκτυπώσει: 9 ********* Αν διαβάσει τον αριθμό 12, τότε θα πρέπει να εκτυπώσει: 12 ************ 5
Εικόνα 3: Το πρόγραμμα του ερωτήματος 6 που διαβάζει έναν ακέραιο από την οθόνη και εκτυπώνει τη τιμή αυτού του ακέραιου σε αστερίσκους. 6
Εικόνα 4: Ενδεικτική λειτουργία του προγράμματος που διαβάζει μία ακέραια τιμή από την οθόνη και εκτυπώνει αυτή τη τιμή σε αστερίσκους. 7. Τροποποιείστε το παραπάνω πρόγραμμα ώστε να διαβάζει μέχρι 10 αριθμούς, ανάμεσα στο 1 και το 30. Για κάθε αριθμό, το πρόγραμμα θα πρέπει να εκτυπώνει μία γραμμή που θα περιέχει τόσους συνεχόμενους αστερίσκους, όσους η τιμή του συγκεκριμένου αριθμού. Απάντηση Το πρόγραμμα σ αυτό το ερώτημα δείχνει πως μπορούμε να χρησιμοποιήσουμε ένα πρόγραμμα που έχουμε ήδη γράψει, για να γράψουμε ένα πιο σύνθετο πρόγραμμα. Έχουμε ήδη γράψει, για το προηγούμενο ερώτημα, ένα πρόγραμμα που να διαβάζει έναν ακέραιο αριθμό από την οθόνη και να εκτυπώνει τη τιμή αυτού του αριθμού, σε αστερίσκους. Για το πρόγραμμα αυτού του ερωτήματος, θα πρέπει πολύ απλά να επαναλάβουμε αυτή τη λειτουργία 10 φορές, δηλαδή να διαβάσουμε έναν ακέραιο αριθμό από την οθόνη, να εκτυπώσουμε τη τιμή αυτού του αριθμού, σε αστερίσκους και να επαναλάβουμε αυτή τη διαδικασία 10 φορές. Πως? Περιλαμβάνοντας το πρόγραμμα του προηγούμενου ερωτήματος, σε μία εντολή επανάληψης μία for που να το εκτελεί 10 φορές. 7
Εικόνα 5: Κλείνοντας / περιλαμβάνοντας το πρόγραμμα που διαβάζει έναν ακέραιο σε μία μεταβλητή και εκτυπώνει τη τιμή του, σε αστερίσκους, μέσα σε μία επανάληψη, αυτό το επιμέρους πρόγραμμα θα εκτελεστεί πολλές φορές, διαβάζοντας και εκτυπώνοντας πολλούς ακέραιους, με αστερίσκους και έτσι, δημιουργώντας ένα ιστόγραμμα με τις τιμές αυτών των ακέραιων. 8
Εικόνα 6: Διαβάζοντας διαφορετικούς ακέραιους από την οθόνη και εκτυπώνοντας καθέναν από αυτούς με αστερίσκους, δημιουργούμε ένα ιστόγραμμα των τιμών αυτών των ακεραίων. 8. Γράψτε ένα πρόγραμμα που να στρίβει ένα νόμισμα 10 φορές και να εκτυπώνει τα αποτελέσματα. Απάντηση Σε μία προηγούμενη άσκηση, είχαμε γράψει ένα πρόγραμμα που προσομοίωνε το στρίψιμο ενός νομίσματος, χρησιμοποιώντας τη συνάρτηση randon(), της Pascal. Για το πρόγραμμα που στρίβει ένα νόμισμα 10 φορές, απλά, χρησιμοποιούμε το πρόγραμμα που είχαμε γράψει, για να στρίβει ένα νόμισμα, μία φορά. Χρησιμοποιούμε εκείνο το πρόγραμμα, μέσα σε μία εντολή επανάληψης, για να εκτελεστεί 10 ή όσες φορές θέλουμε 9
Εικόνα 7: Κλείνοντας / περιλαμβάνοντας το πρόγραμμα που διαβάζει έναν ακέραιο σε μία μεταβλητή και εκτυπώνει τη τιμή του, σε αστερίσκους, μέσα σε μία επανάληψη, αυτό το επιμέρους πρόγραμμα θα εκτελεστεί πολλές φορές, διαβάζοντας και εκτυπώνοντας πολλούς ακέραιους, με αστερίσκους και έτσι, δημιουργώντας ένα ιστόγραμμα με τις τιμές αυτών των ακέραιων. 10
9. Γράψτε ένα πρόγραμμα που να διαβάζει από την οθόνη μία συμβολοσειρά μεταξύ αποστρόφων, να τυπώνει τους χαρακτήρες της και να υπολογίζει και να εκτυπώνει το πλήθος των χαρακτήρων αυτής της συμβολοσειράς. Επεξηγήσεις Η συμβολοσειρά δεν θα βρίσκεται κατ ανάγκη στην αρχή των δεδομένων. Μπορεί να υπάρχουν άλλοι χαρακτήρες πριν ή μετά από αυτή τη συμβολοσειρά. Επίσης, η συμβολοσειρά μπορεί να είναι κενή, δηλαδή μπορεί να μην εμφανίζεται στα δεδομένα συμβολοσειρά μεταξύ αποστρόφων. Η απόστροφος, σαν τιμή μίας μεταβλητής συμβολίζεται με \ και θα πρέπει να τοποθετηθεί μεταξύ δύο αποστρόφων. 10. Γράψτε ένα πρόγραμμα για να διαβάζει τις τιμές που έχουν καταγραφεί από ένα αισθητήρα και να υπολογίζει και να εκτυπώνει τη μέγιστη, την ελάχιστη και τη μέση τιμή αυτών των δεδομένων. Οι μετρήσεις από τον αισθητήρα έχουν τη παρακάτω μορφή: 0.0 132.5 1.0 147.2 2.0 148.5 3.0 157.3 4.0 163.2 5.0 158.2 6.0 169.3 7.0 148.2 8.0 137.6 9.0 135.9 <Ctrl-Z> H πρώτη στήλη παριστάνει χρονικές στιγμές (t) και η δεύτερη τις τιμές ταχύτητας (v), για τις αντίστοιχες χρονικές στιγμές. Η εισαγωγή των δεδομένων τερματίζεται, πατώντας το χαρακτήρα Ctrl-Z. 11
11. Σκακιέρα. Γράψτε ένα πρόγραμμα που να διαβάζει από την οθόνη έναν θετικό ακέραιο Ν και να χρησιμοποιεί μία εμφυτευμένη επανάληψη για να εκτυπώσει στην οθόνη μία Ν Ν σκακιέρα από κενά και αστερίσκους, όπως στο παρακάτω σχήμα. 12. Επτάρια Γράψτε ένα πρόγραμμα που να διαβάζει έναν τετραψήφιο ακέραιο αριθμό και να υπολογίζει και να εκτυπώνει πόσες φορές επαναλαμβάνεται το 7, σ αυτό τον αριθμό. 12