Άσκηση 9 - Μάντεψε τον αριθμό - Επαναληπτική
Στην προηγούμενη άσκηση είδαμε συνδυασμό συνθηκών με AND (και), OR (ή), ΝΟΤ (όχι) .
Στην νέα άσκηση θα δούμε επιπλέον τα εξής :
ΔΗΜΙΟΥΡΓΙΑ ΕΡΓΟΥ : Θα δημιουργήσουμε το νέο έργο mantepse
ΕΙΣΑΓΩΓΗ - ΥΠΟΛΟΓΙΣΜΟΣ ΤΥΧΑΙΟΥ ΑΡΙΘΜΟΥ
Πάμε να εμφανίσουμε έναν ωραίο τίτλο και μια περιγραφή στο πρόγραμμά μας.
****ΒΡΕΣ ΤΟΝ ΑΡΙΘΜΟ****
Έχω σκεφτεί έναν αριθμό από 1 .. 100
Μπορείς να τον μαντέψεις;
Όπως βλέπετε έχουμε αφήσει 1 κενή γραμμή κάτω από το ΒΡΕΣ ΤΟΝ ΑΡΙΘΜΟ και άλλες 2 κενές γραμμές στο τέλος. (Αν δεν θυμάστε πως, δείτε την αρχή της Άσκησης 6)
Τώρα πρέπει σαν Υπολογιστής να σκεφτούμε έναν αριθμό. Πρώτα θα εισάγουμε την εντολή randomize() η οποία ανακατεύει την γεννήτρια τυχαίων αριθμός (σαν να ανακατεύουμε μια τράπουλα).
Στην συνέχεια υπολογίζουμε έναν τυχαίο αριθμό. Αυτό γίνεται με την εντολή random(100). Αυτή υπολογίζει έναν δεκαδικό αριθμό από 0 .. 99.9999, οπότε για να γίνει από 1 έως 100 θα προσθέσουμε + 1. Το αποτέλεσμα το αποθηκεύουμε σε μία μεταβλητή έστω arithmos. (Ξέρετε πλέον πως γίνεται αυτό, δεξιά ο υπολογισμός και ανάθεση τιμής στην μεταβλητή που βρίσκεται στα αριστερά.)
Για να φύγουν τα δεκαδικά ψηφία αρκεί να δηλώσουμε την μεταβλητή arithmos ως ακέραιος (όχι πραγματικός)
ΠΡΟΣΠΑΘΕΙΑ ΝΑ ΤΟΝ ΒΡΕΙ Ο ΧΡΗΣΤΗΣ
Μέσα στην repeat .. until, εμφανίστε ένα μήνυμα Δώσε αριθμό : και διαβάστε από τον χρήστη (στην ίδια γραμμή) ότι σας δώσει, αποθηκεύοντας την απάντησή του σε μία μεταβλητή π.χ. mantepsia.
Ποια θα είναι η συνθήκη εξόδου από την επανάληψη; Πότε θα σταματήσει να εισάγει αριθμούς ο χρήστης; Όταν πετύχει τον αριθμό, βέβαια! Δίπλα από την until λοιπόν, βάλτε την συνθήκη που θα ισχύσει όταν ο χρήστης μαντέψει τον αριθμό.
Πρέπει όμως να τον βοηθήσουμε λίγο για να μην κάνει 100 προσπάθειες να τον βρει. Με μια if .. then .. else, ελέγξτε λοιπόν εάν ο arithmos είναι μεγαλύτερος από την mantepsia και εμφανίστε μήνυμα Ο αριθμός μου είναι μεγαλύτερος, αλλιώς εμφανίστε μήνυμα Ο αριθμός μου είναι μικρότερος. (Ξέρετε πλέον να χρησιμοποιείται την if, δείτε και προηγούμενες ασκήσεις)
ΥΠΟΛΟΓΙΣΜΟΣ ΠΡΟΣΠΑΘΕΙΩΝ ΚΑΙ ΤΕΛΙΚΟ ΜΗΝΥΜΑ
Έξω από την repeat .. until θα εμφανίσουμε το μια κενή γραμμή και μετά το μήνυμα Βρήκες τον αριθμό σε τόσες προσπάθειες!. Όπου τόσες η τιμή μιας μεταβλητής μετρητή π.χ. prospatheies η οποία έχει τον αριθμό των προσπαθειών.
Πάμε να υπολογίσουμε τις προσπάθειες του χρήστη. Αρχικά δεν έχει κάνει καμία προσπάθεια. Πριν μπούμε λοιπόν στην
repeat .. until δίνουμε τιμή
0 στην μεταβλητή
prospatheies.
prospatheies:=0;
repeat
..
Μέσα στην επανάληψη, στο τέλος των εντολών της, θα αυξήσουμε την μεταβλητή
μετρητή κατά 1.
..
prospatheies:=prospatheies+1;
until mantepsia=arithmos;
ΤΡΟΠΟΠΟΙΗΣΗ ΕΛΕΓΧΟΥ
Οπότε θα βάλουμε όλη την παραπάνω
if .. then .. else .. μέσα σε μια άλλη if που θα ελέγχει ότι ο
arithmos είναι διαφορετικός από την
mantepsia if arithmos<>mantepsia then
if arithmos>mantepsia then
writeln('Ο αριθμός μου είναι μεγαλύτερος')
else
writeln('Ο αριθμός μου είναι μικρότερος');
BONUS
Για να κάνουμε πιο ωραίο το πρόγραμμά μας βάζουμε μια clrscr και χρώματα φόντου με την textbackground και κειμένου με την textcolor
Αλλάζουμε το χρώμα κειμένου επίσης πριν το μήνυμα Βρήκες τον αριθμό σε τόσες προσπάθειες!, ώστε να ξεχωρίσει.
ΕΠΑΝΑΛΗΨΗ - const
Στο πρόγραμμά μας έχουμε μέγιστο αριθμό που μαντεύουμε το 100. Ο αριθμός 100 εμφανίζεται 2 φορές στο πρόγραμμά μας. Δηλώστε μια σταθερά megistos με τιμή 100 και αντικαταστήστε το 100, και στις 2 εμφανίσεις του, με την σταθερά megistos.
Ανοίξτε το agora.pas που είχαμε φτιάξει σε προηγούμενη άσκηση. Έχουμε 4 μεταβλητές onoma_proion1, kostos_proion1, onoma_proion2, kostos_proion2 στις οποίες βάζουμε μια τιμή στην αρχή του προγράμματος και δεν την αλλάζουμε μέχρι το τέλος του. Μας φωνάζουν ξεκάθαρα ότι δεν θα πρέπει να οριστούν ως μεταβλητές, αφού δεν αλλάζουν ποτέ την αρχική τους τιμή. Τις ορίζουμε λοιπόν ως σταθερές με τις τιμές που είχαμε βάλει στην αρχή του προγράμματος.
ΕΠΑΝΑΛΗΨΗ - case
Ανοίγουμε πάλι το mantepse.pas.
Σε ένα παιχνίδι παίζει ρόλο πόσο καλά θα τα πάμε. Έτσι στο δικό μας είναι διαφορετικό να βρούμε τον αριθμό σε 5-6 προσπάθειες αντί για πάνω από 15. Θα εμφανίσουμε λοιπόν τα παρακάτω μηνύματα. (Μπορείτε να βάλετε και τα δικά σας!)
12, 13, 14 προσπάθειες : Μέτρια επίδοση
9, 10, 11 προσπάθειες : Τα κατάφερες σχετικά καλά!!
7, 8 προσπάθειες : Μπράβο! Πάρα πολύ καλή επίδοση!!
έως 6 προσπάθειες : Συγχαρητήρια! Είσαι καταπληκτικός!
πάνω από 15 προσπάθειες : Όχι και τόσο καλή επίδοση
Θα χρησιμοποιήσουμε την
case και την μεταβλητή
prospatheies. Πάμε να φτιάξουμε την περίπτωση
12, 13, 14 προσπάθειες. Πριν την αλλαγή χρώματος και πριν το μήνυμα
Βρήκες τον αριθμό σε τόσες προσπάθειες! θα εισάγουμε μια case
case prospatheies of
12, 13, 14 :
writeln('Μέτρια επίδοση');
end;
Βλέπουμε ότι χρησιμοποιούμε πολλές τιμές μέσα στην case, χωρίζοντάς τις με κόμμα. Με όμοιο τρόπο κάνουμε τα υπόλοιπα εκτός από το πάνω από 15 προσπάθειες που θα το βάλουμε στην else αφού δεν έχει πάνω όριο. Πώς θα φτιάξουμε το έως 6 προσπάθειες;
ΕΝΔΕΙΚΤΙΚΗ ΕΚΤΕΛΕΣΗ - (Το δικό σας να γίνει πιο ωραίο σε εμφάνιση)
****Blackjack - 21****
HY : 10
Παίκτης : 11
Δώσε ποντάρισμα -3
Το ποντάρισμα να είναι μεταξύ 1 και 100€ 0
Το ποντάρισμα να είναι μεταξύ 1 και 100€ 30
Παίκτης : 7 -> 18
Θέλεις άλλο χαρτί (ν/ο) ο
ΗΥ : 10 3 -> 13 Παίκτης : 18
Κερδίσες! Χρήματα παίκτη : + 30 -> 30€
Θέλεις άλλο γύρο (ν/ο) ν
HY : 11
Παίκτης : 5
Δώσε ποντάρισμα 22
Παίκτης : 6 -> 11
Θέλεις άλλο χαρτί (ν/ο) ν
Παίκτης : 2 -> 13
Θέλεις άλλο χαρτί (ν/ο) ο
ΗΥ : 11 6 -> 17 Παίκτης : 13
Κερδίζει ο ΗΥ!, Χρήματα παίκτη : - 22 -> 8€
Θέλεις άλλο γύρο (ν/ο) ν
HY : 11
Παίκτης : 6
Δώσε ποντάρισμα 56
Παίκτης : 5 -> 11
Θέλεις άλλο χαρτί (ν/ο) ν
Παίκτης : 7 -> 18
Θέλεις άλλο χαρτί (ν/ο) ν
Παίκτης : 11 -> 29
ΗΥ : 11 11 -> 21 Παίκτης : 29
Κερδίζει ο ΗΥ!, Χρήματα παίκτη : - 56 -> -48€
Θέλεις άλλο γύρο (ν/ο)