3 #.Μάθημα Προγραμματισμού με τη C++

 


η συνέχεια του μαθήματος  
Σελίδα2 - ΕΠΙΛΟΓΗ ΔΡΟΜΟΥ, Η ΠΡΟΤΑΣΗ switch

Εάν έχουμε ένα πλήθος αποφάσεων έτσι ώστε μία κατασκευή ένθετων if να μοιάζει δαιδαλώδης και επίσης όλες οι αποφάσεις εξαρτώνται από την τιμή μιας μεταβλητής, τότε είναι προτιμότερο να χρησιμοποιήσουμε μία πρόταση switch.
Η γενική μορφή μιας πρότασης switch έχει ως εξής:

Η δεσμευμένη λέξη switch ακολουθείται από μία μεταβλητή μέσα σε παρενθέσεις. Η μεταβλητή παίζει το ρόλο του διακόπτη (switch) και η επιλογή δρόμου βασίζεται αποκλειστικά στην τιμή της.
Στη συνέχεια τα άγκιστρα οριοθετούν ένα τμήμα προγράμματος με διάφορες περιπτώσεις (case). Κάθε δεσμευμένη λέξη case ακολουθείται από μία σταθερά που δεν είναι σε παρενθέσεις, αλλά συνοδεύεται από άνω και κάτω τελεία. Ο τύπος δεδομένων των σταθερών για κάθε περίπτωση θα πρέπει να συμφωνεί με το τύπο δεδομένων της μεταβλητής διακόπτη.


Όταν η τιμή της μεταβλητής είναι ίδια με την τιμή της σταθεράς μιας περίπτωσης τότε εκτελούνται οι εντολές που ακολουθούν την άνω και κάτω τελεία.
Η εντολή break εξαναγκάζει τον έλεγχο του προγράμματος να βγει έξω από την πρόταση switch και να συνεχίσει μετά το άγκιστρο που οριοθετεί το τέλος της. Είναι πολύ σημαντικό να μην την παραλείψετε, διαφορετικά δεν θα αναγκάσετε τον έλεγχο να βγει έξω από την πρόταση switch. Αυτό θα έχει ως αποτέλεσμα να εκτελεστούν όλες οι εντολές που ακολουθούν μέχρι το άγκιστρο.
Η δεσμευμένη λέξη default παίζει τον ρόλο του else της πρότασης if. Έτσι κι εδώ, όταν θέλουμε να εκτελεστούν κάποιες εντολές, ακόμα και όταν η μεταβλητή διακόπτης δεν ισούται με κάποια σταθερά των περιπτώσεων, τότε τις γράφουμε μετά τη λέξη default. Είναι δηλαδή οι προκαθορισμένες εντολές που θα εκτελεστούν όταν η τιμή της μεταβλητής δεν αντιστοιχεί σε καμιά από τις σταθερές case.
Το επόμενο παράδειγμα μας θυμίζει τα παλιά ηλεκτρονικά παιχνίδια και την επιλογή δρόμου από το πρόγραμμα με βάση την τιμή που δίνουμε σε μια μεταβλητή διακόπτη:
#include <iostream.h>
void main()
{
 int input;
 cout<<"1. Play game";
 cout<<"2. Load game";
 cout<<"3. Play multiplayer";
 cout<<"4. Exit";
 cin>>input;

 switch (input)
 {
   case 1:
     playgame(); //Συνάρτηση που έχουμε γράψει
     break;

   case 2:
     loadgame(); //Συνάρτηση που έχουμε γράψει
     break;

   case 3:
     playmultiplayer(); //Συνάρτηση που έχουμε      break;                    //γράψει

   case 4:
     break;

   default:
     cout<<"Bad input, quitting";
 }



Σελίδα3 - Σύνθετες Λογικές Συνθήκες
if…else ή switch
Πότε χρησιμοποιείται μία πρόταση if…else και πότε μία πρόταση switch; Η πρόταση switch χρησιμοποιείται μόνο όταν οι επιλογές είναι πολλές και η απόφαση εξαρτάται από την τιμή μιας μεταβλητής. Η τιμή της μεταβλητής συγκρίνεται με τις σταθερές των περιπτώσεων case. Οι περιπτώσεις case δεν καλύπτουν εύρος τιμών. Όταν θέλετε να καλύψετε ένα εύρος τιμών μιας μεταβλητής, τότε καλύτερα χρησιμοποιήστε μία πρόταση if…else.
Επίσης σε μία κατασκευή με ένθετα if, μπορεί κάθε πρόταση if να εξετάζει διαφορετικές μεταβλητές, σε αντίθεση με την πρόταση switch όπου όλα εξαρτώνται από την τιμή μιας μεταβλητής:
if (examino < 6)
  // εντολές
else if (mathimata > 20)
        // εντολές
     else
       // εντολές
Σύνθετες Λογικές Συνθήκες
Όταν μιλούσαμε για τελεστές είχαμε αναφέρει τους λογικούς τελεστές (!, && , || ). Χρησιμοποιούμε τους λογικούς τελεστές όταν θέλουμε να συνδέσουμε λογικές συνθήκες ώστε να προκύψει μία μεγαλύτερη λογική συνθήκη.
Όπως είδαμε ο λογικός τελεστής !, δέχεται μία μόνο λογική συνθήκη και αντιστρέφει τη λογική τιμή της. Πχ. αν το x είναι 5, η λογική συνθήκη (x==5) είναι αληθής, ενώ η λογική συνθήκη !(x==5) είναι ψευδής.
Επίσης είδαμε ότι ο τελεστής && είναι το λογικό ΚΑΙ και ο τελεστής || είναι το λογικό Ή. Για να είναι αληθής μία παράσταση που προκύπτει από τη σύνδεση μικρότερων με λογικό ΚΑΙ, θα πρέπει κάθε μία από αυτές να είναι αληθής. Ενώ όταν συνδέουμε παραστάσεις με λογικό Ή αρκεί μία μόνο από αυτές να είναι αληθής για να είναι και η τελική παράσταση αληθής.
float mathimatika=3.5;
float fysiki=6.5;

if ((mathimatika>5) && (fysiki>5)) // false
   cout<< "petyxa se ola";
if ((mathimatika>5) || (fysiki>5)) //true
   cout<< "Se kapoio petyxa";