Εργαστήριο 3 ο Δομές Ελέγχου και Επανάληψης Εισαγωγή Σκοπο ς του εργαστηρι ου αυτου ει ναι η εισαγωγη στην εκτε λεση εντολω ν υπο συνθη κη και στις δομές επανάληψης. Δομές Ελέγχου Η ικανότητα να μπορεί να ελεχθεί η ροή του προγράμματός, αφήνοντάς το να λαμβάνει αποφάσεις σχετικά με το τι κώδικα να εκτελέσει, είναι πολύτιμη για τον προγραμματιστή. Η εντολή if Η εντολή if μας επιτρέπει να ελέγχουμε αν η εκτέλεση του προγράμματος θα εισέρθει σε ένα τμήμα του κώδικα ή όχι ανάλογα με το αν μια συγκεκριμένη συνθήκη είναι αληθής ή ψευδής. Για παράδειγμα, χρησιμοποιώντας μια εντολή if είναι δυνατός ο έλεγχος ενός κωδικού πρόσβασης, έτσι το πρόγραμμά σας μπορεί να αποφασίσει αν ο χρήστης έχει τη δυνατότητα πρόσβασης στις λειτουργίες μιας εφαρμογής. Χωρίς δομές ελέγχου, όπως η δήλωση if, τα προγράμματα θα τρέχουν σχεδόν με τον ίδιο ακριβώς τρόπο κάθε φορά, ακολουθώντας πάντα την ίδια ακολουθία κλήσεων λειτουργίας. Οι δομές ελέγχου επιτρέπουν τη αλλαγή της ροής του προγράμματος οδηγόντας σε πιο ενδιαφέρον κώδικα. Σχετικά με την δυνατότητα εισαγωγής δομών ελέγχου, η C διαθε τει δυ ο συναρτήσεις, την if και την switch-case. Η εντολή if ελέγχει την υπό όρους διακλάδωση. Το κύριο σώμα της if εκτελείται αν η τιμή της έκφρασης δεν είναι μηδέν. Η σύνταξη για την if έχει δύο μορφές, if(συνθήκη) πρόταση if(συνθήκη) πρόταση A πρόταση Β Και στις δύο εκφάνσεις της δήλωσης if, οι συνθήκες μπορούν να έχουν οποιαδήποτε τιμή. Για την δημιουργία των διάφορων συνθηκών μπορούμε να κάνουμε χρήση των παρακάτω τελεστών σύγκρισης, > greater than 5 > 4 is TRUE < less than 4 < 5 is TRUE >= greater than or equal 4 >= 4 is TRUE <= less than or equal 3 <= 4 is TRUE == equal to 5 == 5 is TRUE!= not equal to 5!= 4 is TRUE
Στην πιο απλή της μορφή η εντολή if συντάσσεται ως εξής: if(συνθήκη) Η ομάδα εντολών που βρίσκεται μέσα στα άγκιστρα θα εκτελεστούν μόνο στην περίπτωση που η συνθήκη θα επιστρέψει τιμή 1 (δηλαδή είναι true). Σε περίπτωση που θα θέλαμε να εκτελεστεί κάτι άλλο όταν η συνθήκη είναι false τότε η παραπάνω δομή ελέγχου γίνεται ως εξής, if(συνθήκη) Στην παραπάνω περίπτωση αν η συνθήκη είναι TRUE εκτελούνται οι εντολές από και κάτω, αλλιώς εκτελούνται οι εντολές από και κάτω. Σε αυτό το σημείο αξίζει να σημειώσουμε πως το σώμα μια δομής ελέγχου δίναται να περιέχει και άλλες δομές ελέγχου. Για παράδειγμα μελετήστε το παρακάτω απόσπασμα κώδικα, if(συνθήκη 1) if(συνθήκη 2) εντολή 3
Yπάρχει η δυνατότητα να έχουμε πιο σύνθετες δομές ελέγχου όπου μπορούμε να ελέγχουμε περισσότερες συνθήκες. Ένα παράδειγμα μιας τέτοιας δομής ελέγχου φαίνεται παρακάτω, if(συνθήκη 1) if(συνθήκη 2) εντολή 3 Τέλος, όσον αφορά την δημιουργία συνθηκών ελέγχου μπορούμε να κάνουμε χρήση των λογικών τελεστών, && (and) (or)! (not) Έτσι για παράδειγμα μπορούμε να έχουμε την παρακάτω δομή ελέγχου, if(συνθήκη1&&συνθήκη2) if(συνθήκη3 συνθήκη4) εντολή 3 Η εντολη switch-case Η προ ταση swtch-case ελε γχει αν η τιμη μιας ακε ραιας παρα στασης ισου ται με συγκεκριμε νες σταθερε ς (και μο νο σταθερε ς). Το switch ει ναι ε νας α λλος τρο πος επιλογη ς μιας μεταξυ πολλω ν εναλλακτικω ν
αποφα σεων. Ει ναι ιδιαι τερα χρη σιμο στις περιπτω σεις που η επιλογη ει ναι βασισμε νη στη τιμη μιας συγκεκριμε νης μεταβλητη ς η μιας ε κφρασης (controlling expression). Η τιμη της ε κφρασης μπορει να ει ναι του τυ που int η char, αλλα ο χι double. Το συντακτικο της ει ναι το εξη ς: switch (κατα σταση ελε γχου) case τιμή : Εντολή 2;.. break; case τιμή : Εντολή 2;.. break; case τιμή : Εντολή 2;.. break; Default: Δομές Επανάληψης Όσον αφορά τις δομές επανάληψης θα ασχοληθου με με την υλοποι ηση βρο χων με χρη ση των εντολω ν for, while κ α ι do-while. Οι βρο χοι επιτρε πουν στον υπολογιστη να επαναλαμβα νει ε να συ νολο εντολω ν με χρι να ικανοποιηθει μια συνθη κη. Ο βρο χος for Η απλου στερη μορφη του βρο χου for ει ναι: for(αρχή; συνθήκη; βήμα) εντολή; ο που η αρχη δι νει μιαν αρχικη τιμη στη μεταβλητη ελε γχου του βρο χου. Η συνθη κη ει ναι μια παρα σταση που ελε γχει η C κα θε φορα που ο βρο χος επαναλαμβα νεται. Ο σο η συνθη κη ει ναι αληθη ς, ο βρο χος θα εκτελει ται. Το βη μα αυξα νει την μεταβλητη ελε γχου του βρο χου. Για παρα δειγμα, το παρακα τω προ γραμμα τυπω νει στην οθο νη τους αριθμου ς απο 1 εως 100:
#include <stdio.h> int count; for(count=1; count<=100; count++) printf( %d, count); Μια απο τις πιο ενδιαφε ρουσες χρη σεις του βρο χου for ει ναι ο ατε ρμονας βρο χος. Αυτο ς μπορει να υλοποιηθει απλα αν αφη σουμε κενε ς τις παραστα σεις με σα στην παρε νθεση του, δηλαδη : for(;;) printf( Αυτός ο βρόχος θα εκτελει ται επ'αόριστο.\n ); Η δομη for(;;) δεν δημιουργει υποχρεωτικα ε ναν ατε ρμονα βρο χο γιατι η εντολη break; ο ταν συναντιε ται οπουδη ποτε με σα στον κορμο ενο ς βρο χου προκαλει αυτο ματο τερματισμο. Για παρα δειγμα, #include <stdio.h> char ch; for(;;) ch = getch(); /* Δια βασε ε ναν χαρακτήρα*/ if(ch == 'A') break; /* ε ξοδος από τον βρόχο*/ printf( Πληκτρολογήσατε το Α. \n); Ο βρο χος while Ο δευ τερος βρο χος που διαθε τει η C ει ναι ο while. Η γενικη του μορφη ει ναι: while(συνθήκη) εντολή; ο που εντολη μπορει να ει ναι ει τε κενη εντολη, μι α μο νο εντολη, η μια ομα δα εντολω ν που θα επαναλαμβα νεται. Η συνθη κη μπορει να ει ναι οποιαδη ποτε αποδεκτη προ ταση. Ο βρο χος επαναλαμβα νεται ο σο η συνθη κη ει ναι αληθη ς. Παρα δειγμα, #include <stdio.h> char ch; ch = '\0'; while(ch!= 'A') ch = getch();
Ο βρο χος do/while Σε αντι θεση με τον βρο χο for και τον βρο χο while που ελε γχουν τη συνθη κη του βρο χου στην αρχη του, ο βρο χος do/while ελε γχει την συνθη κη του βρο χου στο τε λος του. Αυτο το χαρακτηριστικο προκαλει την εκτε λεση του βρο χου do/while τουλα χιστον μια φορα. Η γενικη μορφη του βρο χου do/while ει ναι, do ; while(συνθήκη); Στο παρακα τω προ γραμμα χρησιμοποιει ται ε να do/while για να διαβα ζει αριθμου ς απο το πληκτρολο γιο με χρι κα ποιος απο τους αριθμου ς να ει ναι μικρο τερος απο 100: #include <stdio.h> int num; do scanf( %d, &num); while(num > 100); printf( Εισαγα γατε αριθμό μικρότερο του 100. \n); Η πιο κοινη ι σως χρη ση του do/while ει ναι σε μια ρουτι να επιλογω ν απο μενου, η οποι α θα πρε πει μα εκτελει ται πα ντα μια φορα, παρα δειγμα: #include <stdio.h> int choice; do printf('μετατροπή: \n ); printf( \t1. Από δεκαδικό σε δεκαεξαδικό\n ); printf( \t2. Από δεκαεξαδικό σε δεκαδικό\n ); printf( \t3. Από δεκαδικό σε οκταδικό\n ); printf( \t4. Από οκταδικό σε δεκαδικό\n ); printf( διαλε ξτε: ); scanf( %d, &choice); while(choice <1 choice >4);
Ασκήσεις 1. Να γραφεί πρόγραμμα το οποίο να διαβάζει από το πληκτρολόγιο 2 αριθμούς και έναν αριθμητικό τελεστή ως χαρακτήρα και θα εκτελεί τις τέσσερις βασικές αριθμητικές πράξεις. 2. Να γραφεί πρόγραμμα το οποίο να τυπώνει τους αριθμούς διαιρούνται ακριβώς με το 7 από το 1 εώς το 1000. 3. Να γραφεί πρόγραμμα το οποίο να διαβάζει από το πληκτρολόγια δύο χαρακτήρες και να τυπώνει όλους τους ενδιάμεσους χαρακτήρες του κώδικα ASCII 4. Να γραφεί πρόγραμμα στο οποίο να δίνεται σαν είσοδο τον αριθμό των γραμμών του τριγώνου Floyd και να το εμφανίζεται στην οθόνη. Η έξοδος του προγράμματος φαίνεται στην παρακάτω εικόνα, 5. Να γραφεί πρόγραμμα στο οποίο αφού δώσετε έναν τριψήφιο ακέραιο αριθμό να τον τυπώνεται στην οθόνη με τα ψηφία του αντεστραμένα. Για παράδειγμα, αν δώσετε σαν είσοδο τον αριθμό 123, να τυπώνετε στην οθόνη 321. Υπόδειξη: Ο αλγόριθμος που υλοποιεί την παραπάνω μετατροπή είναι ο εξής, Input: num (1) Initialize rev_num = 0 (2) Loop while num > 0 (a) Multiply rev_num by 10 and add remainder of num divide by 10 to rev_num rev_num = rev_num*10 + num%10; (b) Divide num by 10 (3) Return rev_num 6. Να γραφεί πρόγραμμα στο οποίο να δίνεται έναν ακέραιο αριθμό και να ελέγχεται αν είναι περιττός ή άρτιος, να τυπώνεται το παραγοντικό του. Το πρόγραμμα να σταματάει όταν δώσετε μηδέν.