Ασκήσεις - ιαγράµµατα Ροής ΑΣΚΗΣΗ 1 Σχεδιάστε ένα διάγραµµα ροής για να διαβάσετε από τον χρήστη το πλήθος των αριθµών (numbers) που επιθυµεί να εισαγάγει καθώς και τους ίδιους τους αριθµούς. Να εκτυπώσετε τον µεγαλύτερο καθώς και τον µικρότερο από τους αριθµούς που έχει δώσει ο χρήστης. Λύση 1: h_num = 0, s_num = 100 count = 0 plithos count < plithos? h_num, s_num > h_num h_num = < s_num s_num = count=count+1
Λύση 2: To πιο πάνω διάγραµµα ροής αντιµετωπίζει συγκεκριµένo προβλήµα λάθους το οποίο µπορεί να δηµιουργηθεί από τους αριθµούς που εισάγει ο χρήστης. Για παράδειγµα, αν ο 1 ος αριθµός που δόθηκε από τον χρήστη είναι το 1() τότε λόγω του ότι είναι µεγαλύτερο από το 0(h_num) θα καταχωρηθεί στην µεταβλητή h_num=1. Αν υποθέσουµε πάλι ότι ο 2 ος αριθµός που δόθηκε από τον χρήστη είναι το 3() τότε λόγω του ότι είναι µεγαλύτερο από το 1(h_num) θα καταχωρηθεί στην µεταβλητή h_num=3. Αν υποθέσουµε τώρα ότι ο 3 ος αριθµός που δόθηκε από τον χρήστη είναι το 2() τότε λόγω του ότι δεν είναι µεγαλύτερο από το 3(h_num) αλλά είναι µικρότερο από το 100(s_num) θα καταχωρηθεί στην µεταβλητή s_num=2. Αν προσέξουµε όµως τους αριθµούς που έδωσε ο χρήστης τότε θα δούµε οτι το 1 θα έπρεπε να είναι ο µικρότερος αριθµός (s_num) µέχρι στιγµής και όχι το 2. Αυτό µπορούµε να το διορθώσουµε θέτοντας αρχικά τις τιµές h_num και s_num ίσες µε τον 1 ο αριθµό όπως φαίνεται στο σωστό διάγραµµα ροής πιο κάτω. h_num = 0, s_num = 0 count = 0 plithos count < plithos? h_num, s_num count=0? h_num = s_num = > h_num h_num = < s_num s_num = count=count+1
ΑΣΚΗΣΗ 2 Στο Τµήµα Πληροφορικής του Πανεπιστηµίου Κύπρου, ένας φοιτητής είναι εγγεγραµµένος σε ένα µάθηµα στο οποίο ο τελικός βαθµός δίνεται απλά ως Επιτυχία ή Αποτυχία. Ο βαθµός καθορίζεται βάση των βαθµολογιών των 3 κατοίκον εργασιών (homs) καθώς και της ενδιάµεσης (mid) και της τελικής εξέτασης (fin). Ο τελικός βαθµός δίνεται βάση της βαρύτητας/ποσοστού που αντιστοιχεί στην κάθε δοκιµασία. ηλαδή οι 3 κατοίκον εργασίες έχουν βαρύτητα 30%, η ενδιάµεση 20% και η τελική 50%. Αν ο τελικός βαθµός είναι µεγαλύτερος από 5, θα τυπώνεται το Όνοµα, Επίθετο του φοιτητή καθώς και Επιτυχία. Στην αντίθετη περίπτωση θα τυπώνεται το Όνοµα, Επίθετο του φοιτητή καθώς και Αποτυχία. Σχεδιάστε ένα διάγραµµα ροής που διαβάζει ένα αρχείο εισόδου (students.dat) της πιο κάτω µορφής και επιτελεί τα παραπάνω. A.T. Όνοµα Επίθετο Κατοίκον Μέσος Όρος Ενδιάµεση Τελική Λύση: OPEN students.dat rec EOF? CLOSE students.dat gd = rec.homs*30% + rec.mid*20% + rec.fin*50% gd > 5 Όνομα, Επίθετο, Αποτυχία Όνομα, Επίθετο, Επιτυχία
ΑΣΚΗΣΗ 3 Η γραµµατεία του τµήµατος της ιοίκησης Επιχειρήσεων χρειάζεται επειγόντως να δηµιουργήσει ένα πρόγραµµα το οποίο θα δίνει την δυνατότητα υπολογισµού ποσοστών ανάλογα µε την βαθµολογία των φοιτητών σε κάποιο µάθηµα. Συγκεκριµένα το πρόγραµµα θα δέχεται ως δεδοµένα εισόδου το αρχείο βαθµολογίας φοιτητών για το µάθηµα (π.χ. students-epl003.dat), όπου είναι καταχωρηµένα τα ονόµατα καθώς και ο βαθµός που έχουν εξασφαλίσει στο µάθηµα αυτό. Όνοµα Βαθµός Το πρόγραµµα θα πρέπει να επιτελεί τα ακόλουθα: 1. Να δίνεται από τον χρήστη το όνοµα του αρχείου καθώς και το πλήθος των φοιτητών για το συγκεκριµένο µάθηµα. 2. Να υπολογίζει το πλήθος των φοιτητών που έχουν εξασφαλίσει βαθµό 8 και να τυπώνει το ποσοστό καθώς και την ένδειξη Άριστα. 3. Να υπολογίζει το πλήθος των φοιτητών που έχουν εξασφαλίσει 6 βαθµό < 8 και να τυπώνει το ποσοστό καθώς και την ένδειξη Καλώς. 4. Να υπολογίζει το πλήθος των φοιτητών που έχουν εξασφαλίσει 5 βαθµό < 6 και να τυπώνει το ποσοστό καθώς και την ένδειξη Λίαν Καλώς. 5. Να υπολογίζει το πλήθος των φοιτητών που έχουν εξασφαλίσει βαθµό < 5 και να τυπώνει το ποσοστό καθώς και την ένδειξη Αποτυχία.
Λύση: sum1, sum2, sum3, sum4 = 0 pos1= (sum1/noofstud)*100 filename pos2= (sum2/noofstud)*100 noofstud pos3= (sum3/noofstud)*100 OPEN filename pos4= (sum4/noofstud)*100 rec pos4(%), Άριστα EOF? CLOSE filename pos3 (%), Καλώς pos2(%), Λίαν Καλώς < 5 pos1(%), Αποτυχία sum1 = sum1 + 1 5 < 6 sum2 = sum2 + 1 6 < 8 sum3 = sum3 + 1 8 sum4 = sum4 + 1
ΑΣΚΗΣΗ 4 Η Υπηρεσία Πληροφοριακών Συστηµάτων χρειάζεται να δηµιουργήσει ένα πρόγραµµα το οποίο θα διαβάζει ένα αρχείο (students.dat) στο οποίο βρίσκονται κατεγραµµένοι όλοι οι φοιτητές του Πανεπιστηµίου Κύπρου όπως φαίνεται πιο κάτω: A.T. Όνοµα Επίθετο Φύλο Έτος Βαθµός Μέσος Όρος Το πρόγραµµα θα χρησιµοποιηθεί για να δηµιουργηθεί και να τυπωθεί µια λίστα φοιτητριών που έχουν αριστέυσει στο 1 ο έτος καθώς και φοιτητριών που έχουν αριστέυσει στο 4 ο έτος. Οι φοιτήτριες αυτές θα τιµηθούν δια βοής στην διάρκεια επίσηµης τελετής προς τιµήν των πρωτοετών και αποφοιτούντων φοιτητριών, η οποία διεξάγεται από την οργάνωση Γυναίκες του Σήµερα. Συγκεκριµένα στη λίστα θα τυπώνεται το Όνοµα και το Επίθετο της κάθε φοιτήτριας. Το πρόγραµµα θα πρέπει επίσης να τυπώνει πριν να τερµατίσει το Όνοµα και το Επίθετο της φοιτήτριας που έχει πρωτεύσει στο 1 ο και στο 4 ο έτος.
Λύση: top_gd1=0, top_gd4=0, top_name1, top_name4, top_surn1, top_surn4 OPEN students.dat rec EOF? CLOSE students.dat top_name1, top_surn1 rec.sex = Female top_name4, top_surn4 rec.year = 1 && 8?? Όνομα, Επίθετο rec.year = 4 && 8?? top_gd1 < Όνομα, Επίθετο top_gd1 = top_name1 = rec.name top_surn1 = rec.surname top_gd4 < top_gd4 = top_name4 = rec.name top_surn4 = rec.surname
ΑΣΚΗΣΗ 5 Σχεδιάστε διάγραµµα ροής για το παρακάτω πρόβληµα: Μία τράπεζα θέλει να δηµιουργήσει ένα πρόγραµµα το οποίο να µπορεί να διαβάζει το αρχείο πελατών (customers.dat) και να εκτυπώνει το νέο ποσό ανάλογα µε τα ακόλουθα. ΠΕΡΙΓΡΑΦΗ ΑΡΧΕΊΟΥ: Αρ. Πελάτη Ονοµατεπώνυµο Φύλο Ποσό Λογαριασµός* *Το πεδίο λογαριασµός παίρνει τιµές προνοµιακός / µη-προνοµιακός Το πρόγραµµα αφού διαβάσει το αρχείο: Λύση: 1. Να προσθέτει στους προνοµιακούς λογαριασµούς οι οποίοι έχουν ποσό µεγαλύτερο ή ίσο από το ποσό των 10000 το επιτόκιο 10% και να τυπώνει το νέο ποσό. 2. Να προσθέτει στους προνοµιακούς λογαριασµούς οι οποίοι είναι κάτω από 10000 το επιτόκιο 8% και να τυπώνει το νέο ποσό. 3. Να προσθέτει στους µη προνοµιακούς λογαριασµούς µε ποσό µεγαλύτερο ή ίσο από 10000 το επιτόκιο 6% και να τυπώνει το νέο ποσό. 4. Να προσθέτει στους µη προνοµιακούς λογαριασµούς οι οποίοι είναι κάτω από 10000 το επιτόκιο 4% και να τυπώνει το νέο ποσό.