Εντολές ελέγχου ροής if, for, while, do-while

Σχετικά έγγραφα
2ο σετ σημειώσεων. 1 Εντολές εκτέλεσης υπό συνθήκη. 19 Μαρτίου 2012

Σημειώσεις για πρόοδο στο εργαστήριο

Εισαγωγή στους Αλγόριθμους και τον Προγραμματισμό. 3η Διάλεξη Είσοδος Δεδομένων Συνθήκες Βρόχοι Παραδείγματα

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Στη C++ υπάρχουν τρεις τύποι βρόχων: (a) while, (b) do while, και (c) for. Ακολουθεί η σύνταξη για κάθε μια:

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

Οι εντολές ελέγχου της ροής ενός προγράμματος.

Υπολογισμός - Εντολές Επανάληψης

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

Προγραμματισμός Ι (HY120)

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 3 η : Επίλυση Προβληµάτων Χειµερινό Εξάµηνο 2011

Η γλώσσα προγραμματισμού C

Η γλώσσα προγραμματισμού C

Αναφορά (1/2) Μπορούμε να ορίσουμε μια άλλη, ισοδύναμη αλλά ίσως πιο σύντομη, ονομασία για ποσότητα (μεταβλητή, σταθερή, συνάρτηση, κλπ.

Πίνακες. 1 Πίνακες. 30 Μαρτίου 2014

Η γλώσσα προγραμματισμού C

Η γλώσσα προγραμματισμού C

Ο βρόχος for Η εντολή for χρησιμοποιείται για τη δημιουργία επαναληπτικών βρόχων στη C

Προβλήματα, αλγόριθμοι, ψευδοκώδικας

for for for for( . */

Δομές ελέγχου ροής προγράμματος

Στόχοι και αντικείμενο ενότητας. Προτάσεις επανάληψης. Έλεγχος ροής προγράμματος. #5.. Εντολές Επανάληψης

Ψευδοκώδικας. November 7, 2011

4. ΒΡΟΧΟΙ ΕΠΑΝΑΛΗΨΗΣ (Α' μέρος: for)

ιαδικαστικός Προγραμματισμός

Κεφάλαιο : Επαναλήψεις (oι βρόγχοιfor, do-while) (Διάλεξη 10) Εντολές Επανάληψης που θα καλυφθούν σήμερα

Δομημένος Προγραμματισμός

Διαδικασιακός Προγραμματισμός

Προγραμματισμός ΗΥ και Υπολογιστική Φυσική. Χρήστος Γκουμόπουλος

Εκτέλεση της εντολής1 και στη συνέχεια εκτέλεση της ΕΝΟΤΗΤΑΣ και της εντολής2 όσο η ΣΥΝΘΗΚΗ είναι αληθής.

ΗΥ-150. Προγραμματισμός

5ο σετ σημειώσεων - Δείκτες

Εισαγωγή στον Προγραμματισμό

ΗΥ-150. Προγραµµατισµός. Εντολές Ελέγχου Ροής

Εντολές Επανάληψης. int sum = 0, i=1; sum += i++ ; sum += i++ ; Η πράξη αυτή θα πρέπει να επαναληφθεί Ν φορές!

Είδη εντολών. Απλές εντολές. Εντολές ελέγχου. Εκτελούν κάποια ενέργεια. Ορίζουν τον τρόπο με τον οποίο εκτελούνται άλλες εντολές

Διαδικασιακός Προγραμματισμός

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Pascal. 1 Γλώσσες προγραμματισμού. 21 Οκτωβρίου 2011

ΗΥ-150. Προγραμματισμός

Χρησιμοποιείται για να αποφασίσει το πρόγραμμα αν θα κάνει κάτι σε ένα σημείο της εκτέλεσής του, εξετάζοντας αν ισχύει ή όχι μια συνθήκη.

9. Εντολές επανάληψηςκαι η εντολή

Εισαγωγή στον Προγραμματισμό με C++

5. ΒΡΟΧΟΙ ΕΠΑΝΑΛΗΨΗΣ (Β' μέρος: while - do..while)

Γλώσσα Προγραμματισμού C. Προγραμματισμός HY: Γλώσσα Προγραμματισμού C. Γρήγορος Πίνακας Αναφοράς Σύνταξης. Εισήγηση #4. Επαναληπτικές δομές:

Κεφάλαιο : Επαναλήψεις (for, do-while)

Λυμένα παραδείγματα με τις for, while, do-while

Λογικό "και" (AND) μας επιστρέφει 1 αν και οι δύο operands είναι όχι μηδέν, διαφορετικά 0)

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος lantzos@teiser.gr

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Εισαγωγή στη γλώσσα προγραμματισμού C++

Ο πιο κάτω πίνακας περιγράφει σε ποιες περιπτώσεις χρησιμοποιούμε τους τρεις πιο πάνω τρόπους:

Παρακάτω δίνεται o σκελετός προγράμματος σε γλώσσα C. Σχολιάστε κάθε γραμμή του κώδικα.

Η Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 6 Εντολές Επανάληψης Ασκήσεις. Γιώργος Λαμπρινίδης

Δομές Ανακυκλώσεων. Εντολές ελέγχου - 1

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

Pascal. 15 Νοεμβρίου 2011

Προγραμματισμός Ι (ΗΥ120)

Κεφάλαιο 4: Συνθήκες Έλεγχου (if-else, switch) και Λογικοί τελεστές / παραστάσεις. (Διάλεξη 8)

Προγραμματισμός Η/Υ. Ενότητα 5: Εντολές Επανάληψης

Διάλεξη 5η: Εντολές Επανάληψης

if(συνθήκη) {... // οµάδα εντολών } C: Από τη Θεωρία στην Εφαρµογή 5 ο Κεφάλαιο

Προγραμματισμός Η/Υ Ι (Χρήση της C) 6 η Θεωρία ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

Ηλεκτρονικοί Υπολογιστές

Η ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ Εντολές Επανάληψης REPEAT UNTIL, FOR, WHILE

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

ΕΝΤΟΛΕΣ ΕΠΑΝΑΛΗΨΗΣ. for (παράσταση_1; παράσταση_2; παράσταση_3) εντολή επόμενη εντολή

Μεθόδων Επίλυσης Προβλημάτων

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Εισαγωγή στην πληροφορική

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

Νικόλαος Μιχαλοδημητράκης Σημειώσεις C (Εργαστήριο) 5 ο Μέρος 5 ο Μέρος Εντολές Επανάληψης: FOR - WHILE. Περιγραφή

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 4 Ο. Δομή επανάληψης Επανάληψη με συνθήκη Ατέρμονη επανάληψη Πίνακας ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Υπολογισμός - Εντολές Ελέγχου

Εισαγωγή στον προγραμματισμό. Τμήμα Πληροφορικής & Επικοινωνιών ΤΕΙ Σερρών Εργαστήριο 4

Η Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 5 Εντολές Επανάληψης for while do while. Λαμπρινίδης Γεώργιος

Εντολή Δεδομένα Περιεχόμενα μετά την εκτέλεση 1 read(x) 122 x= 2 read(a,b,c) a= b= c= 3 read(d,e)

Προσέξτε πως η παράσταση μπορεί να περιλαμβάνει όχι μόνο μία τιμή ή μια άλλη μεταβλητή αλλά μια ολόκληρη μαθηματική παράσταση, όπως η εξής:

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) (PASCAL ) Εντολές Ελέγχου & Επανάληψης

Προγραμματισμός Η/Υ (ΤΛ2007 )

Γλώσσα Προγραμματισμού C

2. ΕΝΤΟΛΕΣ ΕΛΕΓΧΟΥ (Α' μέρος: if)

Δομές Ακολουθίας- Επιλογής - Επανάληψης. Δομημένος Προγραμματισμός

6. ΠΙΝΑΚΕΣ & ΑΛΦΑΡΙΘΜΗΤΙΚΑ

Μεταβλητές τύπου χαρακτήρα

Διαδικαστικός Προγραμματισμός

ΑΣΚΗΣΗ 3: ΠΡΟΤΑΣΕΙΣ, ΕΚΦΡΑΣΕΙΣ ΚΑΙ ΤΕΛΕΣΤΕΣ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ Κεφάλαιο 2 ο Να περιγραφεί η δομή επανάληψης Αρχή_επανάληψης Μέχρις_ότου

ΕΡΓΑΣΤΗΡΙΟ 4: Μεταβλητές, Δομές Ελέγχου και Επανάληψης

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Εντολές επιλογής Επαναλήψεις (if, switch, while)

ΕΝΟΤΗΤΑ 4 Λήψη Αποφάσεων και Συναρτήσεις Ελέγχου

Εισαγωγή στον Προγραμματισμό

Κεφάλαιο : Επαναλήψεις (o βρόγχος While) (Διάλεξη 9) Δομές Έλεγχου Προγράμματος

Θέματα Προγραμματισμού Η/Υ

Παραδείγματα. Γράψτε ένα πρόγραμμα που να τυπώνει τη μέση τιμή ενός συνόλου μη αρνητικών αριθμών

10. Εντολές επανάληψηςκαι οι εντολές

Επιλογή και επανάληψη. Λογική έκφραση ή συνθήκη

Transcript:

Εντολές ελέγχου ροής if, for, while, do-while 1 Μαρτίου 014 1 Εντολές εκτέλεσης υπό συνθήκη Μπορούμε να εκτελέσουμε εντολές της γλώσσας σε περίπτωση που κάποια συνθήκη ισχύει χρησιμοποιώντας την εντολή if. Συντάσσεται ως εξής: 1 if ( condition) command; ή 1 if ( condition) { 3 command_1; 4 command_; 5... command_n; 7 } Και στις δύο περιπτώσεις την if ακολουθεί μία συνθήκη (condition) κλεισμένη μέσα σε παρενθέσεις. Αν η συνθήκη ισχύει τότε εκτελείται είτε η μία εντολή (command) που ακολουθεί όπως στην πρώτη περίπτωση είτε μία σειρά εντολών κλεισμένες μέσα σε άγκιστρα όπως στη δεύτερη περίπτωση. Τα άγκιστρα και οι εντολές που περικλείονται μέσα σε αυτά είναι συντακτικά ισοδύναμα με μία και μόνο εντολή. Τέτοιες ομάδες εντολών κλεισμένες μέσα σε άγκιστρα ονομάζονται μπλοκ (block) εντολών. Προφανώς η πρώτη μορφή της if είναι νόμιμη εντολή αλλά είναι καλή πρακτική να αποφεύγεται και να χρησιμοποιείται η δεύτερη μορφή με τα άγκιστρα ακόμα και στις περιπτώσεις που πρόκειται να εκτελεστεί μία και μόνο εντολή. Η συνθήκη (condition) μπορεί να είναι οποιαδήποτε λογική έκφραση δηλαδή μια έκφραση που μπορεί να αποτιμηθεί ως αληθής ή ψευδής. Για παράδειγμα μπορεί να είναι ένας συσχετιστικός τελεστής με δύο ορίσματα όπως a > b, a+1 <= b*, b*b - 4*a*c >= 0 κτλ. Θυμηθείτε ότι εκφράσεις όπως τις προηγούμενες μπορούμε να τις συνδυάσουμε χρησιμοποιώντας λογικούς τελεστές όπως ο ΚΑΙ (&&), ο Η ( ) και η λογική άρνηση (!), π.χ. γράφοντας (a > b) && (a == 3*c), (a+1 <= b*) (5*x*x >.4). Στην πραγματικότητα η C θεωρεί τις λογικές εκφράσεις που αναφέραμε παραπάνω ως εκφράσεις που έχουν την τιμή 1 αν είναι αληθείς ή την τιμή 0 αν είναι ψευδείς. Και τελικά, εκτελεί τις εντολές που 1

ακολουθούν το if αν η έκφραση που βρίσκεται μέσα στις παρενθέσεις είναι μη-μηδενική (αληθής) ενώ δεν τις εκτελεί αν είναι ίση με το μηδέν (ψευδής). Μία δεύτερη μορφή εκτέλεσης εντολών υπό συνθήκη είναι το σχήμα if-else που συντάσσεται όπως παρακάτω: 1 if ( condition) { 3 commands_1; 4 } 5 else { commands_; 7 } Σε αυτήν τη μορφή, αποτιμάται η συνθήκη condition και αν είναι αληθής εκτελείται το μπλοκ εντολών commands_1. Αν δεν είναι, τότε εκτελούνται οι εντολές commands_¹. Παράδειγμα Το πρόγραμμα 1 ζητάει από το χρήστη να δώσει την ηλικία του στο πληκτρολόγιο. Αν η ηλικία του είναι μεγαλύτερη ή ίση από 18 τυπώνει ένα μήνυμα που του λέει ότι έχει δικαίωμα ψήφου, αλλιώς ότι δεν έχει. Listing 1: Παράδειγμα if-else 5 int age; 7 printf(" Dose tnv nlikia sou: "); 8 scanf("%d", &age); 10 if (age >= 18) 11 printf(" Exeis dikaiwma psnfou\n"); 1 else 13 printf(" Dev exeis dikaiwma psnfou\n"); 14 15 return 0; 1 } Στο πρόγραμμα φαίνεται μία άλλη μορφή της if που συναντάμε συχνά. Το συγκεκριμένο πρόγραμμα υπολογίζει αν ένα έτος είναι δίσεκτο ή όχι. Μια χρονιά είναι δίσεκτη αν διαιρείται με το 4 αλλά όχι με το 100 εκτός κι αν διαιρείται με το 400. Το συγκεκριμένο πρόγραμμα υλοποιεί αυτόν τον κανόνα με μία σειρά από αλυσιδωτά if. Αν η συνθήκη του πρώτου if ισχύει τότε τυπώνεται ένα μήνυμα. Αν δεν ισχύει, τότε εκτελείται το σκέλος else της πρώτης if στο οποίο όμως υπάρχει ¹Στο παράδειγμα αναφέρεται μόνο μία εντολή αλλά όπως είπαμε και παραπάνω σε ένα μπλοκ μπορούν να βρίσκονται οσεσδήποτε. Επίσης μπορούμε να παραλείψουμε τα άγκιστρα στην περίπτωση που θέλουμε να εκτελεστεί μόνο μία εντολή αλλά αυτό δεν είναι καλή πρακτική.

μία δεύτερη if της οποίας αν ισχύει η συνθήκη τύπωνεται ένα μήνυμα αλλιώς εκτελείται το else της δεύτερης κ.ο.κ. Listing : Παράδειγμα if-else if... 5 int year; 7 printf("dose to etos: "); 8 scanf("%d", &year); 10 if (year % 400 == 0) 11 printf(" To etos einai disekto\n"); 1 else if (year % 100 == 0) 13 printf(" To etos den einai disekto\n"); 14 else if (year % 4 == 0) 15 printf(" To etos einai disekto\n"); 1 else 17 printf(" To etos den einai disekto\n"); 18 return 0; 1 } Ξαναγράφουμε το ίδιο πρόγραμμα στο 3 για να φανεί καθαρότερα πώς λειτουργεί το συντακτικό και ποιο else ταιριάζει με ποιο if. Η εντολή που ακολουθεί το else της γραμμής 1 είναι και αυτή μία if που και αυτή με τη σειρά της έχει μία αντίστοιχη else κτλ. Αν η συνθήκη της γραμμής 1 ισχύει, τότε θα εκτελεστεί η εντολή της γραμμής 13 και μετά η ροή του προγράμματος θα περάσει στη γραμμή 18 αφού όλες οι εντολές μέχρι και τη γραμμή 17 είναι στο else σκέλος της πρώτης if. Listing 3: Παράδειγμα if-else if... 5 int year; 7 printf("dose to etos: "); 8 scanf("%d", &year); 10 if (year % 400 == 0) 11 printf(" To etos einai disekto\n"); 1 else if (year % 100 == 0) 13 printf(" To etos den einai disekto\n"); 14 else if (year % 4 == 0) 3

15 printf(" To etos einai disekto\n"); 1 else 17 printf(" To etos den einai disekto\n"); 18 return 0; 1 } Eντολές επανάληψης Η C μας δίνει τη δυνατότητα να πραγματοποιήσουμε επαναλήψεις με τρεις διαφορετικούς τρόπους: Τους βρόχους for, while και do-while..1 Βρόχος for Η εντολή επανάληψης for συντάσσεται όπως παρακάτω: 1 for ( ic; cond; step) { commands... } ic Είναι μία εντολή η οποία αρχικοποιεί το βρόχο. Εκτελείται μία και μόνο φορά πριν ξεκινήσουν οι επαναλήψεις. cond Μία συνθήκη η οποία αποτιμάται μία φορά πριν από κάθε επανάληψη. Αν είναι ψευδής τότε διακόπτονται οι επαναλήψεις. Αν είναι αληθής πραγματοποιείται η επόμενη επανάληψη. step Μία εντολή που εκτελείται στο τέλος κάθε επανάληψης. commands Είναι οι εντολές που εκτελούνται σε κάθε επανάληψη. Συγκροτούν το σώμα (body) του βρόχου. Αν οι εντολές που απαρτίζουν το σώμα του βρόχου δεν είναι περισσότερες από μία τότε δεν είναι απαραίτητο να βρίσκονται σε ένα μπλοκ με άγκιστρα όπως παραπάνω αλλά είναι καλή πρακτική να μπαίνουν. Η διαδικασία εκτέλεσης του βρόχου είναι η εξής: 1. Εκτελείται η εντολή ic.. Αποτιμάται η συνθήκη cond. Αν είναι αληθής τότε η εκτέλεση συνεχίζεται στο βήμα 3. Αλλιώς στο βήμα 5. 3. Εκτελούνται οι εντολές (ή εντολή) που συγκροτούν το σώμα του βρόχου. 4. Εκτελείται η εντολή step και η διαδικασία συνεχίζεται στο βήμα. 5. Ο βρόχος τερματίζεται και το πρόγραμμα συνεχίζει με την επόμενη εντολή. 4

Γενικά, χρησιμοποιούμε το βρόχο for για να πραγματοποιήσουμε επαναλήψεις των οποίων τον αριθμό ξέρουμε από τα πριν, όταν δηλαδή ξέρουμε εκ των προτέρων ότι θέλουμε να πραγματοποιηθεί συγκεκριμένος αριθμός επαναλήψεων σε κάθε μία από τις οποίες κάποια μεταβλητή θα πάρει συγκεκριμένες τιμές. Όμως, ένα ενδιαφέρον σημείο σχετικά με το βρόχο for είναι ότι η αρχική εντολή, η συνθήκη και το βήμα είναι προαιρετικά. Μπορεί δηλαδή κανείς να γράψει αυτό: for (i=0; i<10; ++i) ως εξής: i=0; for (; i<10; ++i). Επίσης θα μπορούσε κάλλιστα να βγάλει το ++i και να το τοποθετήσει τελευταίο στο σώμα του βρόχου. Οι εντολές που θα εκτελούνταν θα ήταν οι ίδιες με την ίδια σειρά και στις δύο περιπτώσεις. Δείτε σχετικά το τελευταίο παράδειγμα της επόμενης ενότητας..1.1 Παραδείγματα 1. Το πρόγραμμα 4 τυπώνει σε μία γραμμή χωρισμένους με ένα κενό τους αριθμούς από το ένα μέχρι και το 10. Η εντολή ++i στο τέλος της γραμμής 7 αυξάνει το i κατά ένα πριν από κάθε επανάληψη του βρόχου. Αντί για αυτήν θα μπορούσε να χρησιμοποιηθεί ο μεταθεματικός τελεστής μοναδιαίας αύξησης i++ ή ακόμα και η φλύαρη i = i + 1. 5 int i; 7 for (i = 1; i <= 10; ++i) 8 printf("%d ", i); 10 return 0; 11 } Listing 4: for από ένα έως και 10. Αν στο παράδειγμα 4 αντικαταστήσουμε τη for των γραμμών 7 και 8 με τις γραμμές που φαίνονται στη λίστα 5 τότε το πρόγραμμα θα τυπώσει σε διαφορετικές γραμμές τους ζυγούς αριθμούς από το 10 μέχρι και το (σε αντίστροφη σειρά). Η εντολή i-= είναι ισοδύναμη με την i = i -. Παρατηρήστε την παράξενη συνθήκη τερματισμού η οποία είναι απλώς το i. Θυμηθείτε ότι η C θεωρεί ότι μία αριθμητική έκφραση στη θέση μιας λογικής συνθήκης είναι αληθής αν είναι διάφορη του μηδενός και ψευδής αν είναι μηδέν. Στο παράδειγμά μας λοιπόν όσο το i είναι διαφορετικό από το μηδέν, η συνθήκη i είναι αληθής οπότε ο βρόχος συνεχίζεται. Όταν τελικά η i γίνει ίση με μηδέν, η συνθήκη θεωρείται ψευδής και ο βρόχος τερματίζεται ². 1 for (i = 10; i; i -= ) printf("%d\n", i); Listing 5: for με ζυγούς σε αντίστροφη σειρά ²Θα μπορούσαμε να χρησιμοποιήσουμε αυτό το γλωσσικό ιδίωμα για να τυπώσουμε τους περιττούς αριθμούς, 7, 5, 3, 1; 5

