Αναδρομη και static Γραψετε την συναρτηση sequence_size που διαβαζει μια απροσδιοριστου μεγεθους σειρας και υπολογιζει και τυπωνει το μεγεθος της. int sequence_size(){ static int size = 0; int number; scanf(“%d”,&number); if (number != 0){ ++size; return sequence_size(); } else return size;
Δεικτες Γραψετε μια συναρτηση που διαβαζει μια σειρα χαρακτηρων και επιστρεφει μεσω δυο παραμετρων τον αριθμο των χαρακτηρων που ειναι μικρα (a..z) και τον αριθμο των χαρακτηρων που ειναι κεφαλαια (Α..Ζ).
void read_and_count_a2z_A2Z(int *a2z, int *A2Z) { int c; *a2z = 0; *A2Z=0; while((c=getchar())!=EOF){ if (is_lowercase(c)) /* returns 1 if a..z else 0 */ ++*a2z; else if (is_uppercase(c)) /* returns 1 if A..Z else 0 */ ++*A2Z; }
Δια αναφορας (εισοδου/εξοδου) read_and_count_a2z_A2Z Παραμετροι εξοδου swap Παραμετροι εισοδου/εξοδου
Function σαν παραμετροι Γραψετε μια συναρτηση που παιρνει τρεις παραμετρους a, b και c. Εαν το a ειναι 0 επιστρεφει τον αθροισμα του b και c αλλιως επιστρεφει τo γινομενο τους. int sum_or_diff(int a, int b, int c){ if (a==0) return b+c; else return b*c; }
Function σαν παραμετροι int sum(int a, int b){ return a+b; } int product(int a, int b){ return a*b; int sum_or_prod(int func(int,int), int b, int c){ func(b,c); int main(){ sum_or_prod(sum,5, 6); sum_or_prod(product,6,7);
Function σαν παραμετροι Bοηθουν στην αφαιρετικοτητα πιο γενικη επιλυση προβληματος Αποφυγη επαναληψης για παρομοιες λειτουργικοτητες, πχ ταξινομηση (μεγαλυτερος ή μικροτερος)
Πλευρικα Φαινομενα (side-effects) Φαινομενα που προκαλει μια συναρτηση που δεν επιστρεφονται αμεσα (μεσο return) ή εμμεσα (μεσο παραμετρων δια αναφορας) και παραμενουν μετα το τελος της συναρτησης αναθεση σε καθολικες μεταβλητες printf Προγραμματων με πλευρικα φαινομενα συχνα: περιεχουν αχρειαστο υπολογισμο δυσκολα για ανιχνευση λαθων
Αριθμητικη με pointers *p = *p + 1; ++*p (OXI *p++ -- εχει αλλη σημασια) --*p Δεν επιτρεπεται: αριθμητικη με δυο δεικτες αναθεση μεταξυ δεικτων διαφορετικων τυπων (p == y) οπου p και y ειναι δεικτες. τι ελεγχει το πιο πανω?
Αριθμητικη με pointers Μεγεθος ενος τυπου sizeof(int) sizeof(double) ++p ή p++ αυξανει την διευθυνση κατα το μεγεθος του τυπου που δειχνει ο p int y=4,*p; p = &y; *p++; /* οχι το ιδιο με ++*p */