ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ Γ ΤΑΞΗ ΕΠΑΛ (ΟΜΑΔΑ Α ) & ΜΑΘΗΜΑΤΑ ΕΙΔΙΚΟΤΗΤΑΣ ΣΑΒΒΑΤΟ 16/04/2016 - ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ (ΑΠΟΦΟΙΤΟΙ) ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ: ΠΕΝΤΕ (5) ΑΠΑΝΤΗΣΕΙΣ ΘΕΜΑ Α Α1. α- Σωστό β- Σωστό γ- Λάθος δ- Λάθος ε- Σωστό στ- Σωστό Α2. 1 δ 2 ε 3 α 4 γ 5 β Α3. Σύνθετοι τύποι χωρίς δόμηση Εγγραφή Σύνολα (σελ. 131 σχολικό βιβλίο) Σύνθετοι τύποι με δόμηση Πίνακες Αρχεία Α4. readln( Χ); while Χ < 1 or Χ > 10 do writeln( Τιμή εκτός ορίων. Προσπαθήστε ξανά. ); readln( Χ); A5. 1 0 2 100 3 I >=10 4 S + I 5 I 30 6 S ΤΕΛΟΣ 1ΗΣ ΑΠΟ 5 ΣΕΛΙΔΕΣ
ΑΡΧΗ 2ΗΣ ΣΕΛΙΔΑΣ Α6. Char Integer Boolean ΘΕΜΑ Β Β1. Μ1 Μ2 P Αρχικές τιμές 13 15 0 Τιμές 1ης επανάληψης 26 7 13 Τιμές 2ης επανάληψης 52 3 39 Τιμές 3ης επανάληψης 104 1 91 Τιμές 4ης επανάληψης 208 0 195 Β2. Εμφανίζονται οι τιμές 208, 0, 195 Β3. program B2; var M1, M2, P: integer; M1:=13; M2:=15; P:=0; while M2 > 0 do if M2 MOD 2 = 1 P:=P + M1; M1:=M1*2; M2:= M2 DIV 2; writeln(m1, M2, P); ΘΕΜΑ Γ(Ενδεικτική απάντηση) program EPAL; const {δήλωση επωνυμιών σαν σταθερές} Math_Eidikotitas1= ΔΙΚΤΥΑ ΥΠΟΛΟΓΙΣΤΩΝ ; Math_Eidikotitas2= ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ; var { τμήμα δήλωσης μεταβλητών} ΤΕΛΟΣ 2ΗΣ ΑΠΟ 5 ΣΕΛΙΔΕΣ
ΑΡΧΗ 3ΗΣ ΣΕΛΙΔΑΣ i, vath1, vath2, plithos, sum_math_eidikotitas1, sum_math_eidikotitas2: integer; mo, mo_math_eidikotitas1, mo_math_eidikotitas2: real; name: string[30]; function average(x, y: integer): real; {δήλωση συνάρτησης} average:= (x + y) / 2; {main program} plithos:=0; {πλήθος μαθητών με μέσο όρο κάτω από τη βάση} sum_math_eidikotitas1:=0; {συνολική βαθμολογία 1 ου μαθήματος ειδικότητας} sum_math_eidikotitas2:=0; {συνολική βαθμολογία 2 ου μαθήματος ειδικότητας} for i:=1 to 30 do {επεξεργασία των 30 μαθητών της τάξης} {είσοδος δεδομένων κάθε μαθητή} write( Δώστε το ονοματεπώνυμο του μαθητή: ); write( Δώστε τους βαθμούς του στο 1 ο και το 2 ο μάθημα ειδικότητας: ); readln(vath1,vath2); mo:= average(vath,vath2); {υπολογισμός μέσης βαθμολογίας} {εμφάνιση ονοματεπωνύμου και μέσης βαθμολογίας μαθητή} writeln( ΟΝΟΜΑΤΕΠΩΝΥΜΟ ΜΑΘΗΤΗ:, name); writeln( ΜΕΣΟΣ ΟΡΟΣ ΜΑΘΗΤΗ:, mo); if mo < 10 {υπολογισμός αριθμού μαθητών με μέσο όρο κάτω από τη βάση} plithos:=plithos +1; sum_math_eidikotitas1:= sum_math_eidikotitas1 + vath1; {προσθήκη στο σύνολο} sum_math_eidikotitas2:= sum_math_eidikotitas2 + vath2; {προσθήκη στο σύνολο} writeln( ΜΑΘΗΤΕΣ ΜΕ ΜΕΣΟ ΟΡΟ < 10:, plithos); {υπολογισμός συνολικού μέσου όρου για κάθε μάθημα ειδικότητας} mo_math_eidikotitas1:= Sum_math_eidikotitas1 / 30; mo_math_eidikotitas2:= Sum_math_eidikotitas2 / 30; {εμφάνιση κατάλληλου χαρακτηρισμού} if mo_math_eidikotitas1 > mo_math_eidikotitas2 writeln( Η τάξη είναι καλύτερη στο μάθημα:, Math_Eidikotitas1) else if mo_math_eidikotitas1 < mo_math_eidikotitas2 writeln( Η τάξη είναι καλύτερη στο μάθημα:, Math_Eidikotitas2) else writeln( Η τάξη παρουσιάζει ισορροπία στα μαθήματα ειδικότητας ); Παρατηρήσεις: 1. Τα ονόματα των μεταβλητών είναι ενδεικτικά. 2. Τα σχόλια είναι προαιρετικά και τοποθετήθηκαν για διευκόλυνση του αναγνώστη. ΤΕΛΟΣ 3ΗΣ ΑΠΟ 5 ΣΕΛΙΔΕΣ
ΑΡΧΗ 4ΗΣ ΣΕΛΙΔΑΣ ΘΕΜΑ Δ (Ενδεικτική απάντηση) program POLITES; var {τμήμα δήλωσης μεταβλητών προγράμματος} politis, poso, plithos: integer; promithia, pososto, sum_promithias, min: real; name, min_name: string[30]; procedure prom(poso: integer; var pr: real); {δήλωση διαδικασίας} {υπολογισμός με κλιμακωτό τρόπο της προμήθειας του πωλητή} if poso < = 4000 pr:=poso * (0.5/100) else if poso < = 12000 pr:= 4000* (0.5/100) + (poso 4000) * (0.7/100) else if poso <= 25000 4000*(0.5/100) + 8000*(0.7/100) + (poso 12000) * 0.01 else 4000*(0.5/100) + 8000*(0.7/100) +13000*0.01 + (poso 25000) * 0.015 {main program} politis:=0; {πλήθος πωλητών που θα επεξεργαστούμε } sum_promithias:=0;{συνολική προμήθεια που θα καταβάλει η εταιρεία στους πωλητές} plithos:=0; {πλήθος πωλητών με πωλήσεις μεγαλύτερες των 25000 } {εισαγωγή δεδομένων} write( Δώστε το ονοματεπώνυμο του πωλητή ); while name < > 0 do politis:=politis+1; repeat write( Δώστε το ποσό των πωλήσεων του: ); readln(poso); if poso < 1000 or poso > 50000 write( Μη έγκυρη τιμή για το ποσό των πωλήσεων. Προσπαθήστε ξανά ); until poso >= 1000 and poso <= 50000 prom(poso, promithia); {κλήση διαδικασίας} {εμφάνιση ονόματος πωλητή και προμήθειας που δικαιούται} writeln(name, promithia); sum_promithias:=sum_promithias + promithia; if politis = 1 {εύρεση πωλητή με το μικρότερο ύψος πωλήσεων} end else if poso < min ΤΕΛΟΣ 4ΗΣ ΑΠΟ 5 ΣΕΛΙΔΕΣ
ΑΡΧΗ 5ΗΣ ΣΕΛΙΔΑΣ if poso > 25000 plithos:=plithos+1; write( Δώστε το ονοματεπώνυμο επόμενου πωλητή. Για τέλος δώστε 0: ); {while} if politis < > 0 {σε περίπτωση που δόθηκαν δεδομένα πωλητών} {εμφάνιση αποτελεσμάτων} writeln( Συνολικό ποσό προμήθειας που κατέβαλε η εταιρεία:, sum_promithias); writeln( Πωλητής με το μικρότερο ποσό πωλήσεων:, min_name ); {υπολογισμός ποσοστού} pososto:= (plithos / politis) * 100; writeln( Ποσοστό(%) με ποσό πωλήσεων > 25000 ::, pososto, % ); end else writeln( Δεν δόθηκαν στοιχεία πωλητών για επεξεργασία ); Παρατηρήσεις: 1. Τα ονόματα των μεταβλητών είναι ενδεικτικά. 2. Τα σχόλια είναι προαιρετικά και τοποθετήθηκαν για διευκόλυνση του αναγνώστη. 3. Ο υπολογισμός του μικρότερου ποσού πωλήσεων θα μπορούσε να γίνει ισοδύναμα με τις εντολές: if poso < min Αφού προηγουμένως στην αρχή του προγράμματος έχουμε αρχικοποιήσει την μεταβλητή min με μια πολύ μεγάλη «πλαστή» τιμή πχ. 50001 ώστε η πρώτη τιμή για τη μεταβλητή poso που θα δοθεί να είναι μικρότερη από αυτή της min ΤΕΛΟΣ 5ΗΣ ΑΠΟ 5 ΣΕΛΙΔΕΣ