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

37
ΜΑΘ 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 είδη εντολών:– Σειριακές εντολές (sequential – built in C)– Εντολές απόφασης (if, if/else, switch)– Εντολές επανάληψης ( for, while, do/while)

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

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

Ξενοφών Ζαμπούλης3

if βασική εντολή διακλάδωσης κάθε γλώσσας

προγραμματισμού Ελέγχει τη ροή του κώδικα ανάλογα με τη (λογική) τιμή

μιας συνθήκης, δηλαδή μιας ποσότητας ή έκφρασης λογικού τύπου. Στη C++ συντάσσεται ως εξής:

if (condition) { ... // block A } else { ... // block B

} Εάν η συνθήκη (condition) είναι αληθής ή μπορεί να

μετατραπεί σε αληθή, εκτελείται το block των εντολών που περικλείεται μεταξύ των πρώτων {} (block A). Αν η συνθήκη είναι ψευδής, τότε εκτελείται το block των εντολών μετά το else (block B).

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

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

Ξενοφών Ζαμπούλης4

if

Το κάθε block μπορεί να αποτελείται από καμμία, μία, ή περισσότερες εντολές. Στην περίπτωση που περιλαμβάνει μία μόνο εντολή μπορούν να παραληφθούν τα άγκιστρα ({}) που την περικλείουν.

if (val > max) max = val;

else { max = 1000.0; ++i;

}

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

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

Ξενοφών Ζαμπούλης5

if

Στην περίπτωση που το else block είναι κενό μπορεί να παραληφθεί ολόκληρο:

if (condition) { ...

}

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

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

Ξενοφών Ζαμπούλης6

if Kάθε block μπορεί να περιλαμβάνει οποιεσδήποτε άλλες εντολές και

βέβαια άλλο if. H if (condition) {...} else {...} είναι μία εντολή. Στην περίπτωση ενός εσωκλειόμενου if , θέλει ιδιαίτερη προσοχή το επόμενο else του κώδικα. Το κάθε else ταιριάζει με το αμέσως προηγoύμενό του if στο ίδιο block.

if (i == 0) if (val > max)

max = val; else

max = 10; Η εντολή max = 10; εκτελείται όταν to i είναι 0 και δεν ισχύει το ( val >

max ) και όχι όταν δεν ισχύει το ( i == 0 ). Η χρήση των αγκίστρων επιβάλει την πρόθεση του προγραμματιστή:

if (i == 0) {

if (val > max) max = val;

} else

max = 10;

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

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

Ξενοφών Ζαμπούλης7

Εντολές υπό Συνθήκη - ifεντολή <- έκφραση;εντολή <- { σειρά εντολών }

if (έκφραση) εντολή1

if (έκφραση)εντολή1

else εντολή2

if (έκφραση1) εντολή1

else if (έκφραση2) εντολή2

elseεντολή3

//Αν η έκφραση έχει τιμή διάφορη του 0 (!0), //εκτελείται η εντολή 1 αλλιώς η εντολή2

//Αν η έκφραση έχει τιμή διάφορη του 0 (!0), //εκτελείται η εντολή 1

//Αν η έκφραση1 έχει τιμή διάφορη του 0 (!0), //εκτελείται η εντολή 1 //αλλιώς αν η έκφραση2 έχει τιμή διάφορη του 0 //εκτελείται η εντολή 2//αλλιώς εκτελείται η εντολή 3

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

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

Ξενοφών Ζαμπούλης8

Παράδειγμαint main() /*Ypologismos aplwn pra3ewn*/{

char p;float x,y,res;

scanf("%f %c %f",&x,&p,&y);if (p == ‘+’){

res = x+y; }else if (p == ‘-’){

res = x-y;}else if (p == ‘*’){

res = x*y; }else if (p == ‘/’);{

res = x/y; }else{

printf(“La8os eisodos\n”);return -1;

}printf(“%f%c%f = %f\n”,x,p,y,res);return 0;

}

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

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

Ξενοφών Ζαμπούλης9

Παραστάσεις υπό Συνθήκη - ?

Ο τελεστής ( ?: ) είναι ένας ιδιαίτερα διαδεδομένος ιδιωματισμός της C++. Η εντολή

if (condition) val = value1;

else val = value2;

ισοδυναμεί με val = (condition ? value1 : value2); Γενικότερα, η έκφραση

(condition ? έκφρασηΑ : έκφρασηΒ) έχει την τιμή “έκφρασηΑ” όταν η συνθήκη

