Γραπτές εξετάσεις στο μάθημα: ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ (Θ) Εισηγητής: Γεωργίου Χρήστος ΘΕΜΑΤΑ & ΑΠΑΝΤΗΣΕΙΣ ΘΕΜΑ Α Α1. Να γράψετε στην κόλλα σας τους αριθμούς της στήλης Α που αντιστοιχούν με τα γράμματα της στήλης Β. ΣΤΗΛΗ Α Γ 1. REAL Δ 2. INTEGER Δ 3. LONG Γ 4. DOUBLE Β 5. STRING Δ 6. BYTE Β 7. CHAR Γ 8. SINGLE Δ 9. WORD Α 10. BOOLEAN ΣΤΗΛΗ Β A. Λογικός Β. Χαρακτήρας(Αλφαριθμητικά) Γ. Πραγματικός Δ. Ακέραιος Α2. Να γράψετε στην κόλλα σας τον αριθμό της πρότασης και δίπλα τη λέξη «Σωστό» αν η πρόταση είναι σωστή ή «Λάθος» σε αντίθετη περίπτωση: 1. Το αποτέλεσμα της πράξης 22 div 4 είναι 5. Σ 2. Το αποτέλεσμα της πράξης 30 mod 15 είναι 2. Λ 3. Αν Χ := 78 και Υ := 78 τότε η συνθήκη Χ <= Υ είναι TRUE (αληθής). Σ 4. Ένα πρόγραμμα σε Pascal τελειώνει πάντα με την εντολή «END.». Σ 5. Σε μια μεταβλητή τύπου INTEGER (ακέραια) δεν μπορούμε να εκχωρήσουμε την τιμή 18,25. Σ 6. Μετά την εκτέλεση της πράξης Χ := (12+6)/2+3 η τιμή της μεταβλητής Χ είναι 3,6. Λ 7. Μια δομή-εντολή FOR μπορεί πάντα να γραφεί ισοδύναμα με τις εντολές WHILE ή REPEAT. Σ 8. Η εντολή for I := 100 downto 1 do θα εκτελέσει ακριβώς 100 επαναλήψεις. Σ 9. Σύμφωνα με τα διαγράμματα HIPO κάθε πρόγραμμα μπορεί να αναλυθεί σε 3 υποπρογράμματα ΕΙΣΟΔΟΣ ΣΥΝΑΡΤΗΣΗ ΕΞΟΔΟΣ. Λ 10. Η Pascal είναι μια γλώσσα χαμηλού επιπέδου επειδή οι εντολές της είναι ακατανόητες στον άνθρωπο. Λ Α3. Να ξαναγράψετε το παρακάτω τμήμα προγράμματος, κάνοντας χρήση της εντολής IF αντί της CASE. Read(poso); Case poso of 1.. 250 : Write( ΦΘΗΝΟ ); 251.. 600 : Write( ΚΑΝΟΝΙΚΟ ); 601.. 1100 : Write( ΑΚΡΙΒΟ ); Else Write( ΛΑΘΟΣ ΠΟΣΟ! ); End; Απάντηση Read(poso); Σελίδα 1 από 5
If (poso >= 1) and (poso <= 250) then Write( ΦΘΗΝΟ ) Else if poso <= 600 then Write( ΚΑΝΟΝΙΚΟ ) Else if poso <= 1100 then Write( ΑΚΡΙΒΟ ) Else Write( ΛΑΘΟΣ ΠΟΣΟ! ); Α4. Αν Χ := 10, Υ := 5, Ζ := 1. Να χαρακτηρίσετε τις παρακάτω εκφράσεις σαν TRUE ή FALSE: 1. X mod Y >= Z 10 mod 5 >= 1 0 >= 1 False 2. X * 2 Y * Y <= (Z + X)/2 10 * 2 5 * 5 <= (1 + 10) / 2 20 25 <= 11 / 2-5 <= 5.5 True 3. Χ div (Υ + Z - 1) <> 0 10 div (5 + 1 1) <> 0 10 div 5 <> 0 2 <> 0 True 4. X * Z 4 >= 36 mod X 10 * 1 4 >= 36 mod 10 10 4 >= 6 6 >= 6 True 5. Y *(-2) >= X * Z 5 *(-2) >= 10 * 1-10 >= 10 False ΘΕΜΑ Β Β1 Αρχή Δίνεται ο παρακάτω αλγόριθμος σε ψευδοκώδικα: Διάβασε Ω ΑΡΧΗ Διάβασε Ω Υ := 4 Υ := 4 Γράψε Ω =, Ω Γράψε Ω=, Ω Αν Ω <= 20 τότε αρχή true Ω<=20 Υ:=Υ+Ω*2 Υ := Υ + Ω * 2 Γράψε Υ Ω := Ω + 6 false Γράψε Υ τέλος Γράψε Ω ΤΕΛΟΣ. Τέλος Γράψε Ω Ω := Ω + 6 Β1. Να γράψετε το ισοδύναμο διάγραμμα ροής του παραπάνω αλγορίθμου. (Μονάδες 14) Β2. Να εκτελέσετε τον αλγόριθμο για Ω=20. Να γράψετε στην κόλλα σας τις τιμές που θα εμφανιστούν. Σελίδα 2 από 5
Απάντηση: Ω Υ Ω <= 20 20 Στην οθόνη θα εμφανιστούν τα εξής: 4 Ω = 20 true 44 44 26 26 ΘΕΜΑ Γ Σε ένα σούπερ μάρκετ αποφασίστηκε να γίνεται έκπτωση στους πελάτες ανάλογα με το ποσό των αγορών τους, με βάση τον παρακάτω πίνακα: ΠΟΣΟ ΑΓΟΡΩΝ ( ) ΕΚΠΤΩΣΗ 0 65 0 66 100 5% 101 249 10% Από 250 και πάνω 15% Να γράψετε πρόγραμμα σε Pascal ή ψευδοκώδικα που: Γ1. Να διαβάζει το όνομα ενός πελάτη και το αντίστοιχο ποσό αγορών. (Μονάδες 4) Γ2. Να υπολογίζει την έκπτωση που δικαιούται. (Προσοχή, η έκπτωση ΔΕΝ γίνεται κλιμακωτά) (Μονάδες 8) Γ3. Να υπολογίζει το τελικό ποσό που θα πληρωθεί. (Μονάδες 2) Γ4. Να εμφανίζει με κατάλληλα μηνύματα στην οθόνη το όνομα του πελάτη, την έκπτωση και το τελικό ποσό που θα πληρώσει. Λύση Program thema_c; Var onoma : String; poso, ekptosis, tel_poso : Real; Begin {C1} Σελίδα 3 από 5
Writeln('ΔΩΣE TO ONOMA TOY ΠEΛATH:'); Readln(onoma); Writeln('ΔΩΣE TO ΠOΣO AΓOΡΩN:'); Readln(poso); {C2} if poso <= 65 then ekptosis := poso * 0 else if poso <= 100 then ekptosis := poso * 5/100 else if poso <= 249 then ekptosis := poso * 10/100 else ekptosis := poso * 15/100; {C3} tel_poso := poso - ekptosis; {C4} Writeln; Writeln('O ΠEΛATHΣ ', onoma); Writeln('EXEI EKΠTΩΣH ', ekptosis:8:2, ' euro'); Writeln('KAI ΘA ΠΛHΡΩΣEI MONO ', tel_poso:8:2, ' euro'); End. ΘΕΜΑ Δ Η περιφερειακή ενότητα Φλώρινας διοργάνωσε το 2012 σεμινάριο εθελοντικής δασοπυρόσβεσης, το οποίο παρακολούθησαν 55 άτομα. Η Πυροσβεστική Υπηρεσία ζήτησε στοιχεία σχετικά με την ηλικία και το φύλο κάθε εθελοντή, προκειμένου να εξαγάγει στατιστικά στοιχεία. Να γραφεί πρόγραμμα στη γλώσσα Pascal, το οποίο: Δ1. Περιλαμβάνει την διαδικασία My_Read, η οποία με χρήση κατάλληλων μηνυμάτων θα ζητάει από τον χρήστη και θα διαβάζει τα παρακάτω στοιχεία: (i) ονοματεπώνυμο, (ii) έτος γέννησης (iii) φύλο, με αποδεκτές τιμές το Α για τους άνδρες και το Γ για τις γυναίκες. Δ2. Στο κύριο μέρος του προγράμματος καλεί την διαδικασία My_Read για κάθε ένα από τα 55 άτομα. (Μονάδες 2) Δ3. Υπολογίζει και εμφανίζει το σύνολο (άθροισμα) των γυναικών και το αντίστοιχο των ανδρών. Δ4. υπολογίζει και εμφανίζει το πλήθος των ατόμων με ηλικία μικρότερη των 30 ετών. (Μονάδες 4) (Μονάδες 3) Δ5. εμφανίζει το όνομα του ατόμου με τη μεγαλύτερη ηλικία. (Υποθέτουμε ότι αυτό το άτομο είναι μοναδικό). (Μονάδες 5) Σελίδα 4 από 5
Λύση Program thema_4; Var onom, onom_gerou : String; i, xronia, antres, gynaikes, hlikia, neoi, max : Integer; fyl : Char; {D1} Procedure My_Read(var onoma : String; var etos : Integer; var fylo : Char); Writeln('ΔΩΣE TO ONOMA TOY EΘEΛONTH:'); Readln(onoma); Writeln('ΔΩΣE TO ETOΣ ΓENNHΣHΣ TOY:'); Readln(etos); Repeat Writeln('ΔΩΣE TO ΦYΛO TOY (A/Γ):'); Readln(fylo); Until (fylo = 'A') or (fylo = 'Γ'); end; Begin antres := 0; gynaikes := 0; neoi := 0; max := 0; {D2} for i := 1 to 5 do My_Read(onom, xronia, fyl); {D3} if fyl = 'A' then antres := antres + 1 else gynaikes := gynaikes + 1; {D4} hlikia := 2013 - xronia; if hlikia < 30 then neoi := neoi + 1; {D5} if hlikia > max then max := hlikia; onom_gerou := onom; end; end;{for} Writeln('TO ΣYNOΛO TΩN ANTΡΩN EINAI: ', antres); Writeln('TO ΣYNOΛO TΩN ΓYNAIKΩN EINAI: ', gynaikes); Writeln('TA ATOMA KATΩ AΠO 30 EINAI: ', neoi); Writeln('O/H ΓEΡONTOTEΡOΣ/H OΛΩN EINAI: ', onom_gerou); End. Σελίδα 5 από 5