el:school:lessons:programmatismos:pascal:askisi7_epiloges_case_div_mod_real
Άσκηση 7 - Επιλογές - (case, 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();
-
el/school/lessons/programmatismos/pascal/askisi7_epiloges_case_div_mod_real.txt · Last modified: Y/m/d H:i by vagk