ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 4 Ο Δομή επανάληψης Επανάληψη με συνθήκη Ατέρμονη επανάληψη Πίνακας ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 2010-11 1
Δομή επανάληψης Πολύ χρήσιμη δομή στον προγραμματισμό είναι η επανάληψη. Στην επανάληψη ένα σύνολο εντολών εκτελείται πολλές φορές ελέγχοντας σε κάθε κύκλο την ισχύ κάποιας συνθήκης ελέγχου. Υπάρχει βέβαια και ο ατέρμων βρόγχος επανάληψης που όπως λέει και το όνομά του δεν ολοκληρώνεται ποτέ. int i = 1; printf( "\nαριθμοσ\tτετραγωνο\tκυβοσ\n" ); i = i + 1; i = i + 1; i = i + 1; i = i + 1; int i; printf( "\nαριθμοσ\tτετραγωνο\tκυβοσ\n" ); for(i=1; i<=5; i=i+1) printf("%d\t%d\t\t%d\n",i, i*i,i*i*i); Τα δύο αυτά προγράμματα εμφανίζουν ακριβώςταίδιαστηνοθόνη, ωστόσο το δεύτεροείναιπολύπιοαπλό. Αυτό περιέχει την επανάληψη for ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 2010-11 2
for(..) Η συνηθισμένη επανάληψη στην C υλοποιείται με την εντολή for. Η ακριβής σύνταξη της εντολής είναι : for( έκφραση1; έκφραση2; έκφραση3) εντολή/ες Η έκφραση1 αρχικοποιεί τον βρόγχο και ελέγχεται η ισχύς της έκφρασης πριν την πρώτη εκτέλεσή του. Μετά από κάθε κύκλο υπολογίζεται η έκφραση3 μεταβάλλοντας την τιμή της. Ο βρόγχος επαναλαμβάνεται για όσο ισχύει η συνθήκη της έκφρασης2. Ειδικά για την έκφραση3, όταν ο μετρητής του βρόγχου μεταβάλλεται κατά μία μονάδα μπορεί να αξιοποιηθεί η δυνατότητα της C, υποκατάστασης των τελεστών αύξησης και μείωσης ως εξής Επιθεματικά i++ αντιστοιχεί στο i=i+1 i-- αντιστοιχεί στο i=i-1 Προθεματικά ++i αντιστοιχεί στο i+1=i --i αντιστοιχεί στο i-1=i Επιθεματικά, πρώτα αυξάνεται (μειώνεται) ητιμήτουi και στη συνέχεια χρησιμοποιείται η νέα τιμή. Προθεματικά πρώτα χρησιμοποιείται η τιμή και κατόπιν μεταβάλλεται η τιμή του i. Ο βρόγχος τερματίζεται είτε γιατί διαψεύδεται η έκφραση2 είτε γιατί διακόπτεται ρητά η εκτέλεσή του με την εντολή break που συναντήσαμε και στην switch. Μπορεί επίσης με την εντολή continue να παραλείψει την εντολή/ες πηγαίνοντας στον επόμενο κύκλο μεριμνώντας βέβαια για τη συνθήκη. ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 2010-11 3
while(..) Στην προηγούμενη δομή επανάληψης ο βρόγχος ολοκληρώνεται μετά από γνωστό αριθμό επαναλήψεων. Πολλές φορές όμως δεν είναι γνωστός ο αριθμός αυτός. Στην περίπτωση αυτή μπορεί να χρησιμοποιηθεί η επανάληψη με συνθήκη. Η σύνταξη της εντολής είναι: while(έκφραση) εντολή/ες Πρώτα ελέγχεται η έκφραση και αν είναι αληθής εκτελείται στη συνέχεια η εντολή ή οι εντολές. Αν εξ αρχής η έκφραση είναι ψευδής ο βρόγχος δεν εκτελείται ποτέ. Επομένως στο εσωτερικό του βρόγχου υπάρχει τρόπος που τροποποιεί τα στοιχεία της έκφρασης. #include <stdlib.h> int i=1; float a=100.; const int i=3; const float alim=1.e-10; int k=1,l=1; while(a>alim) a=a/(10*i*i-3*i+7); while(k!=i) printf("%10d%10.3e\n",i,a); k=rand()%10; i++; printf("%10d%10d\n",l, k); l++; ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 2010-11 4
do-while Ηδομήdo-while είναι όπως η προηγούμενη με τη διαφορά ότι ο έλεγχος της λογικής έκφρασης γίνεται στο τέλος του βρόγχου και όχι στην αρχή του. Αυτό σημαίνει ότι εκτελείται οπωσδήποτε μία τουλάχιστον φορά. Η σύνταξη της εντολής είναι : do εντολή/ες while(έκφραση); int i=1; float a=0.5e-5; const float alim=1.e-10; do a=a/(10*i*i-3*i+7); printf("χρηση ΤΗΣ do %10d%10.3E\n",i,a); i++; while(a>alim); i=1; a=0.5e-5; while(a>alim) a=a/(10*i*i-3*i+7); printf("χρηση ΤΗΣ while %10d%10.3E\n",i,a); i++; ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 2010-11 5
Ένθετοι βρόγχοι Πολλές φορές χρειάζεται να επαναληφθούν εντολές σε δύο η και περισσότερα επίπεδα. Τότε οι βρόγχοι επανάληψης που τις υλοποιούν χαρακτηρίζονται ως ένθετοι βρόγχοι. Οι ένθετοι αυτοί βρόγχοι μπορεί να είναι κάθε είδους από τους προηγούμενους. Μπορεί να χρησιμοποιούνται σε κάθε επίπεδο οποιοδήποτε από τα είδη αυτά. Ωστόσο θα έχουμε υπόψη ότι πρώτα ολοκληρώνεται ο πιο εσωτερικός βρόγχος και στη συνέχεια ο αμέσως επόμενος μέχρι τον πιο εξωτερικό. int i,j; for (i=6;i<=9;i++) printf("\n"); for (j=1; j<=10; j++) printf("%d X %d = %d\n", i, j, i*j); Στο διπλανό πρόγραμμα εμφανίζεται η προπαίδεια του 6,7,8 και 9. Αυτό επιτυγχάνεται με τις δυο for όπου η πρώτη i διατρέχει τους πιο πάνω αριθμούς ενώ η δεύτερη j σαρώνει από 1 μέχρι το 10. Η αξιοποίηση τέτοιων βρόγχων δίνει τη δυνατότητα χρήσης πολυδιάστατων πινάκων. ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 2010-11 6
Ατέρμονας βρόγχος Ατέρμονας λέγεται ο βρόγχος που δεν ολοκληρώνεται ποτέ. Θα αναρωτηθεί καθείς αν είναι παθολογική κατάσταση ή αν είναι συνειδητή επιλογή. Ο Ατέρμονας βρόγχος με την for συντάσσεται ως εξής for( ; ; ).. Τέτοιος βρόγχος μπορεί να χρησιμοποιηθεί π.χ. για την ανάγνωση αρχείου του οποίου δεν είναι γνωστές οι γραμμές ή οι εγγραφές, για την διαρκή εκτέλεση μιας συνάρτησης ή διαδικασίας κ.λ.π. Μπορεί κανείς να εξέλθει από τον βρόγχο με την break; Σε εξαιρετική περίπτωση που χρειασθεί να διακοπεί βίαια μπορεί να χρησιμοποιηθεί ο συνδυασμός Ctrl + C. Δοκιμάστε το πιο κάτω πρόγραμμα int i; printf( "\nεισαι ΠΕΡΙΕΡΓΟΣ ΝΑ ΔΕΙΣ ΤΙ ΘΑ ΓΙΝΕΙ; ΝΑΙ=1 ΟΧΙ=2:\n" ); scanf("%d",&i); if (i!=1) printf( "\nδεν ΕΙΣΑΙ ΠΕΡΙΕΡΓΟΣ ΛΥΠΑΜΑΙ\n" ); else for( ; ; ) printf("η ΠΕΡΙΕΡΓΕΙΑ ΒΛΑΠΤΕΙ!!! ΤΩΡΑ ΠΕΡΙΜΕΝΕ ΤΟ Ctrl+C ΕΙΝΑΙ ΜΙΑ ΛΥΣΗ\n\n"); ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 2010-11 7
Η έννοια του πίνακα Χρήση στην C Η έννοια του πίνακα αφορά σύνολο δεδομένων ιδίου τύπου στα οποία μπορεί να αναφερόμαστε με ένα κοινό όνομα ξεχωρίζοντάς τα με κατάλληλους δείκτες. Για παράδειγμα μπορούμε να καταχωρίζουμε την μέση θερμοκρασία των ημερών του χρόνου σε μια κοινή μεταβλητή την temp. Ωστόσο μπορούμε να ανακαλέσουμε την θερμοκρασία οποιασδήποτε ημέρας π.χ. της 35 ή της 251 κλπ. Η δήλωση μιας τέτοιας μεταβλητής γίνεται ως εξής : float temp[365]; Με τον τρόπο αυτό ορίζεται μια πραγματική μεταβλητή με 366 θέσεις από 0. 355. Για να καταχωρηθούν τιμές στις θέσεις του πίνακα μπορεί να γίνει με δομή επανάληψης που τις διατρέχει και σε κάθε θέση καταχωρεί, όπως και στην απλή μεταβλητή τις τιμές. Η πρόσβαση και αναφορά σε συγκεκριμένη θέση, ημέρα στο παράδειγμά μας, γίνεται με την κατάλληλη αναφορά στον δείκτη θέση του πίνακα. ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 2010-11 8