Κεφάλαιο 12 : ΕΡΓΑΣΤΗΡΙΑΚΗ ΔΡΑΣΤΗΡΙΟΤΗΤΑ 03 Συναρτήσεις 1. Προετοιµασία Από την ιστοσελίδα του µαθήµατος () επιλέξτε Έγγραφα και µεταβείτε στο φάκελο Κεφάλαιο 12» ραστηριότητες» Εργαστηριακή ραστηριότητα 03 και κατεβάστε το αρχείο Chapter_12_03.zip. Αποθηκεύστε το και αποσυµπιέστε το στα Έγγραφά µου. Στο φάκελο Τα έγγραφά µου/γπ_pascal/κεφάλαιο_12/εργαστήριο_03 θα βρείτε δύο αρχεία πηγαίου κώδικα Pascal: Άσκηση_01_Βαθµολογία.pas Άσκηση_02_Υποπρογράµµατα.pas 2. Άσκηση 01 Στο αρχείο Άσκηση_01_Βαθµολογία.pas δίνεται ένα πρόγραµµα το οποίο διαβάζει τους βαθµούς 1 ου και 2 ου τετραµήνου για έναν µαθητή καθώς και το βαθµό γραπτών Ιουνίου και υπολογίζει τον τελικό βαθµό για ένα µάθηµα. Έχουν δηλωθεί και χρησιµοποιούνται τρεις διαδικασίες procedure data_in(var at,bt,gr:real); για την εισαγωγή των δεδοµένων procedure telikos(at,bt,gr:real; var tel:real); για τον υπολογισµό του τελικού βαθµού procedure data_out(tel:real); για την εµφάνιση των αποτελεσµάτων στην οθόνη. Να αντικαταστήσετε οποιαδήποτε από τις παραπάνω διαδικασίες γίνεται µε µια συνάρτηση και να αλλάξετε κατάλληλα τον τρόπο κλήσης της στο κυρίως πρόγραµµα. 3. Άσκηση 02 Στο αρχείο Άσκηση_02_Υποπρογράµµατα.pas δίνεται ένα πρόγραµµα στο οποίο ορίζονται οι παρακάτω διαδικασίες οι οποίες καλούνται στο κυρίως πρόγραµµα 1. η διαδικασία swap, η οποία καλείται µε παραµέτρους δύο µεταβλητές (π.χ. swap(x,y))και αντιστρέφει τις τιµές αυτών των µεταβλητών 2. η διαδικασία max, η οποία καλείται µε τέσσερις παραµέτρους (π.χ. max(x,y,z,q) και επιστρέφει στην τέταρτη παράµετρο την µεγαλύτερη τιµή των τριών πρώτων παραµέτρων 3. η διαδικασία min, η οποία καλείται µε τέσσερις παραµέτρους (π.χ. min(x,y,z,q) και επιστρέφει στην τέταρτη παράµετρο την µικρότερη τιµή των τριών πρώτων παραµέτρων 4. η διαδικασία sort η οποία καλείται µε τρεις παραµέτρους (π.χ. sort(x,y,z) και τυπώνει τις τιµές αυτών των παραµέτρων ταξινοµηµένες κατά αύξουσα και κατά φθίνουσα σειρά 5. η διαδικασία paragontiko η οποία καλείται µε δύο παραµέτρους και υπολογίζει το παραγοντικό του αριθµού µε τον οποίο κλήθηκε. Για παράδειγµα αν κληθεί paragontiko(n, q) θα υπολογίσει και θα επιστρέψει µέσω της µεταβλητής q το n!. 6. η διαδικασία dynami η οποία καλείται µε τρεις παραµέτρους και θα υπολογίζει µια δύναµη. Για παράδειγµα αν κληθεί dynami(x,n,d) θα υπολογίσει και θα επιστρέψει µέσω της µεταβλητής d τη δύναµη x n Να αντικαταστήσετε οποιαδήποτε από τις παραπάνω διαδικασίες γίνεται µε µια συνάρτηση και να αλλάξετε κατάλληλα τον τρόπο κλήσης της στο κυρίως πρόγραµµα. 1
4. Άσκηση 03 (άσκηση 9 από το σχολικό βιβλίο) Να γράψετε ένα πρόγραµµα που να διαβάζει : α) ένα τόξο (ή γωνία) σε µοίρες και να µετατρέπει την τιµή αυτή σε ακτίνια καλώντας µια συνάρτηση και να τυπώνει στην οθόνη το αποτέλεσµα β) ένα τόξο (ή γωνία) σε ακτίνια και να µετατρέπει την τιµή αυτή σε µοίρες καλώντας µια συνάρτηση και να τυπώνει στην οθόνη το αποτέλεσµα Ο τύπος µετατροπής είναι : ακτίνια µοίρες = π 180 Όταν ξεκινάει η εκτέλεση του προγράµµατος θα πρέπει να εµφανίζεται το παρακάτω µενού Μετατροπή 1 από µοίρες σε ακτίνια 2 από ακτίνια σε µοίρες δώσε 1 ή 2 για να συνεχίσεις : Υποδείξεις 1. Το π είναι η σταθερά 3,14 2. Ανάλογα µε την επιλογή το πρόγραµµα θα πρέπει να εµφανίζει κατάλληλα µηνύµατα που να ζητάει από το χρήστη να δώσει τα κατάλληλα δεδοµένα. 3. Σε περίπτωση που δοθεί κάτι διαφορετικό από 1 ή 2 στην αρχή, να εµφανίζεται κατάλληλο µήνυµα και να τερµατίζεται η εκτέλεση του προγράµµατος. 4. Οι µοίρες και τα ακτίνια είναι πραγµατικοί αριθµοί. 2
Άσκηση 01 program vathmologia(input, output); var V1,V2,VG:real; procedure data_in(var at,bt,gr:real); repeat writeln(); write(' ώσε το βαθµό Α τετραµήνου: '); readln(at); write(' ώσε το βαθµό Β τετραµήνου : '); readln(bt); write(' ώσε το βαθµό γραπτών: '); readln(gr); until (at>=1)and(at<=20)and(bt>=1)and(bt<=20)and(gr>=1)and(gr<=20); function telikos(at,bt,gr:real):real; telikos := ((at+bt)/2+gr)/2; procedure data_out(tel:real); writeln('τελικός βαθµός: ', tel:0:2); data_in(v1,v2,vg); data_out(telikos(v1,v2,vg)); end. Άσκηση 02 program Ypoprogramata(input,output); var x,y,z:integer; procedure swap(var a,b:integer); var temp:integer; temp:=a; a:=b; b:=temp; function max(a,b,c:integer):integer; max:=a; if b>max then max:=b; if c>max then max:=c; 3
function min(a,b,c:integer):integer; min:=a; if b<min then min:=b; if c<min then min:=c; procedure sort(a,b,c:integer); var mx,mn,med:integer; mx:=max(a,b,c); mn:=min(a,b,c); med:=a+b+c-mx-mn; writeln(mn,' ',med,' ',mx); writeln(mx,' ',med,' ',mn); function paragontiko(n:integer):integer; var i,j:integer; if n=0 then paragontiko:=1 else i:=1; for j:=2 to n do i:=i*j; paragontiko:=i; function dynami(x,n:integer):integer; var i,d:integer; d:=1; for i:=1 to n do d:=d*x; dynami:=d; write(' ώσε τρεις ακέραιους αριθµούς : '); readln(x,y,z); writeln('έδωσες ', 'x=',x,' y=',y, ' z=',z); swap(x,y); writeln('μετά την κλήση της swap(x,y) :', 'x=',x,' y=',y, ' z=',z); writeln('μέγιστος των ',x,' ',y,' ',z, ' : ',max(x,y,z)); writeln('ελάχιστος των ',x,' ',y,' ',z, ' : ',min(x,y,z)); writeln('οι ', x,' ',y,' ',z, ' ταξινοµηµένοι '); sort(x,y,z); writeln('5! = ',paragontiko(5)); end. writeln('2^10 = ',dynami(2,10)); 4
5