1 / 48

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

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

solana
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  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; } 0-0 0-1 0-2 0-3 0-4 1-0 1-1 1-2 1-3 1-4 2-0 2-1 2-2 2-3 2-4 3-0 3-1 3-2 3-3 3-4 4-0 4-1 4-2 4-3 4-4

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

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

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

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

  17. int x; x=0; while(x<5){ printf(“%d\n”,x); ++x; } int x; for(x=0;x<5;++x){ printf(“%d\n”,x); } Ομοιοτητα for με while Οποιoδηποτε for μπορει να γραφει με while και οποιoδηποτε while με for

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

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

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

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

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

  25. 2 3 4 * * * factorial 1 factorial factorial 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<n){ printf(“%d ”,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 */ }

More Related