ΜΑΘ3122/106 – Γλώσσα προγραμματισμού

30
ΜΑΘ3122/106 – Γλώσσα προγραμματισμού Ξενοφών Ζαμπούλης ΜΑΘ3122/106 – Γλώσσα προγραμματισμού Επανάληψη

description

ΜΑΘ3122/106 – Γλώσσα προγραμματισμού. Επανάληψη. Σειριακή εκτέλεση εντολών. Όλα τα προγράμματα «γράφονται» χρησιμοποιώντας 3 είδη εντολών:. Σειριακές εντολές : ( sequential – built in C). Εντολές διακλάδωσης : ( if, if/else, switch). Εντολές επανάληψης : ( for, while, do/while). - PowerPoint PPT Presentation

Transcript of ΜΑΘ3122/106 – Γλώσσα προγραμματισμού

Page 1: ΜΑΘ3122/106 – Γλώσσα προγραμματισμού

ΜΑΘ3122/106 – Γλώσσα προγραμματισμού Ξενοφών Ζαμπούλης

ΜΑΘ3122/106 – Γλώσσα προγραμματισμού

Επανάληψη

Page 2: ΜΑΘ3122/106 – Γλώσσα προγραμματισμού

ΜΑΘ3122/106 – Γλώσσα προγραμματισμού Ξενοφών Ζαμπούλης2

Σειριακή εκτέλεση εντολών

Όλα τα προγράμματα «γράφονται» χρησιμοποιώντας 3 είδη εντολών:

–Εντολές διακλάδωσης : (if, if/else, switch)

–Εντολές επανάληψης : ( for, while, do/while)

–Σειριακές εντολές : (sequential – built in C)

Page 3: ΜΑΘ3122/106 – Γλώσσα προγραμματισμού

ΜΑΘ3122/106 – Γλώσσα προγραμματισμού Ξενοφών Ζαμπούλης3

Επαναληπτικές Εντολές - while

Συντακτικό:while (έκφραση) {

εντολή}

Σημασιολογία: Υπολόγισε την τιμή της έκφραση Αν είναι αληθής (μη μηδενική) Εκτέλεσε την εντολή Πήγαινε στο βήμα 1 Διαφορετικά, εξήλθε του βρόχου

Page 4: ΜΑΘ3122/106 – Γλώσσα προγραμματισμού

ΜΑΘ3122/106 – Γλώσσα προγραμματισμού Ξενοφών Ζαμπούλης4

char c; while( (c=getchar( )) != '\0' )

putchar(c);

Page 5: ΜΑΘ3122/106 – Γλώσσα προγραμματισμού

ΜΑΘ3122/106 – Γλώσσα προγραμματισμού Ξενοφών Ζαμπούλης5

Increment and Decrement Operators int c,n;

n = 0; while( (c=getchar( )) != '\0' )

if( c == '\n' ) n++;

printf("%d lines\n", n);

Page 6: ΜΑΘ3122/106 – Γλώσσα προγραμματισμού

ΜΑΘ3122/106 – Γλώσσα προγραμματισμού Ξενοφών Ζαμπούλης6

getchar()

/* letter_count.c A program to count letters in input. */

main() {

int c ; int count = 0; while ( ( c = getchar() ) != EOF )

if ( ( c >= 'A' ) && ( c <= 'Z' ) || ( c >= 'a' ) && ( c <= 'z' ) )

count ++ ; printf( "%d letters\n" , count ) ;

}

Page 7: ΜΑΘ3122/106 – Γλώσσα προγραμματισμού

ΜΑΘ3122/106 – Γλώσσα προγραμματισμού Ξενοφών Ζαμπούλης7

Επαναληπτικές Εντολές - whileΠ.χ., υπολογισμός των τετραγώνων των πρώτων 10 φυσικών αριθμών και του

αθροίσματός τους

int c=1,sum=0;while (c<=10){

printf(“C is %d, square of C is %d\n”, c, c*c);sum += c*c;c++;

}printf(“1*1+2*2+3*3+…+10*10 = %d\n”,sum);

int c=11,sum = 0;while (--c){

sum += c*c;printf(“C is %d, square of C is %d\n”, c, c*c);

}printf(“1*1+2*2+3*3+…+10*10 = %d\n”,sum);

Page 8: ΜΑΘ3122/106 – Γλώσσα προγραμματισμού

ΜΑΘ3122/106 – Γλώσσα προγραμματισμού Ξενοφών Ζαμπούλης8

