LinuxFanClub Wiki

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

User Tools

Site Tools


el:school:lessons:programmatismos:pascal:askisi4_if_then_else

Άσκηση 4 - If then else

  • Στην προηγούμενη άσκηση είδαμε πως ο ΗΥ αποθηκεύει τιμές σε μεταβλητές και κάνει πράξεις με αυτές.
  • Στην νέα άσκηση θα δούμε τα εξής :
    • Πως ελέγχουμε μια συνθήκη. Π.χ. αν (if) η αποθηκευμένη τιμή της μεταβλητής pliromi_proion1 είναι μικρότερη από την αποθηκευμένη τιμή της μεταβλητής kostos_proion1 τότε (then) να κάνουμε κάτι αλλιώς (else) να κάνουμε κάτι άλλο.
  1. ΑΝΟΙΓΜΑ ΕΡΓΟΥ - Αν δεν είναι ήδη ανοιχτό, θα ανοίξουμε το υπάρχον έργο agora και το αρχείο agora.pas
  2. ΠΡΟΣΘΗΚΗ ΕΛΕΓΧΟΥ
    • Μετά τις τελευταίες αλλαγές στην άσκηση 3, δηλώσαμε μια νέα μεταβλητή pliromi_synolo (ή άλλο όνομα που διαλέξατε εσείς) και ζητήσαμε από τον χρήστη να εισάγει το συνολικό ποσό πληρωμής. Επίσης καλό είναι να δηλωθεί (αν δεν το κάνατε ήδη) και μια μεταβλητή kostos_synolo (ή άλλο περιγραφικό όνομα που σας αρέσει) στην οποία θα αποθηκευτεί το συνολικό κόστος και των 2 προϊόντων.
      • kostos_synolo:=kostos_proion1+kostos_proion2;
    • Τα συνολικά ρέστα υπολογίζονται με μια απλή αφαίρεση και αποθηκεύονται στην μεταβλητή resta_synolo (ή άλλο περιγραφικό όνομα που σας αρέσει)
    • ΠΡΟΒΛΗΜΑ : Αν ο χρήστης εισάγει ποσό μικρότερο από το συνολικό κόστος π.χ. 60€ αντί για τουλάχιστον 70€, εμείς θα του απαντήσουμε σαν να μην συμβαίνει τίποτα ότι τα ρέστα του είναι -10€ και θα φύγει σίγουρα ευχαριστημένος!
    1. Θα πρέπει λοιπόν να ελέγξουμε το ποσό που μας δίνει. Ο έλεγχος θα γίνει με την εντολή if και την σύγκριση των μεταβλητών και αν η πληρωμή είναι μικρότερη από το συνολικό κόστος, θα του εμφανίσουμε ένα μήνυμα ότι δεν μας έδωσε όλο το ποσό. Εισάγουμε :
      if pliromi_synolo < kostos_synolo then
         writeln('Παρακαλώ δώστε όλο το ποσό');
    2. Αλλιώς, (else), είμαστε εντάξει. Οπότε τις εντολές που υπολογίζουν τα συνολικά ρέστα και τα εμφανίζουν στην οθόνη θα τις βάλουμε μέσα στο αλλιώς (else). Και επειδή είναι 2 εντολές θα τις βάλουμε μέσα σε begin .. end
      if pliromi_synolo < kostos_synolo then
         writeln('Παρακαλώ δώστε όλο το ποσό')
      else
      begin
         resta_synolo:=pliromi_synolo - kostos_synolo;	
         writeln('Μου έδωσες ', pliromi_synolo, '€. Τα ρέστα σου είναι ', resta_synolo, '€');   
      end
    • Μετά το then, (τότε), είχαμε μία εντολή, οπότε δεν χρειαστήκαμε begin .. end. Θα μπορούσαμε να βάλουμε, αλλά είναι περιττό.
    • Επίσης η pascal έχει μία ιδιαιτερότητα στην σύνταξη, αν έχουμε μόνο μια εντολή πριν από το else δεν βάζουμε ερωτηματικό. Απλά θα το θυμόμαστε..
  3. ΑΛΛΑΓΕΣ 1 - Ανάποδη συνθήκη
    • Είδαμε ότι μέσα στην συνθήκη συγκρίνουμε μεταβλητές που περιέχουν αριθμούς, (δεν μπορούμε κείμενα). Ας δούμε και ένα πίνακα με όλες τις Συνθήκες στην Pascal.
    • Θα αλλάξουμε την συνθήκη της if με την αντίθετή της, δηλαδή, εάν το ποσό πληρωμής που δώσαμε είναι μεγαλύτερο ή ίσο με το κόστος των προϊόντων.
    1. Αλλάζουμε την συνθήκη λοιπόν και μεταφέρουμε αντίστοιχα τις εντολές που θα εκτελεστούν αν ισχύει και αν δεν ισχύει.
    2. Επίσης κάνουμε πιο περιγραφική την απάντηση Παρακαλώ δώστε όλο το ποσό. Το συνολικό κόστος είναι τόσα €. (Εννοείται ότι όπου τόσα Θα εμφανίσουμε την τιμή της μεταβλητής που περιέχει το συνολικό κόστος)
  4. ΑΛΛΑΓΕΣ 2 - Ιδιαιτερότητες στην σύνταξη
    1. Γράφουμε μία τελευταία εντολή μετά από όλη την if .. then .. else και πριν το END. που να εμφανίζει το κείμενο –»ΤΕΛΟΣ ΠΡΟΓΡΑΜΜΑΤΟΣ«–
    2. Μήπως η μεταγλώττιση απέτυχε; Αν ναί, ΠΡΟΣΟΧΗ!! Αν έχουμε 1 εντολή μετά το else βάζουμε στο τέλος ερωτηματικό, ενώ πριν είδαμε ότι με 1 εντολή μετά το then δεν βάζουμε
    3. Στην τελευταία εντολή πριν το END. αφαιρέστε το ερωτηματικό. Ομοίως αφαιρέστε το και στην τελευταία εντολή πριν το end της συνθήκης.
    4. Κάντε ξανά μεταγλώττιση. Γίνεται με επιτυχία! Πριν από κάθε end το ερωτηματικό είναι προεραιτικό!
    • Για να μην μπερδευτούμε : Εμείς θα βάζουμε πάντα ερωτηματικό στο τέλος κάθε εντολής, εκτός στο τέλος μίας μόνο εντολής μετά το then και πριν το else
  5. ΑΛΛΑΓΕΣ 3 - Συντομότερες δηλώσεις
    • Έστω ότι είμαστε 10 άτομα και χωριζόμαστε σε 2 ομάδες για να παίξουμε κάποιο άθλημα. Τι θα λέγαμε; Ο Γιώργος είναι στην 1η ομάδα, ο Νίκος είναι στην 2η ομάδα, η Μαρία είναι στην 1η ομάδα, ο Τάσος είναι στην 1η ομάδα, η Χριστίνα είναι στην 2η ομάδα.. ;; Μάλλον θα λέγαμε : Ο Γιώργος, η Μαρία, ο Τάσος είναι στην 1η ομάδα. Ο Νίκος, η Χριστίνα είναι στην 2η ομάδα..
    • Πάμε να κάνουμε κάτι ανάλογο στις δηλώσεις, δηλώνοντας πολλές μεταβλητές ότι είναι ίδιου τύπου, χωρίζοντάς τις με , .
    • Στην Pascal ισχύει ότι οι δηλώσεις :
      kostos_proion1 : integer;
      kostos_proion2 : integer; 
    • είναι όμοιες με τις δηλώσεις :
       kostos_proion1, kostos_proion2 : integer; 
    1. Με τον παραπάνω τρόπο, μαζεύουμε όλες τις δηλώσεις που είναι 6-7 γραμμές, σε 2 γραμμές.

  • ΕΠΕΚΤΑΣΗ / ΑΣΚΗΣΗ ΓΙΑ ΤΟ ΣΠΙΤΙ
    • Δείτε την επέκταση της προηγούμενης άσκησης, όπου ο Κώστας είναι 12 χρονών και λαμβάνουμε από τον χρήστη το όνομα και την ηλικία του.
    • Στο τέλος της θα ελέγξουμε αν ο χρήστης είναι μεγαλύτερος από τον Κώστα. Αν είναι, θα υπολογίσουμε πόσα χρόνια και θα εμφανίσουμε μήνυμα Είσαι τόσα χρόνια μεγαλύτερος (όπου τόσα η διαφορά τους). Αλλιώς θα εμφανίσουμε μήνυμα Είσαι τόσα χρόνια μικρότερος.
    • Τι γίνεται αν ο χρήστης είναι 12 χρονών; Θα εμφανίσει Είσαι 0 χρόνια μικρότερος που δεν είναι ωραίο. Υπομονή μέχρι την επόμενη άσκηση που θα το φτιάξουμε και αυτό με επιπλέον if μέσα στο then ή στο else (εμφωλιασμένες if). Σκεφτείτε το..
el/school/lessons/programmatismos/pascal/askisi4_if_then_else.txt · Last modified: Y/m/d H:i by vagk