Κατέβασμα παρουσίασης
Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε
ΔημοσίευσεGeorgia Panagos Τροποποιήθηκε πριν 9 χρόνια
1
Eντολες Επαναληψης - Βροχοι (repetition and loops)
while(){} for(){} do{ }while() τελεστες postfix/prefix (++, --, ...) και συνθετοι τελεστες break (εξοδος απο βροχο) break και continue βιβλιοθηκη
2
Δομες Ελεγχου Ενα προγραμμα αποτελειται απο
Ακολουθιες πχ {εντολη;εντολη;…} Εκλογη πχ if(){} Επαναληψη πχ while{}
3
Χρηση Βροχων Για επαναληψη λειτουργικοτητας μετρητης (counter)
επαναλαβε εαν μετρητης μικροτερος(μεγαλυτερος) μια τιμης σημαια (sentinel, flag) επανελαβε εαν διαφορο του EOF, -1 κτλ συνθηκη/ελεγχος (conditional) επαναλαβε εφοσον συνθηκη δεν ισχυει συνδυασμος (με χρηση λογικων τελεστων)
4
while Συνταξη: while (εκφραση) εντολη; while (εκφραση){ ….. }
5
while (συν) Σημασια: οσον η τιμη της εκφρασης (συνθηκης) ειναι διαφορη του μηδεν εκτελα τις εξαρτομενες εντολες αλλιως συνεχισε με τις εντολες που ακουλουθουν το while block
6
while με μετρητη int x; μεταβλητη που χρησιμοπoιειται για
ελεγχο επαναληψης(control/ induction variable) int x; x=0; while(x<5){ printf(“%d\n”,x); ++x; } αρχικοποιηση συνθηκη επαναληψης ενημερωσης επομενο βημα
7
Tελεστες προ-σημειογραφική (prefix) μετα-σημειογραφική(postfix)
++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
Shift/Bitwise Operators (appendix C)
Δυαδικοι: & | ^ (and, or, exclusive-or) 0x0ffff & 0x0ffa0003 0x3 Μοναδιαιος: ~ (complement) ~ 0x0000ffff 0xffff0000 Shift Δυαδικοι: << >> (shift left, shift right) 5 >> 1 (101) 2 (10) 6<<2 (110) 24 (11000)
11
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);
12
while με συνθηκη Διαβασμα τιμης μεχρι να ικανοποιηθει συνθηκη
(αργοτερα do-while) int number; printf(“Enter a possitive value: ”); scanf(“%d”,&number); /* diabase timh */ while(number<= 0){ /*sinthiki epanalipsis*/ scanf(“%d”,&number); /* διαβασε timi xana */ }
13
Nested while (φωλιασμενα)
int i=0,j; while(i<5){ j=0; while(j<5){ printf(“%d-%d”,i,j); ++j; } printf(“\n”); ++i;
14
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
15
Συνταξη for for(αρχικοποιηση; συνθηκη επαναληψης ; ενημερωση) εντολη;
….. }
16
Σημασια for for(Αρχικοποιηση; Συνθηκη επαναληψης ; Ενημερωση) εντολη;
17
Παραδειγμα με for x x<5 εξοδος 0 1 0 1 1 1 2 1 2 3 1 3 4 1 4 5 0
int x; for(x=0;x<5;++x){ printf(“%d\n”,x); } x x<5 εξοδος
18
Ομοιοτητα for με while int x;
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
19
Παραδειγμα Γραψετε ενα προγραμμα που υπολογιζει και τυπωνει την τιμη του ex βαση της ακολουθηςεκφρασης- n ειναι ο αριθμος ορων 1 + x/1! + x2/2! + x3/3! +…+ xn/n! Το προγραμμα διαβαζει τις τιμες x και n απο τον χρηστη. Νοte: x0/0! + x1/1! + x2/2! + x3/3! +…+ xn/n!
20
Υπολογισμος Τι πρεπει να γινει? Δημιουργια n+1 ορων (0 μεχρι n)
Aθροισμα των ορων
21
float term(int n, float x)
term(0,x) term(1,x) term(2,x) term(3,x) exp + exp + exp + exp float term(int n, float x)
22
Δημιουργια Ορου ν Συναρτηση float term(n,x) επιστρεφει τον n ορο της σειρας για την τιμη x
23
Υπολογισμος float exp; int ith_term; exp =0; ith_term = 0;
while(ith_term <= n){ exp += term(ith_term,x); ++ith_term; }
24
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
25
float term (int n, float x) { return pow(x,n)/factorial(n); }
26
float factorial(int n)
3 4 1 2 factorial * factorial * factorial * factorial float factorial(int n)
27
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;
28
Trace Table for Factorial
Για n: 0,1,2 … 5
29
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;
30
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; }
31
do-while συνταξη do εντολη; while(συνθηκη); do{ εντολη;
32
do-while σημασια Εκτελα το σωμα
Εφοσον η συνθηκη ισχυει επανελαβε την εκτελεση των εντολων στο σωμα του βροχου for και while το σωμα μπορει να μην εκτελεστει, ενω στο do-while εκτελειται τουλαχιστο μια φορα
33
Παραδειγμα int a,b; do{ printf(Enter values for A and B where A < B: ); scanf(%d%d, &a, &b); } while (a >= b);
34
Παραδειγμα int number; int number; do{
printf(“Enter a possitive value: ”); scanf(“%d”,&number); while(number<= 0); int number; printf(“Enter a possitive value: ”); scanf(“%d”,&number); while(number<= 0){ }
35
Απειροι Βροχοι while(1){} while(x=1){} for(;i=1;){} do{}while(x=13);
Μη ή λανθασμενη ενημερωση της μεταβλητης ελεγχου int i = 0, n= 10; while(i<n){ printf(“%d ”,i); }
36
Κοινα Λαθη Σύγχυση ανάμεσα στις εντολές if και while:
while, do-while: παράλειψη παρενθέσεων γύρω από τις συνθήκες for: παράλειψη του χαρακτήρα ; Σωμα συναρτησης: while(x<0) count +=x; ++x; printf(“%d\n”,x);
37
Κοινα Λαθη Συνθετοι τελεστες: a*=b+c; σημαίνει a = a*(b + c); όχι a = a * b + c; Χρήση ++, , και σύνθετης ανάθεσης (+= κτλ) σε σύνθετες εκφράσεις Χρήση του τελεστή != με τιμες τύπου float και double πρέπει να αποφεύγεται, π.χ. while (balance != 0.0){}
38
Αριθμος Λεξεων Γραψετε ενα προγραμμα που διαβαζει ενα κειμενο απο την εισοδο και υπολογιζει και τυπωνει τον αριθμο λεξεων.
39
Αριθμος Λεξεων Τι πρεπει να γινει: Διαβασμα ακολουθιας χαρακτηρων
Μετρηση Γεγονοτος: Λεξης Τι ειναι λεξη:συνεχομενη σειρα χαρακτηρων Τα αλλα τι ειναι? ‘\n’, ‘\t’, ‘ ’ Μετασχηματισμος σε διαστημα ή χαρακτηρα Μετρουμε: μετακινηση απο ασπρο διαστημα σε λεξη (ή απο λεξη σε ασπρο διαστημα) Που ειμαστε προηγουμενως/τωρα:διαστημα ή λεξη-εννοια σημαίας (flag)
40
int main() { /* xρηση δυο σημαιων -πριν, τωρα (διαστημα η λεξη)*/ /* πριν = διαστημα --- αρχικοποιηση*/ /* διαβασε καθε χαρακτηρα απο εισοδο μεχρι ΕΟF καθε φορα επαναλαβε τα πιο κατω*/ /* που ειμαστε τωρα (λεξη ή διαστημα) */ /* εαν πριν σε διαστημα και τωρα σε λεξη τοτε μετρα λεξη*/ /*πριν παιρνει τιμη του τωρα */ return 0; }
41
/* convert stream returns WHITE_SPACE gia ‘\n’ ‘\t’ kai ‘ ’
gia oles tis alles periptwsis NON_WHITE_SPACE */ int main() { int c, nw; int where_before, where_now; /* simaies */ where_before = WHITE_SPACE; nw = 0; while((c=getchar()) != EOF){ where_now = convert_stream(c); if ( where_before == WHITE_SPACE && where_now == NON_WHITE_SPACE) nw = nw + 1; where_before = where_now; } printf(“The number of words in the input is %3d.\n”,nw); return 0;
42
break (προωρη εξοδος) while(count<n){ scanf(“%d”,&number);
if (number== -1) break; ++count; } printf(“%d %d\n”, count, n, number);
Παρόμοιες παρουσιάσεις
© 2024 SlidePlayer.gr Inc.
All rights reserved.