e ντολες Επαναληψης - Βροχοι ( repetition and loops)

48
Eντολες Επαναληψης - Βροχοι (repetition and loops) • while(){} • for(){} • do{ }while() • τελεστες postfix/prefix (++, --, ...)

Upload: solana

Post on 06-Jan-2016

46 views

Category:

Documents


2 download

DESCRIPTION

E ντολες Επαναληψης - Βροχοι ( repetition and loops). while(){} for(){} do{ }while() τελεστες postfix/prefix (++, --, ...). Δομες Ελεγχου. Ενα προγραμμα αποτελειται απο Ακολουθιες πχ {εντολη;εντολη;…} Εκλογη πχ if(){} Επαναληψη πχ while{}. Χρηση Βροχων. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: E ντολες Επαναληψης - Βροχοι ( repetition and loops)

Eντολες Επαναληψης - Βροχοι (repetition and loops)• while(){}

• for(){}

• do{ }while()

• τελεστες postfix/prefix (++, --, ...)

Page 2: E ντολες Επαναληψης - Βροχοι ( repetition and loops)

Δομες Ελεγχου

• Ενα προγραμμα αποτελειται απο– Ακολουθιες πχ {εντολη;εντολη;…}– Εκλογη πχ if(){}– Επαναληψη πχ while{}

Page 3: E ντολες Επαναληψης - Βροχοι ( repetition and loops)

Χρηση Βροχων

• Για επαναληψη λειτουργικοτητας– μετρητης (counter)

• επαναλαβε εαν μετρητης μικροτερος(μεγαλυτερος) μια τιμης

– σημαια (sentinel, flag)• επανελαβε εαν διαφορο του EOF, -1 κτλ

– συνθηκη/ελεγχος (conditional)• επαναλαβε εφοσον συνθηκη δεν ισχυει

– συνδυασμος (με χρηση λογικων τελεστων)

Page 4: E ντολες Επαναληψης - Βροχοι ( repetition and loops)

while

• Συνταξη: while (εκφραση)

εντολη;

while (εκφραση){

εντολη;

…..

}

Page 5: E ντολες Επαναληψης - Βροχοι ( repetition and loops)

while (συν)

• Σημασια: οσον η τιμη της εκφρασης (συνθηκης) ειναι διαφορη του μηδεν εκτελα τις εξαρτομενες εντολες αλλιως συνεχισε με τις εντολες που ακουλουθουν το while block

Page 6: E ντολες Επαναληψης - Βροχοι ( repetition and loops)

while με μετρητη

int x;

x=0;

while(x<5){

printf(“%d\n”,x);

++x;

}

αρχικοποιησησυνθηκη επαναληψης

μεταβλητη που χρησιμοπoιειται γιαελεγχο επαναληψης(control/induction variable)

ενημερωσηςεπομενο βημα

Page 7: E ντολες Επαναληψης - Βροχοι ( repetition and loops)

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)

Prefix vs Postfix

i = 5;

x = ++i;

y = i++;

• x ειναι 6, y ειναι 6 και το i ειναι 7

• Χρησιμοποιητε -- ++ σε απλες εκφρασεις

Page 9: E ντολες Επαναληψης - Βροχοι ( repetition and loops)

Συνθετοι Τελεστες Αναθεσης

• i+=k;<==> i = i + k;

• i*=k; <==> i = i * k;

• iop= k; <==> i = i op (k);

Page 10: E ντολες Επαναληψης - Βροχοι ( repetition and loops)

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)

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)

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)

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)

Συνταξη for

for(αρχικοποιηση; συνθηκη επαναληψης ; ενημερωση)

εντολη;

for(αρχικοποιηση; συνθηκη επαναληψης; ενημερωση){

εντολη;

εντολη;

…..

}

Page 15: E ντολες Επαναληψης - Βροχοι ( repetition and loops)

Σημασια for

for(Αρχικοποιηση; Συνθηκη επαναληψης ; Ενημερωση)

εντολη;Αρχικοποιηση

Συνθηκη

εντολη

Ενημερωση

Συνθηκη

εντολη

Ενημερωση

Συνθηκη

Page 16: E ντολες Επαναληψης - Βροχοι ( repetition and loops)

Παραδειγμα με 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)

Ομοιοτητα 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)

Παραδειγμα

• Γραψετε ενα προγραμμα που υπολογιζει και τυπωνει την τιμη του 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)

Υπολογισμος

• Τι πρεπει να γινει?– Δημιουργια n+1 ορων (0 μεχρι n)– Aθροισμα των ορων

Page 20: E ντολες Επαναληψης - Βροχοι ( repetition and loops)

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)

Δημιουργια Ορου ν

• Συναρτηση float term(n,x) επιστρεφει τον n ορο της σειρας για την τιμη x

Page 22: E ντολες Επαναληψης - Βροχοι ( repetition and loops)

Υπολογισμος

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)

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)

floatterm (int n, float x){

return pow(x,n)/factorial(n);}

Page 25: E ντολες Επαναληψης - Βροχοι ( repetition and loops)

factorial

factorial

factorial

factorial

1 2 3 4

*

*

*

float factorial(int n)

Page 26: E ντολες Επαναληψης - Βροχοι ( repetition and loops)

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)

Trace Table for Factorial

• Για n: 0,1,2 … 5

Page 28: E ντολες Επαναληψης - Βροχοι ( repetition and loops)

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)

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)

do-while συνταξη

do

εντολη;

while(συνθηκη);