3. Δεν υπάρχει κανένας περιορισμός σχετικά με το ποιες εντολές απαρτίζουν το σώμα ενός βρόχου-for. Μπορεί να είναι μία άλλη εντολή for. Το πρόγραμμα χρησιμοποιεί δύο for για να τυπώσει ένα αριθμητικό τρίγωνο. Listing : Αριθμητικό τρίγωνο 5 int i, j; 7 for (i = 1; i <= 5; ++i) { 8 for (j = 1; j <= i; ++j) printf("%d", i); 10 printf("\n"); 11 } 1 13 return 0; 14 } 4. Το παράδειγμα 7 ζητάει από το χρήστη να δώσει μία μη-μηδενική τιμή στη μεταβλητή a. Αν ο χρήστης δώσει μηδενική τιμή τότε ο βρόχος επαναλαμβάνεται. Αυτό συνεχίζεται μέχρι ο χρήστης να δώσει μία μη-μηδενική τιμή. Παρατηρήστε ότι δεν γνωρίζουμε πόσες φορές θα επαναληφθεί ο βρόχος. Ίσως ο χρήστης δώσει με την πρώτη μία μη-μηδενική τιμή, ίσως πάλι όχι. Παρατηρήστε και τη συνθήκη επανάληψης!a. Θυμηθείτε ότι αν η a έχει μη-μηδενική τιμή, τότε ως λογική έκφραση θεωρείται αληθής. Ο τελεστής! είναι ο τελεστής λογικής άρνησης ο οποίος αν εφαρμοστεί σε μία έκφραση η οποία έχει την τιμή αληθής δίνει το αποτέλεσμα ψευδής και αντίστροφα. Άρα, αν η a είναι μηδέν δηλαδή ως λογική έκφραση ψευδής, τότε η!a είναι αληθής. Οπότε ο βρόχος επαναλαμβάνεται όσο η a παραμένει μηδέν, δηλαδή μέχρι ο χρήστης να δώσει μία μη-μηδενική τιμή. Επίσης παρατηρήστε ότι εφόσον η συνθήκη ελέγχεται πριν εκτελεστεί η πρώτη επανάληψη, δεν μπορούμε να ξέρουμε τι τιμή θα έχει η!a δεδομένοου ότι ο χρήστης δεν θα την έχει δώσει ακόμα από το πληκτρολόγιο. Οπότε στο σημείο αρχικοποίησης θέτουμε a=0 ώστε να εξασφαλίσουμε ότι αρχικά η συνθήκη!a θα είναι αληθής και θα πραγματοποιηθεί η πρώτη έστω επανάληψη του βρόχου. Η χρήση του βρόχου for με αυτόν τον τρόπο δεν είναι η συνηθισμένη. Θυμίζουμε ότι συνήθως ο βρόχος for χρησιμοποιείται όταν ο αριθμός των επαναλήψεων είναι λίγο-πολύ γνωστός. Σε περιπτώση σαν αυτήν του παραδείγματος χρησιμοποιούμε βρόχους while ή do-while. Listing 7: Η for λίγο διαφορετική 5 int a;

