Προγραμματισμός Μεθόδων Επίλυσης Προβλημάτων 10. Εντολές επανάληψηςκαι οι εντολές for και do-while Ιωάννης Κατάκης
Σήμερα o for o break/continue o dowhile() o φωλιασμένοι βρόχοι o παραδείγματα
Ο βρόχος for o Η for είναι η εντολή που χρησιμοποιείται πιο συχνά για την υλοποίηση βρόχων στην C o Η σύνταξη της εντολής είναι: for (πρόταση1; παράσταση; πρόταση2) ή εντολή1; for (πρόταση1; παράσταση; πρόταση2) εντολή1 1 ;... εντολή1 Ν ; o Αρχικά εκτελείται η πρόταση1 o Για όσο η λογική παράσταση είναι αληθής Εκτελείται η εντολή1 Εκτελείται η πρόταση2 Πρόταση1 Παράσταση true Εντολή1 Πρόταση2 Επόµενη Πρόταση false
Παράδειγμα intx; for(x=0; x<5; x++) printf( %d\n,x); x x<5 έξοδος 0 1 0 1 1 1 2 1 2 3 1 3 4 1 4 5 0
Ομοιότηταfor καιwhile intx= 0; while (x < 5) printf( %d\n,x); x++; intx; for (x=0; x<5; x++) printf( %d\n,x); Οποιoδήποτε for μπορεί να γραφεί με while και οποιoδήποτε whileμε for.ακόμα και το άπειρο loop for(;1;) printf("hello"); <==> while (1) printf("hello");
Παραδείγματα Αντίστροφη μέτρηση intx; for(x=5; x>0; x--) printf( %d,,x); Αποτέλεσμα: 5, 4, 3, 2, 1, Μεγαλύτερο βήμα (step increment) ή κάτι άλλο inti; for (i = 0; i < 10; i += 2) printf( %d,, i); Αποτέλεσμα: 0,2,4,6,8, inti = 10; for(i = 10; i > 0; i /= 2) printf("%d, ",i); Αποτέλεσμα:10, 5, 2, 1
Ο βρόχος do - while o Η εντολή do -while είναι παρόμοια με την while και επαναλαμβάνει την εκτέλεση μιας πρότασηςενώσω η τιμή μιας λογικής παράστασης είναι αληθής (1) o Η σύνταξη της εντολής είναι: do Πρόταση1; while (παράσταση); o Ο έλεγχος της do-whileσε αντίθεση με την while γίνεται στο τέλος Η Πρόταση1 θα εκτελεστεί τουλάχιστον μία φορά ανεξάρτητα από την τιμή της παράστασης o Π.χ. int i=0; do i++; printf( %d\n",i); while (i<10); Προηγούµενη Πρόταση Πρόταση while Παράσταση true Επόµενη Πρόταση false
Παράδειγμα Το παρακάτω πρόγραμμα διαβάζει ακέραιους από το χρήστη και εμφανίζει το τετράγωνο τους μέχρι να δεχθεί τον αριθμό 0 #include <stdio.h> main() intnum; do printf("give a number: "); scanf("%d",&num); printf("%d^2= %d\n",num,num*num); while (num!=0); system ("pause");
Διαφορές while και do-while o Ο έλεγχος στην εντολή whileγίνεται στην αρχή Οι μεταβλητές που εξετάζονται στη λογική παράσταση πρέπει να έχουν πάρει τιμή πριν εκτελεστεί ο βρόχος για πρώτη φορά Οι εντολές μέσα στο βρόχο δεν εκτελούνται καμία φορά αν η λογική παράσταση == false o Ο έλεγχος στην do-while γίνεται στο τέλος Οι εντολές μέσα στο βρόχο εκτελούνται τουλάχιστον μια φορά ανεξάρτητα από την τιμή της λογικής παράστασης
Ένθετα while & do - while o Η ένθεση μιας εντολής επανάληψης είναι η προσθήκη της μέσα στο σώμα των εντολών μιας άλλης εντολής επανάληψης while(συνθήκη1) Πρόταση1; Πρόταση2;... while (συνθήκη2) Πρόταση11; Πρόταση12;... Πρόταση1M;... ΠρότασηΝ-1; ΠρότασηΝ; do Πρόταση1; Πρόταση2;... do Πρόταση11; Πρόταση12;... Πρόταση1M; while (συνθήκη2);... ΠρότασηΝ-1; ΠρότασηΝ; while(συνθήκη1);
Ένθετοι βρόχοι for o Η εντολή for μπορεί να περιέχει στο σώμα της οποιεσδήποτε εντολές της C και επομένως και άλλες εντολές for o Μία for στο σώμα μιας άλλης for σχηματίζουν μια ένθετη for o Έστω ο παρακάτω κώδικας for (i=0;i<5;i++) for (j=4;j>0;j--) printf( %d,%d\t,i,j); printf( \n ); 0,4 0,3 0,2 0,1 1,4 1,3 1,2 1,1 2,4 2,3 2,2 2,1 3,4 3,3 3,2 3,1 4,4 4,3 4,2 4,1 _ o Η εντολή printfθα εκτελεστεί 20 φορές (5*4) o Η εντολή printfθα εκτελεστεί 5 φορές
Παράδειγμα Προπαίδεια main() int i,j; for (i=1;i<10;i++) for (j=1;j<10;j++) printf( %d*%d= %d\n,i,j,i*j);
Εντολή break Η εντολή breakµπορεί να χρησιµοποιηθεί σε βρόχο while, do-while και for για να προκαλέσει έξοδο από το βρόχο #include <stdio.h> main ( ) inti; for (i = 1; i < 10; i++) if (i == 5) break; printf( %d, i); printf( \nexetevgeiapoto loop!!! ); Αποτέλεσµα: 1 2 3 4 Exete vgei apo to loop!!!
Εντολή continue H εντολή continueμπορεί να χρησιμοποιηθεί μεfor, while,do-while για να προκαλέσει την ματαίωση της εκτέλεσης των επομένων εντολών του βρόχου, για την τρέχουσα επανάληψη. #include <stdio.h> main ( ) inti; for (i = 1; i < 10; i++) if (i == 5) continue; printf( %d, i); printf( \n ); Aποτέλεσµα: 1 2 3 4 6 7 8 9 10-14
Άσκηση 10.1 Σχεδιάστε αλγόριθμο ο οποίος υπολογίζει το παραγοντικό ενός θετικού ακέραιου αριθμού που δίνει ο χρήστης o Δεδομένα εισόδου: αριθμός x o Δεδομένα εξόδου : το παραγοντικό Υπολογισμός παραγοντικού; 1! = 1, 2! = 1*2 = 2, 3! = 1*2*3 = 6 4!=1*2*3*4=24, 5!=1*2*3*4*5=120,. 10-15
Άσκηση 10.1: Λύση intmain() int i, factorial=1; intn; printf("enter Number (1-12):"); scanf("%d", &n); for (i=1; i<=n; i++) factorial = factorial * i; printf("the factorial of %d is %d\n", n, factorial); return 0; 10-16
Άσκηση 10.1 -Επέκταση: έλεγχος εισόδου intmain() int i, factorial=1; intn; do // Έλεγχος ότι τα δεδομένα εισόδου είναι ορθά printf("enter Number (1-12):"); scanf("%d", &n); while (n<1 n>12); for (i=1; i<=n; i++) factorial = factorial * i; printf("the factorial of %d is %d\n", n, factorial); return 0; 10-17
Άσκηση 10.1 χρήση while int main() int i=1, factorial=1; int n; do printf("enter Number (1-12):"); scanf("%d", &n); while (n<1 n>12); while (i<=n) factorial = factorial * i; i++; printf("the factorial of %d is %d\n", n, factorial); return 0;
Άσκηση 10.1: χρήση do-while int main() int i=1, factorial=1; int n; do printf("enter Number (1-12):"); scanf("%d", &n); while (n<1 n>12); do factorial = factorial * i; i++; while (i<=n) printf("the factorial of %d is %d\n", n, factorial); return 0; 10-19
Τέλος διάλεξης