ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Δομημένος Προγραμματισμός Ενότητα 5: Εντολές επανάληψης Κουκουλέτσος Κώστας Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστικών Συστημάτων
Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς.
Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους.
Σκοποί ενότητας Oι διδακτικοί σκοποί της ενότητας είναι Να εξοικειωθούν με την χρήση των εντολών επανάληψης για εκτέλεση εντολών επαναληπτικά. Να γνωρίσουν την χρήση των εντολών break και continue για αλλαγή του τρόπου εκτέλεσης επαναλήψεων Να κατανοήσουν πότε και εντολής επανάληψης ενδείκνυται να χρησιμοποιήσουν για την υλοποίηση ενός προγράμματος Να μάθουν τον τρόπο υπολογισμού αθροισμάτων και γινομένων καθώς και την εύρεση πλήθους σε ένα πρόγραμμα
Περιεχόμενα ενότητας (1/2) Εντολές επαναλήψεων Εντολή for Παράδειγμα -Παρατηρήσεις Ένθετα for (nested for) - Παράδειγμα- Ασκήσεις Ειδικές περιπτώσεις & παραλλαγές εντολής for Συχνά λάθη στην for Εντολή Break - Εντολή Continue -Άσκηση Εντολή while
Περιεχόμενα ενότητας (2/2) Ειδικές περιπτώσεις της εντολής while Εντολή do..while Ειδικές περιπτώσεις της εντολής do while Παράδειγμα - Άσκηση Εύρεση πλήθους, αθροίσματος και γινομένου Παραδείγματα -ασκήσεις Παράδειγμα for ισοδύναμο με do-while Παράδειγμα while, do while Παραδείγματα
Εντολές επαναλήψεων Η μεγάλες δυνατότητες ενός υπολογιστή οφείλονται στην ικανότητά του να κάνει επαναλήψεις δηλαδή ένα σύνολο εντολών να εκτελείται επαναληπτικά μέχρις ότου ικανοποιηθεί μία συνθήκη ευρεθεί λύση H C διαθέτει τις παρακάτω εντολές επανάληψης (βρόγχος- loops) Εντολή for Εντολή while Εντολή do while
Εντολή for (1/2) πχ for (εντολή1;συνθήκη επανάληψης;εντολή2) Block εντολών;» for (i=1;i<=10; i++)» printf( %d\n, i); Λειτουργία της εντολής a) Εκτελείται η εντολή1 - αρχικοποίησης b) Ελέγχεται η συνθήκη και αν ισχύει, εκτελείται το block, διαφορετικά η for τερματίζει.
Εντολή for (1/2) c) Εκτελείται η εντολή2 d) Εκτελείται το b) Η συνθήκη καθορίζει αν θα συνεχιστεί ή όχι η επανάληψη ελέγχεται στην αρχή. Η συνθήκη επίσης καθορίζει ακόμη και αν θα γίνει η επανάληψη έστω μία φορά. Μετά το τέλος των επαναλήψεων το πρόγραμμα συνεχίζει με την πρώτη εντολή μετά τo block των εντολών for.
Εντολή for (Παράδειγμα) Παρατηρήστε την στοίχιση μίας for
Παρατηρήσεις Εάν το block είναι μία εντολή δεν χρειάζεται η χρήση αγκίστρων Ο τελεστής αύξησης δεν παίζει ρόλο αν είναι πριν ή μετά την μεταβλητή
Ένθετα for (nested for) Φυσικά ένα for μπορεί να περιέχει μία οποιαδήποτε εντολή επομένως μπορεί να περιέχει και ένα άλλο for Στην περίπτωση αυτή έχουμε ένθετα for (nested for)
Ένθετα for -Παράδειγμα Στην περίπτωση που υπάρχουν ένθετα for χρειάζεται προσοχή στον αριθμό των επαναλήψεων για τις οποίες εκτελείται το εσωτερικό block.
Ένθετα for - Άσκηση Πολλαπλασιαστικός πίνακας
Άσκηση Σχηματισμός τετραγώνου με * Παράδειγμα
Άσκηση - Σχηματισμός τετραγώνου
Ειδικές περιπτώσεις & παραλλαγές H σύνταξη της for είναι: εντολής for (1/4) for (εντολή1;συνθήκη επανάληψης;εντολή2) Block εντολών; Κάθε ένα από τα 3 τμήματα της μπορεί να λείπει ή να είναι διαφορετικό από την μορφή που είδαμε μέχρι τώρα. Περίπτωση 1» for(;;) Block εντολών; Oλα τα τμήματα λείπουν ενώ υπάρχουν τα ερωτηματικά. Η επανάληψη εκτελείται άπειρες φορές
Ειδικές περιπτώσεις & παραλλαγές Περίπτωση 2 Η συνθήκη λείπει ή η συνθήκη είναι πάντα αληθής: Ο βρόχος εκτελείται άπειρες φορές Περίπτωση 3 Στα τμήματα έχω περισσότερες από μία εντολές που χωρίζονται με, (κόμμα) εντολής for (2/4)
Ειδικές περιπτώσεις & παραλλαγές Περίπτωση 4 εντολής for (3/4) Η συνθήκη είναι ψευδής με την έναρξη του βρόχου: Το for δεν θα εκτελεστεί καμία φορά Παράδειγμα
Ειδικές περιπτώσεις & παραλλαγές εντολής for (4/4) Περίπτωση 5 Αντί για αύξηση της μεταβλητής ανά 1 έχουμε μία οποιαδήποτε αύξηση ακόμη και μείωση Παράδειγμα
Συχνά λάθη στην for Παράδειγμα» for(i=0;i<=10;i++); Παράδειγμα» for(i = 1; i>10 ; i++)» printf("\n %4d", i);» printf("\n "); Παράδειγμα» for (i=1;i<=10;i++)» printf("%d", i);» printf(" ");
Εντολή Break Η εντολή break έχει χρησιμοποιηθεί στην εντολή switch H break μέσα σε επανάληψη προκαλεί τερματισμό της εκτέλεσης της επανάληψης. Η εκτέλεση του προγράμματος μεταφέρεται στην εντολή που υπάρχει αμέσως το block του βρόχου Παράδειγμα ( στην εικόνα) Η εντολή break χρησιμοποιείται για τον τερματισμό της εκτέλεσης όλων των επαναληπτικών δομών (for, while, do while). Η εκτέλεση του προγράμματος μεταφέρεται στην εντολή που υπάρχει αμέσως μετά τις εντολές for, ή while ή do while.
Εντολή Continue Η εντολή continue προκαλεί τη διακοπή εκτέλεσης των εντολών του βρόχου και τη μεταβίβαση του ελέγχου του προγράμματος στην επόμενη επανάληψη Η εντολή προκαλεί διακοπή των εντολών της επανάληψη που εκτελείται τώρα. Όμως η επανάληψη συνεχίζεται με την επόμενη επανάληψη που υπαγορεύεται από την επαναληπτική διαδικασία Παράδειγμα (εμφάνιση αριθμών πολλαπλασίων του 3)
Να εμφανίζονται οι ακέραιοι αριθμοί από το 1 έως το 40 οι οποίοι δεν διαιρούνται ακριβώς με το 5 Άσκηση
Εντολή while (1/2) Σύνταξη της εντολής» while (συνθήκη) {» block εντολών;» } Λειτουργία εντολής Γίνεται έλεγχος της συνθήκης. Αν η συνθήκη είναι αληθής (η λογική παράσταση εκτιμάται ότι είναι γενικά διάφορη του 0) τότε εκτελείται το block των εντολών και μετά εξετάζεται και πάλι ή συνθήκη.
Εντολή while (2/2) Αν η συνθήκη είναι ψευδής τότε η επαναληπτική διαδικασία σταμάτα και εκτελείται η εντολή που βρίσκεται αμέσως μετά το block της δομής while. Συνήθως η εντολή while χρησιμοποιείται στην περίπτωση που το πλήθος των επαναλήψεων δεν είναι γνωστό ή εάν το πλήθος των επαναλήψεων δεν παίζει ρόλο αλλά εξαρτάται από την ικανοποίηση ή όχι μίας συνθήκης.
Ειδικές περιπτώσεις της εντολής Περίπτωση 1 Η συνθήκη είναι false από την αρχή: Το block δεν θα εκτελεστεί καμία φορά while (1/3)
Ειδικές περιπτώσεις της εντολής Περίπτωση 2 Η συνθήκη είναι πάντα αληθής: Το block εκτελείται άπειρες φορές (ατέρμων βρόχος) while (2/3)
Ειδικές περιπτώσεις της εντολής Περίπτωση 3 Η συνθήκη είναι πάντα αληθής: Το block εκτελείται άπειρες φορές (ατέρμων βρόχος) Η συνθήκη στο ανωτέρω παράδειγμα είναι αληθής και δεν αλλάζει ποτέ. while (3/3)
Εντολή do..while (1/3) Σύνταξη της εντολής» do {» block εντολών;» } while (συνθήκη); Λειτουργία της εντολής Εκτελείται το block των εντολών και μετά γίνεται έλεγχος της συνθήκης. Εάν η συνθήκη είναι αληθής (τιμή διάφορη του 0) τότε εκτελείται και πάλι το block των εντολών και μετά εξετάζεται πάλι ή συνθήκη.
Εντολή do..while (2/3) Αν η συνθήκη είναι ψευδής τότε η επαναληπτική διαδικασία σταμάτα και εκτελείται η εντολή που βρίσκεται αμέσως μετά το block των εντολών της δομής do while. Η επαναληπτική διαδικασία do while είναι παρόμοια με την while, όμως οι εντολές εντός του block εντολών θα εκτελεστούν τουλάχιστον μια φορά ανεξαρτήτως αν είναι αληθής ή όχι η συνθήκη γιατί η συνθήκη εξετάζεται στο τέλος της διαδικασίας.
Παράδειγμα Εντολή do..while (3/3)
Ειδικές περιπτώσεις της εντολής do while Ισχύει ότι αναφέρθηκε και για την εντολή while Υπάρχουν ατέρμονοι βρόχοι και η συνθήκη πρέπει να αλλάζει από true σε false ώστε να τερματίσει η επαναληπτική διαδικασία κάποτε.
Παράδειγμα Άσκηση (1/2) Να γραφεί πρόγραμμα το οποίο να διαβάζει ακέραιους αριθμούς μέχρι ο χρήστης να εισάγει το αριθμό 0. Κατόπιν να εμφανίζεται το πλήθος των αριθμών που έχουν εισαχθεί. Να γίνει το πρόγραμμα με χρήση εντολής while και do while Με χρήση do while
Παράδειγμα Άσκηση (2/2) Με χρήση while
Εύρεση πλήθους, αθροίσματος και γινομένου Εύρεση πλήθους (μέτρημα) 1) int plithos=0; 2) Όταν πρέπει να μετρήσω αυξάνω τον μετρητή δηλ. plithos++; Εύρεση αθροίσματος 1) Μηδενίζω μία μεταβλητή sum=0; 2) Για αν αθροίσω ένα αριθμό num χρησιμοποιώ την εντολή» sum=sum+num; ή sum+=num; Εύρεση γινομένου 1) Θέτω μία μεταβλητή πχ g=1; 2) Για αν πολλαπλασιάσω ένα αριθμό num χρησιμοποιώ την εντολή» g=g*num; ή g*=num;
Παράδειγμα πρόσθεσης Μετά την εισαγωγή ενός ακέραιου αριθμού να ευρίσκεται και εμφανίζεται το άθροισμα των αριθμών από το 1 έως τον αριθμό αυτό. Σε περίπτωση που δοθεί αρνητικός αριθμός ο αριθμός να μετατρέπεται σε θετικό.
Παράδειγμα πρόσθεσης με εκτύπωση αριθμών και πράξεων Μετά την εισαγωγή ενός ακέραιου αριθμού να ευρίσκεται και εμφανίζεται το άθροισμα των αριθμών από το 1 έως το αριθμό αυτό. Σε περίπτωση που δοθεί αρνητικός αριθμός ο αριθμός να μετατρέπεται σε θετικό. Να εκτυπώνονται οι επιμέρους αριθμοί που προστίθενται.
Παράδειγμα Άσκηση (while) Πόσοι αριθμοί θα πρέπει να εισάγει ένας χρήστης από το πληκτρολόγιο ώστε το άθροισμά τους να ξεπεράσει το 100 και ποιο το συνολικό άθροισμα;
Άσκηση Μπάλα (1/2) Μπάλα ρίπτεται από ύψος και αναπηδά. Δεδομένου ότι η μπάλα αναπηδά στα 2/3 του προηγούμενου ύψους πόσες φορές αναπήδησε και ποιο το ύψος που φθάνει κάθε φορά. Να ληφθεί υπόψη ότι κάτω από το 0.2cm η μπάλα σταματά να αναπηδά. Το αρχικό ύψος να εισάγεται από το πληκτρολόγιο.
Άσκηση Μπάλα (2/2)
Παράδειγμα (for ισοδύναμο με do-while) for(;;){» Εντολές;» i=+5;» If (i>100) break; } do {» εντολές» i=+5; } while (i<=100); Υπενθυμίζεται ότι στην for μπορεί να παραλειφθεί κάποιο ή όλες οι παραστάσεις που υπάρχουν μεταξύ των ; Αν παραλειφθούν όλες οι παραστάσεις η επανάληψη εκτελείται επ άπειρον (ατέρμων βρόχος)
Παράδειγμα while, do while (1/2) Να ευρίσκεται το πλήθος ψηφίων ενός ακέραιου αριθμού. Να χρησιμοποιηθούν και οι δύο επαναληπτικές διαδικασίες while και do.while. Να παρατηρήσετε ότι για τον αριθμό 0 οι δύο διαδικασίες δίνουν διαφορετικό αποτέλεσμα.
Παράδειγμα while, do while (2/2) Πρακτική άσκηση
Να εισάγεται αριθμός χ που να μην γίνεται αποδεκτός παρά μόνον αν είναι στο διάστημα 0-100. Κατόπιν να βρίσκεται το άθροισμα των που διαιρούνται με το 4 από το 0 έως τον αριθμό x Παράδειγμα 1
Παράδειγμα 2 Να γραφεί πρόγραμμα το οποίο να διαβάζει ακέραιους αριθμούς μέχρι ο χρήστης να εισάγει το αριθμό 0. Κατόπιν να εμφανίζεται το πλήθος των θετικών και αρνητικών αριθμών που έχουν εισαχθεί. Χρήση do while
Χρήση while Παράδειγμα 3
Τέλος Ενότητας