Επαναληπτικές Εντολές - whileΠ.χ., Υπολογισμός των τετραγώνων των πρώτων 10 φυσικών αριθμών που

είναι πολλαπλάσια του 7 ή του 9 και του αθροίσματός τους

int c=1,sum=0,pl = 0;while (pl<=10){

if (c % 7 == 0 || c % 9 == 0){

printf(“C is %d, square of C is %d\n”, c, c*c);sum += c*c;pl++;

}c++;

}printf(“Sum = %d\n”,sum);

Page 9: ΜΑΘ3122/106 – Γλώσσα προγραμματισμού

ΜΑΘ3122/106 – Γλώσσα προγραμματισμού Ξενοφών Ζαμπούλης9

Επαναληπτικές Εντολές - forΣυντακτικό:

for ( έκφραση1 ; έκφραση2 ; έκφραση3) εντολή

Σημασιολογία: Υπολόγισε την τιμή της έκφραση1 Υπολόγισε την τιμή της έκφραση2 Αν η έκφραση2 είναι αληθής (μη μηδενική τιμή) τότε Εκτέλεση την εντολή Υπολόγισε την τιμή της έκφραση3 Πήγαινε στο βήμα 2 Ειδάλλως, εξήλθε του βρόχου

Ισοδύναμο με:έκφραση1;while (έκφραση2){

εντολήέκφραση3;

}

Page 10: ΜΑΘ3122/106 – Γλώσσα προγραμματισμού

ΜΑΘ3122/106 – Γλώσσα προγραμματισμού Ξενοφών Ζαμπούλης10

int i; int sum = 0; for (i = m; i <= n; i++)

sum += f(i);

Page 11: ΜΑΘ3122/106 – Γλώσσα προγραμματισμού

ΜΑΘ3122/106 – Γλώσσα προγραμματισμού Ξενοφών Ζαμπούλης11

Επαναληπτικές Εντολές - for

Συντακτικό:

for ( έκφραση1 ; έκφραση2 ; έκφραση3) εντολή

Συνήθως οι παραπάνω εκφράσεις αντιστοιχούν σε

for ( αρχικοποίηση μετρητών; συνθήκη ; μεταβολή μετρητών)

έτσι ώστε σε μια γραμμή να φαίνεται πόσες επαναλήψεις θα κάνει ο βρόχος

Page 12: ΜΑΘ3122/106 – Γλώσσα προγραμματισμού

ΜΑΘ3122/106 – Γλώσσα προγραμματισμού Ξενοφών Ζαμπούλης12

Επαναληπτικές Εντολές - forΣυγκρίνετε:int c;for (c=1; c<=10; c++){

printf(“C is %d, square of C is %d\n”, c, c*c);}

με

int c;c=1;while (c<=10){

printf(“C is %d, square of C is %d\n”, c, c*c);c++;

}

Είναι ισοδύναμα, αλλά το πρώτο προτιμάται από τους προγραμματιστές: μετά την for υπάρχουν όλες οι πληροφορίες μαζεμένες για να καταλάβουμε πως θα εκτελεστεί ο βρόχος

Page 13: ΜΑΘ3122/106 – Γλώσσα προγραμματισμού

ΜΑΘ3122/106 – Γλώσσα προγραμματισμού Ξενοφών Ζαμπούλης13

Επαναληπτικές Εντολές - for

Η γλώσσα δεν υποχρεώνει η πρώτη έκφραση να αφορά αρχικοποίηση, η δεύτερη συνθήκη κτλ. Έτσι τα παρακάτω είναι συντακτικά σωστά:

k=7;

for (; k; )

printf(“K is %d\n”, k--);

Page 14: ΜΑΘ3122/106 – Γλώσσα προγραμματισμού

ΜΑΘ3122/106 – Γλώσσα προγραμματισμού Ξενοφών Ζαμπούλης14

for (i = 0; i < 10; i++) /* loop body */

i = 0; for (; i < 10;) {

i++;}

i = 0; for (;; i++) {

if (i >= 10) break;

}

Page 15: ΜΑΘ3122/106 – Γλώσσα προγραμματισμού

ΜΑΘ3122/106 – Γλώσσα προγραμματισμού Ξενοφών Ζαμπούλης15

Επαναληπτικές Εντολές – do/while

do

{

εντολή

} while (έκφραση);

int calculator(int a,int b)

