ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ Κεφάλαιο 12 : Υποπρογράµµατα 1 ο Φύλλο Εργασιών : Διαδικασίες 1. Ποιες από τις παρακάτω επικεφαλίδες διαδικασιών δεν είναι σωστές και γιατί; α) procedure BB(P,Q:integer; Q,R:integer) β) procedure CC(N:integer; Y:real) γ) procedure D1,D2(N:integer; X:real) δ) procedure DD(DD, D:integer); ε) procedure (X:integer; Y:real) στ) procedure T[1] 2. Στο παρακάτω πρόγραµµα σε αρκετές από τις γραµµές του υπάρχουν συντακτικά και λογικά λάθη. Να εντοπίσετε αυτές τις γραµµές και να εξηγήσετε ποιο είναι το λάθος σε κάθε µία. 1 program metavlites(input, output); 2 x,y,k:integer; 3 xx,yy:real; 4 5 procedure proc1(a,b:integer; k:real); 6 m:integer; 7 n:real; 8 9 a:=a+b; 10 b:=b*2; 11 n:=k/2; 12 k:= xx/2; 13 end; 14 15 16 m:=1; 17 n:=2.5; 18 read(x); 19 y:=x*4; 20 if y <> 0 then 21 xx:=x/y; 22 else 23 xx:=0.5; 24 proc1(x,y,xx); 25 for k:=1 to x do 26 proc1(x,y,k); 27 writeln(proc1(1,2,yy)); 28 29 case x of 30 1: proc(1,2,xx); 31 2: proc1(1,2); 32 3: proc1(xx,1,2); 33 else 34 proc1(x,y,xx) 35 end 36 end. 1
3. Να συµπληρώσετε τις τιµές των µεταβλητών παρακάτω σύµφωνα µε την έξοδο του προγράµµατος program parametroi_timis(input, output); m,n : Integer; procedure proc(a,b: Integer); x,y:real; x:= a/2; y:=b/2; writeln('στην proc'); writeln('παράµετροι :':25, ' a=',a:4, ' b=',b:4); writeln('τοπικές µεταβλητές :':25, ' x=',x:2:2, ' y=',y:2:2); a:=2*b; b:=m; writeln('τέλος της proc'); writeln('παράµετροι :':25, ' a=',a:4, ' b=',b:4); writeln('τοπικές µεταβλητές :':25, ' x=',x:2:2, ' b=',y:2:2); end; { Κύριο πρόγραµµα } m:= 5; n:= 4; writeln('πριν τη proc'); proc(m,n); writeln('μετά τη proc'); end. Πριν τη proc Στην proc παράµετροι : a= b= τοπικές µεταβλητές : x= b= Τέλος της proc παράµετροι : a= b= τοπικές µεταβλητές : x= b= Μετά τη proc 2
4. Να συµπληρώσετε τις τιµές των µεταβλητών παρακάτω σύµφωνα µε την έξοδο του προγράµµατος program parametroi_metavlitis(input, output); m: Integer; f:boolean; procedure proc(a:integer; k:integer; f:boolean); writeln('στην proc'); writeln('παράµετροι :':25, ' a=',a:2, ' k=',k:2, ' f=',f:5); if f then k:=a+2; a:=k-1; f := false end else k:=a-2; a:=k+1; f:=true end; writeln('τέλος της proc'); writeln('παράµετροι :':25, ' a=',a:2, ' k=',k:2, ' f=',f:5); end; { Κύριο πρόγραµµα } m:= 4; f:=true; writeln('πριν τη proc'); proc(5,m,f); writeln('μετά τη proc'); proc(5,m,f); writeln('μετά τη proc'); end. 3
Πριν τη proc Στην proc Τέλος της proc Μετά τη proc Στην proc Τέλος της proc Μετά τη proc 4
5. Να συµπληρώσετε τον παρακάτω πίνακα µε βάση την έξοδο που δίνει το παρακάτω πρόγραµµα program PPP(input, output); const C = 2; G:real; A,B:integer; procedure DDD( Y:integer; C:integer); const A = 10; writeln('στην DDD: ':20, ' A=',A:2, ' B=', B:2, ' C=', C:2, ' G=',G:4:1, ' Y=', Y:2); Y:=C+A-1; C:=Y+A-1; G:=C/2; writeln('τέλος της DDD: ':20, ' A=',A:2, ' B=', B:2, ' C=', C:2, ' G=',G:4:1, ' Y=', Y:2); end; {DDD} {PPP} A:=3; B:=5; G:=0; writeln('πριν από την DDD: ':20, ' A=',A:2, ' B=', B:2, ' C=', C:2, ' G=',G:4:1); DDD(B,A); writeln('μέτα από την DDD: ':20, ' A=',A:2, ' B=', B:2, ' C=', C:2, ' G=',G:4:1); DDD(A, B+9); writeln('μέτα από την DDD: ':20, ' A=',A:2, ' B=', B:2, ' C=', C:2, ' G=',G:4:1); end. {PPP} Πριν από την DDD: A= B= C= G= Στην DDD: A= B= C= G= Y= Τέλος της DDD: A= B= C= G= Y= Μέτα από την DDD: A= B= C= G= Στην DDD: A= B= C= G= Y= Τέλος της DDD: A= B= C= G= Y= Μέτα από την DDD: A= B= C= G= 6. Να γράψετε µε τη γλώσσα Pascal τις παρακάτω διαδικασίες και ένα ολοκληρωµένο πρόγραµµα που θα τις χρησιµοποιεί. α) procedure swap( a,b:integer) που θα προκαλεί εναλλαγή των τιµών δύο µεταβλητών τύπου integer β) procedure max(a,b,c:integer; mx:integer) που θα βρίσκει το µέγιστο µεταξύ τριών ακέραιων και θα "επιστρέφει" το αποτέλεσµα σε µια παράµετρο µεταβλητής 5
γ) procedure min(a,b,c:integer; mn:integer) που θα βρίσκει τον ελάχιστο µεταξύ τριών ακέραιων και θα "επιστρέφει" το αποτέλεσµα σε µια παράµετρο µεταβλητής δ) procedure sort(a,b,c:integer) που θα τυπώνει τρεις ακέραιους ταξινοµηµένους κατά αύξουσα και κατά φθίνουσα σειρά (να χρησιµοποιήσετε τις διαδικασίες.max και min) ε) procedure paragontiko(n:integer, parag:integer) που θα υπολογίζει το n! (δηλαδή το 1*2*3*4* *n) για δοσµένο n. και θα "επιστρέφει" το αποτέλεσµα σε µια παράµετρο µεταβλητής στ) procedure dynami(x,n:integer, dyn:integer) που θα υπολογίζει το x n και θα "επιστρέφει" το αποτέλεσµα σε µια παράµετρο µεταβλητής 6