condition είναι αληθής, ενώ έχει την τιμή “έκφρασηΒ” όταν η συνθήκη είναι ψευδής.

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

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

Ξενοφών Ζαμπούλης10

Παραστάσεις υπό Συνθήκη - ?

Οι παρενθέσεις που περιβάλουν τον τελεστή ( ?: ) με τα ορίσματά του στο συγκεκριμένο παράδειγμα δεν είναι απαραίτητες, βοηθούν όμως στην κατανόηση του κώδικα.

Καθώς για το συγκεκριμένο τελεστή δεν μπορεί να καθοριστεί μονοσήμαντα η προτεραιότητά του σε σχέση με τον ( = ) πρέπει να τις χρησιμοποιούμε για να εκτελείται η επιδιωκόμενη πράξη.

Εναλλακτικά, μπορούμε να εφαρμόζουμε τον εξής κανόνα: Οι τελεστές ( ?: ) και ( = ) έχουν ίδια προτεραιότητα, δεχόμενοι ότι οι πράξεις εκτελούνται από τα δεξιά προς τα αριστερά. Επομένως, η έκφραση

a = b ? c : d ισοδυναμεί με a = (b ? c : d), ενώ η έκφραση a ? b : c = d εκτελείται ως a ? b : (c =

d)

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

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

Ξενοφών Ζαμπούλης11

Παραστάσεις υπό Συνθήκη - ?

if ( x > y)

{

x = a;

}

else

{

x = b;

}

x = (x>y) ? a : b;

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

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

Ξενοφών Ζαμπούλης12

Εντολές υπό Συνθήκη - switch

switch (έκφραση){

case σταθερή_παράσταση_1 : statements; break;

case σταθερή_παράσταση_2 : statements;break;

default : statements;}

Το default είναι προαιρετικό και εκτελείται αν καμία παράσταση δεν βρεθεί ίση με την έκφραση

Αν ένα break λείπει τότε συνεχίζεται η εκτέλεση των εντολών

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

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

Ξενοφών Ζαμπούλης13

Εντολές υπό Συνθήκη - switch Η τιμή ελέγχου i πρέπει να είναι ακέραιου τύπου (char , int ,

short int, long int) με τις signed και unsigned παραλλαγές τους. Η τιμή μπορεί να προέρχεται από μεταβλητή ή να είναι η τιμή συνάρτησης που επιστρέφει τέτοιο τύπο ή κάποια μεταβλητή. Οι τιμές value1, value2,..., valueN είναι σταθερές ακέραιου τύπου και διακριτές μεταξύ τους.

Κατά την εκτέλεση, η τιμή ελέγχου i συγκρίνεται με κάθε μία από τις value1, value2,...,valueN. Αν η τιμή της περιλαμβάνεται σε αυτές, τότε εκτελούνται οι εντολές που ακολουθούν το αντίστοιχο case . Η εκτέλεση συνεχίζει με τις εντολές των επόμενων case ή/και του default αν έπεται, έως ότου διακοπεί με break (ή τυχόν π.χ. goto, return).

Μετά το break η εκτέλεση συνεχίζει με την πρώτη εντολή μετά το καταληκτικό άγκιστρο της δομής switch.

Αν δεν βρεθεί η τιμή της στις value1, value2,...,valueN εκτελείται το block των εντολών του default , αν υπάρχει. Αλλιώς, η εκτέλεση συνεχίζει μετά το } του switch .

Οι σχετικές θέσεις των case και του default μπορούν να είναι οποιεσδήποτε.

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

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

Ξενοφών Ζαμπούλης14

Παράδειγμα με switch#include <stdio.h>

/*Ypologismos aplwn pra3ewn*/int main() {

char p;float x,y,res;

scanf("%f %c %f",&x,&p,&y);switch (p){

case ‘+’ : res = x+y; break;

case ‘-’ : res = x-y;break;

case ‘*’ : res = x*y; break;

case ‘/’ : res = x/y; break;

default : printf(“La8os eisodos\n”);}

printf(“%f%c%f = %f\n”,x,c,y,res);return 0;

}

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

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

Ξενοφών Ζαμπούλης15

Τυπικά Λάθη

if(x=5) αντί για if(x==5)

Ξεχάσατε το break σε εντολή switch

Ξεχάσατε {, }

Λάθος στις προτεραιότητες: ( )

Λύση: Μορφοποίηση και χρήση σχολίων

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

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

Ξενοφών Ζαμπούλης16