{

int res = 0;

char ch;

printf(“Add, Substract, Multiply, Divide\n”);

do

{

printf(“Enter first letter:\n”);

ch = getchar();

}

while ( ch!=‘A’ && ch!=‘S’ && ch != ‘M’ && ch!=‘D’);

if (ch==‘A’) res = a+b;

else if (ch==‘S’) res = a-b;

else if (ch==‘M’) res = a*b;

else if (ch==‘D’) res = a/b;

printf(“\n %d %c %d = %d\n”, a,ch,b,res);

return res;

}

Page 16: ΜΑΘ3122/106 – Γλώσσα προγραμματισμού

ΜΑΘ3122/106 – Γλώσσα προγραμματισμού Ξενοφών Ζαμπούλης16

Έξοδος από βρόχο

Εντολή break– Τερματισμός μόνο του πιο «μέσα» βρόγχου ή switch– Ειδικές περιπτώσεις– Π.χ., βγες από το μενού

Εντολή continue– Η ροή πηγαίνει απευθείας στην έκφραση3 παράσταση της

for (αν πρόκειται για for)– Κατόπιν η ροή πηγαίνει στην συνθήκη ελέγχου της

ανακύκλωσης (για for, while, do)– Π.χ., αγνόησε κάποιο στοιχείο του βρόχου

Page 17: ΜΑΘ3122/106 – Γλώσσα προγραμματισμού

ΜΑΘ3122/106 – Γλώσσα προγραμματισμού Ξενοφών Ζαμπούλης17

Έξοδος από βρόχο#include <stdio.h>int main() /* Tameakh mhxanh*/{

float sum = 0, SUM = 0, product = 0;int plh8os,id = 1;

while (1){

printf("Enter product price (give -1 for false, -2 for next customer and -3 for exit)):");scanf("%f",&product);

if (product == -1){ printf("GIVE again all the list of customer %d\n",id); SUM = SUM - sum; sum = 0; continue; }else if (product == -2){ printf("sum(%d) = %.2f\n",id,sum); id++; sum = 0; continue;}else if (product == -3){

printf("INCOMES of %d customers = %.2f\n",id-1,SUM); break;

}

printf("Enter products' number:");scanf("%d",&plh8os);

sum += plh8os* product;SUM += plh8os* product;

}

return 0;}

Page 18: ΜΑΘ3122/106 – Γλώσσα προγραμματισμού

ΜΑΘ3122/106 – Γλώσσα προγραμματισμού Ξενοφών Ζαμπούλης

ΗΥ-150Προγραμματισμός

Επανάληψη - Παραδείγματα

Page 19: ΜΑΘ3122/106 – Γλώσσα προγραμματισμού

ΜΑΘ3122/106 – Γλώσσα προγραμματισμού Ξενοφών Ζαμπούλης19

Σειριακή εκτέλεση εντολών

Όλα τα προγράμματα «γράφονται» χρησιμοποιώντας 3 είδη εντολών:– Σειριακές εντολές (sequential – built in C)– Εντολές απόφασης (if, if/else, switch)– Εντολές επανάληψης ( for, while, do/while)

Page 20: ΜΑΘ3122/106 – Γλώσσα προγραμματισμού

ΜΑΘ3122/106 – Γλώσσα προγραμματισμού Ξενοφών Ζαμπούλης20

Επαναληπτικές Εντολές – while – for

Συντακτικό:while (έκφραση) {

εντολή}

for ( έκφραση1 ; έκφραση2; έκφραση3) {

εντολή}

Page 21: ΜΑΘ3122/106 – Γλώσσα προγραμματισμού

ΜΑΘ3122/106 – Γλώσσα προγραμματισμού Ξενοφών Ζαμπούλης21

Έξοδος από βρόχο

Εντολή break– Τερματισμός μόνο του πιο «μέσα» βρόγχου ή switch– Ειδικές περιπτώσεις– Π.χ., βγες από το μενού

Εντολή continue– Η ροή πηγαίνει απευθείας στην έκφραση3 παράσταση της

for (αν πρόκειται για for)– Κατόπιν η ροή πηγαίνει στην συνθήκη ελέγχου της

ανακύκλωσης (για for, while, do)– Π.χ., αγνόησε κάποιο στοιχείο του βρόχου

Page 22: ΜΑΘ3122/106 – Γλώσσα προγραμματισμού

ΜΑΘ3122/106 – Γλώσσα προγραμματισμού Ξενοφών Ζαμπούλης22

Example

#include <stdio.h> int main() {

int a; a = 0; while (a <= 100) {

printf("%4d degrees F = %4d degrees C\n", a, (a - 32) * 5 / 9);

a = a + 10; } return 0;

}

