Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

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

Παρόμοιες παρουσιάσεις


Παρουσίαση με θέμα: "Eντολες Επαναληψης - Βροχοι (repetition and loops) while(){} for(){} do{ }while() τελεστες postfix/prefix (++, --,...)"— Μεταγράφημα παρουσίασης:

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

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

3 Χρηση Βροχων Για επαναληψη λειτουργικοτητας –μετρητης (counter) επαναλαβε εαν μετρητης μικροτερος(μεγαλυτερος) μια τιμης –σημαια (sentinel, flag) επανελαβε εαν διαφορο του EOF, -1 κτλ –συνθηκη/ελεγχος(conditional) επαναλαβε εφοσον συνθηκη δεν ισχυει –συνδυασμος (με χρηση λογικων τελεστων)

4 while Συνταξη: while (εκφραση) εντολη; while (εκφραση){ εντολη; ….. }

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

6 while με μετρητη int x; x=0; while(x<5){ printf(“%d\n”,x); ++x; } αρχικοποιηση συνθηκη επαναληψης μεταβλητη που χρησιμοπoιειται για ελεγχο επαναληψης(control/ induction variable) ενημερωσης επομενο βημα

7 Tελεστες προ-σημειογραφική (prefix) ++i; i = i + 1; --i; i = i - 1; μετα-σημειογραφική(postfix) i++; i = i + 1; i--; i = i - 1;

8 Prefix vs Postfix i = 5; x = ++i; y = i++; x ειναι 6, y ειναι 6 και το i ειναι 7 Χρησιμοποιητε σε απλες εκφρασεις

9 Συνθετοι Τελεστες Αναθεσης i+=k; i = i + k; i*=k; i = i * k; iop= k; i = i op (k);

10 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);

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

12 Nested while (φωλιασμενα) int i=0,j; while(i<5){ j=0; while(j<5){ printf(“%d-%d”,i,j); ++j; } printf(“\n”); ++i; }

13 Nested while (φωλιασμενα) int i=0,j; while(i<5){ j=0; while(j<=i){ printf(“%d-%d”,i,j); ++j; } printf(“\n”); ++i; }

14 Συνταξη for for(αρχικοποιηση; συνθηκη επαναληψης ; ενημερωση) εντολη; for(αρχικοποιηση; συνθηκη επαναληψης; ενημερωση){ εντολη; ….. }

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

16 Παραδειγμα με for int x; for(x=0;x<5;++x){ printf(“%d\n”,x); } x x<5 εξοδος

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

18 Παραδειγμα Γραψετε ενα προγραμμα που υπολογιζει και τυπωνει την τιμη του e x βαση της ακολουθηςεκφρασης- n ειναι ο αριθμος ορων 1 + x/1! + x 2 /2! + x 3 /3! +…+ x n /n! Το προγραμμα διαβαζει τις τιμες x και n απο τον χρηστη. Νοte: x 0 /0! + x 1 /1! + x 2 /2! + x 3 /3! +…+ x n /n!

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

20 exp term(0,x) float term(int n, float x) term(1,x)term(2,x)term(3,x) exp

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

22 Υπολογισμος float exp; int ith_term; exp =0; ith_term = 0; while(ith_term <= n){ exp += term(ith_term,x); ++ith_term; }

23 term(n,x) - x n /n! Πως πρεπει να γινει? –υπολογισμος δυναμης –υπολογισμος παραγωντικου Χρησιμες Συναρτησεις –x n float pow(x,n); –n! int factorial(n); n! = n n-1 … 3 2, 0!=1!=1 Οριζεται στην math.h Need user definition

24 float term (int n, float x) { return pow(x,n)/factorial(n); }

25 factorial * * * float factorial(int n)

26 float factorial (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; }

27 Trace Table for Factorial Για n: 0,1,2 … 5

28 float factorial (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; }

29 float factorial (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; }

30 do-while συνταξη do εντολη; while(συνθηκη); do{ εντολη; }while(συνθηκη);

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

32 Παραδειγμα int a,b; do{ printf(  Enter values for A and B where A < B:  ); scanf(  %d%d , &a, &b); } while (a >= b);

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