Μορφοποίηση Σχόλια πριν από συναρτήσεις και τους ορισμούς μεταβλητών Κατάλληλη χρήση tabs, παρενθέσεων και αγκυλών Κατάλληλη ονοματολογία συναρτήσεων - μεταβλητών

/*Epistrefei ton endiameso ari8mo twn a,b,c*/int getMedian(int a,int b, int c){

int median; /*Endiamesos*/

if ((a <= b) && (a >= c)) || ((a >= b) && (a <= c)) {

median = a;}else if ((b <= a) && (b >= c)) || ((b >= a) && (b <= c)) {

median = b;}else{

median = c;}

return median;}

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

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

Ξενοφών Ζαμπούλης17

Define – Const – Include #define <macro> <replacement name>

#define FALSE 0 #define TRUE !FALSE #define N 1000 /*ΠΡΟΣΟΧΗ!! – ΔΕΝ ΜΠΟΡΩ ΝΑ ΧΡΗΣΙΜΟΠΟΙΗΣΩ

ΤΟ Ν ΩΣ ΜΕΤΑΒΛΗΤΗ*/#define Pi 3.14159– Ορίζεται στην αρχή κάθε προγράμματος και μπορεί να χρησιμοποιηθεί

σε όλο το πρόγραμμα. – To Pi θα αντικατασταθεί από τον 3.14159 στο πρώτο βήμα του

compilation (preprocessing)

int const a = 1; – ορίζει μια σταθερά – δεν μπορεί να αλλάξει τιμή

#include <file>#include <stdio.h>

#include “file”

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

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

Ξενοφών Ζαμπούλης18

Γενική Δομή Προγράμματος

#include <stdio.h># define N 1000

/*Επιστρέφει το μέγιστο μεταξύ των x, y*/int max(int x,int y){

int z = x; /*δηλώσεις μεταβλητών - αρχικοποίηση*/

if (y > x) /*λίστα εντολών*/{

z = y;}

return z;}

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

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

Ξενοφών Ζαμπούλης19

#include <stdio.h>#include <math.h>

float diakrinousa(float,float , float );int printSolution2ba8mou(float a, float b, float c);

int main(){

float a,b,c;

printf(“Dwste 3 pragmatikous ari8mous \n”);scanf(“%f %f %f”,&a,&b,&c);printf("Dw8hke to poluwnumo: %f x^2 + (%f) x +

(%f) \n",a,b,c);if (a == 0)

printf(“H e3iswsh einai prwtou ba8mou\n”);else

printSolution2ba8mou(a, b, c);}

/*Υπολογίζει τη διακρίνουσα */float diakrinousa(float a,float b, float c){

float D = b*b – 4*a*c;

return D;}

/*Εκτυπώνει τις λύσεις */int printSolution2ba8mou(float a, float b,

float c){

float D = diakrinousa( a, b, c);float x1,x2;

if (D < 0){

printf(“Den uparxoun pragmatikes luseis.\n”);

return 0;}else if (D == 0){

x1 = -b/(2*a);printf(“Yparxei monadikh

lush %f\n”,x1);return 1;

}else{

x1 = (-b+sqrt(D))/(2*a);x2 = (-b-sqrt(D))/(2*a);

printf(“Yparxoun 2 luseis :%f, %f\n”,x1,x2);

return 2;}

}

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

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

Είσοδος / Έξοδος χαρακτήρων

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

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

Ξενοφών Ζαμπούλης21

putchar() / putchar()

#include <stdio.h> main() {

int c;

c = getchar()

putchar(c); }

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

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

Ξενοφών Ζαμπούλης22

getchar()

/* char_count.c A program to count characters of input. */

main() {

int c ; int count = 0;

while ( ( c = getchar() ) != EOF ) count ++ ;

printf( "%d characters\n" , count ) ; }

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

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

Ξενοφών Ζαμπούλης23

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 24: ΜΑΘ-3122/106 Γλώσσα Προγραμματισμού

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

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

Συναρτήσεις

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

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

Ξενοφών Ζαμπούλης25

Αλγόριθμοι / Προγράμματα Λύνουμε ένα πρόβλημα εκτελώντας μια

ακολουθία από εντολές σε συγκεκριμένη σειρά

Αλγόριθμος: καθορίζει τις εντολές και τη σειρά εκτέλεσης

Έλεγχος προγράμματος (program control): καθορίζει αυστηρά τη σειρά εκτέλεσης των εντολών

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

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

Ξενοφών Ζαμπούλης26

Συναρτήσεις - Functions

