Άσκηση 7 - Επιλογές - (case, div, mod, real, writeln δεκαδικά)

  1. ΑΝΟΙΓΜΑ ΕΡΓΟΥ - Αν δεν είναι ήδη ανοιχτό, θα ανοίξουμε το υπάρχον έργο epiloges και το αρχείο epiloges.pas
  2. ΠΡΟΣΘΗΚΗ 1
    • Μέχρι στιγμής το πρόγραμμά μας δεν κάνει κάτι ουσιαστικό. Πάμε να υλοποιήσουμε αυτά που λέει.
    1. Διαίρεση Ακεραίων : Στην επιλογή '1' έχουμε ήδη μια writeln με ένα μήνυμα στην οθόνη. Για να βάλουμε και 2η εντολή θα προσθέσουμε begin πριν την writeln και end μετά ως εξής. Αλλάζουμε το :
        '1': writeln('**Διαίρεση Ακεραίων**');

      σε

        '1': begin
               writeln('**Διαίρεση Ακεραίων**');
               {εδώ θα μπουν οι επιπλέον εντολές..}
             end;
    2. Θα ζητήσουμε 2 ακεραίους. Αρχικά με μήνυμα Δώσε τον 1ο αριθμό.
    3. Θα διαβάσουμε από τον χρήστη έναν ακέραιο και θα τον αποθηκεύσουμε σε μια μεταβλητή π.χ. akeraios1
    4. Ζητάμε και 2ο αριθμό και αποθηκεύουμε σε άλλη μεταβλητή με όμοιο τρόπο.
    5. Για την ακέραια διαίρεση χρησιμοποιούμε τον τελεστή div και το αποτέλεσμα (πηλίκο) το αποθηκεύουμε σε μια νέα μεταβλητή. Δηλαδή piliko:=akeraios1 div akeraios2;
    6. Για να υπολογίζουμε το υπόλοιπο χρησιμοποιούμε τον τελεστή mod και το υπόλοιπο το αποθηκεύουμε σε μια νέα μεταβλητή. Δηλαδή ypoloipo:=akeraios1 mod akeraios2;
    7. Εμφανίζουμε τέλος ένα μήνυμα Το πηλίκο είναι .. και υπόλοιπο είναι .. (με τις μεταβλητές εκεί που πρέπει)
    8. Όλες τις μεταβλητές τύπου ακεραίου τις δηλώνουμε σε μία γραμμή.
  3. ΠΡΟΣΘΗΚΗ 2
    • Πάμε να υλοποιήσουμε και την Διαίρεση πραγματικών.
    1. Με όμοιο τρόπο όπως στην Διαίρεση ακεραίων ζητήστε 2 αριθμούς από τον χρήστη και αποθηκεύστε στις μεταβλητές pragmatikos1 και pragmatikos2
    2. Κάνουμε την διαίρεση με τον τελεστή / και αποθηκεύουμε το αποτέλεσμα σε νέα μεταβλητή. Δηλαδή apotelesma:=pragmatikos1 / pragmatikos2;. Υπόλοιπα εδώ δεν υπάρχουν.
    3. Ορίζουμε τις νέες μεταβλητές να είναι τύπου real. (Σε μία γραμμή όλες)
    4. Εμφανίζουμε τέλος ένα μήνυμα με το αποτέλεσμα με παρόμοιο τρόπο όπως πριν.
  4. ΠΡΟΣΘΗΚΗ 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 στην θέση τους.
    1. Θα κάνουμε την εμφάνιση του αριθμού πιο απλή. Αλλάζουμε την εντολή εμφάνισης σε
         writeln('Το αποτέλεσμα είναι ', apotelesma:0:2);  
    • Αυτό θα μας εμφανίσει 2 δεκαδικά ψηφία μόνο, με στρογγυλοποίηση στο τελευταίο.
    • Τι σημαίνει όμως το 0; Σημαίνει καμία στοίχιση. Το αλλάζουμε σε 15. Τι έγινε στο αποτέλεσμα; Εμφανίστηκε πιο δεξιά. Του δώσαμε 15 θέσεις με υποχρεωτική στοίχιση δεξιά, οπότε μείναν κάποιες κενές θέσεις αριστερά. Αν του δώσουμε 0 θέσεις είτε γενικά λιγότερες από όσες θέλει για να εμφανιστεί, θα εμφανιστεί κανονικά αλλά χωρίς στοίχιση.
  5. BONUS
    • Βάλτε όποιο χρώμα κειμένου και όποιο χρώμα φόντου θέλετε με την textcolor και την textbackground και μετά την clrscr που καθαρίζει την οθόνη. Π.χ.
      textcolor(lightgreen);
      textbackground(blue);
      clrscr();
    • Χρώματα εδώ