7 for (a=0;!a; ) { 8 printf(" Dose mia mn- mndevikn timn: "); scanf("%d", &a); 10 } 11 1 return 0; 13 } 5. Στο επόμενο παράδειγμα 8 χρησιμοποιούμε ένα βρόχο for για να αθροίσουμε τους αριθμούς από το 1 μέχρι και το 10. 5 int i; int sum = 0; 7 8 for (i = 1; i <= 10; ++i) sum += i; 10 Listing 8: Άθροισμα αριθμών από 1 έως 10 11 printf(" To athroisma einai %d\n", sum); 1 13 return 0; 14 }. Βρόχος while Ο βρόχος while εκτελεί κάποιες εντολές (ή εντολή) όσο ισχύει μία συνθήκη. Η σύνταξη της εντολής while είναι όπως παρακάτω: 1 while ( condition) { commands 3 } Η condition είναι μία συνθήκη και οι commands είναι ένα μπλοκ εντολών (θα μπορούσε να είναι και μία εντολή χωρίς άγκιστρα). Η διαδικασία εκτέλεσης του βρόχου είναι η εξής: 1. Αποτιμάται η συνθήκη condition. Αν είναι αληθής η εκτέλεση συνεχίζεται στο βήμα. Αλλιώς στο βήμα 3.. Εκτελούνται οι εντολές (ή εντολή) που αποτελούν το σώμα του βρόχου. Η ροή εκτέλεσης μεταφέρεται πάλι στο βήμα 1. 3. Ο βρόχος τερματίζεται. Η εκτέλεση του προγράμματος συνεχίζεται με την επόμενη εντολή. 7