do{

εντολη;

εντολη;

}while(συνθηκη);

Page 31: E ντολες Επαναληψης - Βροχοι ( repetition and loops)

do-while σημασια

• Εκτελα το σωμα

• Εφοσον η συνθηκη ισχυει επανελαβε την εκτελεση των εντολων στο σωμα του βροχου

• for και while το σωμα μπορει να μην εκτελεστει, ενω στο do-while εκτελειται τουλαχιστο μια φορα

Page 32: E ντολες Επαναληψης - Βροχοι ( repetition and loops)

Παραδειγμα

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)

Παραδειγμα

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)

Απειροι Βροχοι

– 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)

Κοινα Λαθη

• Σύγχυση ανάμεσα στις εντολές if και while:• if (συνθήκη) εντολή

• while (συνθήκη) εντολή

• while, do-while: παράλειψη παρενθέσεων γύρω από τις συνθήκες

• for: παράλειψη του χαρακτήρα ; • Σωμα συναρτησης: while(x<0)

count +=x;

++x;

printf(“%d\n”,x);

Page 36: E ντολες Επαναληψης - Βροχοι ( repetition and loops)

Κοινα Λαθη

• Συνθετοι τελεστες: a*=b+c; σημαίνει a = a*(b + c); όχι a = a * b + c;

• Χρήση ++, , και σύνθετης ανάθεσης (+= κτλ) σε σύνθετες εκφράσεις

• Χρήση του τελεστή != με τιμες τύπου float και double πρέπει να αποφεύγεται, π.χ.– while (balance != 0.0){}

Page 37: E ντολες Επαναληψης - Βροχοι ( repetition and loops)

getchar/putchar

• Συναρτησεις εισοδου/εξοδου χαρακτηρων

• Διεπαφη– int getchar(), διαβασε τον επομενο χαρακτηρα

απο την εισοδο, κινησε δρομεα διαβασματος στον επομενο χαρακτηρα (διαβαζει χαρακτηρες μιας γραμμης μετα το enter)

– void putchar(int), τυπωσε χαρακτηρα στην μοναδα εξοδου

Page 38: E ντολες Επαναληψης - Βροχοι ( repetition and loops)

Παράδειγμα

• Γραψετε ενα προγραμμα που μετραει τον αριθμο χαρακτηρων σε μια απροσδιοριστου μεγεθους σειρα χαρακτηρων. Η σειρα εισαγεται απο μοναδα εισοδου και τερματιζεται με την τιμη EOF.

• π.χ. εισοδου/εξοδου: Enter series: asdfre

^Z το μεγεθος της σειρας ειναι 7

Page 39: E ντολες Επαναληψης - Βροχοι ( repetition and loops)

Χρήσιμες Λειτουργικοτητες

• Tι πρεπει να γινει– διαβασμα μια σειρας χαρακτηρων

απροσδιοριστου μεγεθους – υπολογισμος μεγεθους σειρας

• Χρήσιμες Λειτουργικοτητες – Πως διαβαζουμε μια σειρα χαρακτηρων που

τερματιζεται με καθορισμενη τιμη? – Πως υπολογιζουμε το μεγεθος μιας σειρας?

Page 40: E ντολες Επαναληψης - Βροχοι ( repetition and loops)

Aνάγνωση σειρας απροσδιοριστου μεγεθους χαρακτηρων

• Απαιτει εντολή επαναληψης (βροχος)

• Δομη αναλογη με απροσδιοριστη μεγεθους σειρα αριθμων

/*διαβασε το πρωτο στοιχειο*/while(/*το στοιχειο δεν σημαδοτει τελος*/){

/* διαβασε επομενο στοιχειο */

}

Page 41: E ντολες Επαναληψης - Βροχοι ( repetition and loops)

Διαβασμα σειρας χαρακτηρων

int c; c = getchar(); /* diabase prwto xaraktira */while(c != EOF){ /* oxi telos tou file */

c = getchar(); /* διαβασε επομενο xaraktira */

}

Page 42: E ντολες Επαναληψης - Βροχοι ( repetition and loops)

echo σειρας χαρακτηρων

int c; c = getchar(); /* diabase prwto xaraktira */while(c != EOF){

putchar(c); /* typwse xaraktira */c = getchar(); /* διαβασε επομενο xaraktira */

}

Page 43: E ντολες Επαναληψης - Βροχοι ( repetition and loops)

Μεγεθος Σειρας Χαρακτηρων

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)

Απλοποίηση???

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)

Μετρημα Συγκεκριμενου Γεγονοτος

• Ποσες φορες παρουσιαστηκε ο χαρακτηρας Α?

• Tι πρεπει να γινει

– διαβασμα μια σειρας χαρακτηρων απροσδιοριστου μεγεθους

– ελεγχος για χαρακτηρα Α• αυξησε μετρητη καθε φορα

Page 46: E ντολες Επαναληψης - Βροχοι ( repetition and loops)

Μετρηση Γεγονοτος

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)

Μετρηση Συγκεκριμενου Γεγονοτος

• Ποσες γραμμες υπηρχουν στα δεδομενα?

• Tι πρεπει να γινει

– διαβασμα μια σειρας χαρακτηρων απροσδιοριστου μεγεθους

– ελεγχος για χαρακτηρα επομενη γραμμη??• αυξησε μετρητη καθε φορα

Page 48: E ντολες Επαναληψης - Βροχοι ( repetition and loops)

Μετρηση Γεγονοτος

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 */

}