ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ Κεφάλαιο 10 : Εντολές Επιλογής και Αποφάσεων ΕΡΓΑΣΤΗΡΙΑΚΗ ΔΡΑΣΤΗΡΙΟΤΗΤΑ 02 : Εντολή IF (απλή και σύνθετη επιλογή) Άσκηση 1:Δίνεται το παρακάτω πρόβληµα : ΑΠΑΝΤΗΣΕΙΣ Μια εταιρία κινητής τηλεφωνίας έχει ένα πακέτο σύνδεσης στο οποίο η χρέωση για κάθε κλήση γίνεται ανά δευτερόλεπτο χωρίς πάγιο ή ελάχιστο χρόνο χρέωσης. Δηλαδή χρεώνει το συνδροµητή για όσα δευτερόλεπτα µίλησε και το κόστος είναι 0,004 ευρώ ανά δευτερόλεπτο. Θα πρέπει να γράψετε ένα πρόγραµµα σε Pascal το οποίο θα διαβάζει τη διάρκεια µια κλήσης και να υπολογίζει και θα εµφανίζει πόσο χρεώθηκε (σε ευρώ) ο συνδροµητής. α) Προσδιορίστε τα δεδοµένα τα ζητούµενα και τις σχέσεις που τα συνδέουν: Δεδοµένα Ζητούµενα Σχέσεις ιάρκεια κλήσης Τιµή ανά δευτερόλεπτο Κόστος κλήσης δευτερόλεπτο β) Να µετατρέψετε τον παρακάτω αλγόριθµο (διάγραµµα ροής) που λύνει το παραπάνω πρόβληµα σε πρόγραµµα Pascal. Συµπληρώστε το αρχείο ραστηριότητα_02.pas Ι) Να καθορίσετε πόσες µεταβλητές θα χρησιµοποιήσετε και τι τύπου θα είναι. ΙΙ) Να δώσετε κατάλληλα ονόµατα στις µεταβλητές ΙΙΙ) Να χρησιµοποιήσετε σταθερές αν κρίνετε ότι χρειάζεται IV) Εκτελέστε το πρόγραµµα και συµπληρώστε τον παρακάτω πίνακα Διάρκεια Χρέωση 50 0,20 20 0,08 1
program Kef_10_Task_02(input, output); uses crt; const timi=0.004; var diarkia:integer; xrevsh:real; begin write(' ώσε τη διάρκεια της κλήσης:'); readln(diarkia); xrevsh:=diarkia*timi; writeln('κόστος κλήσης:',xrevsh:1:2); end. Άσκηση 2: Σκεφτείτε την παρακάτω παραλλαγή στο πρόβληµά µας: Η εταιρία αποφάσισε να διατηρήσει την τιµή χρέωσης ανά δευτερόλεπτο µε την προϋπόθεση ότι µια κλήση θα διαρκεί τουλάχιστον 30 δευτερόλεπτα. Αν µια κλήση διαρκεί λιγότερο από 30 δευτερόλεπτα τότε ο συνδροµητής θα χρεώνεται επιπλέον µε πάγιο 0,05 ευρώ. Να τροποποιήσετε το πρόγραµµα που γράψατε ώστε να ανταποκρίνεται στα νέα δεδοµένα. α) Προσδιορίστε τα επιπλέον δεδοµένα και τις σχέσεις που τα συνδέουν µε τα αποτελέσµατα καθώς και τις συνθήκες που καθορίζουν την επίλυση του προβλήµατος Δεδοµένα Σχέσεις Συνθήκη Ελάχιστη διάρκεια Πάγιο δευτερόλεπτο Ή δευτερόλεπτο + Πάγιο Το κόστος κλήσης προσαυξάνεται µε το πάγιο όταν η διάρκεια είναι µικρότερη από 30 δευτερόλεπτα β) Για την επίλυση του προβλήµατος θα πρέπει να εισάγουµε στον αλγόριθµο που σχεδιάσαµε ένα επιπλέον βήµα το οποίο δεν θα εκτελείται πάντα: 2
Ι) Ποιο είναι αυτό ο βήµα; (περιγραφή) Προσαύξηση κόστους κατά Πάγιο ΙΙ) Πότε εκτελείται αυτό το βήµα; Όταν η διάρκεια είναι µικρότερη από 30 ΙΙΙ) Να εκφράσετε την παραπάνω συνθήκη χρησιµοποιώντας µια λογική έκφραση Διάρκεια < 30 γ) Συµπληρώστε το παρακάτω διάγραµµα ροής λαµβάνοντας υπόψη τη συνθήκη που ορίσατε παραπάνω. Στη συνέχεια να τροποποιήσετε το πρόγραµµα που γράψατε πριν ώστε να ανταποκρίνεται στο νέο αλγόριθµο. 3
program Kef_10_Task_02(input, output); uses crt; const var begin end. timi=0.004; pagio=0.05; diarkia:integer; xrevsh:real; write(' ώσε τη διάρκεια της κλήσης:'); readln(diarkia); xrevsh:=diarkia*timi; if (diarkia < 30) then xrevsh := xrevsh + pagio; writeln('κόστος κλήσης:',xrevsh:1:2); δ) Εκτελέστε το πρόγραµµα και συµπληρώστε τον παρακάτω πίνακα. Στην τρίτη στήλη του πίνακα να γράψετε τη λογική έκφραση της συνθήκης και να συµπληρώσετε την τιµή της σε κάθε περίπτωση Διάρκεια Χρέωση diarkeia < 30 50 0,20 False 20 0,13 true Άσκηση 3: Άλλη µία παραλλαγή στο πρόβληµά µας: Για την περίοδο των εορτών η εταιρία αποφάσισε να επιβραβεύσει τους οµιλητικούς συνδροµητές χαρίζοντάς τους κάποιο δωρεάν χρόνο οµιλίας. Έτσι για κάθε κλήση µε διάρκεια µεγαλύτερη ή ίση από 30 δευτερόλεπτα χαρίζει 5 δευτερόλεπτα. Δηλαδή το κόστος κλήσης όχι µόνο δεν επιβαρύνεται µε πάγιο αλλά θα µειώνεται κατά 0,02 ευρώ (5 * 0,004). Να τροποποιήσετε το πρόγραµµα που γράψατε ώστε να ανταποκρίνεται στα νέα δεδοµένα. α) Προσδιορίστε τα επιπλέον δεδοµένα και τις σχέσεις που τα συνδέουν µε τα αποτελέσµατα καθώς και τις συνθήκες που καθορίζουν την επίλυση του προβλήµατος 4
Δεδοµένα Σχέσεις Συνθήκη ωρεάν χρόνος δευτερόλεπτο κόστος δωρεάν χρόνο ΚΑΙ δευτερόλεπτο + Πάγιο Το κόστος κλήσης προσαυξάνεται µε το πάγιο όταν η διάρκεια είναι µικρότερη από 30 δευτερόλεπτα Το κόστος κλήσης µειώνεται αν η διάρκεια είναι µεγαλύτερη ή ίση µε 30 β) Ο προηγούµενος αλγόριθµος θα τροποποιηθεί έτσι ώστε να υπάρχουν δύο βήµατα από τα οποία ένα θα εκτελείται κάθε φορά µε βάση µια συνθήκη: Ι) Ποια είναι αυτά τα βήµατα; (περιγραφή) Προσαύξηση κόστους κατά Πάγιο Μείωση κόστους κατά κόστος δωρεάν χρόνου ΙΙ) Πότε εκτελείται κάθε ένα από αυτά τα βήµατα; Όταν η διάρκεια είναι µικρότερη από 30 Όταν η διάρκεια είναι µεγαλύτερη η ίση µε 30 ΙΙΙ) Να εκφράσετε την παραπάνω συνθήκη χρησιµοποιώντας µια λογική έκφραση Διάρκεια < 30 Διάρκεια >=30 γ) Συµπληρώστε το παρακάτω διάγραµµα ροής λαµβάνοντας υπόψη τη συνθήκη που ορίσατε παραπάνω. Στη συνέχεια να τροποποιήσετε το πρόγραµµα που γράψατε πριν ώστε να ανταποκρίνεται στο νέο αλγόριθµο. 5
δ) Εκτελέστε το πρόγραµµα και συµπληρώστε τον παρακάτω πίνακα. Στην τρίτη στήλη του πίνακα να γράψετε τη λογική έκφραση της συνθήκης και να συµπληρώσετε την τιµή της σε κάθε περίπτωση. Στην τέταρτη στήλη να περιγράψετε το βήµα του αλγορίθµου που εκτελείται σε κάθε περίπτωση Διάρκεια Χρέωση diarkeia < 30 Βήµα που εκτελείται 50 0,18 False Μείωση κόστους κατά κόστος δωρεάν χρόνου 20 0,13 true Προσαύξηση κόστους κατά Πάγιο 6
program Kef_10_Task_02(input, output); uses crt; const timi=0.004; pagio=0.05; dvro=0.02; var diarkia:integer; xrevsh:real; begin write(' ώσε τη διάρκεια της κλήσης:'); readln(diarkia); xrevsh:=diarkia*timi; if diarkia < 30 then xrevsh := xrevsh+pagio else xrevsh := xrevsh - dvro; writeln('κόστος κλήσης:',xrevsh:1:2); end. 7
8