Χωρίζουμε το πρόγραμμα σε μέρη Φιλοσοφία του «διαίρει και βασίλευε»

(divide and conquer) Τα μέρη αντιστοιχούν σε επιμέρους και

μικρότερα προβλήματα Αναλογία με μια επιχείρηση:

– Ο προϊστάμενος αναθέτει μια δουλειά σε κάποιον υφιστάμενο

– Παίρνει το αποτέλεσμα χωρίς να «ενδιαφέρεται» για τις λεπτομέρειες

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

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

Ξενοφών Ζαμπούλης27

Συναρτήσεις - Functions Τα υποπροβλήματα πιο εύκολα διαχειρίσιμα Κάθε υποπρόβλημα αντιστοιχεί σε μία συνάρτηση Πιο εύκολη διαχείριση κώδικα

– Debugging– Updating

Χρήση υπαρχόντων συναρτήσεων σε καινούρια προγράμματα για τη λύση νέων προβλημάτων (code reuse)– Επαναχρησιμοποίηση κώδικα

Αποφυγή επανάληψης του ίδιου κώδικα πολλές φορές μέσα σε ένα πρόγραμμα

Αφαίρεση (abstraction): «κρύβονται» λεπτομέρειες που δεν είναι απαραίτητες συνέχεια στον προγραμματιστή

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

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

Ξενοφών Ζαμπούλης28

Συναρτήσεις - Functions

main()

main()

• Debugging

• Updating

• Code reuse Συναρτησιακός

Προγραμματισμός

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

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

Ξενοφών Ζαμπούλης29

Ορισμός Συναρτήσεων

Επιστρεφόμενος-τύπος όνομα-συνάρτησης(λίστα-παραμέτρων){

Δηλώσεις μεταβλητών;Εντολές;

} Όνομα-συνάρτησης: οποιοδήποτε δεκτό όνομα Επιστρεφόμενος-τύπος: τύπος των δεδομένων που επιστρέφει η

συνάρτηση– v o i d : δεν επιστρέφει τίποτα

Λίστα-παραμέτρων: δηλώσεις παραμέτρων, χωρίζονται με κόμμα (τύπος παράμετρος, τύπος παράμετρος, ...)

int SquareIt(int a){

int result;result = a*a;return result;

}

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

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

Ξενοφών Ζαμπούλης30

Κλήση Συναρτήσεων – Function Call

όνομα_συνάρτησης ( όρισμα1, ..., όρισμαΝ)έκφραση1 όνομα_συνάρτησης ( έκφραση1 ...,

έκφρασηΝ)τιμή1 η τιμή που επιστρέφει ο κώδικας της

συνάρτησης όταν εκτελεστεί με τα δοσμένα ορίσματατύπος1 ο τύπος που επιστρέφει η συνάρτηση

x = (SquareIt(5) > 7);

Η έκφραση SquareIt(5)αντικαθίσταται από την έκφραση 25.

Page 31: ΜΑΘ-3122/106 Γλώσσα Προγραμματισμού

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

Ξενοφών Ζαμπούλης31

Συναρτήσεις void Αν η συνάρτηση είναι τύπου void, δεν

επιστρέφει τιμήvoid f()

{ printf(“Test\n”); return; }

Λάθος:x = f() + 10;

Page 32: ΜΑΘ-3122/106 Γλώσσα Προγραμματισμού

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

Ξενοφών Ζαμπούλης32

Ροή του Προγράμματος Η ροή του προγράμματος αλλάζει όταν συναντήσει

την κλήση μιας συνάρτησης f(a, b, c)1. Πρώτα υπολογίζονται οι εκφράσεις που

αντιστοιχούν στα ορίσματα2. Οι τιμές των εκφράσεων a, b, c αντιγράφονται στα

ορίσματα της f με την ίδια σειρά3. Ο έλεγχος μεταπηδά στην πρώτη εντολή της f4. Οι εντολές της f εκτελούνται μέχρι να συναντηθεί

return έκφραση; Τέλος συνάρτησης (δηλαδή })

5. Η κλήση f(a, b, c) αντικαθίσταται με την επιστρεφόμενη τιμή

Page 33: ΜΑΘ-3122/106 Γλώσσα Προγραμματισμού

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

Ξενοφών Ζαμπούλης33

Συναρτήσεις βιβλιοθήκης

Συναρτήσεις ορισμένες από το χρήστη (user defined functions)

Συναρτήσεις βιβλιοθήκης (library functions)– η τυπική βιβλιοθήκη της C– βιβλιοθήκες συναρτήσεων στο διαδίκτυο

