ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ Γ ΤΑΞΗ ΕΠΑΛ (ΟΜΑΔΑ Α ) & ΜΑΘΗΜΑΤΩΝ ΕΙΔΙΚΟΤΗΤΑΣ ΕΠΑΛ (ΟΜΑΔΑ Β ) ΤΕΤΑΡΤΗ 08/04/2015 - ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ: ΟΚΤΩ (8) ΘΕΜΑ Α ΑΠΑΝΤΗΣΕΙΣ Α1. Α2. α- Λάθος H διαδικασία ανεύρεσης λογικών λαθών περιλαμβάνει : β- Σωστό Διαπίστωση του είδους του λάθους γ- Σωστό δ- Λάθος Ανεύρεση του ανεξάρτητου τμήματος του αλγορίθμου που εκτελεί τη λανθασμένη λειτουργία ε- Σωστό Ανεύρεση του λάθους μέσα σε αυτό το ανεξάρτητο στ- Λάθος τμήμα. (σελ. 44 σχολικό βιβλίο) Α3 α. a >= 5 and a < 7 β. x mod 4 = 0 and x mod 100 <> 0 Εναλλακτική απάντηση : x mod 4 = 0 and not (x mod 100 =0) γ. a > 3 or a < 8 A4. α. Παραβιάζεται το κριτήριο του σαφούς καθορισμού των βημάτων του αλγορίθμου, διότι για τον υπολογισμό της τιμής της μεταβλητής Aver διαιρείται η τιμή της μεταβλητής S με το μηδέν, πράξη που δεν ορίζεται. β. S:=0; K:=0; for i:=0 to 10 do readln(x); if x > 0 then S:=S + x; K:=K + 1; end ΤΕΛΟΣ 1ΗΣ ΑΠΟ 8 ΣΕΛΙΔΕΣ
ΑΡΧΗ 2ΗΣ ΣΕΛΙΔΑΣ if K <> 0 then Aver:= S / K; writeln(aver:5:2); else writeln ( Δεν ορίζεται η διαίρεση ); Α5. 1 ε 2 ζ 3 δ 4 α 5 β ΘΕΜΑ Β Β1. α. 510 β. Αρχή Βάλε 15 στην Μ1 Βάλε 34 στην Μ2 Βάλε 0 στην P Αν ο Μ2 είναι θετικός Τότε Επανάλαβε Αν ο Μ2 είναι περιττός Τότε Πρόσθεσε M1 στον P και Βάλε το αποτέλεσμα στην P Πολλαπλασίασε επί 2 το Μ1 και Βάλε το αποτέλεσμα στην Μ1 Διαίρεσε δια 2 το Μ2 και Βάλε το ακέραιο πηλίκο στο Μ2 Μέχρι ο Μ2 να είναι μικρότερος ή ίσος του μηδενός Εμφάνισε P Τέλος γ. program psevdokodikas_se_pascal; uses wincrt; var M1, M2, P : integer; M1 := 15; M2 := 34; P := 0; while M2 > 0 do ΤΕΛΟΣ 2ΗΣ ΑΠΟ 8 ΣΕΛΙΔΕΣ
ΑΡΧΗ 3ΗΣ ΣΕΛΙΔΑΣ Β2. if M2 MOD 2 = 1 then P := P + M1; M1 := M1 * 2; M2 := M2 DIV 2; writeln(p); end. 1. y 2. var 3. a 4. var 5. b ΘΕΜΑ Γ (ενδεικτική απάντηση-με εντολές γλώσσας Pascal ) Plithos_A_Kriti:=0; {το πλήθος των αγοριών που ψήφισαν Κρήτη} Plithos_K_Rodos:=0; {το πλήθος των κοριτσιών που ψήφισαν Ρόδο} Plithos_K:=0; {το πλήθος των κοριτσιών} psifoi_rodos:=0; {το πλήθος των μαθητών που ψήφισαν Ρόδο} psifoi_krhth:=0; {το πλήθος των μαθητών που ψήφισαν Κρήτη} psifoi_kerkyra:=0; {το πλήθος των μαθητών που ψήφισαν Κέρκυρα} {επανάληψη για κάθε έναν από τους 80 μαθητές} for i:=1 to 80 do {Ερώτημα Γ1. Έλεγχος εγκυρότητας της τιμής του φύλου με repeat.. until} repeat writeln( Δώσε το φύλο του μαθητή ); readln(fylo); until fylo= A or fylo= K {Ερώτημα Γ2. Εισαγωγή της επιλογή του μαθητή} writeln( Δώσε την επιλογή του μαθητή ); readln(epilogi); {Ερώτημα Γ3.α. Υπολογισμός του πλήθους των αγοριών που ψήφισαν Κρήτη} if epilogi = ΚΡΗΤΗ and fylo= A then plithos_a_kriti:= plithos_a_kriti+1; {Ερώτημα Γ3.β. Υπολογισμός του πλήθους των κοριτσιών που ψήφισαν Ρόδο.} {Επειδή το ποσοστό που ζητείται είναι επί του συνόλου των κοριτσιών και όχι και των 80 μαθητών θα πρέπει να υπολογιστεί και το πλήθος των κοριτσιών} if fylo= K then plithos_k:= plithos_k+1; if epilogi= ΡΟΔΟΣ then plithos_k_rodos:= plithos_k_rodos+1; ΤΕΛΟΣ 3ΗΣ ΑΠΟ 8 ΣΕΛΙΔΕΣ
ΑΡΧΗ 4ΗΣ ΣΕΛΙΔΑΣ {Ερώτημα Γ3.γ. Θα πρέπει να υπολογιστούν πόσοι μαθητές ψήφισαν τον καθένα προορισμό και έπειτα να συγκριθούν μεταξύ τους οι συνολικές ψήφοι του κάθε προορισμού για να βρεθεί ποιος προορισμός πήρε τις περισσότερες ψήφους} if epilogi= ΡΟΔΟΣ then psifoi_rodos:= psifoi_rodos+1 else if epilogi= ΚΡΗΤΗ then psifoi_krhth:= psifoi_krhth +1; else psifoi_kerkyra:= psifoi_kerkyra+1; {τέλος της δομής επανάληψης for} {Εμφάνιση του πλήθους των αγοριών που ψήφισαν Κρήτη} writeln( Το πλήθος των αγοριών που ψήφισαν Κρήτη είναι, plithos_a_kriti); {Υπολογισμός και εμφάνιση του ποσοστού των κοριτσιών που ψήφισαν Ρόδο επί του συνόλου των κοριτσιών} pososto:= plithos_k_rodos/ plithos_k * 100; writeln( Το ποσοστό των κοριτσιών που ψήφισαν Ρόδο στο σύνολο των κοριτσιών είναι, pososto); {Υπολογισμός του μεγαλύτερου των τριών συνολικών ψήφων κάθε προορισμού} if psifoi_rodos> psifoi_krhth and psifoi_rodos> psifoi_kerkyra then writeln( Το σχολείο θα πάει εκδρομή στη Ρόδο ) ; else if (psifoi_krhth> psifoi_rodos) and (psifoi_krhth > psifoi_kerkyra) then writeln( Το σχολείο θα πάει εκδρομή στην Κρήτη ) else writeln( Το σχολείο θα πάει εκδρομή στην Κέρκυρα ); end. Παρατηρήσεις που αφορούν τη λύση του θέματος Γ: (α) Τα ονόματα των μεταβλητών που χρησιμοποιήθηκαν είναι ενδεικτικά. (β) Τα μηνύματα τόσο κατά την είσοδο όσο και την έξοδο είναι προαιρετικά και υπάρχουν για να γίνει ο αλγόριθμος πιο φιλικός στο χρήστη. (γ) Τα σχόλια είναι προαιρετικά και χρησιμοποιούνται για διευκόλυνση του χρήστη. (δ) Ο έλεγχος εγκυρότητας στο ερώτημα Γ1 μπορεί να γίνει αποκλειστικά με τη δομή επανάληψης while... do ή την repeat until (ε) το τμήμα του αλγορίθμου: {Υπολογισμός του μεγαλύτερου των τριών συνολικών ψήφων κάθε προορισμού} if psifoi_rodos> psifoi_krhth and psifoi_rodos> psifoi_kerkyra then writeln( Το σχολείο θα πάει εκδρομή στη Ρόδο ) else if psifoi_krhth> psifoi_rodos and psifoi_krhth> psifoi_kerkyra then writeln( Το σχολείο θα πάει εκδρομή στην Κρήτη ) else writeln( Το σχολείο θα πάει εκδρομή στην Κέρκυρα ); Θα μπορούσε να γραφεί ισοδύναμα: max := psifoi_rodos; tha_pame_ekfromh := ΡΟΔΟΣ ; If psifoi_krhth > max then max := psifoi_krhth; tha_pame_ekfromh := ΚΡΗΤΗ ; ΤΕΛΟΣ 4ΗΣ ΑΠΟ 8 ΣΕΛΙΔΕΣ
ΑΡΧΗ 5ΗΣ ΣΕΛΙΔΑΣ If psifoi_kerkyra > max then max := psifoi_kerkyra; tha_pame_ekfromh := ΚΕΡΚΥΡΑ ; writeln( Το σχολείο θα πάει εκδρομή στην, tha_pame_ekfromh ); ΘΕΜΑ Γ (ενδεικτική απάντηση-με συνδυασμό εντολών γλώσσας Pascal και εντολών ψευδοκώδικα ) Αρχή Πλήθος Αγοριών Κρήτη:=0; {το πλήθος των αγοριών που ψήφισαν Κρήτη} Πλήθος Κοριτσιών Ρόδος:=0; {το πλήθος των κοριτσιών που ψήφισαν Ρόδο} Κορίτσια:=0; {το πλήθος των κοριτσιών} Πόσοι Ψήφισαν Ρόδο:=0; {το πλήθος των μαθητών που ψήφισαν Ρόδο} Πόσοι Ψήφισαν Κρήτη:=0; {το πλήθος των μαθητών που ψήφισαν Κρήτη} Πόσοι Ψήφισαν Κέρκυρα:=0; {το πλήθος των μαθητών που ψήφισαν Κέρκυρα} {επανάληψη για κάθε έναν από τους 80 μαθητές} Για 80 φορές επανάλαβε Αρχή {Ερώτημα Γ1. Έλεγχος εγκυρότητας της τιμής του φύλου με επανάλαβε μέχρι} Επανάλαβε Διάβασε το φύλο του μαθητή Μέχρι το φύλο του μαθητή = A or το φύλο του μαθητή = K {Ερώτημα Γ2. Εισαγωγή της επιλογή του μαθητή} Διάβασε την επιλογή του μαθητή {Ερώτημα Γ3.α. Υπολογισμός του πλήθους των αγοριών που ψήφισαν Κρήτη} Αν επιλογή του μαθητή = ΚΡΗΤΗ and φύλο του μαθητή= A Τότε Πλήθος Αγοριών Κρήτη := Πλήθος Αγοριών Κρήτη +1 {Ερώτημα Γ3.β. Υπολογισμός του πλήθους των κοριτσιών που ψήφισαν Ρόδο.} {Επειδή το ποσοστό που ζητείται είναι επί του συνόλου των κοριτσιών και όχι και των 80 μαθητών θα πρέπει να υπολογιστεί και το πλήθος των κοριτσιών} Αν φύλο του μαθητή = K Τότε Αρχή Κορίτσια:= Κορίτσια +1; Αν επιλογή του μαθητή = ΡΟΔΟΣ Τότε Πλήθος Κοριτσιών Ρόδος:= Πλήθος Κοριτσιών Ρόδος +1 Τέλος {Ερώτημα Γ3.γ. Θα πρέπει να υπολογιστούν πόσοι μαθητές ψήφισαν τον καθένα προορισμό και έπειτα να συγκριθούν μεταξύ τους οι συνολικές ψήφοι του κάθε προορισμού για να βρεθεί ποιος προορισμός πήρε τις περισσότερες ψήφους} Αν επιλογή του μαθητή = ΡΟΔΟΣ Τότε Πόσοι Ψήφισαν Ρόδο:= Πόσοι Ψήφισαν Ρόδο +1 Αλλιώς Αν επιλογή του μαθητή = ΚΡΗΤΗ Τότε Πόσοι Ψήφισαν Κρήτη:= Πόσοι Ψήφισαν Κρήτη +1; ΤΕΛΟΣ 5ΗΣ ΑΠΟ 8 ΣΕΛΙΔΕΣ
ΑΡΧΗ 6ΗΣ ΣΕΛΙΔΑΣ Αλλιώς Πόσοι Ψήφισαν Κέρκυρα:= Πόσοι Ψήφισαν Κέρκυρα +1 Τέλος {τέλος της δομής επανάληψης Για } {Εμφάνιση του πλήθους των αγοριών που ψήφισαν Κρήτη} Εμφάνισε Πλήθος Αγοριών Κρήτη {Υπολογισμός και εμφάνιση του ποσοστού των κοριτσιών που ψήφισαν Ρόδο επί του συνόλου των κοριτσιών} Ποσοστό:= Πλήθος Κοριτσιών Ρόδος / Κορίτσια * 100 Εμφάνισε Ποσοστό {Υπολογισμός του μεγαλύτερου των τριών συνολικών ψήφων κάθε προορισμού} Αν Πόσοι Ψήφισαν Ρόδο > Πόσοι Ψήφισαν Κρήτη and Πόσοι Ψήφισαν Ρόδο > Πόσοι Ψήφισαν Κέρκυρα Τότε Εμφάνισε Το σχολείο θα πάει εκδρομή στη Ρόδο Αλλιώς Αν (Πόσοι Ψήφισαν Κρήτη > Πόσοι Ψήφισαν Ρόδο) and (Πόσοι Ψήφισαν Κρήτη > Πόσοι Ψήφισαν Κέρκυρα) Τότε Εμφάνισε Το σχολείο θα πάει εκδρομή στη Κρήτη Αλλιώς Εμφάνισε Το σχολείο θα πάει εκδρομή στη Κέρκυρα Τέλος ΘΕΜΑ Δ (ενδεικτική απάντηση) program thema_4; uses wincrt; var {ερώτημα Δ1. Τμήμα δηλώσεων μεταβλητών} poso, timi, syn_pliroteo_poso, tel_pliroteo_poso: real; {Ερώτημα Δ5.Δήλωση της συνάρτησης υπολογισμού του πληρωτέου ποσού μετά την έκπτωση pliroteo_poso()} function pliroteo_poso(x: real) : real; var ekptosi : real; if x <= 100 {η έκπτωση είναι ίση με μηδέν} then ekptosi:= 0 ; else if x <= 200 then ekptosi := (x-100)*10/100; else if x <= 800 then ekptosi := 100*10/100 + (x-200)*25/100; else ekptosi :=100*10/100 + 600*25/100 + (x-800)*35/100; pliroteo_poso :=x - ekptosi; {κύριο πρόγραμμα} {το συνολικό ποσό που καλείται να πληρώσει ο πελάτης για την αγορά των ειδών πριν την έκπτωση} syn_pliroteo_poso:= 0 ; ΤΕΛΟΣ 6ΗΣ ΑΠΟ 8 ΣΕΛΙΔΕΣ
ΑΡΧΗ 7ΗΣ ΣΕΛΙΔΑΣ {Ερώτημα Δ2. Εισαγωγή του ποσού που πρόκειται να ξοδέψει ο πελάτης} writeln( Δώσε το διαθέσιμο ποσό του πελάτη ); readln(poso); {Ερώτημα Δ3. Εισαγωγή της τιμής του πρώτου είδους που προτίθεται να αγοράσει ο πελάτης} writeln( Δώσε την τιμή του είδους ); readln(timi); {Εάν τα χρήματα που διαθέτει ο πελάτης επαρκούν για να αγοράσει το είδος, το αγοράζει και επιλέγει το επόμενο είδος δομή επανάληψης while.. do} while timi<=poso do {το διαθέσιμο ποσό κατόπιν της αγοράς του είδους μειώνεται κατά την τιμή του είδους} poso := poso timi; {το συνολικό πληρωτέο ποσό κατόπιν της αγοράς του είδους αυξάνεται κατά την τιμή του είδους} syn_pliroteo_poso := syn_pliroteo_poso + timi ; {Εισαγωγή της τιμής του επόμενου είδους που προτίθεται να αγοράσει ο πελάτης} writeln( Δώσε την τιμή του επόμενου είδους ); readln(timi); writeln( ΤΕΛΟΣ ΑΓΟΡΩΝ ); {Ερώτημα Δ4.α. Εμφάνιση του ποσού που περίσσεψε μετά την αγορά των ειδών ή σε περίπτωση που δεν περίσσεψε, εμφάνιση του μηνύματος} if poso > 0 then writeln( Το διαθέσιμο υπόλοιπο ποσό είναι, poso, Ευρώ ) else writeln( ΕΞΑΝΤΛΗΘΗΚΕ ΟΛΟ ΤΟ ΠΟΣΟ ); {Ερώτημα Δ4.β.Κλήση της συνάρτησης pliroteo_poso()} tel_pliroteo_poso := pliroteo_poso(syn_pliroteo_poso); writeln( Το τελικό πληρωτέο ποσό μετά την έκπτωση είναι, tel_pliroteo_poso, Ευρώ ); end. Παρατηρήσεις που αφορούν τη λύση του θέματος Δ: (α) Τα ονόματα των μεταβλητών που χρησιμοποιήθηκαν είναι ενδεικτικά. (β) Τα μηνύματα τόσο κατά την είσοδο όσο και την έξοδο είναι προαιρετικά και υπάρχουν για να γίνει ο αλγόριθμος πιο φιλικός στο χρήστη. (γ) Τα σχόλια είναι προαιρετικά και χρησιμοποιούνται για διευκόλυνση του χρήστη. (δ) Εάν χρησιμοποιηθεί η δομή επανάληψης repeat.. until θα πρέπει να ελεγχθεί μήπως η τιμή του πρώτου είδους υπερβαίνει το ποσό που διαθέτει ο πελάτης ώστε να μη γίνει καμία επανάληψη, διότι δεν υπάρχει κάποια υπόδειξη που να αναφέρει ότι αγοράζει τουλάχιστον ένα είδος. Εναλλακτικά, προτείνεται {Ερώτημα Δ3. Εισαγωγή της τιμής του πρώτου είδους που προτίθεται να αγοράσει ο πελάτης} writeln( Δώσε την τιμή του είδους ); readln(timi); {Εάν τα χρήματα που διαθέτει ο πελάτης επαρκούν για να αγοράσει το είδος, το αγοράζει και επιλέγει το επόμενο είδος δομή επανάληψης while.. do} if timi <= poso then ΤΕΛΟΣ 7ΗΣ ΑΠΟ 8 ΣΕΛΙΔΕΣ
ΑΡΧΗ 8ΗΣ ΣΕΛΙΔΑΣ repeat {το διαθέσιμο ποσό κατόπιν της αγοράς του είδους μειώνεται κατά την τιμή του είδους} poso := poso timi; {το συνολικό πληρωτέο ποσό κατόπιν της αγοράς του είδους αυξάνεται κατά την τιμή του είδους} syn_pliroteo_poso := syn_pliroteo_poso + timi ; {Εισαγωγή της τιμής του επόμενου είδους που προτίθεται να αγοράσει ο πελάτης} writeln( Δώσε την τιμή του επόμενου είδους ); readln(timi); until timi>poso ΤΕΛΟΣ 8ΗΣ ΑΠΟ 8 ΣΕΛΙΔΕΣ