ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ Γ ΤΑΞΗ ΕΠΑΛ (ΟΜΑΔΑ Α ) & ΜΑΘΗΜΑΤΩΝ ΕΙΔΙΚΟΤΗΤΑΣ ΕΠΑΛ (ΟΜΑΔΑ Β ) ΘΕΜΑ Α A1. ΚΥΡΙΑΚΗ 16/04/2014- ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ: ΔΕΚΑΠΕΝΤΕ (15) ΑΠΑΝΤΗΣΕΙΣ 1-Σωστό 2-Λάθος 3-Λάθος 4-Σωστό 5-Λάθος A2. Μεταβλητή x y z w k Τύπος integer real Boolean char string A3. α. Ακριβής περιγραφή των δεδομένων. Ο σαφής καθορισμός των βημάτων του. Ο πεπερασμένος αριθμός βημάτων. Η ολοκλήρωση κάθε βήματος σε πεπερασμένο χρόνο. Η ακρίβεια αποτελεσμάτων κάθε βήματος. (σελ. 19 σχολικό βιβλίο) ΤΕΛΟΣ 1ΗΣ ΑΠΟ 15 ΣΕΛΙΔΕΣ
ΑΡΧΗ 2ΗΣ ΣΕΛΙΔΑΣ β. Κύκλος ανάπτυξης προγράμματος Σχεδίαση προγράμματος α. Κατανόηση του προβλήματος. β. Μέθοδοι επίλυσης του προβλήματος. Λοιπές διαδικασίες γ. Κωδικοποίηση-μετάφραση του προγράμματος δ. Έλεγχος του προγράμματος ε. Τεκμηρίωση του προγράμματος (σελ. 53 σχολικό βιβλίο) A4. α. β. sum:=0; event:=10; while event < = 40 do i:=1; while i < = 5 do sum:=sum + i; writeln(sum); event:=event + 5; i:=i + 1; end; sum:=0; event:=10; repeat i:=1; repeat sum:=sum + i; writeln(sum); event:=event + 5; i:=i + 1; until i > 5; until event > 40; writeln(sum); end; writeln(sum); ΤΕΛΟΣ 2ΗΣ ΑΠΟ 15 ΣΕΛΙΔΕΣ
ΑΡΧΗ 3ΗΣ ΣΕΛΙΔΑΣ A5. 1 στ 2 α 3 ε 4 β 5 γ ΘΕΜΑ Β Για διευκόλυνση του αναγνώστη θα κατασκευαστεί ενδεικτικός πίνακας τιμών εκτελώντας τα επόμενα βήματα: 1. Κατασκευάζουμε πίνακα με 3 στήλες. Η πρώτη έχει τίτλο «Εκτέλεση εντολών» και θα περιγράφονται αναλυτικά η εκτέλεση των εντολών. Η δεύτερη ονομάζεται «Κύριο πρόγραμμα» και η τρίτη «Διαδικασία». 2. Κατασκευάζουμε τόσες στήλες όσες οι μεταβλητές του κύριου προγράμματος και της διαδικασίας. Εκτέλεση εντολών Κύριο πρόγραμμα Διαδικασία Κύριο πρόγραμμα-αρχικοποίηση μεταβλητών 10 2 1 ; Κύριο πρόγραμμα-1 η επανάληψη Κύριο πρόγραμμα- έλεγχος συνθήκης :10 mod 2 =0, 0=0 ισχύει. Εκτελούνται οι εντολές του if. x y z r a b c 1 η Κλήση διαδικασίας. Πέρασμα των τιμών των πραγματικών παραμέτρων στις αντίστοιχες τυπικές. z a, y b και το απροσδιόριστο περιεχόμενο της r στην c 1 2 ; Εκτέλεση διαδικασίας: ( 1+ 2) div 2= 3 div 2 =1 1 Επιστροφή στο κύριο πρόγραμμα. Οι τυπικές παράμετροι επιστρέφουν τις τιμές τους στις αντίστοιχες πραγματικές. a z, b y c r. Οι δύο πρώτες σαν παράμετροι τιμών δεν αλλάζουν τις τιμές που έλαβαν ενώ αντίθετα η παράμετρος μεταβλητής c δέχτηκε απροσδιόριστο περιεχόμενο και επιστρέφει την τιμή 1 που δημιουργήθηκε μέσα στο σώμα της διαδικασίας στην μεταβλητή r του κυρίου προγράμματος 2 1 1 Κύριο πρόγραμμα: εμφάνιση τιμών(2,1,1) Πράξεις στο κύριο πρόγραμμα: z 1+2=3, y 2+1=3 3 3 Κύριο πρόγραμμα-έλεγχος συνθήκης στην εντολή repeat..until : 3 > = 8 ΤΕΛΟΣ 3ΗΣ ΑΠΟ 15 ΣΕΛΙΔΕΣ
ΑΡΧΗ 4ΗΣ ΣΕΛΙΔΑΣ ψευδής Κύριο πρόγραμμα-2 η επανάληψη Κύριο πρόγραμμα: έλεγχος συνθήκης 10 mod 3 =0 1<> 0 δεν ισχύει Πράξεις στο κύριο πρόγραμμα: Εκτελείται η εντολή του else r 3+3=6 6 Κύριο πρόγραμμα: εμφάνιση τιμών(3,3,6) Πράξεις στο κύριο πρόγραμμα:z 3+2=5, y 3+1=4 4 5 Κύριο πρόγραμμα- Έλεγχος συνθήκης στην εντολή repeat..until : 5 > = 8 ψευδής Κύριο πρόγραμμα-3 η επανάληψη Κύριο πρόγραμμα: έλεγχος συνθήκης 10 mod 4 =0 2=0 δεν ισχύει Πράξεις στο κύριο πρόγραμμα Εκτελείται η εντολή του else. r 4+5=9 9 Κύριο πρόγραμμα: εμφάνιση τιμών(4,5,9) Πράξεις στο κύριο πρόγραμμα:z 5+2=7, y 4+1=5 5 7 Κύριο πρόγραμμα-έλεγχος συνθήκης στην εντολή repeat..until: 7 > = 8 ψευδής Κύριο πρόγραμμα: 4 η επανάληψη Κύριο πρόγραμμα: έλεγχος συνθήκης 10 mod 5 =0 0=0 ισχύει 2 η Κλήση διαδικασίας. Πέρασμα των τιμών των πραγματικών παραμέτρων στις αντίστοιχες τυπικές. z a, y b r c 7 5 9 Εκτέλεση διαδικασίας: ( 7+ 5) mod 2 = 12 div 2 =6 6 Επιστροφή στο κύριο πρόγραμμα. Οι τυπικές παράμετροι επιστρέφουν τις τιμές τους στις αντίστοιχες πραγματικές. a z, b y c r. Οι δύο πρώτες σαν παράμετροι τιμών δεν αλλάζουν τις τιμές που έλαβαν ενώ αντίθετα η παράμετρος μεταβλητής c δέχτηκε την τιμή 9 και επιστρέφει την τιμή 6 που δημιουργήθηκε μέσα στο σώμα της διαδικασίας στην μεταβλητή r του κυρίου προγράμματος 5 7 6 Κύριο πρόγραμμα: εμφάνιση τιμών(5,7,6) Πράξεις στο κύριο πρόγραμμα:z 7+2=9, y 5+1=6 6 9 ΤΕΛΟΣ 4ΗΣ ΑΠΟ 15 ΣΕΛΙΔΕΣ
ΑΡΧΗ 5ΗΣ ΣΕΛΙΔΑΣ Κύριο πρόγραμμα: Έλεγχος συνθήκης: στην εντολή repeat..until: 9 > = 8 αληθής. Τέλος εκτέλεσης αλγορίθμου. (ο χαρακτήρας «;» αναφέρεται στο απροσδιόριστο περιεχόμενο μιας ματαβλητής) Με βάση τον παραπάνω πίνακα τιμών : α. Η διαδικασία καλείται 2 φορές. β. οι πραγματικές παράμετροι είναι οι z, y, r και οι τυπικές οι a, b c. Από τις τυπικές παράμετροι οι a, b είναι παράμετροι τιμών και η c παράμετρος μεταβλητών. γ. Επανάληψη y z r 1 η 2 1 1 2 η 3 3 6 3 η 4 5 9 4 η 5 7 6 ΘΕΜΑ Γ Ενδεικτική απάντηση program fototypiko; var {τμήμα δηλώσεων μεταβλητών κύριου προγράμματος} i, sel, epil, max: integer; poso_kart, sum, kost_anap: real; { Γ5-δήλωση διαδικασίας kostos} procedure kostos( c, p :integer; var b:real); { Γ3.α- υπολογισμός μέσου της διαδικασίας του κόστους αναπαραγωγής φωτοτυπιών} if c=1 then b:=p * 0.05 ΤΕΛΟΣ 5ΗΣ ΑΠΟ 15 ΣΕΛΙΔΕΣ
ΑΡΧΗ 6ΗΣ ΣΕΛΙΔΑΣ else if c=2 then b:=p * 0.10 else if c=3 then b:=p * 0.20 else b:=p * 0.30 end; {fototypiko} sum:=0; {Γ4-συνολικό κόστος αναπαραγωγής φωτοτυπιών} for i:=1 to 20 do {για καθένα από τους 20 φοιτητές} { Γ2-α} write( δώστε το ποσό της κάρτας του φοιτητή: ); readln(poso_kart); { Γ2-β} write( δώστε την επιλογή του φοιτητή: ); readln(epil); { Γ2-γ} write( δώστε τις σελίδες που θέλει να φωτοτυπήσει: ); readln(sel); { Γ3.α -κλήση διαδικασίας kostos } kostos(epil, sel, kost_anap); { Γ3.β- εμφάνιση κόστους αναπαραγωγής} writeln( κόστος αναπαραγωγής φωτοτυπιών:, kost_anap); { Γ3.γ-έλεγχος για τον αν ή όχι μπορεί να πληρώσει με την κάρτα του ο φοιτητής} if kost_anap < = poso ΤΕΛΟΣ 6ΗΣ ΑΠΟ 15 ΣΕΛΙΔΕΣ
ΑΡΧΗ 7ΗΣ ΣΕΛΙΔΑΣ then poso:=poso kost_anap; writeln( στη κάρτα υπάρχει ακόμα ποσό:, poso) end else kost_anap:=kost_anap poso; writeln( οφείλετε ακόμα το ποσό:, kost_anap); end; {Γ4- υπολογισμός συνολικού κόστους αναπαραγωγής των φωτοτυπιών} sum:=sum + kost_anap; { Γ4- υπολογισμός του μεγαλύτερου πλήθους σελίδων που φωτοτυπήθηκαν} if i = 1 then max:=sel else if sel > max then max:=sel; end;{for} {Γ4-εμφάνιση συνολικού κόστος αναπαραγωγής φωτοτυπιών} writeln( συνολικό κόστος αναπαραγωγής φωτοτυπιών:, sum); {Γ4-εμφάνιση μεγαλύτερου πλήθους φωτοτυπιών} writeln( μεγαλύτερο πλήθος φωτοτυπιών:, max); end. {fototypiko} Παρατηρήσεις: Π1. Τα ονόματα των μεταβλητών είναι ενδεικτικά. ΤΕΛΟΣ 7ΗΣ ΑΠΟ 15 ΣΕΛΙΔΕΣ
ΑΡΧΗ 8ΗΣ ΣΕΛΙΔΑΣ Π2. Τα σχόλια είναι προαιρετικά και χρησιμοποιήθηκαν για διευκόλυνση του αναγνώστη. Π3. Τα μηνύματα εισόδου και εξόδου είναι προαιρετικά και ενδεικτικά. Π4. Η χρήση των ονομάτων c, p, b των τυπικών παραμέτρων της διαδικασίας kostos διαφορετικών από τα epil, sel, kost_anap του κυρίου προγράμματος έγινε για διευκόλυνση του αναγνώστη. Είναι δυνατή η χρήση ως τυπικών παραμέτρων των epil, sel, kost_anap αρκεί να δηλωθούν στην διαδικασία. Π5. Στο ερώτημα Γ4 για τον υπολογισμός του μεγαλύτερου πλήθους φωτοτυπιών που διεκπεραίωσε το μηχάνημα ο αλγόριθμος: if i = 1 then max:=sel if sel > max then max:=sel else if sel > max then max:=sel; με την προϋπόθεση όμως η μεταβλητή max να έχει πάρει αρχική τιμή στην αρχή του κυρίου προγράμματος μια πλαστή τιμή για αριθμό σελίδων, έστω 0 μια και γνωρίζουμε ότι αφού τα δεδομένα είναι έγκυρα τότε η μεταβλητή sel δεν μπορεί να πάρει τιμή μηδενική. Π6. Στο σώμα της διαδικασίας ο αλγόριθμος που υπολογίζει το κόστος αναπαραγωγής των φωτοτυπιών : if c=1 then b:=p * 0.05 else if c=2 then b:=p * 0.10 else if c=3 then b:=p * 0.20 θα μπορούσε να γραφεί ισοδύναμα με χρήση της εντολής case της γλώσσας Pascal ως εξής: case c of 1: b:=p * 0.05; 2: b:=p * 0.10; 3: b:=p * 0.20; ΤΕΛΟΣ 8ΗΣ ΑΠΟ 15 ΣΕΛΙΔΕΣ
ΑΡΧΗ 9ΗΣ ΣΕΛΙΔΑΣ else b:=p * 0.30 4: b:=p * 0.30; end; ΘΕΜΑ Δ Ενδεικτική Απάντηση program etaireia; { Με την εντολή repeat..until} { δήλωση του βασικού μισθού σαν συμβολική σταθερά} const basikos_misthos=500; { Δ1-τμήμα δήλωσης μεταβλητών} var pol, polites, gynaikes_polites, a_pol_25up, max: integer; prom, pososto, total_prom, total_misthos :real; fylo:char; onep, politria: string[30]; {αρχικοποιήση μεταβλητών} total_prom :=0; {Δ4.α-συνολική προμήθεια } polites:=0; {Δ4.γ- αριθμός πωλητών. εταιρείας } a_pol 15up:=0; {Δ4.γ- αριθμός ανδρών πωλητών με πωλήσεις άνω των 15 χιλ ευρώ.} gynaikes_polites:=0; { Δ4.β-μετράει τις γυναίκες πωλήτριες} write( δώστε το όνομα του πρώτου πωλητή: ); readln( onep); repeat repeat { έλεγχος αποδεκτών τιμών για το φύλο του πωλητή} ΤΕΛΟΣ 9ΗΣ ΑΠΟ 15 ΣΕΛΙΔΕΣ
ΑΡΧΗ 10ΗΣ ΣΕΛΙΔΑΣ write( δώστε το φύλο του: ); readln( fylo); until fylo = M or fylo = W ; write( δώστε τις μηνιαίες πωλήσεις του: ); readln(pol); { Δ2.β-υπολογισμός κλιμακωτά της προμήθειας που δικαιούται ο πωλητής} if pol < = 3000 then prom:= (0.1 / 100) * pol else if pol < = 8000 then prom:= (0.1 / 100) *3000+(pol-3000) * (0.5 / 100) else if pol < = 15000 then prom:= (0.1/100) *3000+5000 *(0.5/100) + (pol-8000) * (0.7/100) else prom:= (0.1/100) *3000+5000 *(0.5/100)+ 7000* (0.7/100)+(pol-15000)*0.01; {Δ4.β- εμφάνιση ποσού προμήθειας που δικαιούται ο πωλητής} writeln( Προμήθεια που δικαιούται:, prom); {Δ2.γ-υπολογισμός συνολικού μηνιαίου μισθού πωλητή} total_misthos:= basikos_misthos + prom; {Δ2.γ-Εμφάνιση συνολικού μηνιαίου μισθού} writeln( ο πωλητής/τρια:, onep, δικαιούται συνολικό μισθό:, total_misthos); total_prom :=total_prom + prom; { Δ4.α-αθροίζω στην συνολική προμήθεια} if fylo= M and pol >15000 {Δ4.γ-αν είναι άνδρας και έχει πωλήσεις > 15000 } then a_pol 15up:= a_pol 15up +1 ; if fylo= W {Δ4.β- αν είναι γυναίκα} then gynaikes_polites:=gynaikes_polites+1; ΤΕΛΟΣ 10ΗΣ ΑΠΟ 15 ΣΕΛΙΔΕΣ
ΑΡΧΗ 11ΗΣ ΣΕΛΙΔΑΣ {Δ4.β-υπολογισμός της πωλήτριας με τις περισσότερες πωλήσεις} if gynaikes_polites:=1 then max:= pol; politria:=onep; end else if pol > max max:= pol; politria:=onep; end end; {είναι γυναίκα} {Δ4.γ-αυξάνω τους πωλητές της εταιρείας κατά ένα} polites:=polites + 1; { εισαγωγή στοιχείων επόμενου πωλητή ή εισαγωγή της λέξης STOP } write( δώστε το όνομα του επόμενου πωλητή. Για τέλος δώστε τη λέξη STOP ); readln( onep); until onep = STOP ; { Δ4.α-εμφάνιση συνολικής προμήθειας που δίνει η εταιρεία στους πωλητές της} writeln( συνολική προμήθεια που δίνει η εταιρεία:, total_prom); { Δ4.γ-υπολογισμός ποσοστού (%) των ανδρών με πωλήσεις άνω των 15χιλ.} pososto:= a_pol 15up / polites * 100; {Δ4.γ- εμφάνιση ανωτέρω ποσοστού} writeln{pososto}; ΤΕΛΟΣ 11ΗΣ ΑΠΟ 15 ΣΕΛΙΔΕΣ
ΑΡΧΗ 12ΗΣ ΣΕΛΙΔΑΣ {Δ4.β- εμφάνισης της πωλήτριας με τις μεγαλύτερες πωλήσεις} writeln{politria}; end. {etaireia} Ενδεικτική απάντηση program etaireia; { Με την εντολή while do} { δήλωση του βασικού μισθού σαν συμβολική σταθερά} const basikos_misthos=500; { Δ1- τμήμα δήλωσης μεταβλητών} var pol, polites, gynaikes_polites, a_pol_25up, max: integer; prom, pososto, total_prom, total_misthos :real; fylo:char; onep, politria: string[30]; {αρχικοποιήση μεταβλητών} total_prom :=0; {Δ4.α- συνολική προμήθεια } polites:=0; {Δ4.γ- αριθμός πωλητών. εταιρείας } a_pol 15up:=0; {Δ4.γ- αριθμός ανδρών πωλητών με πωλήσεις άνω των 15 χιλ.} gynaikes_polites:=0; { Δ4.β- μετράει τις γυναίκες πωλήτριες} write( δώστε το όνομα του πρώτου πωλητή: ); readln( onep); while onep < > STOP do repeat { Δ2.α-έλεγχος αποδεκτών τιμών για το φύλο του πωλητή} ΤΕΛΟΣ 12ΗΣ ΑΠΟ 15 ΣΕΛΙΔΕΣ
ΑΡΧΗ 13ΗΣ ΣΕΛΙΔΑΣ write( δώστε το φύλο του: ); readln( fylo); until fylo = M or fylo = W ; write( δώστε τις μηνιαίες πωλήσεις του: ); readln(pol); { Δ2.β-υπολογισμός κλιμακωτά της προμήθειας που δικαιούται ο πωλητής} if pol < = 3000 then prom:= (0.1 / 100) * pol else if pol < = 8000 then prom:= (0.1 / 100) *3000+(pol-3000) * (0.5 / 100) else if pol < = 15000 then prom:= (0.1/100) *3000+5000 *(0.5/100) + (pol-8000) * (0.7/100) else prom:= (0.1/100) *3000+5000 *(0.5/100)+ 7000* (0.7/100)+(pol-15000)*0.01; {Δ2.β- εμφάνιση προμήθειας που δικαιούται ο πωλητής} writeln( Προμήθεια που δικαιούται:, prom); {Δ2.γ-υπολογισμός συνολικού μηνιαίου μισθού πωλητή} total_misthos:= basikos_misthos + prom; {Δ2.γ-Εμφάνιση συνολικού μηνιαίου μισθού} writeln( ο πωλητής/τρια:, onep, δικαιούται συνολικό μισθό:, total_misthos); total_prom :=total_prom + prom; {Δ4.α- αθροίζω στην συνολική προμήθεια} if fylo= M and pol >15000 {Δ4.γ-αν είναι άνδρας και έχει πωλήσεις > 15000 } then a_pol 15up:= a_pol 15up +1 ; if fylo= W {Δ4.β-αν είναι γυναίκα} then gynaikes_polites:=gynaikes_polites+1; ΤΕΛΟΣ 13ΗΣ ΑΠΟ 15 ΣΕΛΙΔΕΣ
ΑΡΧΗ 14ΗΣ ΣΕΛΙΔΑΣ {Δ4.β-υπολογισμός της πωλήτριας με τις περισσότερες πωλήσεις} if gynaikes_polites:=1 then max:= pol; politria:=onep; end else if pol > max max:= pol; politria:=onep; end end; {είναι γυναίκα} {Δ4.γ- αυξάνω τους πωλητές της εταιρείας κατά ένα} polites:=polites + 1; write( δώστε το όνομα του επόμενου πωλητή. Για τέλος δώστε τη λέξη STOP: ); readln( onep); end; {while} {Δ4.α-εμφάνιση συνολικής προμήθειας που δίνει η εταιρεία στους πωλητές της} writeln( συνολική προμήθεια που δίνει η εταιρεία:, total_prom); {Δ4.γ-υπολογισμός ποσοστού (%) των ανδρών με πωλήσεις άνω των 15χιλ.} pososto:= a_pol 15up / polites * 100; {Δ4.γ-εμφάνιση ανωτέρω ποσοστού} writeln{pososto}; {Δ4.β-εμφάνισης της πωλήτριας με τις μεγαλύτερες πωλήσεις} ΤΕΛΟΣ 14ΗΣ ΑΠΟ 15 ΣΕΛΙΔΕΣ
ΑΡΧΗ 15ΗΣ ΣΕΛΙΔΑΣ writeln{politria}; end. {etaireia} Παρατηρήσεις (αφορά και τους δύο τρόπους) Π1. Τα ονόματα των μεταβλητών και τα μηνύματα εισόδου και εξόδου είναι ενδεικτικά. Η δήλωσης της συμβολικής σταθερής είναι προαιρετική. Π2. Ο έλεγχος εγκυρότητας για το φύλο θα μπορούσε να δοθεί και με τη βοήθεια της εντολής while ως εξής: write( δώστε το φύλο του: ); readln( fylo); while fylo < > M and fylo < > W do write( δώστε ξανά το φύλο του: ); readln( fylo); end; Π3. Ο υπολογισμός της πωλήτριας με τις περισσότερες πωλήσεις, ισοδύναμα θα μπορούσε να υπολογίζεται με τον παρακάτω τμήμα αλγορίθμου: if pol > max max:= pol; politria:=onep; end αφού πρώτα στην αρχή του αλγορίθμου η μεταβλητή max να έχει πάρει σαν αρχική τιμή μια πλαστή πολύ μικρή τιμή έστω -1. ΤΕΛΟΣ 15ΗΣ ΑΠΟ 15 ΣΕΛΙΔΕΣ