ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ
Έλεγχος ροής Δομή επιλογής (if, switch) Δομές επανάληψης (while, do-while, for) Διακλάδωση χωρίς συνθήκη (break, continue, goto) CEID - Προγραμματισμός σε ANSI C 2
Αλγοριθμικές δομές - ακολουθία - επιλογή ΕΛΕΓΧΟΣ ΡΟΗΣ Ακολουθία - επανάληψη Π1 Π2 Π3 CEID - Προγραμματισμός σε ANSI C 3
Δομή Επιλογής (1) Απλή Περιορισμένη Ε Ε Π1 Π2 Π1 If E then Π1 else Π2 If E then Π1 CEID - Προγραμματισμός σε ANSI C 4
Δομή Επιλογής (2) Ε If E1 then Π1 else if E2 then Π2 else Π3 Π1 Π2 Ε2 Π3 CEID - Προγραμματισμός σε ANSI C 5
Δομή Επιλογής (3) Πολλαπλή Ε Π1 Π2 Π3... Πv CEID - Προγραμματισμός σε ANSI C 6
Επιλογή στη C-if If (<έκφραση>) <πρόταση1> [else <πρόταση2>] απλή ή σύνθετη If (<έκφραση>) <πρόταση1> else if (<έκφραση2>) <πρόταση2> else if (<έκφραση3>) <πρόταση3> else <πρόταση4> Εμφωλευμένο If CEID - Προγραμματισμός σε ANSI C 7
Παράδειγμα #include <stdio.h> main ( ) { float num; printf( Δώσε αριθμό: ); scanf( %f, &num); If (num < 0) printf( Η απόλυτη τιμή του %f είναι: %f\n, num, -num); else printf( Η απόλυτη τιμή του %f είναι: %f\n, num, num); printf( Η απόλυτη τιμή του %f είναι: %f\n, num, (num<0)?-num:num); CEID - Προγραμματισμός σε ANSI C 8
Επιλογή στη C-switch (1) switch (<έκφραση>) { case <σταθ-εκφρ1>: <προτ1> case <σταθ-εκφρ2>: <προτ2> case <σταθ-εκφρv> : <προτv> default: <πρόταση> CEID - Προγραμματισμός σε ANSI C 9
Επιλογή στη C-switch (2) Κανόνες Κάθε <σταθ-έκφρi> πρέπει να είναι μία τιμή int ή char ή μία έκφραση μόνο με τέτοιες τιμές Δύο <σταθ-εκφρi> δεν μπορεί να έχουν την ίδια τιμή Αν <έκφραση>=<σταθ-εκφρx> τότε εκτελούνται όλες οι παρακάτω της x προτάσεις (χρήση break) H <πρόταση> εκτελείται μόνο όταν καμμιά από τις <πρότi> δεν ικανοποιείται Η default δεν είναι απαραίτητο να είναι στο τέλος CEID - Προγραμματισμός σε ANSI C 10
Παράδειγμα switch (choice) { case 1: x=a+b; break; case 2: x=a-b; break; case 3: x=a*b; break; case 4 x=a/b; break; default: printf( Ανύπαρκτη επιλογή ); break; CEID - Προγραμματισμός σε ANSI C 11
Δομές (ή Βρόχοι) Επανάληψης Μέρη Έκφραση τερματισμού - Συνθήκη - Μετρητής Σώμα επανάληψης Τύποι Δομή επανάληψης με συνθήκη - εισόδου - εξόδου Δομή επανάληψης με μετρητή CEID - Προγραμματισμός σε ANSI C 12
Δομή Επανάληψης με Συνθήκη Εισόδου While E do Σ (Pascal) while E (C) Ε (To Σ μπορεί να μην εκτελεστεί ποτέ) Σ CEID - Προγραμματισμός σε ANSI C 13
Δομή Επανάληψης με Συνθήκη Εξόδου repeat Σ until E (Pascal) do Σ while E (C) (To Σ θα εκτελεστεί τουλάχιστον μία φορά) Σ Α Ε CEID - Προγραμματισμός σε ANSI C 14
Δομή Επανάληψης με Μετρητή Μ=Ε1 Μ=Μ+1 Μ<=Ε2 Α Σ For M:=E1 to E2 do Σ (Pascal) CEID - Προγραμματισμός σε ANSI C 15
Δομή Επανάληψης στη C: while while (<έκφραση>) <πρόταση> while (count<limit) { count++; printf( count is %d\n, count); <επόμενη πρόταση> while count<limit true count++ Printf( count is %d\n, count); <επόμενη πρόταση> CEID - Προγραμματισμός σε ANSI C 16
Δομή Επανάληψης στη C: do while do do <επόμενη πρόταση> while (<έκφραση>); count++ printf( count is %d\n, count); do { count++; printf( count is %d \n, count); while (count<limit) <επόμενη πρόταση> while count<limit; <επόμενη πρόταση> true CEID - Προγραμματισμός σε ANSI C 17
Δομή Επανάληψης στη C: for αρχικοποίηση έλεγχος ενημέρωση count=1; for (<εκφρ1> ; <εκφρ2>; <εκφρ3> <πρόταση> count++; count<limit; true for (count=1;count<limit;count++) { printf( count is %d \n, count); <επόμενη πρόταση> printf( count is %d\n, count); <επόμενη πρόταση> CEID - Προγραμματισμός σε ANSI C 18
Ισοδυναμία Δομών Επανάληψης for (e1;e2;e3) Π1 e1; while (e2) { Π1; e3; e1; do { Π1; e3; while (e2) CEID - Προγραμματισμός σε ANSI C 19
Επιλογή Δομής Επανάληψης Προτιμούμε τη δομή με συνθήκη εισόδου (while) από αυτή με συνθήκη εξόδου (do-while) Προτιμούμε την for από την while, αν υπάρχει (ή μπορεί να οριστεί) απαριθμητής που συνοδεύεται από αρχικοποίηση και ανανέωση της τιμής του. CEID - Προγραμματισμός σε ANSI C 20
Διακλάδωση χωρίς συνθήκη Διαχείριση ειδικών περιπτώσεων σε προτάσεις επανάληψης - break - continue Ρητή διακλάδωση - goto <ετικέτα> CEID - Προγραμματισμός σε ANSI C 21
Πρόταση break (1) Προκαλεί την έξοδο μόνο από τον πιο εσωτερικό βρόχο Καταστρέφει τη δόμηση του κώδικα Υπάρχει πάντα τρόπος να γραφεί κώδικας χωρίς τη χρήση της. CEID - Προγραμματισμός σε ANSI C 22
Πρόταση break (2) while (<έκφραση>) { if ειδική περίπτωση { προτάσεις επεξεργασίας ειδικής περίπτωσης break; προτάσεις επεξεργασίας κανονικών περιπτώσεων CEID - Προγραμματισμός σε ANSI C 23
Πρόταση break (3) for (i=0; i<max; i++) { if (num[i]<0) break; : printf(...); for (i=0; (i<max) && (num[i]>=0); i++) { : : printf(...); CEID - Προγραμματισμός σε ANSI C 24
Πρόταση continue (1) Προκαλεί την έναρξη της επόμενης επανάληψης for, while ή do Επηρεάζει μόνο το πιο εσωτερικό βρόχο CEID - Προγραμματισμός σε ANSI C 25
Πρόταση continue (2) while (<έκφραση>) { if κανονική περίπτωση { προτάσεις επεξεργασίας κανονικής περίπτωσης continue; προτάσεις επεξεργασίας ειδικών περιπτώσεων CEID - Προγραμματισμός σε ANSI C 26
Πρόταση continue (3) for (i=0; i<max; i++) { if (num[i]<0) continue; : printf(...); For (i=0; (i<max) && (num[i]>=0); i++) { : : printf(...); CEID - Προγραμματισμός σε ANSI C 27
Πρόταση goto Καταστρέφει την δόμηση του κώδικα Είναι πάντα εύκολο να γράφεις κώδικα χωρίς τη χρήση τους CEID - Προγραμματισμός σε ANSI C 28