ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Σχετικά έγγραφα
ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Αρχές Προγραμματισμού

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Εισαγωγή στον Προγραμματισμό

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Υπολογισμός - Εντολές Επανάληψης

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Αρχές Προγραμματισμού

Προγραμματισμός Η/Υ. Ενότητα 5: Εντολές Επανάληψης

Δομημένος Προγραμματισμός

Προγραμματισμός Η/Υ. Ενότητα 4: Εντολές Επιλογής

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

Στόχοι και αντικείμενο ενότητας. Προτάσεις επανάληψης. Έλεγχος ροής προγράμματος. #5.. Εντολές Επανάληψης

Εισαγωγή στον Προγραμματισμό

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Κεφάλαιο : Επαναλήψεις (oι βρόγχοιfor, do-while) (Διάλεξη 10) Εντολές Επανάληψης που θα καλυφθούν σήμερα

Η γλώσσα προγραμματισμού C

Υπολογισμός - Εντολές Ελέγχου

Κεφάλαιο 4: Συνθήκες Έλεγχου (if-else, switch) και Λογικοί τελεστές / παραστάσεις. (Διάλεξη 8)

Προγραμματισμός Η/Υ. Ενότητα 2β: Εισαγωγή στη C (Μέρος Δεύτερο)

Είδη εντολών. Απλές εντολές. Εντολές ελέγχου. Εκτελούν κάποια ενέργεια. Ορίζουν τον τρόπο με τον οποίο εκτελούνται άλλες εντολές

ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 3: Έλεγχος ροής προγράμματος

Αντικειμενοστραφής Προγραμματισμός

Δομημένος Προγραμματισμός

ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

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

Προγραμματισμός Η/Υ (ΤΛ2007 )

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

ΗΥ-150. Προγραµµατισµός. Εντολές Ελέγχου Ροής

Η γλώσσα προγραμματισμού C

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

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 3 η : Επίλυση Προβληµάτων Χειµερινό Εξάµηνο 2011

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Πληροφορική ΙΙ Θεματική Ενότητα 5

Δομημένος Προγραμματισμός (ΤΛ1006)

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός H/Y Ενότητα 2: Εντολές ελέγχου ροής. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Δομημένος Προγραμματισμός

Προγραμματισμός Η/Υ. Ενότητα 3: Top Down Σχεδιασμός

Κεφάλαιο : Επαναλήψεις (for, do-while)

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

Δομές ελέγχου ροής προγράμματος

Ανάπτυξη και Σχεδίαση Λογισμικού

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Ηλεκτρονικοί Υπολογιστές

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Εισαγωγή στους Υπολογιστές

Οντοκεντρικός Προγραμματισμός

Εισαγωγή στον Προγραμματισμό με C++

Ηλεκτρονικοί Υπολογιστές

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Δομημένος Προγραμματισμός

Ασκήσεις σε Επαναληπτικούς Βρόχους και Συναρτήσεις. Επανάληψη για την ενδιάμεση εξέταση. (Διάλεξη 13)

Προγραμματισμός Ι. Θεματική ενότητα 4: Έλεγχος ροής Προτάσεις υπό συνθήκη διακλάδωσης

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

Μεθόδων Επίλυσης Προβλημάτων

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Εισαγωγή στους Υπολογιστές

Εργαστήριο 5. Εντολή if και παραλλαγές: if-else, πολλαπλές if, πολλαπλές if-else. Απλές και σύνθετες εντολές. Εντολή switch.

Εισαγωγή στον δομημένο προγραμματισμό

Εισαγωγή στους Η/Υ και τις Εφαρμογές Ενότητα 5: Επεξεργασία δεδομένων με τη γλώσσα προγραμματισμού python Υπο-ενότητα 5.2: Συμβολοσειρές-Έλεγχος Ροής

Στόχοι και αντικείμενο ενότητας. Βασικές κατασκευές ΓΠ. Έλεγχος ροής προγράμματος. #4.. Εντολές Επιλογής

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

Διαδικαστικός Προγραμματισμός

