LinuxFanClub Wiki

Υπηρεσίες, Προγραμματισμός, Εκπαίδευση ..

User Tools

Site Tools


el:school:lessons:programmatismos:pascal:askisi7_epiloges_case_div_mod_real

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

  • Στην προηγούμενη άσκηση είδαμε την χρήση της case με επιλογές ακέραιους αριθμούς ή χαρακτήρες.
  • Στην νέα άσκηση θα δούμε επιπλέον τα εξής :
    • Πολλές εντολές στην case με χρήση begin .. end
    • Ακέραια διαίρεση με την 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();
    • Χρώματα εδώ

  • ΕΠΕΚΤΑΣΗ 1 / ΑΣΚΗΣΗ ΓΙΑ ΤΟ ΣΠΙΤΙ
    • Όπως στην επέκταση της προηγούμενης άσκησης (copy/paste επιτρέπεται) έτσι και εδώ, ζητήστε από τον χρήστη να σας δώσει 2 πραγματικούς αριθμούς.
    • Δώστε του μια λίστα με επιλογές και διαβάστε την επιλογή που θα κάνει
        1. Πρόσθεση
        2. Αφαιρεση
        3. Πολλαπλασιασμός
        4. Διαίρεση
        q. Έξοδος
    • Με χρήση case και μία εντολή μόνο σε κάθε περίπτωση, κάντε την αντίστοιχη πράξη και αποθηκεύστε σε μια νέα μεταβλητή το αποτέλεσμα.
    • Έξω από την case εμφανίστε το αποτέλεσμα
  • ΕΠΕΚΤΑΣΗ 2 / ΑΣΚΗΣΗ ΓΙΑ ΤΟ ΣΠΙΤΙ
    • Στην άσκηση epiloges Προσθέστε νέα επιλογή 4. Ευρώ σε Δολάρια
    • Ζητήστε από τον χρήστη να σας δώσει ποσό σε ευρώ για να το μετατρέψετε σε δολάρια.
    • Ελέγξτε πρώτα με if ώστε το ποσό να είναι θετικός αριθμός.
    • Η ισοτιμία είναι περίπου 1€ = 1.3$ (ή βρείτε την ψάχνοντας στο google για euro to dollar).
    • Εμφανίστε ένα ωραίο μήνυμα.
el/school/lessons/programmatismos/pascal/askisi7_epiloges_case_div_mod_real.txt · Last modified: Y/m/d H:i by vagk