Page 34: ΜΑΘ-3122/106 Γλώσσα Προγραμματισμού

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

Ξενοφών Ζαμπούλης34

Η βιβλιοθήκη <math.h> double sqrt(double x); : Υπολογίζει την τετραγωνική ρίζα του x, πρέπει x > 0 double exp(double x); : Υπολογίζει τον εκθετικό του x, ex

double log(double x); : Υπολογίζει τον φυσικό λογάριθμο του x, ln(x) int abs(int val); : Υπολογίζει την απόλυτη τιμή του val double pow(double x, double y); : Υπολογίζει την τιμή του x υψωμένη στη δύναμη y, χy

double sin(double x); : Υπολογίζει το sine του x, σε rad double cos(double x); : Υπολογίζει το cosine του x, σε rad double tan(double x); : Υπολογίζει την εφαπτομένη του x, σε rad double fmod(double x, double y); : Υπολογίζει το δεκαδικό υπόλοιπο της διαίρεσης

χ/y, y > 0. double ceil(double x); : Υπολογίζει την μικρότερη ακέραια τιμή όχι μικρότερη από

x. double floor(double x); : Υπολογίζει την μεγαλύτερη ακέραια τιμή όχι μεγαλύτερη από

χ.Για να κάνουμε compile πρόγραμμα που χρησιμοποιεί την math.h: >gcc –lm

program.c#include <stdlib.h>int rand(void);void srand(unsigned int seed);

Η συνάρτηση rand επιστρέφει ψευδοτυχαίους αριθμούς από 0 έως RAND_MAXΗ συνάρτηση srand χρησιμοποιείται για την αρχικοποίηση της rand() και τη γέννηση ψευδοτυχαίων αριθμών. Καλούμε μία φορά την srand και μετά την rand διαδοχικά για την παραγωγή των τυχαίων

αριθμών. Αν ξανακαλέσουμε την srand και μετά την rand θα προκαλέσουμε την ίδια σειρά τυχαίων

αριθμών.

Page 35: ΜΑΘ-3122/106 Γλώσσα Προγραμματισμού

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

Ξενοφών Ζαμπούλης35

Ορισμός Συναρτήσεων Δηλώσεις μεταβλητών μέσα σε blocks:

ΤΟΠΙΚΕΣ μεταβλητές Συναρτήσεις ΔΕΝ μπορούν να οριστούν μέσα

σε άλλες συναρτήσεις ΟΠΟΙΑΔΗΠΟΤΕ συνάρτηση μπορεί να καλέσει

άλλες συναρτήσεις και τον εαυτό της (αναδρομή)

Page 36: ΜΑΘ-3122/106 Γλώσσα Προγραμματισμού

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

Ξενοφών Ζαμπούλης36

Πρωτότυπα Συναρτήσεων (Function Prototypes)

Επιστρεφόμενος-τύπος όνομα-συνάρτησης (λίστα-τύπων-παραμέτρων)

Δηλώσεις των συναρτήσεων στην αρχή του αρχείου

Χρειάζεται οπωσδήποτε αν χρησιμοποιούμε τη συνάρτηση πριν τον ορισμό της

Πλεονεκτήματα– Ελέγχουμε την ορθή χρήση των συναρτήσεων– Μπορούμε να δούμε ποιες είναι οι συναρτήσεις που

έχουν υλοποιηθεί στο πρόγραμμα– Μπορούμε να καλέσουμε όλες τις συναρτήσεις που

έχουν υλοποιηθεί στο πρόγραμμα χωρίς να μας ενδιαφέρει η σειρά που έχουν γραφτεί

Page 37: ΜΑΘ-3122/106 Γλώσσα Προγραμματισμού

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

1. Function prototype (3 parameters)

2. Input values

2.1 Call function

3. Function definition

Program Output

1 /* Fig. 5.4: fig05_04.c2 Finding the maximum of three integers */3 #include <stdio.h>45 int maximum( int, int, int ); /* function prototype */67 int main()8 {9 int a, b, c;1011 printf( "Enter three integers: " );12 scanf( "%d%d%d", &a, &b, &c );13 printf( "Maximum is: %d\n", maximum( a, b, c ) );1415 return 0;16 }1718 /* Function maximum definition */19 int maximum( int x, int y, int z )20 {21 int max = x;2223 if ( y > max )24 max = y;2526 if ( z > max )27 max = z;2829 return max;30 }Enter three integers: 22 85 17Maximum is: 85