8. Συνθήκες ελέγχου, λογικοί τελεστές

9. Εντολές επανάληψηςκαι η εντολή

Προγραμματισμός Ι (HY120)

Οντοκεντρικός Προγραμματισμός

Εισαγωγή στον Προγραμματισμό με C++

Οι εντολές ελέγχου της ροής ενός προγράμματος.

Αντικειμενοστραφής Προγραμματισμός

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Προγραμματισμός Ι (ΗΥ120)

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Δομημένος Προγραμματισμός

Κεφάλαιο : Επαναλήψεις (o βρόγχος While) (Διάλεξη 9) Δομές Έλεγχου Προγράμματος

Εισαγωγή στον Προγραμματισμό

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

Δομημένος Προγραμματισμός

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Γλώσσα Προγραμματισμού C

Εισαγωγή στους Αλγόριθμους και τον Προγραμματισμό. 3η Διάλεξη Είσοδος Δεδομένων Συνθήκες Βρόχοι Παραδείγματα

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Η γλώσσα προγραμματισμού C

Προγραμματισμός και Εφαρμογές Υπολογιστών

Η γλώσσα προγραμματισμού C

Πληροφορική ΙΙ Θεματική Ενότητα 6

Γλώσσα Προγραμματισμού C. Προγραμματισμός HY: Γλώσσα Προγραμματισμού C. Γρήγορος Πίνακας Αναφοράς Σύνταξης. Εισήγηση #4. Επαναληπτικές δομές:

Transcript:

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κεφάλαιο 4 Επιμέλεια: Βασίλης Παλιουράς, Αναπληρωτής Καθηγητής Ευάγγελος Δερματάς, Αναπληρωτής Καθηγητής Σταύρος Νούσιας, Βοηθός Ερευνητή Πολυτεχνική Σχολή Τμήμα Ηλεκτρολόγων Μηχανικών & Τεχνολογίας Υπολογιστών

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τυπου άδειας χρησης, η άδεια χρησης αναφερεται ρητώς. 2

Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου των διδασκόντων καθηγητών. Το έργο «Ανοικτά Ακαδήμαϊκά Μαθήματα στο Πανεπιστήμιο Πατρών» έχει χρηματοδοτηθεί μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκη Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικους πόρους. 3

Ανάπτυξη Το παρόν εκπαιδευτικό υλικό αναπτύχθηκε στο τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίας Υπολογιστών του Πανεπιστημίου Πατρών 4

