====== Άσκηση 4 - If then else ======
* Στην προηγούμενη άσκηση είδαμε πως ο ΗΥ αποθηκεύει τιμές σε μεταβλητές και κάνει πράξεις με αυτές.
* Στην νέα άσκηση θα δούμε τα εξής :
* Πως ελέγχουμε μια συνθήκη. Π.χ. **αν (if)** η αποθηκευμένη τιμή της μεταβλητής **pliromi_proion1** **είναι μικρότερη** από την αποθηκευμένη τιμή της μεταβλητής **kostos_proion1** **τότε (then)** να κάνουμε κάτι **αλλιώς (else)** να κάνουμε κάτι άλλο.
- **ΑΝΟΙΓΜΑ ΕΡΓΟΥ** - Αν δεν είναι ήδη ανοιχτό, θα ανοίξουμε το υπάρχον έργο **agora** και το αρχείο **agora.pas**
- **ΠΡΟΣΘΗΚΗ ΕΛΕΓΧΟΥ**
* Μετά τις τελευταίες αλλαγές στην άσκηση 3, δηλώσαμε μια νέα μεταβλητή **pliromi_synolo** (ή άλλο όνομα που διαλέξατε εσείς) και ζητήσαμε από τον χρήστη να εισάγει το συνολικό ποσό πληρωμής. Επίσης καλό είναι να δηλωθεί (αν δεν το κάνατε ήδη) και μια μεταβλητή **kostos_synolo** (ή άλλο περιγραφικό όνομα που σας αρέσει) στην οποία θα αποθηκευτεί το συνολικό κόστος και των 2 προϊόντων.
* **kostos_synolo:=kostos_proion1+kostos_proion2;**
* Τα συνολικά ρέστα υπολογίζονται με μια απλή αφαίρεση και αποθηκεύονται στην μεταβλητή **resta_synolo** (ή άλλο περιγραφικό όνομα που σας αρέσει)
* **ΠΡΟΒΛΗΜΑ : ** Αν ο χρήστης εισάγει ποσό μικρότερο από το συνολικό κόστος π.χ. 60€ αντί για τουλάχιστον 70€, εμείς θα του απαντήσουμε σαν να μην συμβαίνει τίποτα ότι τα ρέστα του είναι **-10€** και θα φύγει σίγουρα ευχαριστημένος!
- Θα πρέπει λοιπόν να ελέγξουμε το ποσό που μας δίνει. Ο έλεγχος θα γίνει με την εντολή **if** και την σύγκριση των μεταβλητών και αν η πληρωμή είναι μικρότερη από το συνολικό κόστος, θα του εμφανίσουμε ένα μήνυμα ότι δεν μας έδωσε όλο το ποσό. Εισάγουμε :
if pliromi_synolo < kostos_synolo then
writeln('Παρακαλώ δώστε όλο το ποσό');
- Αλλιώς, **(else)**, είμαστε εντάξει. Οπότε τις εντολές που υπολογίζουν τα συνολικά ρέστα και τα εμφανίζουν στην οθόνη θα τις βάλουμε μέσα στο αλλιώς **(else)**. Και επειδή είναι 2 εντολές θα τις βάλουμε μέσα σε **begin .. end**
if pliromi_synolo < kostos_synolo then
writeln('Παρακαλώ δώστε όλο το ποσό')
else
begin
resta_synolo:=pliromi_synolo - kostos_synolo;
writeln('Μου έδωσες ', pliromi_synolo, '€. Τα ρέστα σου είναι ', resta_synolo, '€');
end
* Μετά το **then**, //(τότε)//, είχαμε μία εντολή, οπότε δεν χρειαστήκαμε **begin .. end**. Θα μπορούσαμε να βάλουμε, αλλά είναι περιττό.
* Επίσης η pascal έχει μία ιδιαιτερότητα στην σύνταξη, **αν έχουμε μόνο μια εντολή πριν από το else δεν βάζουμε ερωτηματικό**. Απλά θα το θυμόμαστε..
- **ΑΛΛΑΓΕΣ 1 - Ανάποδη συνθήκη**
* Είδαμε ότι μέσα στην συνθήκη συγκρίνουμε μεταβλητές που περιέχουν αριθμούς, (δεν μπορούμε κείμενα). Ας δούμε και ένα πίνακα με όλες τις [[el:school:lessons:programmatismos:pascal:sinthikes]].
* Θα αλλάξουμε την συνθήκη της **if** με την αντίθετή της, δηλαδή, εάν το ποσό πληρωμής που δώσαμε είναι **μεγαλύτερο ή ίσο** με το κόστος των προϊόντων.
- Αλλάζουμε την συνθήκη λοιπόν και μεταφέρουμε αντίστοιχα τις εντολές που θα εκτελεστούν αν ισχύει και αν δεν ισχύει.
- Επίσης κάνουμε πιο περιγραφική την απάντηση **Παρακαλώ δώστε όλο το ποσό. Το συνολικό κόστος είναι //τόσα// €.** (Εννοείται ότι όπου //τόσα// Θα εμφανίσουμε την τιμή της μεταβλητής που περιέχει το συνολικό κόστος)
- **ΑΛΛΑΓΕΣ 2 - Ιδιαιτερότητες στην σύνταξη**
- Γράφουμε μία τελευταία εντολή μετά από όλη την **if .. then .. else** και πριν το **END.** που να εμφανίζει το κείμενο **-->>ΤΕΛΟΣ ΠΡΟΓΡΑΜΜΑΤΟΣ<<--**
- Μήπως η μεταγλώττιση απέτυχε; Αν ναί, **ΠΡΟΣΟΧΗ!!** Αν έχουμε **1 εντολή μετά το else __βάζουμε__** στο τέλος ερωτηματικό, ενώ πριν είδαμε ότι με **1 εντολή μετά το then __δεν βάζουμε__**
- Στην τελευταία εντολή πριν το END. αφαιρέστε το ερωτηματικό. Ομοίως αφαιρέστε το και στην τελευταία εντολή πριν το end της συνθήκης.
- Κάντε ξανά μεταγλώττιση. Γίνεται με επιτυχία! Πριν από κάθε **end** το ερωτηματικό είναι προεραιτικό!
* Για να μην μπερδευτούμε : **Εμείς θα βάζουμε πάντα ερωτηματικό στο τέλος κάθε εντολής, εκτός στο τέλος μίας μόνο εντολής μετά το then και πριν το else**
- **ΑΛΛΑΓΕΣ 3 - Συντομότερες δηλώσεις**
* Έστω ότι είμαστε 10 άτομα και χωριζόμαστε σε 2 ομάδες για να παίξουμε κάποιο άθλημα. Τι θα λέγαμε; Ο Γιώργος είναι στην 1η ομάδα, ο Νίκος είναι στην 2η ομάδα, η Μαρία είναι στην 1η ομάδα, ο Τάσος είναι στην 1η ομάδα, η Χριστίνα είναι στην 2η ομάδα.. ;; Μάλλον θα λέγαμε : Ο Γιώργος, η Μαρία, ο Τάσος είναι στην 1η ομάδα. Ο Νίκος, η Χριστίνα είναι στην 2η ομάδα..
* Πάμε να κάνουμε κάτι ανάλογο στις δηλώσεις, δηλώνοντας πολλές μεταβλητές ότι είναι ίδιου τύπου, χωρίζοντάς τις με **,** .
* Στην Pascal ισχύει ότι οι δηλώσεις : kostos_proion1 : integer;
kostos_proion2 : integer;
* είναι όμοιες με τις δηλώσεις : kostos_proion1, kostos_proion2 : integer;
- Με τον παραπάνω τρόπο, μαζεύουμε όλες τις δηλώσεις που είναι 6-7 γραμμές, σε 2 γραμμές.
----
* **ΕΠΕΚΤΑΣΗ / ΑΣΚΗΣΗ ΓΙΑ ΤΟ ΣΠΙΤΙ**
* Δείτε την επέκταση της προηγούμενης άσκησης, όπου ο Κώστας είναι 12 χρονών και λαμβάνουμε από τον χρήστη το όνομα και την ηλικία του.
* Στο τέλος της θα ελέγξουμε αν ο χρήστης είναι μεγαλύτερος από τον Κώστα. Αν είναι, θα υπολογίσουμε πόσα χρόνια και θα εμφανίσουμε μήνυμα **Είσαι //τόσα// χρόνια μεγαλύτερος** (όπου //τόσα// η διαφορά τους). Αλλιώς θα εμφανίσουμε μήνυμα **Είσαι //τόσα// χρόνια μικρότερος.**
* Τι γίνεται αν ο χρήστης είναι 12 χρονών; Θα εμφανίσει **Είσαι 0 χρόνια μικρότερος** που δεν είναι ωραίο. Υπομονή μέχρι την επόμενη άσκηση που θα το φτιάξουμε και αυτό με επιπλέον **if** μέσα στο **then** ή στο **else (εμφωλιασμένες if)**. Σκεφτείτε το..