Ο βρόχος while χρησιμοποιείται όταν θέλουμε να εκτελεστούν κάποιες επαναλήψεις αλλά δεν γνωρίζουμε εκ των προτέρων πόσες. Γνωρίζουμε όμως κάτω από ποιες συνθήκες θα πρέπει να συνεχίζονται οι επαναλήψεις. Καλό είναι να προσέξει κανείς ότι πρώτα αποτιμάται η συνθήκη και μετά εκτελείται το σώμα της κάθε επανάληψης οπότε είναι πιθανό (αν η συνθήκη είναι αρχικά ψευδής) οι επαναλήψεις να μην πραγματοποιηθουν καθόλου...1 Παραδείγματα 1. Το πρόγραμμα αθροίζει αριθμούς που δίνει ο χρήστης στο πληκτρολόγιο μέχρι το άθροισμά τους να ξεπεράσει ένα συγκεκριμένο όριο. Listing : Βρόχος while για άθροισμα 5 int limit, sum, a; 7 printf("dose to orio: "); 8 scanf("%d", &limit); 10 sum = 0; 11 while (sum < limit) { 1 printf(" A8roisma %d. Dwse evav ari8mo: ", sum); 13 scanf("%d", &a); 14 sum += a; 15 } 1 17 return 0; 18 }.3 Βρόχος do-while Η βρόχος do-while είναι αντίστοιχος με το βρόχο repeat-until άλλων γλωσσών. Αποτελείται όπως και ο βρόχος while από ένα σώμα εντολών αλλά σε αυτήν την περίπτωση η συνθήκη ελέγχεται μετά την πραγματοποίηση της πρώτης επανάληψης. Συντάσσεται όπως παρακάτω: 1 do { commands 3 } while ( condition); Η ροή εκτέλεσης είναι η εξής: Αρχικά εκτελούνται οι εντολές στο σώμα του βρόχου (commands). Στη συνέχεια αποτιμάται η συνθήκη condition. Αν είναι αληθής τότε η ροή εκτέλεσης μεταφέρεται πάλι στην πρώτη γραμμή και η διαδικασία επαναλαμβάνεται. Αλλιώς, αν είναι ψευδής, δεν πραγματοποιείται άλλη επανάληψη. 8

