e ντολες Επαναληψης - Βροχοι ( repetition and loops)
DESCRIPTION
E ντολες Επαναληψης - Βροχοι ( repetition and loops). while(){} for(){} do{ }while() τελεστες postfix/prefix (++, --, ...). Δομες Ελεγχου. Ενα προγραμμα αποτελειται απο Ακολουθιες πχ {εντολη;εντολη;…} Εκλογη πχ if(){} Επαναληψη πχ while{}. Χρηση Βροχων. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: E ντολες Επαναληψης - Βροχοι ( repetition and loops)](https://reader036.vdocuments.net/reader036/viewer/2022062422/56813c00550346895da55c5e/html5/thumbnails/1.jpg)
Eντολες Επαναληψης - Βροχοι (repetition and loops)• while(){}
• for(){}
• do{ }while()
• τελεστες postfix/prefix (++, --, ...)
![Page 2: E ντολες Επαναληψης - Βροχοι ( repetition and loops)](https://reader036.vdocuments.net/reader036/viewer/2022062422/56813c00550346895da55c5e/html5/thumbnails/2.jpg)
Δομες Ελεγχου
• Ενα προγραμμα αποτελειται απο– Ακολουθιες πχ {εντολη;εντολη;…}– Εκλογη πχ if(){}– Επαναληψη πχ while{}
![Page 3: E ντολες Επαναληψης - Βροχοι ( repetition and loops)](https://reader036.vdocuments.net/reader036/viewer/2022062422/56813c00550346895da55c5e/html5/thumbnails/3.jpg)
Χρηση Βροχων
• Για επαναληψη λειτουργικοτητας– μετρητης (counter)
• επαναλαβε εαν μετρητης μικροτερος(μεγαλυτερος) μια τιμης
– σημαια (sentinel, flag)• επανελαβε εαν διαφορο του EOF, -1 κτλ
– συνθηκη/ελεγχος (conditional)• επαναλαβε εφοσον συνθηκη δεν ισχυει
– συνδυασμος (με χρηση λογικων τελεστων)
![Page 4: E ντολες Επαναληψης - Βροχοι ( repetition and loops)](https://reader036.vdocuments.net/reader036/viewer/2022062422/56813c00550346895da55c5e/html5/thumbnails/4.jpg)
while
• Συνταξη: while (εκφραση)
εντολη;
while (εκφραση){
εντολη;
…..
}
![Page 5: E ντολες Επαναληψης - Βροχοι ( repetition and loops)](https://reader036.vdocuments.net/reader036/viewer/2022062422/56813c00550346895da55c5e/html5/thumbnails/5.jpg)
while (συν)
• Σημασια: οσον η τιμη της εκφρασης (συνθηκης) ειναι διαφορη του μηδεν εκτελα τις εξαρτομενες εντολες αλλιως συνεχισε με τις εντολες που ακουλουθουν το while block
![Page 6: E ντολες Επαναληψης - Βροχοι ( repetition and loops)](https://reader036.vdocuments.net/reader036/viewer/2022062422/56813c00550346895da55c5e/html5/thumbnails/6.jpg)
while με μετρητη
int x;
x=0;
while(x<5){
printf(“%d\n”,x);
++x;
}
αρχικοποιησησυνθηκη επαναληψης
μεταβλητη που χρησιμοπoιειται γιαελεγχο επαναληψης(control/induction variable)
ενημερωσηςεπομενο βημα
![Page 7: E ντολες Επαναληψης - Βροχοι ( repetition and loops)](https://reader036.vdocuments.net/reader036/viewer/2022062422/56813c00550346895da55c5e/html5/thumbnails/7.jpg)
Tελεστες
• προ-σημειογραφική (prefix)++i; <==> i = i + 1;
--i; <==> i = i - 1;
• μετα-σημειογραφική(postfix)i++; <==> i = i + 1;
i--; <==> i = i - 1;
![Page 8: E ντολες Επαναληψης - Βροχοι ( repetition and loops)](https://reader036.vdocuments.net/reader036/viewer/2022062422/56813c00550346895da55c5e/html5/thumbnails/8.jpg)
Prefix vs Postfix
i = 5;
x = ++i;
y = i++;
• x ειναι 6, y ειναι 6 και το i ειναι 7
• Χρησιμοποιητε -- ++ σε απλες εκφρασεις
![Page 9: E ντολες Επαναληψης - Βροχοι ( repetition and loops)](https://reader036.vdocuments.net/reader036/viewer/2022062422/56813c00550346895da55c5e/html5/thumbnails/9.jpg)
Συνθετοι Τελεστες Αναθεσης
• i+=k;<==> i = i + k;
• i*=k; <==> i = i * k;
• iop= k; <==> i = i op (k);
![Page 10: E ντολες Επαναληψης - Βροχοι ( repetition and loops)](https://reader036.vdocuments.net/reader036/viewer/2022062422/56813c00550346895da55c5e/html5/thumbnails/10.jpg)
while με σημαια
Aθροισμα σειρας απροσδιοριστου μεγεθους που τερματιζεται με 0
int number, sum=0; scanf(“%d”,&number); /* diabase prwto stoixeio */while(number != 0){ /*sinthiki epanalipsis*/
sum +=number; /*sum=sum+number */scanf(“%d”,&number); /* διαβασε επομενο στοιχειο */
}printf(“To athroisma tis seiras einai %d\n”,sum);
![Page 11: E ντολες Επαναληψης - Βροχοι ( repetition and loops)](https://reader036.vdocuments.net/reader036/viewer/2022062422/56813c00550346895da55c5e/html5/thumbnails/11.jpg)
while με συνθηκη
Διαβασμα τιμης μεχρι να ικανοποιηθει συνθηκη (αργοτερα do-while)
int number; printf(“Enter a possitive value: ”);scanf(“%d”,&number); /* diabase timh */while(number<= 0){ /*sinthiki epanalipsis*/
printf(“Enter a possitive value: ”);scanf(“%d”,&number); /* διαβασε timi xana */
}
![Page 12: E ντολες Επαναληψης - Βροχοι ( repetition and loops)](https://reader036.vdocuments.net/reader036/viewer/2022062422/56813c00550346895da55c5e/html5/thumbnails/12.jpg)
Nested while (φωλιασμενα)
int i=0,j;while(i<5){
j=0;while(j<5){
printf(“%d-%d”,i,j);++j;
}printf(“\n”);++i;
}
0-0 0-1 0-2 0-3 0-41-0 1-1 1-2 1-3 1-42-0 2-1 2-2 2-3 2-43-0 3-1 3-2 3-3 3-44-0 4-1 4-2 4-3 4-4
![Page 13: E ντολες Επαναληψης - Βροχοι ( repetition and loops)](https://reader036.vdocuments.net/reader036/viewer/2022062422/56813c00550346895da55c5e/html5/thumbnails/13.jpg)
Nested while (φωλιασμενα)
int i=0,j;while(i<5){
j=0;while(j<=i){
printf(“%d-%d”,i,j);++j;
}printf(“\n”);++i;
}
0-01-0 1-12-0 2-1 2-23-0 3-1 3-2 3-34-0 4-1 4-2 4-3 4-4
![Page 14: E ντολες Επαναληψης - Βροχοι ( repetition and loops)](https://reader036.vdocuments.net/reader036/viewer/2022062422/56813c00550346895da55c5e/html5/thumbnails/14.jpg)
Συνταξη for
for(αρχικοποιηση; συνθηκη επαναληψης ; ενημερωση)
εντολη;
for(αρχικοποιηση; συνθηκη επαναληψης; ενημερωση){
εντολη;
εντολη;
…..
}
![Page 15: E ντολες Επαναληψης - Βροχοι ( repetition and loops)](https://reader036.vdocuments.net/reader036/viewer/2022062422/56813c00550346895da55c5e/html5/thumbnails/15.jpg)
Σημασια for
for(Αρχικοποιηση; Συνθηκη επαναληψης ; Ενημερωση)
εντολη;Αρχικοποιηση
Συνθηκη
εντολη
Ενημερωση
Συνθηκη
εντολη
Ενημερωση
Συνθηκη
![Page 16: E ντολες Επαναληψης - Βροχοι ( repetition and loops)](https://reader036.vdocuments.net/reader036/viewer/2022062422/56813c00550346895da55c5e/html5/thumbnails/16.jpg)
Παραδειγμα με for
int x;
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
![Page 17: E ντολες Επαναληψης - Βροχοι ( repetition and loops)](https://reader036.vdocuments.net/reader036/viewer/2022062422/56813c00550346895da55c5e/html5/thumbnails/17.jpg)
Ομοιοτητα for με while
int x;
x=0;
while(x<5){
printf(“%d\n”,x);
++x;
}
int x;
for(x=0;x<5;++x){
printf(“%d\n”,x);
}
Οποιoδηποτε for μπορει να γραφει με while και
οποιoδηποτε while με for
![Page 18: E ντολες Επαναληψης - Βροχοι ( repetition and loops)](https://reader036.vdocuments.net/reader036/viewer/2022062422/56813c00550346895da55c5e/html5/thumbnails/18.jpg)
Παραδειγμα
• Γραψετε ενα προγραμμα που υπολογιζει και τυπωνει την τιμη του ex βαση της ακολουθηςεκφρασης- n ειναι ο αριθμος ορων 1 + x/1! + x2/2! + x3/3! +…+ xn/n!
• Το προγραμμα διαβαζει τις τιμες x και n απο τον χρηστη.
• Νοte: x0/0! + x1/1! + x2/2! + x3/3! +…+ xn/n!
![Page 19: E ντολες Επαναληψης - Βροχοι ( repetition and loops)](https://reader036.vdocuments.net/reader036/viewer/2022062422/56813c00550346895da55c5e/html5/thumbnails/19.jpg)
Υπολογισμος
• Τι πρεπει να γινει?– Δημιουργια n+1 ορων (0 μεχρι n)– Aθροισμα των ορων
![Page 20: E ντολες Επαναληψης - Βροχοι ( repetition and loops)](https://reader036.vdocuments.net/reader036/viewer/2022062422/56813c00550346895da55c5e/html5/thumbnails/20.jpg)
exp
exp
exp
term(0,x)
+
+
+
float term(int n, float x)
term(1,x) term(2,x)term(3,x)
exp
![Page 21: E ντολες Επαναληψης - Βροχοι ( repetition and loops)](https://reader036.vdocuments.net/reader036/viewer/2022062422/56813c00550346895da55c5e/html5/thumbnails/21.jpg)
Δημιουργια Ορου ν
• Συναρτηση float term(n,x) επιστρεφει τον n ορο της σειρας για την τιμη x
![Page 22: E ντολες Επαναληψης - Βροχοι ( repetition and loops)](https://reader036.vdocuments.net/reader036/viewer/2022062422/56813c00550346895da55c5e/html5/thumbnails/22.jpg)
Υπολογισμος
float exp;int ith_term;
exp =0;ith_term = 0;while(ith_term <= n){
exp += term(ith_term,x);++ith_term;
}
![Page 23: E ντολες Επαναληψης - Βροχοι ( repetition and loops)](https://reader036.vdocuments.net/reader036/viewer/2022062422/56813c00550346895da55c5e/html5/thumbnails/23.jpg)
term(n,x) - xn/n!
• Πως πρεπει να γινει?– υπολογισμος δυναμης– υπολογισμος παραγωντικου
• Χρησιμες Συναρτησεις– xn float pow(x,n);– n! int factorial(n);
n! = n n-1 … 3 2, 0!=1!=1
Οριζεται στην math.h
Need user definition
![Page 24: E ντολες Επαναληψης - Βροχοι ( repetition and loops)](https://reader036.vdocuments.net/reader036/viewer/2022062422/56813c00550346895da55c5e/html5/thumbnails/24.jpg)
floatterm (int n, float x){
return pow(x,n)/factorial(n);}
![Page 25: E ντολες Επαναληψης - Βροχοι ( repetition and loops)](https://reader036.vdocuments.net/reader036/viewer/2022062422/56813c00550346895da55c5e/html5/thumbnails/25.jpg)
factorial
factorial
factorial
factorial
1 2 3 4
*
*
*
float factorial(int n)
![Page 26: E ντολες Επαναληψης - Βροχοι ( repetition and loops)](https://reader036.vdocuments.net/reader036/viewer/2022062422/56813c00550346895da55c5e/html5/thumbnails/26.jpg)
floatfactorial (int n){
int i;float f;
f=1;i=2; /* if i=0 or 1 return 1*/while(i<=n){
f *= i;++i;
}return f;
}
![Page 27: E ντολες Επαναληψης - Βροχοι ( repetition and loops)](https://reader036.vdocuments.net/reader036/viewer/2022062422/56813c00550346895da55c5e/html5/thumbnails/27.jpg)
Trace Table for Factorial
• Για n: 0,1,2 … 5
![Page 28: E ντολες Επαναληψης - Βροχοι ( repetition and loops)](https://reader036.vdocuments.net/reader036/viewer/2022062422/56813c00550346895da55c5e/html5/thumbnails/28.jpg)
floatfactorial (int n){
int i;float f;
/* if i=0 or 1 return 1*/for(f=1,i=2;i<=n;++i){
f *= i;}return f;
}
![Page 29: E ντολες Επαναληψης - Βροχοι ( repetition and loops)](https://reader036.vdocuments.net/reader036/viewer/2022062422/56813c00550346895da55c5e/html5/thumbnails/29.jpg)
floatfactorial (int n){
int i;float f;
/* if i=0 or 1 return 1*/for(f=1,i=2;i<=n;f*=i,++i);return f;
}
![Page 30: E ντολες Επαναληψης - Βροχοι ( repetition and loops)](https://reader036.vdocuments.net/reader036/viewer/2022062422/56813c00550346895da55c5e/html5/thumbnails/30.jpg)
do-while συνταξη
do
εντολη;
while(συνθηκη);
do{
εντολη;
εντολη;
}while(συνθηκη);
![Page 31: E ντολες Επαναληψης - Βροχοι ( repetition and loops)](https://reader036.vdocuments.net/reader036/viewer/2022062422/56813c00550346895da55c5e/html5/thumbnails/31.jpg)
do-while σημασια
• Εκτελα το σωμα
• Εφοσον η συνθηκη ισχυει επανελαβε την εκτελεση των εντολων στο σωμα του βροχου
• for και while το σωμα μπορει να μην εκτελεστει, ενω στο do-while εκτελειται τουλαχιστο μια φορα
![Page 32: E ντολες Επαναληψης - Βροχοι ( repetition and loops)](https://reader036.vdocuments.net/reader036/viewer/2022062422/56813c00550346895da55c5e/html5/thumbnails/32.jpg)
Παραδειγμα
int a,b;
do{
printf(Enter values for A and B where A < B: );
scanf(%d%d, &a, &b);
} while (a >= b);
![Page 33: E ντολες Επαναληψης - Βροχοι ( repetition and loops)](https://reader036.vdocuments.net/reader036/viewer/2022062422/56813c00550346895da55c5e/html5/thumbnails/33.jpg)
Παραδειγμα
int number;
printf(“Enter a possitive value: ”);
scanf(“%d”,&number);
while(number<= 0){
printf(“Enter a possitive value: ”);
scanf(“%d”,&number);
}
int number;
do{
printf(“Enter a possitive value: ”);
scanf(“%d”,&number);
while(number<= 0);
![Page 34: E ντολες Επαναληψης - Βροχοι ( repetition and loops)](https://reader036.vdocuments.net/reader036/viewer/2022062422/56813c00550346895da55c5e/html5/thumbnails/34.jpg)
Απειροι Βροχοι
– while(1){}– while(x=1){}– for(;i=1;){}– do{}while(x=13);– Μη ή λανθασμενη ενημερωση της μεταβλητης
ελεγχουint i = 0, n= 10;
while(i<n){
printf(“%d ”,i);
}
![Page 35: E ντολες Επαναληψης - Βροχοι ( repetition and loops)](https://reader036.vdocuments.net/reader036/viewer/2022062422/56813c00550346895da55c5e/html5/thumbnails/35.jpg)
Κοινα Λαθη
• Σύγχυση ανάμεσα στις εντολές if και while:• if (συνθήκη) εντολή
• while (συνθήκη) εντολή
• while, do-while: παράλειψη παρενθέσεων γύρω από τις συνθήκες
• for: παράλειψη του χαρακτήρα ; • Σωμα συναρτησης: while(x<0)
count +=x;
++x;
printf(“%d\n”,x);
![Page 36: E ντολες Επαναληψης - Βροχοι ( repetition and loops)](https://reader036.vdocuments.net/reader036/viewer/2022062422/56813c00550346895da55c5e/html5/thumbnails/36.jpg)
Κοινα Λαθη
• Συνθετοι τελεστες: a*=b+c; σημαίνει a = a*(b + c); όχι a = a * b + c;
• Χρήση ++, , και σύνθετης ανάθεσης (+= κτλ) σε σύνθετες εκφράσεις
• Χρήση του τελεστή != με τιμες τύπου float και double πρέπει να αποφεύγεται, π.χ.– while (balance != 0.0){}
![Page 37: E ντολες Επαναληψης - Βροχοι ( repetition and loops)](https://reader036.vdocuments.net/reader036/viewer/2022062422/56813c00550346895da55c5e/html5/thumbnails/37.jpg)
getchar/putchar
• Συναρτησεις εισοδου/εξοδου χαρακτηρων
• Διεπαφη– int getchar(), διαβασε τον επομενο χαρακτηρα
απο την εισοδο, κινησε δρομεα διαβασματος στον επομενο χαρακτηρα (διαβαζει χαρακτηρες μιας γραμμης μετα το enter)
– void putchar(int), τυπωσε χαρακτηρα στην μοναδα εξοδου
![Page 38: E ντολες Επαναληψης - Βροχοι ( repetition and loops)](https://reader036.vdocuments.net/reader036/viewer/2022062422/56813c00550346895da55c5e/html5/thumbnails/38.jpg)
Παράδειγμα
• Γραψετε ενα προγραμμα που μετραει τον αριθμο χαρακτηρων σε μια απροσδιοριστου μεγεθους σειρα χαρακτηρων. Η σειρα εισαγεται απο μοναδα εισοδου και τερματιζεται με την τιμη EOF.
• π.χ. εισοδου/εξοδου: Enter series: asdfre
^Z το μεγεθος της σειρας ειναι 7
![Page 39: E ντολες Επαναληψης - Βροχοι ( repetition and loops)](https://reader036.vdocuments.net/reader036/viewer/2022062422/56813c00550346895da55c5e/html5/thumbnails/39.jpg)
Χρήσιμες Λειτουργικοτητες
• Tι πρεπει να γινει– διαβασμα μια σειρας χαρακτηρων
απροσδιοριστου μεγεθους – υπολογισμος μεγεθους σειρας
• Χρήσιμες Λειτουργικοτητες – Πως διαβαζουμε μια σειρα χαρακτηρων που
τερματιζεται με καθορισμενη τιμη? – Πως υπολογιζουμε το μεγεθος μιας σειρας?
![Page 40: E ντολες Επαναληψης - Βροχοι ( repetition and loops)](https://reader036.vdocuments.net/reader036/viewer/2022062422/56813c00550346895da55c5e/html5/thumbnails/40.jpg)
Aνάγνωση σειρας απροσδιοριστου μεγεθους χαρακτηρων
• Απαιτει εντολή επαναληψης (βροχος)
• Δομη αναλογη με απροσδιοριστη μεγεθους σειρα αριθμων
/*διαβασε το πρωτο στοιχειο*/while(/*το στοιχειο δεν σημαδοτει τελος*/){
/* διαβασε επομενο στοιχειο */
}
![Page 41: E ντολες Επαναληψης - Βροχοι ( repetition and loops)](https://reader036.vdocuments.net/reader036/viewer/2022062422/56813c00550346895da55c5e/html5/thumbnails/41.jpg)
Διαβασμα σειρας χαρακτηρων
int c; c = getchar(); /* diabase prwto xaraktira */while(c != EOF){ /* oxi telos tou file */
c = getchar(); /* διαβασε επομενο xaraktira */
}
![Page 42: E ντολες Επαναληψης - Βροχοι ( repetition and loops)](https://reader036.vdocuments.net/reader036/viewer/2022062422/56813c00550346895da55c5e/html5/thumbnails/42.jpg)
echo σειρας χαρακτηρων
int c; c = getchar(); /* diabase prwto xaraktira */while(c != EOF){
putchar(c); /* typwse xaraktira */c = getchar(); /* διαβασε επομενο xaraktira */
}
![Page 43: E ντολες Επαναληψης - Βροχοι ( repetition and loops)](https://reader036.vdocuments.net/reader036/viewer/2022062422/56813c00550346895da55c5e/html5/thumbnails/43.jpg)
Μεγεθος Σειρας Χαρακτηρων
int c; int size;size = 0; /* arxikopoihsh */c = getchar(); /* diabase prwto xaraktira */while(c != EOF){
size = size + 1; /* metra akomi ena xaraktira */c = getchar(); /* διαβασε επομενο xaraktira */
}
![Page 44: E ντολες Επαναληψης - Βροχοι ( repetition and loops)](https://reader036.vdocuments.net/reader036/viewer/2022062422/56813c00550346895da55c5e/html5/thumbnails/44.jpg)
Απλοποίηση???
int c; int size;size = 0; /* arxikopoihsh */while((c = getchar() )!= EOF){/* diabase kai elegxe xaraktira */
size = size + 1; /* metra akomi ena xaraktira */}
![Page 45: E ντολες Επαναληψης - Βροχοι ( repetition and loops)](https://reader036.vdocuments.net/reader036/viewer/2022062422/56813c00550346895da55c5e/html5/thumbnails/45.jpg)
Μετρημα Συγκεκριμενου Γεγονοτος
• Ποσες φορες παρουσιαστηκε ο χαρακτηρας Α?
• Tι πρεπει να γινει
– διαβασμα μια σειρας χαρακτηρων απροσδιοριστου μεγεθους
– ελεγχος για χαρακτηρα Α• αυξησε μετρητη καθε φορα
![Page 46: E ντολες Επαναληψης - Βροχοι ( repetition and loops)](https://reader036.vdocuments.net/reader036/viewer/2022062422/56813c00550346895da55c5e/html5/thumbnails/46.jpg)
Μετρηση Γεγονοτος
int c; int count;count = 0; /* arxikopoihsh */while((c = getchar() )!= EOF){ /* diabase xaraktira */
if (c==‘A’)++count; /* metra akomi ena xaraktira */
}
![Page 47: E ντολες Επαναληψης - Βροχοι ( repetition and loops)](https://reader036.vdocuments.net/reader036/viewer/2022062422/56813c00550346895da55c5e/html5/thumbnails/47.jpg)
Μετρηση Συγκεκριμενου Γεγονοτος
• Ποσες γραμμες υπηρχουν στα δεδομενα?
• Tι πρεπει να γινει
– διαβασμα μια σειρας χαρακτηρων απροσδιοριστου μεγεθους
– ελεγχος για χαρακτηρα επομενη γραμμη??• αυξησε μετρητη καθε φορα
![Page 48: E ντολες Επαναληψης - Βροχοι ( repetition and loops)](https://reader036.vdocuments.net/reader036/viewer/2022062422/56813c00550346895da55c5e/html5/thumbnails/48.jpg)
Μετρηση Γεγονοτος
int c; int count;count = 0; /* arxikopoihsh */while((c = getchar() )!= EOF){ /* diabase xaraktira */
if (c==‘\n’) /* elegxe gia epomeni grammi */++count; /* metra akomi ena xaraktira */
}