LinuxFanClub Wiki

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

User Tools

Site Tools


el:school:lessons:programmatismos:pascal:askisi8_repeat_until

Άσκηση 8 - Repeat Until, const και επανάληψη προηγουμένων

  • Στην προηγούμενη άσκηση είδαμε την χρήση της case με πολλές εντολές, ακέραια διαίρεση και υπόλοιπο, τον τύπο μεταβλητής real και πως εμφανίζεται με την writeln
  • Στην νέα άσκηση θα δούμε επιπλέον τα εξής :
    • Χρήση const για δήλωση σταθερών - αποθηκευμένες μεταβλητές που δεν αλλάζουν τιμή.
    • Επαναληπτική εκτέλεση εντολών μέχρι κάποια συνθήκη εξόδου με repeat .. until
    • Επανάληψη των προηγουμένων - mod, real if .. then .. else κτλ.
  1. ΑΝΟΙΓΜΑ ΕΡΓΟΥ - Αν δεν είναι ήδη ανοιχτό, θα ανοίξουμε το υπάρχον έργο epiloges και το αρχείο epiloges.pas
    1. ΠΡΟΣΘΗΚΗ 1 - χρήση const
    • Πολλές φορές στο πρόγραμμά μας υπάρχουν τιμές ή κείμενα που επαναλαμβάνονται. Για παράδειγμα ορίσαμε ότι εάν ο χρήστης πατήσει x το πρόγραμμα θα τερματίσει. Το x εμφανίζεται 2 φορές. Στην writeln('x. Έξοδος'); και στην επιλογή της case 'x': writeln('Γεια..');
    1. Στην θέση του x θα βάλουμε και στις 2 περιπτώσεις μια μεταβλητή π.χ. pliktro_exodou. Γνωρίζουμε πως βάζουμε μεταβλητές σε μια writeln και προσοχή πως θα την βάλουμε στην επιλογή της case.
    2. Δεν θα ορίσουμε το pliktro_exodou ως μεταβλητή στο var. Θα την ορίσουμε ως σταθερά const. Κάτω από το uses και πάνω από το var εισάγουμε
      const 
          pliktro_exodou = 'x';
    3. Μεταγλωττίζουμε το πρόγραμμα και ως χρήστης πατάμε x για έξοδο. Λειτουργεί όπως πριν;
    4. Έστω ότι θέλουμε να αλλάξουμε το πλήκτρο εξόδου από x σε q (από το quit). Αλλάξτε το.
    • Πριν θα αλλάζαμε σε 2 σημεία τον κώδικα. Φανταστείτε να υπήρχε το x σε 5 ή περισσότερα σημεία. Τώρα αλλάζουμε μόνο ένα. Αυτή είναι μία από τις χρησιμότητες των σταθερών.
    • Οι σταθερές έχουν επίσης την ασφάλεια ότι από την αρχή μέχρι το τέλος του προγράμματος κρατάνε την ίδια τιμή. Δεν μπορούμε μέσα στο πρόγραμμα να βάλουμε πιο μετά pliktro_exodou:= 'z';, οπότε προστατευόμαστε από πιθανά λάθη μας.
  2. ΠΡΟΣΘΗΚΗ 2 - mod και if..then..else
    • Στην επιλογή 3 της case θέλουμε ο χρήστης να μας δώσει έναν ακέραιο αριθμό και να του απαντήσουμε αν είναι μονός ή ζυγός.
    1. Φτιάχνουμε λοιπόν τον κώδικα της επιλογής 3 ώστε να ζητάμε από τον χρήστη έναν αριθμό και να τον αποθηκεύουμε σε μία μεταβλητή π.χ. akeraios3.
    2. Το mod δηλαδή το υπόλοιπο της διαίρεσης ενός αριθμού με το 2 θα είναι είτε 0 είτε 1. Χρησιμοποιήστε σε μια if την πράξη akeraios3 mod 2. Αν είναι 0 εμφανίστε Ο αριθμός τάδε είναι ζυγός (όπου τάδε η αντίστοιχη μεταβλητή). Αλλιώς εμφανίστε Ο αριθμός τάδε είναι μονός. Δείτε την άσκηση 5 - ergasia για να θυμηθείτε την if.
  3. ΠΡΟΣΘΗΚΗ 3 - Δομή επανάληψης repeat .. until
    • Το πρόγραμμά μας εκτελείται 1 μόνο φορά, κάνει μία από τις 3 επιλογές ή στην 4η επιλογή δεν κάνει τίποτα. Θα ήταν πιο ωραίο εάν επαναλάμβανε την εκτέλεσή του ξανά και ξανά και τερμάτιζε μόνο στην 4η επιλογή εάν δηλαδή πατάγαμε το πλήκτρο εξόδου.
    • Για να το κάνουμε αυτό θα βάλουμε όλο τον κώδικα του προγράμματος μέσα σε μια repeat .. until.
    1. Κάτω από το 1ο BEGIN όλου του προγράμματος βάζουμε ως 1η εντολή repeat.
    2. Επιλέγουμε όλο τον κώδικα κάτω από το repeat χωρίς το τελευταίο END. και πατάμε TAB ώστε να στοιχηθεί μία θέση δεξιά.
    3. Τέλος πάνω από το END. γράφουμε until.
      BEGIN
          repeat
              textcolor(lightgreen);
              textbackground(blue);
              ..
              .. {Το υπόλοιπο πρόγραμμα}
              ..
              else writeln('Λάθος επιλογή');
              end;  
          until
      END.
    4. Στην until πρέπει να βάλουμε την συνθήκη στην οποία θα τερματίσει το πρόγραμμά μας. Αυτή είναι όταν πατήσουμε σαν χρήστης το πλήκτρο εξόδου π.χ. q. Αυτό αποθηκεύεται στην μεταβλητή epilogi. Οπότε η until θα γίνει:
          until epilogi=pliktro_exodou;
    5. Το πρόγραμμά μας κάνει την επανάληψη αλλά αν έχουμε στην αρχή της repeat την εντολή clrscr() που καθαρίζει την οθόνη δεν προλαβαίνουμε να δούμε τα αποτελέσματα. Πάνω λοιπόν από την until πριν ξαναγυρίσει το πρόγραμμα στην αρχή της repeat, βάζουμε τις εξής εντολές:
              writeln('Πατήστε ENTER');
              readln;
          until epilogi=pliktro_exodou;
    • Η απλή readln περιμένει να διαβάσει μόνο το ENTER που πατάμε χωρίς αποθηκεύει τίποτα σε μεταβλητή. Έτσι μέχρι να πατήσουμε ENTER, μένουν στην οθόνη τα προηγούμενα αποτελέσματα .
  4. BONUS
    1. Για να κάνουμε πιο ωραίο το πρόγραμμά μας μπορούμε να βάλουμε μια clrscr(); πριν τα μηνύματα στην Οθόνη Διαίρεση Ακεραίων, Διαίρεση Πραγματικών και Μονά Ζυγά
  5. ΠΡΟΣΘΗΚΗ 4 - νέα επίλογή στην case
    1. Θα εισάγουμε μια νέα επιλογή στο μενού 4. Χλμ σε μίλια. Την προσθέτουμε μαζί με τις άλλες writeln που εμφανίζουν το μενού.
    2. Εισάγουμε την νέα επιλογή στην case.
    3. Θα ζητήσουμε από τον χρήστη να μας δώσει τα χλμ. Ότι πληκτρολογήσει θα το βάλουμε σε μια μεταβλητή km
    4. Τα μίλια υπολογίζονται εάν διαιρέσουμε τα χλμ με 1.609. Τα υπολογίζουμε και τα βάζουμε σε μια μεταβλητή milia. (Δείτε και τις εντολές στην Διαίρεση Πραγματικών).
    5. Τέλος θα εμφανίσουμε το μήνυμα Τα τόσα χλμ είναι τόσα μίλια. (όπου τόσα οι αντίστοιχες μεταβλητές). Εμφανίζουμε 1 δεκαδικό ψηφίο στις μεταβλητές. χωρίς στοίχιση. (Όπως στις εντολές στην Διαίρεση Πραγματικών - Άσκηση 7)
    6. Το 1.609 είναι τα χλμ που αντιστοιχούν σε 1 μίλι. Είναι μια τιμή που δεν αλλάζει. Θα την ορίσουμε λοιπόν ως μια σταθερά με όνομα km_ana_mili.

  • ΕΠΕΚΤΑΣΗ 1 / ΑΣΚΗΣΗ ΓΙΑ ΤΟ ΣΠΙΤΙ
    • Στην προηγούμενη επέκταση είχαμε ένα μενού
        1. Πρόσθεση
        2. Αφαιρεση
        3. Πολλαπλασιασμός
        4. Διαίρεση
        q. Έξοδος
    • Τροποποιήστε την ώστε να έχει μία σταθερά για το πλήκτρο εξόδου.
    • Κάντε την να εκτελείται συνέχεια με repeat until.
    • Φτιάξτε την όμορφα με χρώματα και clrscr().
  • ΕΠΕΚΤΑΣΗ 2 / ΑΣΚΗΣΗ ΓΙΑ ΤΟ ΣΠΙΤΙ
    • Στην επέκταση που είχατε κάνει για να υπολογίσετε ευρώ σε δολάρια στην άσκηση epiloges, ορίστε το 1.3 να είναι σταθερά με όνομα π.χ. isotimia
    • Βάλτε άλλη μία επιλογή για να υπολογίσετε δολάρια σε ευρώ
    • Βάλτε άλλη μία επιλογή για να υπολογίσετε μίλια σε km
el/school/lessons/programmatismos/pascal/askisi8_repeat_until.txt · Last modified: Y/m/d H:i by vagk