Page 23: ΜΑΘ3122/106 – Γλώσσα προγραμματισμού

ΜΑΘ3122/106 – Γλώσσα προγραμματισμού Ξενοφών Ζαμπούλης23

0 degrees F = -17 degrees C 10 degrees F = -12 degrees C 20 degrees F = -6 degrees C 30 degrees F = -1 degrees C 40 degrees F = 4 degrees C 50 degrees F = 10 degrees C 60 degrees F = 15 degrees C 70 degrees F = 21 degrees C 80 degrees F = 26 degrees C 90 degrees F = 32 degrees C 100 degrees F = 37 degrees C

Page 24: ΜΑΘ3122/106 – Γλώσσα προγραμματισμού

ΜΑΘ3122/106 – Γλώσσα προγραμματισμού Ξενοφών Ζαμπούλης24

Παραδείγματα Bρόχων

//Υπολογισμός Δύναμης

int power(int base, int n)

{

int i, p;

p =1;

for (i = 1; i <= n; i++)

p = p*base;

return p;

}

/*Υπολογισμός παραγοντικού

n! = n*(n-1)! */

int parag(int n)

{

int i, p;

p =1;

for (i = 2; i <= n; i++)

p = p*i;

return p;

}

Page 25: ΜΑΘ3122/106 – Γλώσσα προγραμματισμού

ΜΑΘ3122/106 – Γλώσσα προγραμματισμού Ξενοφών Ζαμπούλης25

Παραδείγματα Bρόχων/*Υπολογισμός της μικρότερης δύναμης του 2 που

είναι μεγαλύτερη από τον αριθμό n*/int powerOfTwo(int n) {

int p;p = 1;

while (1){

p = p*2;

if (p > n)break;

}

return p;}

Page 26: ΜΑΘ3122/106 – Γλώσσα προγραμματισμού

ΜΑΘ3122/106 – Γλώσσα προγραμματισμού Ξενοφών Ζαμπούλης26

Παραδείγματα Bρόχων/*Υπολογισμός του αθροίσματος των ψηφίων του αριθμού n*/

int sumOfDigits(int n) {

int pn,x,sum;pn = n;sum = 0;

while (pn > 0){

x = pn % 10;pn = pn/10;

sum += x;}

return sum;}

Page 27: ΜΑΘ3122/106 – Γλώσσα προγραμματισμού

ΜΑΘ3122/106 – Γλώσσα προγραμματισμού Ξενοφών Ζαμπούλης27

Παραδείγματα Bρόχων/*Εκτυπώνει τουs 10 πρώτους αριθμούς που το άθροισμα των ψηφίων τους είναι 7 και

την μέση τους τιμή*/

int x = 1; //metablhth gia enan tyxaio ari8mo int sum = 0; //metablhth gia to # tvn ari8mwnfloat mean = 0; //metablhth gia th mesh timh

while (sum < 10){

if (sumOfDigits(x) == 7){

mean += x;sum++; printf(“O %d ari8mos einai o %d\n”,sum,x);

}++x;

}mean = mean/10;printf(“H mesh tous timh einai %.2f\n”,mean);

Page 28: ΜΑΘ3122/106 – Γλώσσα προγραμματισμού

ΜΑΘ3122/106 – Γλώσσα προγραμματισμού Ξενοφών Ζαμπούλης28

Examplefor (i=0;i<50;i++){

for (j=0;j<50;j++){

char c;double distance,dx,dy;

dx = 25-i;dy = 25-j;distance = sqrt(dx*dx + dy*dy);if (distance < 25)

c = ‘*’;else

c = ‘ ’;printf(“%c”,c)

}printf(“\n”);

}

Page 29: ΜΑΘ3122/106 – Γλώσσα προγραμματισμού

ΜΑΘ3122/106 – Γλώσσα προγραμματισμού Ξενοφών Ζαμπούλης29

Φωλιασμένοι βρόχοιfor (i=1; i<=8; i++){

for (j = 1; j <= i; ++j){

printf(“*”);}printf(“\n”);

}

************************************

Page 30: ΜΑΘ3122/106 – Γλώσσα προγραμματισμού

ΜΑΘ3122/106 – Γλώσσα προγραμματισμού Ξενοφών Ζαμπούλης30

Φωλιασμένοι βρόχοι

/*Πως θα εκτυπώναμε το παρακάτω σχήμα;*/

* *

** **

*** ***

**** ****

***** *****

****** ******

******* *******

****************