ΜΑΗΣ 2007 - ΕΝΔΕΙΚΤΙΚΕΣ ΛΥΣΕΙΣ ΔΟΚΙΜΙΟΥ Ενότητα Α - ΛΥΣΕΙΣ Πρόβλημα 1 ΑΡΧΗ Διάβασε Α Ψευδής Α > 0 Αληθής Τύπωσε «ΛΑΘΟΣ» Ε Α 2 Τύπωσε Ε ΤΕΛΟΣ Πρόβλημα 2 (α) I) Α := ABS(sin(x)/cos(x)) + SQR(y) * y; II) B := (SQRT(x + y) - 5) / (c + 2*x); (β) I) 8 + 2 DIV 2 = 8 + 1 = 9 II) 10 + 3 = 13 (γ) I) F AND F OR T AND F = F OR F = F II) NOT F OR F AND T = T OR F = T 1
Πρόβλημα 3 program problem3; a, b, sum, count :integer; mesos : real; sum := 0; writeln('δώστε ένα αριθμό'); readln(a); sum := sum + a; writeln(' Δώστε τον επόμενο αριθμό'); readln(b); if a = b then writeln('αριθμοι ΙΣΟΙ') else count := 1; while a <> b do count := count + 1; sum := sum + b; a := b; writeln(' Δώστε τον επόμενο αριθμό'); readln(b) mesos := sum / count; writeln(' Μέσος Όρος = ', sum/count:4:2) end Πρόβλημα 4 4α) Προκαταρκτική Εκτέλεση Μεταβλητές Συνθήκες Αποτέλεσμα x y x = y T/F x = y T/F 1 5 2 4 2 = 4 F MAYRO 2 = 4 F 3 3 3 = 3 T ASPRO 3 = 3 T Συνάρτηση one Τυπικές Παράμετροι Συνθήκη a b a <> b T/F One 4 2 4 <> 2 T MAYRO 3 3 3 <> 3 F ASPRO 2
4β) Λογικό Διάγραμμα Αρχή x 1 y 5 x x + 1 y y - 1 Ψευδής x = y Αληθής one (y, x) one (x, y) Τύπωσε one (y, x) Τύπωσε one (x, y) Ψευδής x = y Αληθής Τέλος Συνάρτηση one(a, b) Είσοδος Ψευδής a <> b Αληθής One ASPRO One MAYRO Έξοδος 3
Πρόβλημα 5 Πρόγραμμα με Λάθη program problem5; type store = array [3, 4] of real; store : apo; r, c : real; For r := 1 to 3 do For c := 1 to 4 do writeln(' Δώστε ένα αριθμό'); readln(apo[r, c]) Ορθή Λύση program problem5; type store = array [1..3, 1..4] of real; apo : store; r, c : integer; For r := 1 to 3 do For c := 1 to 4 do writeln(' Δώστε ένα αριθμό'); readln(apo[r, c]) end 4
Πρόβλημα 6 program problem6; const thesi = 3; type pinakas = array[1..3, 1..3] of integer; a : pinakas; i, j, athrisma: integer; Procedure diagonal(b:pinakas; sum:integer); r, c : integer; sum := 0; for r := 1 to thesi do for c := 1 to thesi do If r = c then sum := sum + b[r,c] for i := 1 to thesi do for j := 1 to thesi do writeln('δώστε ένα αριθμό για τη θέση ', i, ' ', j); readln(a[i, j]) diagonal(a, athrisma); writeln('άθροισμα = ', athrisma) 5
Πρόβλημα 7 Απαραίτητη λύση Function pollaplasio(x:integer):boolean; if (x mod 7 = 0) or (x mod 11 = 0) then pollaplasio := true else pollaplasio := false Δίνεται ολόκληρο το πρόγραμμα, ΜΟΝΟ η συνάρτηση είναι απαραίτητη για τη λύση program problem7; a:integer; result:boolean; Function pollaplasio(x:integer):boolean; if (x mod 7 = 0) or (x mod 11 = 0) then pollaplasio := true else pollaplasio := false writeln('δώστε ένα αριθμό'); readln(a); result := pollaplasio(a); writeln( Απάντηση =,result:4) Πρόβλημα 8 (α) Μεταβλητές Συνθήκες Αποτέλεσμα x z y x 0 ΚAI x z T/F Y = 0 T/F -2 3-2 0 ΚAI -2 3 F -6-6 = 0 F -2-6 3 4 2 4 0 ΚAI 4 2 F 8 8 = 0 F 4 8 2 5 5 5 0 ΚAI 5 5 T 0 0 = 0 T 5 0 5 (β) program problem8; x, y, z : integer; repeat writeln('δώστε ένα αριθμό'); readln(x); writeln('δώστε ένα αριθμό'); readln(z); if (x >= 0) AND (x <= z) then y := z - x else y := x * y; writeln(x:4, y:4, z:4) until y = 0 6
Πρόβλημα 9 program problem9; x, y : integer; Procedure swap( a, b : integer); c : integer; c := a; a := b; b := c writeln('δώστε δύο αριθμούς'); readln(x, y); swap(x, y); writeln('οι τιμές είναι: ',x:4, y:4) Πρόβλημα 10 (α) Στη φάση Εξακρίβωση Αναγκών και Καθο ρισμός Απαιτήσεων Τεχνικ ές που μπορούν να χρησιμοποιηθού ν για τον εντοπισμό των πραγματικών αναγκών (2 από τις πιο κάτω): Ερωτηματολόγια. Συνεντεύξεις Γρήγορη Πρωτοτυποποίηση (β) (γ) Η Φάση Σχεδίασης Λογικά λάθη που μπορεί να παρουσιαστούν σε Διαγράμματα Ροής Δεδομένων (2 από τα πιο κάτω): Μαύρη τρύπα Θαύμα Γκρίζα Τρύπα 7
Ενότητα Β - ΛΥΣΕΙΣ Πρόβλημα 1 Αρχή C20 0 C10 0 C5 0 C1 0 Διάβασε misthos misthos 0 ΝΑΙ Xart20 misthos div 20 ΟΧΙ Τύπωσε C20 C10 C5 C1 Xart10 (misthos-20*xart20) div 10 Τέλος Xart5 (misthos -20*xart20-10*xart10) div 5 Xart1 misthos -20*xart20-10*xart10-5*xart5 Τύπωσε xart20, xart10,xart5,xart1 C20 C20+Xart20 C10 C10+ Xart10 C5 C5+ Xart5 C1 C1+ Xart1 Διάβασε misthos 8
Program ProvlimaB1; Var misthos, xart20, xart10, xart5,xart1,c20,c10,c5,c1 : integer; Begin c20 := 0; c10:=0; c5:=0; c1 := 0; Writeln('Δώσε τον μισθό του εργαζομένου'); Readln(misthos); while misthos >= 0 do xart20:= misthos div 20; xart10:=(misthos-20*xart20) div 10; xart5:=(misthos-20*xart20-10*xart10)div 5; xart1:=misthos-20*xart20-10*xart10-5*xart5; writeln('μισθός εργαζομένου = ', xart20:6, ' των 20 ', xart10:6, ' των 10 ', xart5:6, ' των 5 ', xart1:6, της 1'); c20:=c20+xart20; c10:=c10+xart10; c5:=c5+xart5; c1:=c1+xart1; Writeln('Δώσε τον μισθό του εργαζομένου'); Readln(misthos) writeln(' Άθροισμα των 20 = ', c20:6); writeln(' Άθροισμα των 10 = ', c10:6); writeln(' Άθροισμα των 5 = ', c5:6); writeln(' Άθροισμα της 1 = ', c1:6) Πρόβλημα 2 Program ProvlimaB2; Uses wincrt; Const N=140; Type names_array=array[1..n] of string; Results_array=array[1..N,1..3] of real; Mesos_Oros=array[1..N] of real; Var names:names_array; scores:results_array; mesoi:mesos_oros; R,C,J :integer; temp, maxscore:real; tempstr,namemax:string; 9
Begin For R:=1 to N do write(' Δώσε όνομα του υποψηφίου ', R,' :'); Readln(names[r]); For C:=1 to 3 do Write(' Δώσε βαθμό[', r, ',', c, ']='); Readln(scores[r,c]) end For R:=1 to N do mesoi[r]:=(scores[r,1]+scores[r,2]+scores[r,3])/3; maxscore:=scores[1,1]; namemax:=names[1]; For R: =2 to N do if scores[r,1]>maxscore then maxscore:=scores[r,1]; namemax:=names[r]; writeln(' H μεγαλύτερη βαθμολογία στο πρώτο μάθημα =', maxscore:8:2); writeln(' Το όνομα του υποψηφίου με τη μεγαλύτερη βαθμολογία =', namemax); For R:=1 to N-1 do For J:=R+1 to N do if mesoi[r]<mesoi[j] then temp:=mesoi[r]; mesoi[r]:=mesoi[j]; mesoi[j]:=temp; tempstr:=names[r]; names[r]:=names[j]; names[j]:=tempstr writeln(' Τα 10 ονόματα των υποψηφίων που θα προσληφθούν είναι :'); For R:=1 to 10 do writeln(names[r]:25,mesoi[r]:10:2) 10
Πρόβλημα 3 Ονοματεπώνυμο, φύλο, Ονοματεπώνυμο, φύλο, διεύθυνση, τηλέφωνο, διεύθυνση, τηλέφωνο, ημερομηνία γέννησης. 4 ημερομηνία γέννησης. Μέλος 2 Καταχώρησε στοιχεία νέου 5 1 3 μέλους και 7 Κάρτα μέλους δημιουργία κάρτας Κωδικός μέλους 6 Αρχείο Μητρώου Μελών 12 Κωδικός μέλους 8 9 Καταχώρησε προσέλευση Κωδικός Μέλους, ημερομηνία προσέλευσης 10 11 Αρχείο Προσέλευσης Μελών Κωδικός μέλους 14 13 20 Επιστολή υποχρεώσεων Έλεγξε υποχρεώσεις μέλους και δημιουργία επιστολής 16 15 Κωδικός Μέλους, κωδικοί βιβλίων, ημερομηνίες δανεισμού Αρχείο Δανεισμού βιβλίων 17 18 Καταχώρησε βιβλίο για δανεισμό Κωδικός Μέλους 19 Κωδικός Μέλους, κωδικός Βιβλίου, ημερομηνία δανεισμού Κωδικός Μέλους, κωδικός βιβλίου 21 22 Καταχώρησε βιβλίο για επιστροφή Κωδικός Μέλους, κωδικός Βιβλίου, ημερομηνία επιστροφής 23 Υπεύθυνος βιβλιοθήκης 33 Εβδομαδιαίος κατάλογος 27 26 Δημιούργησε εβδομαδιαίο καταλόγου Κωδικός Μέλους, κωδικός βιβλίου, ημερομηνία δανεισμού 24 25 Κωδικός Μέλους, ονοματεπώνυμο, φύλο, διεύθυνση, τηλέφωνο, ημερομηνία γέννησης Ημερήσιος κατάλογος 31 30 Δημιούργησε ημερήσιο κατάλογο προσέλευσης 29 Κωδικός μέλους ημερομηνία προσέλευσης 28 Κωδικός Μέλους, ονοματεπώνυμο 11 Αρχείο Προσέλευσης Μελών 11
Σημείωση: Το πιο πάνω ΔΡΔ αποτελεί προτεινόμενη λύση και δεν αποκλείει την ύπαρξη και άλλων λύσεων. Περιγραφή διαδικασιών: Μ όνο η πρώτη και η τελε υταία διαδικασία απαιτείται να περιγραφούν (4 και 26 ή 30) 4. Καταχώρησε στοιχεία νέου μέλους και δημιουργία κάρτας. Εισάγονται με φόρμα οθόνης το ονοματεπώνυμο, το φύλο, η διεύθυνση, το τηλέφωνο και η ημερομηνία γέννησης και ακολούθως αποθηκεύονται στο Αρχείο Μητρώου Μελών μαζί με ένα κωδικό που δημιουργείται αυτόματα. Ο κωδικός αυτός χρησιμοποιείται για τη δημιουργία κάρτας μέλους που παραδίδεται αμέσως στο μέλος. 9. Kαταχώρησε προσέλευση. Εισάγεται με φόρμα οθόνης ο κωδικός του μέλους και καταχωρείται ο κωδικός του μέλους και η ημερομηνία προσέλευσης στο Αρχεί ο Προσέλευσης Μελών. 14. Έλεγξε υποχρεώσεις. Εισάγεται με φόρμα οθόνης ο κωδικός του μέλους όπου ελέγχεται με βάση τον κωδικό μέλους (στο Αρχείο Δανεισμού Βιβλίων) αν το μέλος έχει εκπληρώσει τις υποχ ρεώσεις του. Αν υπάρχουν υποχρεώσεις τότε δημιουργείται επιστολή υποχρεώσ εων και δίνεται στον πελάτη. 18. Καταχώρηση βιβλίου για δανεισμό. Μετά τον έλεγχο αν δεν υπάρχουν εκκρεμότητες τότε λαμβάνεται ο κωδικός μέλους από τη διαδικασ ία 14 και εισάγονται με φόρμα οθόν ης ο κωδικός του βιβλίου και η ημερομηνία δανεισμού, όπου μαζί με το κωδικό μέλους καταχωρούνται στο Αρχείο Δανεισμού Βιβλίων. 22. Καταχώρησε βιβλίο για επιστροφή. Εισάγεται με φόρμα οθόνης ο κωδικός βιβλίου και ο κωδικός μέλους όπου καταχωρούνται μαζί με την ημερομηνία επιστροφής στο Αρχείο Δανεισμού Βιβλίων. 26. Δημιούργησε εβδομαδιαίο κατάλογο. Στο τέλος της εβδομάδας διαβάζονται από το αρχείο δανεισμού όλοι οι κωδικοί των βιβλίων και αν υπάρχει εκκρεμότητα διαβάζονται από το αρχείο μητρώου μελών τα στοιχεία των μελών και δημιουργείται εβδομαδιαίος κατάλογος που παραδίδεται στον υπεύθυνο της βιβλιοθήκης. 30. Δημιουργία ημερήσιου καταλόγου. Στο τέλος της ημέρας, διαβάζονται οι κωδικοί των μελών από το Αρχείο Προσέλευσης Μελών που έχουν προσέλθει στη βιβλιοθήκη με βάση την ημερομηνία προσέλευσης. Επίσης, με βάση τον κωδικό μέλους διαβ άζονται από το Αρχείο Μητρώου Μελών ο κωδικός και το ονοματεπώνυμο των μελών και δημιουργείται εβδομαδιαίος κατάλογος με τα μέλη που επισκέφτηκαν την βιβλιοθήκη που παραδίδεται στον υπεύθυνο της βιβλιοθήκης. 12