Κεφάλαιο 10 : Επανάληψη 2 ο Φύλλο Εργασιών Άσκηση 01 Σε κάποια εξεταστική δοκιµασία κάθε γραπτό αξιολογείται αρχικά από δύο βαθµολογητές και υπάρχει περίπτωση το γραπτό να χρειάζεται αναβαθµολόγηση από τρίτο βαθµολογητή. Στην περίπτωση αναβαθµολόγησης ο τελικός βαθµός υπολογίζεται ως εξής: i. Αν ο βαθµός του τρίτου βαθµολογητή είναι ίσος µε το µέσο όρο (Μ.Ο.) των βαθµών των δύο πρώτων βαθµολογητών, τότε ο τελικός βαθµός είναι ο Μ.Ο. ii. Αν ο βαθµός του τρίτου βαθµολογητή είναι µικρότερος από το µικρότερο βαθµό (ΜΙΝ) των δύο πρώτων βαθµολογητών, τότε ο τελικός βαθµός είναι ο ΜΙΝ. iii. ιαφορετικά, ο τελικός βαθµός είναι ο µέσος όρος του βαθµού του τρίτου βαθµολογητή µε τον πλησιέστερο προς αυτόν βαθµό των δύο πρώτων βαθµολογητών. Να αναπτύξετε αλγόριθµο υπολογισµού του τελικού βαθµού ενός γραπτού µε αναβαθµολόγηση, ο οποίος: α. να διαβάζει τους βαθµούς του πρώτου, του δεύτερου και του τρίτου βαθµολογητή ενός γραπτού. Μονάδες 2 β. να υπολογίζει και να εκτυπώνει το µεγαλύτερο (ΜΑΧ) και το µικρότερο (ΜΙΝ) από τους βαθµούς του πρώτου και του δεύτερου βαθµολογητή. Μονάδες 6 γ. να υπολογίζει και να εκτυπώνει τον τελικό βαθµό του γραπτού σύµφωνα µε την παραπάνω διαδικασία. Μονάδες 12 1
program lala; a,b,c,mo,min,max,v,dca,dcb:real; writeln( ώσε βαθµό α ); readln(a); writeln( ώσε βαθµό β ); readln(b); writeln( ώσε βαθµό β ); readln(c); if a >= b then max := a; min := b end max := b; min := a end; mo := (a+b)/2; writeln('min: ', min:0:2); writeln('max: ', max:0:2); writeln('mo: ', mo:0:2); if c = mo then v := mo if c < min then v := min dca := abs(c-a); dcb := abs(c-b); if dca < dcb then v := (c+a)/2 v := (c+b)/2 end; writeln(τελικός : ', v:0:2); end. Άσκηση 02 Ένα Internet Cafe χρεώνει κάθε πελάτη µε ένα πάγιο 2 για τη χρήση Η/Υ και κλιµακωτά ανάλογα µε το χρόνο χρήσης σύµφωνα µε τον παρακάτω πίνακα: Χρόνος (σε λεπτά) έως 30 0 περισσότερα από 30 έως 90 2 περισσότερα από 90 έως και 120 3 Χρέωση 2
περισσότερα από 120 6 Η παραπάνω χρέωση αφορά κίνηση δεδοµένων µέχρι 200 Μb. Σε περίπτωση µεγαλύτερης κίνησης δεδοµένων, τα επιπλέον δεδοµένα χρεώνονται µε 1 λεπτό του ευρώ ανά Mb. Να γράψετε ένα πρόγραµµα Pascal το οποίο: α. Θα διαβάζει το χρόνο χρήσης υπολογιστή (λεπτά της ώρας) από έναν πελάτη και τη συνολική κίνηση των δεδοµένων σε Mb. b. Θα υπολογίζει και θα τυπώνει τη χρέωση σύµφωνα µε τον παραπάνω πίνακα. program lala; diarkeia:integer; kinisi:real; xrewsi:real; while true do write( ιάρκεια χρήσης :'); readln(diarkeia); write('κίνηση δεδοµένων :'); readln(kinisi); xrewsi := 2; if kinisi > 200 then xrewsi := xrewsi + (kinisi - 200) * 0.01; if diarkeia > 30 then if diarkeia <= 90 then xrewsi := xrewsi + (diarkeia - 30) * 2 if diarkeia <= 120 then xrewsi := xrewsi + 60 * 2 + (diarkeia - 90) * 3 xrewsi := xrewsi + 60 * 2 + 30 * 3 + (diarkeia - 120) * 6; writeln('χρέωση : ', xrewsi:0:2); end; Άσκηση 03 Να γραφεί πρόγραµµα σε Pascal που διαβάζει τον προφορικό και τον γραπτό βαθµό ενός µαθητή σ ένα µάθηµα. Αν ο προφορικός είναι µεγαλύτερος ή µικρότερος από τον γραπτό κατά 5 µονάδες, τότε ο προφορικός βαθµός αναπροσαρµόζεται (δηλαδή αυξάνεται ή µειώνεται) έτσι ώστε να απέχει 3 µονάδες από τον γραπτό. Να γραφεί αλγόριθµος που να υπολογίζει το µέσο όρο στο µάθηµα αυτό αν αυτός προέρχεται από το 30% του προφορικού και το 70% του γραπτού. Να εµφανίζει τέλος το ΜΟ στο µάθηµα. Αν ο µέσος όρος είναι πάνω από 10 να εµφανίζει «Προάγεται», αλλιώς «Απορρίπτεται». 3
program vathmoi(input, output); uses crt; pro,gra,mo,diff:real; write('dwse proforiko vathmo :'); readln(pro); write('dwse grapto vathmo :'); readln(gra); diff := pro - gra; if diff > 5 then pro := gra + 3 if diff < -5 then pro := gra -3; MO := 0.30 * pro + 0.70 * gra; writeln('mo:',mo:0:2); if MO > 10 then writeln('proagetai') writeln('aporiptetai') end. Άσκηση 04 Ένα χωριό υδροδοτείται από τρεις δεξαµενές νερού. Σε κάθε δεξαµενή υπάρχει ένας αισθητήρας που µετρά τα αποθέµατα νερού στη δεξαµενή. Οι αισθητήρες είναι συνδεδεµένοι µε ένα υπολογιστικό σύστηµα το οποίο περιοδικά συλλέγει δεδοµένα και αποθηκεύει το απόθεµα κάθε δεξαµενής σε τρεις µεταβλητές D1, D2, D3 αντίστοιχα. Στη συνέχεια εµφανίζει το µήνυµα Φυσιολογική, Επιφυλακή ή Συναγερµός ανάλογα µε τα αποθέµατα. Το όρια των δεξαµενών φαίνονται στον παρακάτω πίνακα Να γράψετε ένα πρόγραµµα σε Pascal που 1. θα διαβάζει από το πληκτρολόγιο τα αποθέµατα των δεξαµενών χωρισµένα µε κενά 2. θα εµφανίζει τα συνολικά αποθέµατα νερού 4
3. θα εµφανίζει ένα από τα µηνύµατα: Κατάσταση Φυσιολογική Κατάσταση Επιφυλακής Συναγερµός Ανάλογα µε τα αποθέµατα των δεξαµενών Αν το σύστηµα είναι σε κατάσταση συναγερµού να ελέγχει αν κάποια δεξαµενή είναι εντελώς άδεια και να εµφανίζει το νούµερό της. Υπόδειξη: Να θεωρήσετε ότι σε κατάσταση συναγερµού µπορεί να έχουν αδειάσει περισσότερες από µία δεξαµενές. Στη συνέχεια να αναπαραστήσετε τον αλγόριθµο που υλοποιήσατε µε διάγραµµα ροής. Κατάσταση Αποθέµα σε m 3 εξαµενή 1 εξαµενή 2 εξαµενή 3 Φυσιολογική Πάνω από 500 Πάνω από 750 Πάνω από 200 Επιφυλακή Πάνω από 200 πάνω από 300 Πάνω από 100 Συναγερµός Κάτω από 200 Κάτω από 300 Κάτω από 100 Για να είναι φυσιολογική η κατάσταση θα πρέπει κάθε δεξαµενή να είναι πάνω από το όριο που περιγράφεται στον παραπάνω πίνακα. Για να είναι το σύστηµα των δεξαµενών σε κατάσταση επιφυλακής θα πρέπει µία τουλάχιστον δεξαµενή να είναι κάτω από το φυσιολογικό όριο και όλες πάνω από το όριο επιφυλακής. Για να είναι το σύστηµα σε κατάσταση συναγερµού θα πρέπει µία τουλάχιστον δεξαµενή να είναι κάτω από το όριο συναγερµού. Οι παραπάνω καταστάσεις µπορούν να περιγραφούν µε τις παρακάτω λογικές εκφράσεις Κατάσταση Συνθήκη Φυσιολογική (D1>500) and (D2> 750) AND (D3> 200) Επιφυλακή NOT ( (D1>500) and (D2> 750) AND (D3> 200) ) AND ( (D1> 200) AND (D2> 300) AND (D3> 100) ) Συναγερµός (D1 <= 200) OR (D2 <= 300) OR (D3 <= 100) 5
program Kef_10_Task_04(input, output); uses crt; D1,D2,D3:integer; write(' ώσε αποθέµατα των δεξαµενών:'); readln(d1,d2,d3); if (D1>500) AND (D2>750) AND (D3>200) then writeln('κατάσταση φυσιολογική') if (D1>200) AND (D2>300) AND (D3>100) then writeln('κατάσταση επιφυλακής') writeln('κατάσταση συναγερµού'); if D1 = 0 then writeln(' εξαµενή 1 άδεια'); if D2 = 0 then writeln(' εξαµενή 2 άδεια'); if D3 = 0 then writeln(' εξαµενή 3 άδεια') end end. 6
7