Μέχρι τώρα Οργάνωση προγράμματος στη C συναρτήσεις Μεθοδολογίες σχεδιασμού προγραμμάτων Top-down Λεκτική περιγραφή (προστακτικός τρόπος) Αυξητική ανάπτυξη προγράμματος Αναγνωριστές, Τελεστές, Eκφράσεις, Προτάσεις Βρόχοι επανάληψης στη C do { σύνθετη εντολή; while (έκφραση) ; while (έκφραση) { σύνθετη εντολή; for (έκφραση1; έκφραση2;έκφραση3) {σύνθετη εντολή 5

Δομημένος προγραμματισμός #include <stdio.h> int main() { int i = 0; next: i = i + 1; printf ("%d %d\n", i, i *i); if (i>=10) goto end; goto next; end: return 0; #include <stdio.h> int main() { int i ; for (i=1; i<10; i++) printf ("%d %d\n", i, i *i); return 0; Spaghetti code 6

Σύνοψη δομών ελέγχου C. Bohm and C. Jacopini, Flow diagrams, Turing machines, and languages with only two formation rules, Comms. of ACM, vol. 9, no. 5, May 1966, pp. 336 371. 7

Στοιχεία ελέγχου ροής προγράμματος Προγραμματισμός χωρίς χρήση goto goto-less programming γνωστό ότι είναι εφικτό από τη δεκαετία του 60 στη βιομηχανία, αποδειγμένος ως αποδοτικός Αρκεί η υποστήριξη επιλογών ροής απλή, διπλή, πολλαπλή, βρόχοι υπό συνθήκη (do..while, while ) 8

Κανόνες κατασκευής δομημένου προγράμματος 1. Αρχή: Το απλούστερο διάγραμμα ροής 2. Κάθε διεργασία μπορεί να αντικατασταθεί από δύο διεργασίες σε σειρά 3. Κάθε διεργασία μπορεί να αντικατασταθεί από οποιαδήποτε από τις δομές ελέγχου 4. Οι κανόνες 2 και 3 εφαρμόζονται με όποια σειρά και όσες φορές απαιτείται. 9

Παρατηρήσεις Δεν περιορίζεται σε διαγράμματα ροής Λεκτική περιγραφή ψευδο-κώδικας Progressive refinement: Σταδιακά προσθέτουμε λεπτομέρειες υλοποίησης Αυξητική ανάπτυξη κώδικα 10

Διάγραμμα ροής Προσθέτω λεπτομέρεια στο αρχικό διάγραμμα ροής (κανόνας 2) 11

Διάγραμμα ροής 12

Μη-δομημένο διάγραμμα ροής 13

Μη δομημένος κώδικας #include <stdio.h> int main() { int a = 0, b = 7; /* bad style: no need to follow*/ block1: a = a + 2; printf("a: %d\n", a); check1: if (a<5 ) goto block1; b = 7; check2: if (b<=5) goto check1; a = 0; b = b - 1; printf("b: %d\n", b); goto check2; Εφαρμόζοντας καλές τεχνικές ανάπτυξης ΔΕΝ προκύπτει τέτοιος κώδικας! return 0; 14

Αληθείς και ψευδείς εκφράσεις τιμή έκφρασης!= 0 => η έκφραση είναι αληθής τιμή έκφρασης == 0 => η έκφραση είναι ψευδής 15

Λογικές μεταβλητές στη C ISO C90 Δεν υπάρχει τύπος λογικής μεταβλητής έκφραση!=0 είναι αληθής ISO C99 Επεκτείνει το C90 Ορίζει _Bool Tυποποιεί το header file <stdbool.h> bool, true, false 16

Ομαδοποίηση Τελεστών Κατηγορία Ενδεικτικά C Αριθμητικοί * / % + - Λογικοί &&! Συσχετιστικοί > >= ==!= Διαχείρισης δυαδικών ψηφίω ν μιας λέξης >> & ^ Τελεστές διαχείρισης μνήμης & [ ]. -> * 17

iso646.h Τροποποίηση C95 του C90 Macro and && and_eq &= bitand & bitor compl ~ not! not_eq!= or or_eq = xor ^ xor_eq ^= Ορίζεται ως 18

Παράδειγμα ISO C99 #include <stdio.h> #include <stdbool.h> #include <iso646.h> // C99 style for comments and boolean logic int main() { bool bmorethana; bool blessthanc; bool between; int a = 1, b =2, c =3; bmorethana = b>a ; blessthanc = b<c ; if(bmorethana and blessthanc) { printf("b is between 'em\n"); between = true; else { printf("b is out of limits\n"); between = false ; Στα πλαίσια του μαθήματος γράφουμε κυρίως ISO C90 Portability if (between) printf("between is true"); return 0; 19

Τελεστές Ενέργειες σε δεδομένα Τελεστές Προσεταιριστικότητα ( ) [ ] ->. Αριστερά προς δεξιά! ~ ++ -- + - * & sizeof Δεξιά προς αριστερά * / % Αριστερά προς δεξιά + - Αριστερά προς δεξιά << >> Αριστερά προς δεξιά < <= > >= Αριστερά προς δεξιά ==!= Αριστερά προς δεξιά & Αριστερά προς δεξιά ^ Αριστερά προς δεξιά Αριστερά προς δεξιά && Αριστερά προς δεξιά Αριστερά προς δεξιά?: Δεξιά προς αριστερά = += -= *= /= %= &= ^= = <<= >>= Δεξιά προς αριστερά, Αριστερά προς δεξιά Προτεραιότητα 20

Έλεγχος Ισότητας a == 5; /* αληθές αν το a είναι 5 */ a!= 5; /* αληθές αν το a δεν είναι 5 */ άλλος ο ρόλος του = άλλος του == 21

Έλεγχος Iσότητας == main () { int a = 1, b =1; main () { int a = 1, b =1; if ( a == b) printf ("equal"); else printf ("unequal"); if ( a!= b) printf ("unequal"); else printf ("equal"); 22

Ανάθεση και Ισότητα main () { int a = 1, b =1; int condition; condition = (a==b); main () { int a = 1, b =1; int condition; condition = (a==b); if (condition) printf("equal"); else printf("unequal"); if (!condition) printf("unequal"); else printf("equal"); 23

Λογικοί τελεστές #include <stdio.h> void main () { int a=1, b=2, c=3; if (b>a && b<c) printf("b is between 'em"); else printf("b is out of limits"); 24

Prefix postfix notation a++; ++a; f(a++); f(++a); 25

Τι τυπώνεται; #include <stdio.h> int main() { int a = 4; printf("%d\n", a); a++; printf("%d\n", a); ++a; printf("%d\n", a++); printf("%d\n", a); printf("%d\n", ++a); printf("%d\n", a); return 0; 26

Σύνδεση εκφράσεων με λογικούς τελεστές #include <stdio.h> int main() { int a = 1, b = 0; Τι αλλάζει στη συμπεριφορά, αν το a αρχικοποιηθεί στο 0; if (a==1 ++b ==1) printf("hello\n"); printf("value of b after if: %d\n", b); Short-circuit evaluation return 0; 27

Παραδείγματα χρήσης δομών ελέγχου Σταθερός αριθμός επαναλήψεων Αριθμός επαναλήψεων εξαρτώμενος από τα δεδομένα Ένθετες (nested) δομές ελέγχου 28

Παράδειγμα 1 : Καθορισμένος αριθμός επαναλήψεων Να γραφεί ένα πρόγραμμα που διαβάζει δέκα ακεραίους, έναν κάθε φορά και τυπώνει το μερικό άθροισμα. Στο τέλος τυπώνεται το συνολικό άθροισμα και το γινό μενό τους. (Εδώ λύση χωρίς πίνακες). 29

Λεκτική περιγραφή Επανάλαβε για δέκα φορές { Διάβασε το num => scanf() Υπολόγισε το sum =>computesum() ή sum=sum+num Τύπωσε το sum => printf() 30

#include <stdio.h> main() { int i, num, sum=0; #include <stdio.h> #define N 10 main() { int i, num, sum=0; for (i=0; i<10; i++) { scanf("%d", &num); sum = sum + num; printf("partial sum: %d\n", sum); printf("total: %d", sum); for (i=0; i<n; i++) { scanf("%d", &num); sum = sum + num; printf("partial sum: %d\n", sum); printf("total: %d", sum); 31

Παράδειγμα 2.1:Αριθμός επαναλήψεων εξαρτώμενος από τα δεδομένα Να γραφεί ένα πρόγραμμα που διαβάζει ακεραίους, έναν κάθε φορά και τυπώνει το μερικό άθροισμα, όσο ο χρήστης δίνει ως είσοδο αριθμούς > 0. Αριθμοί 0 δεν λαμβάνονται υπόψη στους υπολογισμούς. Στο τέλος τυπώνεται το συνολικό άθροισμα και το γινόμενό τους. 32

Έκδοση 5 #include <stdio.h> int main( ) { int input=1, sum = 0, prod = 1; while ( input > 0) { scanf("%d", &input) ; if (input <=0 ) break; sum = sum + input ; printf("partial sum: %d\n", sum); prod = prod * input ; printf("sum: %d\n", sum); printf("product: %d\n", prod); return 0; 33

Παράδειγμα 3.1 Να γραφεί ένα πρόγραμμα που διαβάζει ακεραίους ένα ν κάθε φορά και τυπώνει το μερικό άθροισμα των άρτιων, όσο ο χρήστης δίνει ως είσοδο αριθμούς > 0. Aριθμοί 0 δεν λαμβάνονται υπόψη στους υπολογισμούς Στο τέλος τυπώνεται το συνολικό άθροισμα και το γινόμενό των άρτιων. 34

Παράδειγμα 3.1 Eκδοση 1 #include <stdio.h> #include <stdlib.h> int main( ) { int input=1, sum = 0, prod = 1; while ( input > 0) { scanf("%d", &input) ; if (input > 0 ) { if ( input % 2 == 0 ) { sum = sum + input ; printf("input even, partial sum: %d\n", sum); prod = prod * input ; printf("sum: %d\n", sum); printf("product: %d\n", prod); return 0; 35

#include <stdio.h> #include <stdlib.h> Παράδειγμα 3.1 Έκδοση 1.1 int main( ) { int input=1, sum = 0, prod = 1; while ( input > 0) { scanf("%d", &input) ; λογική σύζευξη (ΚΑΙ, AND) if (input > 0 && input % 2 == 0 ) { sum = sum + input ; printf("input even, partial sum: %d\n", sum); prod = prod * input ; printf("sum: %d\n", sum); printf("product: %d\n", prod); return 0; 36

#include <stdio.h> Παράδειγμα 3.1 έκδοση 2 int main( ) { int input=1, sum = 0, prod = 1; while ( input > 0) { scanf("%d", &input) ; if (input <=0 ) break ; if (input % 2!= 0) continue; sum = sum + input ; printf("input even, partial sum: %d\n", sum); prod = prod * input ; printf("sum: %d\n", sum); printf("product: %d\n", prod); return 0; 37

Παράδειγμα 4:Ένθετοι βρόχοι επανάληψης Διάβασε τριάδες ακεραίων i, j, k ως εξής διάβαζε τιμές i, όσο i>0. Για κάθε i: αν i <=0, σταμάτα αλλιώς διάβαζε τιμές του j, όσο j>0. Για κάθε j αν j <=0, διάβασε νέα τιμή του i αλλιώς διάβαζε τιμές του k, όσο k>0. Για κάθε k αν k ==0 σταμάτα το διάβασμα όλων αν k <=0 διάβασε νέα τιμή του j 38

Αποτέλεσμα 39

Έκδοση 0 Λεκτική περιγραφή Αρχικοποίηση i Όσο (i>0) { Διάβασε i Αν (i > 0) { Αρχικοποίηση j Όσο (j > 0) { Διάβασε j Αν (j > 0) { Αρχικοποίηση k Όσο (k>0) { Διάβασε k Αν (k == 0) { βγες εκτός των βρόχων Πώς θα γίνει αυτό; 40 40

Έκδοση 1 #include <stdio.h> int main() { int i,j, k, sum; int exitall = 0 ; i = 1; while(i>0 &&!exitall) { printf("enter i:"); scanf("%d", &i); if ( i > 0) { j = 1; while (j>0 &&!exitall) { printf("\tenter j:"); scanf("%d", &j); if ( j > 0) { k = 1; while (k > 0 ) { printf("\t\tenter k:"); scanf("%d", &k); if ( k == 0) exitall = 1; else { if (k > 0 ) { sum = sum + k; printf("out of the loops!\n"); return 0; Δομημένο στυλ exitall Ελέγχει την έξοδο από Βρόχους επανάληψης. 41

Έκδοση 2 #include <stdio.h> int main( ) { int i,j, k, sum; i = 1; while (i>0) { printf("enter i:"); scanf("%d", &i); if ( i > 0) { j = 1; while (j>0 ) { printf("\tenter j:"); scanf("%d", &j); if ( j > 0) { k = 1; while (k > 0 ) { printf("\t\tenter k:"); scanf("%d", &k); if ( k == 0) goto EXITLOOPS; else { if (k > 0 ) { sum = sum + k; EXITLOOPS: printf("out of the loops!\n"); return 0; 42

Πολλαπλές επιλογές: switch switch (έκφραση) { case τιμή1: εντολές ; break; case τιμή2: εντολές ; break; case τιμή3: εντολές ; break; /* */ case τιμή1: λειτουργεί ως label default: εντολές ; break; break: μεταφέρει τον έλεγχο εκτός του switch () { τι γίνεται χωρίς break ; 43

Παράδειγμα Να γραφεί πρόγραμμα τέτοιο ώστε το σύστημα να ζητά από το χρήστη να επιλέξει μεταξύ τριών επιλογών: να ξεκινήσει μια συγκεκριμένη διεργασία, να σταματήσει η διεργασία, να λήξει η εκτέλεση του προγράμματος. Θα ζητείται είσοδος από το χρήστη έως ότου επιλεγεί η λήξη του προγράμματος. 44

Παράδειγμα Λεκτική περιγραφή λύσης Ζήτησε από το χρήστη να επιλέξει μεταξύ τριών επιλογών: να ξεκινήσει μια συγκεκριμένη διεργασία, να σταματήσει η διεργασία, int userchoice() να λήξει η εκτέλεση του προγράμματος. Συνέχισε να ζητάς επιλογή από χρήστη έως ότου επιλεγεί η λήξη του προγράμματος. 45

Παράδειγμα Λεκτική περιγραφή λύσης (2) Ζήτησε από το χρήστη να επιλέξει μεταξύ τριών επιλογών: Ανάλογα με την userchoice αν είναι 1, ξεκίνησε τη διεργασία, αν είναι 2, σταμάτα τη διεργασία, getchoice( ) start( ) αν είναι 3, να λήξει η εκτέλεση του προγράμματος. Συνέχισε να ζητάς επιλογή από χρήστη έως ότου επιλε γεί η λήξη του προγράμματος. stop() 46

Λεκτική περιγραφή λύσης userchoice = getchoice(); while (δεν επιλέχθηκε η λήξη) { Ανάλογα με την userchoice αν είναι 1, start(); αν είναι 2, stop(); αν είναι 3, να λήξει η εκτέλεση του προγράμματος. userchoice = getchoice(); 47

Οργάνωση βασικού βρόχου (1) main ( ) { int userchoice ; userchoice = getchoice ( ) ; while (userchoice!= 3 ) { switch (userchoice) { case 1: start( ); break; case 2: stop( ); break; default: break; userchoice = getchoice() ; 48

main ( ){ int userchoice ; userchoice = getchoice(); while (userchoice!= 3) { switch (userchoice) { case 1: start( ); break; case 2: stop( ); break; default:break; userchoice=getchoice(); main ( ) { int userchoice ; while((userchoice=getchoice ())!= 3) { switch (userchoice) { case 1: start(); break; case 2: stop(); break; default: break; 49

Υλοποίηση συνάρτησης getchoice( ) int getchoice (void) { int choice ; printf("1: start\n2: stop\n3: quit\n"); printf("enter choice:\n"); scanf("%d", &choice); return choice; κλήση (χρήση) (πχ στην υλοποίηση της main() ) userchoice = getchoice( ); 50

Παραδείγματα #include <stdio.h> int getchoice (void) ; void start (void) ; void stop (void); main (){ int userchoice ; while ((userchoice = getchoice())!= 3){ switch (userchoice) { case 1: start() ; break; case 2: stop(); break; default: break; int getchoice (void ) { int choice ; printf("1: start\n2: stop\n3:quit\n"); printf("enter choice:\n"); scanf("%d", &choice); return choice; void start (void) { printf("start..."); void stop (void) { printf("stop..."); 51

Σημείωμα αναφοράς Copyright Πανεπιστήμιο Πατρών, Παλιουράς Βασίλειος, Δερματάς Ευάγγελος «Αρχές Προγραμματισμού». Έκδοση: 1.0. Πάτρα 2015 Διαθέσιμο από τη δικτυακιακή διέυθυνση https://eclass.upatras.gr/modules/ 52