34 Απειροι Βροχοι –while(1){} –while(x=1){} –for(;i=1;){} –do{}while(x=13); –Μη ή λανθασμενη ενημερωση της μεταβλητης ελεγχου int i = 0, n= 10; while(i

35 Κοινα Λαθη Σύγχυση ανάμεσα στις εντολές if και while: if (συνθήκη) εντολή while (συνθήκη) εντολή while, do-while: παράλειψη παρενθέσεων γύρω από τις συνθήκες for: παράλειψη του χαρακτήρα ; Σωμα συναρτησης: while(x<0) count +=x; ++x; printf(“%d\n”,x);

36 Κοινα Λαθη Συνθετοι τελεστες:a*=b+c;σημαίνει a = a*(b + c); όχι a = a * b + c; Χρήση ++, , και σύνθετης ανάθεσης (+= κτλ) σε σύνθετες εκφράσεις Χρήση του τελεστή != με τιμες τύπου float και double πρέπει να αποφεύγεται, π.χ. –while (balance != 0.0){}

37 getchar/putchar Συναρτησεις εισοδου/εξοδου χαρακτηρων Διεπαφη –int getchar(), διαβασε τον επομενο χαρακτηρα απο την εισοδο, κινησε δρομεα διαβασματος στον επομενο χαρακτηρα (διαβαζει χαρακτηρες μιας γραμμης μετα το enter) –void putchar(int), τυπωσε χαρακτηρα στην μοναδα εξοδου

38 Παράδειγμα Γραψετε ενα προγραμμα που μετραει τον αριθμο χαρακτηρων σε μια απροσδιοριστου μεγεθους σειρα χαρακτηρων. Η σειρα εισαγεται απο μοναδα εισοδου και τερματιζεται με την τιμη EOF. π.χ. εισοδου/εξοδου: Enter series: asdfre ^Z το μεγεθος της σειρας ειναι 7

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

40 Aνάγνωση σειρας απροσδιοριστου μεγεθους χαρακτηρων Απαιτει εντολή επαναληψης (βροχος) Δομη αναλογη με απροσδιοριστη μεγεθους σειρα αριθμων /*διαβασε το πρωτο στοιχειο*/ while(/*το στοιχειο δεν σημαδοτει τελος*/){ /* διαβασε επομενο στοιχειο */ }

41 Διαβασμα σειρας χαρακτηρων int c; c = getchar(); /* diabase prwto xaraktira */ while(c != EOF){/* oxi telos tou file */ c = getchar(); /* διαβασε επομενο xaraktira */ }

42 echo σειρας χαρακτηρων int c; c = getchar(); /* diabase prwto xaraktira */ while(c != EOF){ putchar(c); /* typwse xaraktira */ c = getchar(); /* διαβασε επομενο xaraktira */ }

43 Μεγεθος Σειρας Χαρακτηρων 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 */ }

44 Απλοποίηση??? int c; int size; size = 0; /* arxikopoihsh */ while((c = getchar() )!= EOF){/* diabase kai elegxe xaraktira */ size = size + 1; /* metra akomi ena xaraktira */ }

45 Μετρημα Συγκεκριμενου Γεγονοτος Ποσες φορες παρουσιαστηκε ο χαρακτηρας Α? Tι πρεπει να γινει –διαβασμα μια σειρας χαρακτηρων απροσδιοριστου μεγεθους –ελεγχος για χαρακτηρα Α αυξησε μετρητη καθε φορα

46 Μετρηση Γεγονοτος int c; int count; count = 0; /* arxikopoihsh */ while((c = getchar() )!= EOF){/* diabase xaraktira */ if (c==‘A’) ++count; /* metra akomi ena xaraktira */ }

47 Μετρηση Συγκεκριμενου Γεγονοτος Ποσες γραμμες υπηρχουν στα δεδομενα? Tι πρεπει να γινει –διαβασμα μια σειρας χαρακτηρων απροσδιοριστου μεγεθους –ελεγχος για χαρακτηρα επομενη γραμμη?? αυξησε μετρητη καθε φορα

48 Μετρηση Γεγονοτος 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 */ }


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

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google