Η διαφορά που έχει αυτός ο τύπος επανάληψης από τον προηγούμενο είναι ότι σε αυτήν την περίπτωση η συνθήκη ελέγχεται για πρώτη φορά μετά την πραγματοποίηση της πρώτης επανάληψης δηλαδή σε κάθε περίπτωση, ακόμα και αν η συνθήκη είναι αρχικά ψευδής, πραγματοποιείται τουλάχιστον μία επανάληψη..3.1 Παραδείγματα 1. Το πρόγραμμα10 ζητάει από το χρήστη έναν αριθμό από το 5 μέχρι το 0. Αν ο χρήστης δώσει αριθμό έξω από αυτά τα όρια, τότε ξαναζητάει τον αριθμό και η διαδικασία επαναλαμβάνεται μέχρι ο αριθμός να είναι νόμιμος. Το παρακάτω είναι ένας συνηθισμένος τρόπος να ελέγξει κανείς ώστε κάποια τιμή που δίνεται από το χρήστη είναι μέσα σε νόμιμα όρια. Παρατηρήστε τον τρόπο που λειτουργεί η συνθήκη της while. Η συνθήκη (a>=5 && a<=0) ισχύει όταν η τιμή που έδωσε ο χρήστης είναι μέσα στα ορισμένα όρια. Το ζητούμενο όμως είναι να πραγματοποιείται επανάληψη της διαδικασίας όταν ο αριθμός είναι έξω από αυτά τα όρια δηλαδή όταν ισχύει η αντίθετη από την παραπάνω συνθήκη. Για να δηλώσουμε αυτό χρησιμοποιούμε τον τελεστή λογικής άρνησης!. 5 int a; 7 do { Listing 10: Επαναλήψεις για έλεγχο εισόδου 8 printf(" Dose evav ari8mo apo to 5 mexri to 0: "); scanf("%d", &a); 10 } while (!(a>=5 && a<=0)); 11 1 return 0; 13 }.4 Εντολές break και continue Οι εντολές break και continue δίνουν τη δυνατότητα να τροποποιήσουμε τη φυσιολογική ροή εντολών ενός βρόχου. Η break τερματίζει άμεσα την εκτέλεση των εντολών του βρόχου ενώ η continue διακόπτει την τρέχουσα επανάληψη και προχωράει στην επόμενη. Για παράδειγμα ο παρακάτω βρόχος εκτελείται πέντε φορές και όχι δέκα όπως θα γινόταν αν δεν υπήρχε η break. Στην έκτη επανάληψη, όταν η μεταβλητή i γίνεται ίση με πέντε, η συνθήκη της if στη γραμμή 3 ισχύει και έτσι εκτελείται η break η οποία τερματίζει τις επαναλήψεις του βρόχου και συνεχίζει με όποιες εντολές βρίσκονται μετά τη γραμμή. 1 for (i=0; i <=10; ++i) { printf("a: %d\n", i); 3 if (i >= 5)

4 break; 5 printf("b: %d\n", i); } Με τον ίδιο προφανή τρόπο συμπεριφέρεται η break και στις επαναλήψεις τύπου while ή do-while. Η εντολή continue τερματίζει την τρέχουσα επανάληψη και συνεχίζει με την επόμενη. Αν αντικαταστήσουμε δηλαδή την break στο προηγούμενο παράδειγμα με την continue το αποτέλεσμα θα είναι ότι για τις πρώτες πέντε επαναλήψεις θα εκτελούνται και οι δύο printf που βρίσκονται στις γραμμές και 5. Από την έκτη όμως και στη συνέχεια καθώς η μεταβλητή i θα είναι ίση ή μεγαλύτερη από πέντε θα εκτελείται η continue της γραμμής 4. Όποτε γίνεται αυτό, ο ροή εκτέλεσης από τη γραμμή 4 θα μεταφέρεται πάλι στη γραμμή 1, δηλαδή δεν θα εκτελείται η γραμμή 5..4.1 Παραδείγματα Το παράδειγμα 11 ελέγχει αν ένας αριθμός τον οποίο δίνει ο χρήστης στο πληκτρολόγιο είναι πρώτος ή όχι. Θυμίζουμε ότι ένας αριθμός είναι πρώτος αν διαιρείται μόνο από τη μονάδα και τον ευατό του. Η λογική είναι ότι μέσα από ένα βρόχο δοκιμάζονται διάφοροι πιθανοί διαιρέτες. Αν στην τρέχουσα επανάληψη ο πιθανός διαιρέτης δεν διαιρεί τον εν λόγω αριθμό τότε δοκιμάζεται ο επόμενος. Αν όμως ο πιθανός διαιρέτης διαιρεί τον εν λόγω αριθμό τότε δεν υπάρχει λόγος να συνεχιστούν οι επαναλήψεις οπότε ο βρόχος διακόπτεται με την break. Listing 11: Πρώτος αριθμός 5 int a, i; 7 printf(" Dose ton ari8mo: "); 8 scanf("%d", &a); 10 for (i = ; i < a; ++i) { 11 if (!(a%i)) 1 break; 13 } 14 15 if (i == a) 1 printf("o ari8mos eivai prwtos\n"); 17 else 18 printf("o ari8mos dev eivai prwtos\n"); 1 0 return 0; 1 } 10