====== Άσκηση 7 - Επιλογές - (case, div, mod, real, writeln δεκαδικά) ====== * Στην προηγούμενη άσκηση είδαμε την χρήση της **case** με επιλογές ακέραιους αριθμούς ή χαρακτήρες. * Στην νέα άσκηση θα δούμε επιπλέον τα εξής : * Πολλές εντολές στην **case** με χρήση **begin .. end** * Ακέραια διαίρεση με την **div** και υπόλοιπο με την **mod** * Νέο τύπο μεταβλητής **real** και εμφάνιση δεκαδικών ψηφίων με την **writeln** - **ΑΝΟΙΓΜΑ ΕΡΓΟΥ** - Αν δεν είναι ήδη ανοιχτό, θα ανοίξουμε το υπάρχον έργο **epiloges** και το αρχείο **epiloges.pas** - **ΠΡΟΣΘΗΚΗ 1** * Μέχρι στιγμής το πρόγραμμά μας δεν κάνει κάτι ουσιαστικό. Πάμε να υλοποιήσουμε αυτά που λέει. - **Διαίρεση Ακεραίων** : Στην επιλογή **'1'** έχουμε ήδη μια **writeln** με ένα μήνυμα στην οθόνη. Για να βάλουμε και 2η εντολή θα προσθέσουμε **begin** πριν την **writeln** και **end** μετά ως εξής. Αλλάζουμε το : '1': writeln('**Διαίρεση Ακεραίων**'); σε '1': begin writeln('**Διαίρεση Ακεραίων**'); {εδώ θα μπουν οι επιπλέον εντολές..} end; - Θα ζητήσουμε 2 ακεραίους. Αρχικά με μήνυμα **Δώσε τον 1ο αριθμό**. - Θα **διαβάσουμε** από τον χρήστη έναν ακέραιο και θα τον αποθηκεύσουμε σε μια μεταβλητή π.χ. **akeraios1** - Ζητάμε και **2ο αριθμό** και αποθηκεύουμε σε άλλη μεταβλητή με όμοιο τρόπο. - Για την ακέραια διαίρεση χρησιμοποιούμε τον τελεστή **div** και το αποτέλεσμα (πηλίκο) το αποθηκεύουμε σε μια νέα μεταβλητή. Δηλαδή **piliko:=akeraios1 div akeraios2;** - Για να υπολογίζουμε το υπόλοιπο χρησιμοποιούμε τον τελεστή **mod** και το υπόλοιπο το αποθηκεύουμε σε μια νέα μεταβλητή. Δηλαδή **ypoloipo:=akeraios1 mod akeraios2;** - Εμφανίζουμε τέλος ένα μήνυμα **Το πηλίκο είναι .. και υπόλοιπο είναι ..** (με τις μεταβλητές εκεί που πρέπει) - Όλες τις μεταβλητές τύπου ακεραίου τις δηλώνουμε σε μία γραμμή. - **ΠΡΟΣΘΗΚΗ 2** * Πάμε να υλοποιήσουμε και την **Διαίρεση πραγματικών**. - Με όμοιο τρόπο όπως στην **Διαίρεση ακεραίων** ζητήστε 2 αριθμούς από τον χρήστη και αποθηκεύστε στις μεταβλητές **pragmatikos1** και **pragmatikos2** - Κάνουμε την διαίρεση με τον τελεστή **/** και αποθηκεύουμε το αποτέλεσμα σε νέα μεταβλητή. Δηλαδή **apotelesma:=pragmatikos1 / pragmatikos2;**. Υπόλοιπα εδώ δεν υπάρχουν. - Ορίζουμε τις νέες μεταβλητές να είναι τύπου **real**. (Σε μία γραμμή όλες) - Εμφανίζουμε τέλος ένα μήνυμα με το αποτέλεσμα με παρόμοιο τρόπο όπως πριν. - **ΠΡΟΣΘΗΚΗ 3** * Στο αποτέλεσμα από την **Διαίρεση πραγματικών** μας εμφανίστηκε ένας περίεργος αριθμός. Πάμε να εκτελέσουμε πάλι. * Εκτελούμε το πρόγραμμα και σαν χρήστες δίνουμε 1ο αριθμό το **8000** και 2ο αριθμό το **9**. Το αποτέλεσμα θα είναι κάπως έτσι Το αποτέλεσμα είναι 8.88888888888889E+002 * Καταρχήν μας φαίνεται περίεργο γιατί θα έπρεπε να είναι 888.8888889 .. Στο τέλος έχει ένα **Ε+002**. Αυτό σημαίνει **επί 10^2** (επί 10 εις την δευτέρα, δηλαδή επί 100). Όντως 8.88889 x 100 = 888.889. * Βλέπουμε ότι τα δεκαδικά είναι πολλά μετά την υποδιαστολή και στην ουσία δεν τελειώνουν ποτέ. Ούτε εμείς μπορούμε να γράψουμε άπειρα δεκαδικά ούτε ο υπολογιστής να αποθηκεύσει άπειρα. * Θα χρησιμοποιήσει για τον τύπο **real** **6 bytes** που του δίνουν δυνατότητα να αποθηκεύσει τιμές για πολύ μεγάλους και πολύ μικρούς αριθμούς (πάνω από 30 δεκαδικά) με πολύ μεγάλη ακρίβεια, αλλά μέχρι ένα σημείο. Όταν θα εμφανίζει αριθμούς το τελευταίο ψηφίο θα στρογγυλοποιείται όπως εδώ που κόπηκαν ψηφία **8888...** από το τέλος και εμφανίστηκε μόνο ένα **9** στην θέση τους. - Θα κάνουμε την εμφάνιση του αριθμού πιο απλή. Αλλάζουμε την εντολή εμφάνισης σε writeln('Το αποτέλεσμα είναι ', apotelesma:0:2); * Αυτό θα μας εμφανίσει 2 δεκαδικά ψηφία μόνο, με στρογγυλοποίηση στο τελευταίο. * Τι σημαίνει όμως το **0**; Σημαίνει **καμία στοίχιση**. Το αλλάζουμε σε **15**. Τι έγινε στο αποτέλεσμα; Εμφανίστηκε πιο δεξιά. Του δώσαμε **15** θέσεις με υποχρεωτική **στοίχιση δεξιά**, οπότε μείναν κάποιες κενές θέσεις αριστερά. Αν του δώσουμε **0** θέσεις είτε γενικά **λιγότερες** από όσες θέλει για να εμφανιστεί, θα εμφανιστεί κανονικά αλλά **χωρίς στοίχιση**. - **BONUS** * Βάλτε όποιο χρώμα κειμένου και όποιο χρώμα φόντου θέλετε με την **textcolor** και την **textbackground** και μετά την **clrscr** που καθαρίζει την οθόνη. Π.χ. textcolor(lightgreen); textbackground(blue); clrscr(); * Χρώματα [[http://lazplanet.blogspot.gr/2013/05/how-to-use-text-and-background-color-in.html|εδώ]] ---- * **ΕΠΕΚΤΑΣΗ 1 / ΑΣΚΗΣΗ ΓΙΑ ΤΟ ΣΠΙΤΙ** * Όπως στην επέκταση της προηγούμενης άσκησης //(copy/paste επιτρέπεται)// έτσι και εδώ, ζητήστε από τον χρήστη να σας δώσει **2 πραγματικούς αριθμούς**. * Δώστε του μια λίστα με επιλογές και **διαβάστε** την επιλογή που θα κάνει 1. Πρόσθεση 2. Αφαιρεση 3. Πολλαπλασιασμός 4. Διαίρεση q. Έξοδος * Με χρήση **case** και μία εντολή μόνο σε κάθε περίπτωση, κάντε την αντίστοιχη πράξη και αποθηκεύστε σε μια νέα μεταβλητή το **αποτέλεσμα**. * Έξω από την case **εμφανίστε** το αποτέλεσμα * **ΕΠΕΚΤΑΣΗ 2 / ΑΣΚΗΣΗ ΓΙΑ ΤΟ ΣΠΙΤΙ** * Στην άσκηση **epiloges** Προσθέστε νέα επιλογή **4. Ευρώ σε Δολάρια** * Ζητήστε από τον χρήστη να σας δώσει ποσό σε ευρώ για να το μετατρέψετε σε δολάρια. * Ελέγξτε πρώτα με **if** ώστε το ποσό να είναι θετικός αριθμός. * Η ισοτιμία είναι περίπου 1€ = 1.3$ (ή βρείτε την ψάχνοντας στο google για **euro to dollar**). * Εμφανίστε ένα ωραίο μήνυμα.