Issuu on Google+

Κεφάλαιο 12

Υποπρογράμματα.


Τμηματικός Προγραμματισμός. Τι είχαμε μέχρι τώρα; Η μαμά μας, επειδή ο κανακάρης της ήθελε να φάει ένα σάντουιτς, έκοβε πατάτες, τις τηγάνιζε, ζύμωνε μπιφτέκια, τα τηγάνιζε κτλ. Φτάνει πεινάσαμε……..

Δηλαδή έκαμνε τα πάντα!!!! Όπου «μαμά», το κύριο πρόγραμμα.

2

1/11/2013

Κέρος Α. Ιωάννης


Τμηματικός Προγραμματισμός. Τι έχουμε τώρα; Η μαμά επαναστατεί: Μοιράζει δουλειές στα παιδιά της: Δωμάτιο 1 (Κωστάκης): Δουλειά του είναι (όταν κληθεί) να καθαρίσει πατάτες. Δωμάτιο 2 (Γιωργάκης): Δουλειά του είναι (όταν κληθεί) να τηγανίσει πατάτες. κοκ…

και προκειμένου να κάνει το σάντουιτς: Καλεί το Δωμάτιο 1 να καθαρίσει τις πατάτες που του δίνει. Καλεί το Δωμάτιο 2 να τηγανίσει τις πατάτες που καθαρίστηκαν από πριν. κοκ…

Δηλαδή, αποκτά έναν συντονιστικό και μόνο ρόλο.

3

1/11/2013

Κέρος Α. Ιωάννης


Τμηματικός Προγραμματισμός. Μαμά (Σαλόνι) Πατάτες

Δωμάτιο 1 (Καθάρισμα πατάτας)

Δωμάτιο 3 (Ζύμωμα μπιφτεκιών)

Καθαρισμένες πατάτες

Δωμάτιο 2 (Τηγάνισμα πατάτας)

κοκ…. κοκ… Αγορά υλικών

4

1/11/2013

Σάντουιτς

Κέρος Α. Ιωάννης


Τμηματικός Προγραμματισμός. Ο τμηματικός προγραμματισμός είναι η τεχνική σχεδίασης και ανάπτυξης προγραμμάτων όχι ως ένα ενιαίο πρόγραμμα αλλά ως ένα σύνολο υποπρογραμμάτων. Υποπρόγραμμα είναι ένα αυτόνομο τμήμα προγράμματος που μπορεί να γραφεί ανεξάρτητα από το υπόλοιπο πρόγραμμα. Κατηγορίες υποπρογραμμάτων: Διαδικασίες (Procedures) Συναρτήσεις (Functions)

5

1/11/2013

Κέρος Α. Ιωάννης


Παράμετρος είναι μία μεταβλητή που χρησιμοποιείται για να περάσει μία τιμή από το υποπρόγραμμα στο κύριο πρόγραμμα και αντίστροφα.

Η έννοια της παραμέτρου. Δωμάτιο 3 (Υποπρόγραμμα 3)

Δωμάτιο 1 (Υποπρόγραμμα 1) Πόρτα (Παράμετρος)

Παράθυρο (Χρήστης) Πόρτα (Παράμετρος)

Παράθυρο (Χρήστης) Δωμάτιο 2 (Υποπρόγραμμα 2)

Κύριο Πρόγραμμα

Πόρτα (Παράμετρος) Παράθυρο (Χρήστης)

6

readln, writeln

Δωμάτιο 4 (Υποπρόγραμμα 4) Παράθυρο (Χρήστης)

Πόρτα (Χρήστης) 1/11/2013

Πόρτα (Παράμετρος) Κέρος Α. Ιωάννης


Διαδικασίες (Procedures). Ορισμός: Μία διαδικασία είναι ένα είδος υποπρογράμματος που εκτελεί όλες τις λειτουργίες ενός προγράμματος.

ΕΙΣΟΔΟΣ ΑΠΟ ΤΟΝ ΧΡΗΣΤΗ (read) ΑΠΟ ΤΟ ΠΡΟΓΡΑΜΜΑ (Παράμετρος εισόδου)

Οι πιο φυσιολογικές είσοδοι - έξοδοι

ΔΙΑΔΙΚΑΣΙΑ

ΑΠΟ ΤΟΝ ΧΡΗΣΤΗ (read) & ΤΟ ΠΡΟΓΡΑΜΜΑ (Παράμετρος εισόδου)

7

ΕΞΟΔΟΣ ΣΤΟΝ ΧΡΗΣΤΗ (write) ΣΤΟ ΠΡΟΓΡΑΜΜΑ (Παράμετρος εξόδου) ΣΤΟΝ ΧΡΗΣΤΗ (write) & ΣΤΟ ΠΡΟΓΡΑΜΜΑ (Παράμετρος εξόδου)

1/11/2013

Κέρος Α. Ιωάννης


Οι παράμετροι είναι μεταβλητές που χρησιμοποιούνται για είσοδο δεδομένων από το κύριο πρόγραμμα και έξοδο αποτελεσμάτων σε αυτό.

Γενική μορφή διαδικασίας. Procedure όνομα (παράμετροι εισόδου – εξόδου;); Const όνομα σταθεράς 1 = τιμή 1; . .

Var Λίστα Μεταβλητών 1: Τύπος Δεδομένων 1; . .

Begin . .

Προσοχή στην χρήση του ;

End;

8

1/11/2013

Κέρος Α. Ιωάννης


Διαδικασίες (Procedures).

Μια διαδικασία είναι ένα είδος υποπρογράμματος που έχει την ίδια μορφή με το πρόγραμμα με την διαφορά ότι αντί της λέξης program βάζουμε την λέξη procedure και μετά το τελευταίο end έχουμε ‘;’ και όχι ’.’. Η απόφαση αν θα παραμείνει τμήμα του προγράμματος ή αν θα κωδικοποιηθεί ως διαδικασία εξαρτάται από το αν διευκολύνει στην όλη κατανόηση του προγράμματος και στην συντήρηση του.

9

1/11/2013

Κέρος Α. Ιωάννης


1ο Παράδειγμα Διαδικασίας.

Παράμετρος εισόδου ή παράμετρος τιμής: μέσω αυτής της μεταβλητής η διαδικασία δέχεται μία τιμή από το κύριο πρόγραμμα.

Διαδικασία με όνομα parad1, η οποία θα δεχθεί από το κύριο πρόγραμμα έναν ακέραιο θετικό αριθμό m και θα επιστρέψει σε αυτό το άθροισμα (sum) των ακεραίων αριθμών 1,2,3, … m, δηλαδή Παράμετρος sum=1+2+3+…+m. procedure parad1(m:integer; var sum:integer); Var i:integer; Begin sum:=0; for i:=1 to m do sum:=sum+i; end;

10

1/11/2013

εξόδου ή παράμετρος μεταβλητής: μέσω αυτής της μεταβλητής η διαδικασία μπορεί να δεχθεί μία τιμή από το κύριο πρόγραμμα αλλά και να την αλλάξει και την επιστρέψει στο κύριο πρόγραμμα.

Κέρος Α. Ιωάννης


2ο Παράδειγμα Διαδικασίας. Διαδικασία με όνομα parad2, η οποία θα διαβάσει από τον χρήστη έναν ακέραιο θετικό αριθμό m και θα επιστρέψει στο κύριο πρόγραμμα το άθροισμα (sum) των ακεραίων αριθμών 1,2,3, … m, δηλαδή Παράμετρος sum=1+2+3+…+m. procedure parad2(var sum:integer); Var i,m:integer; Begin write('Πόσοι είναι οι αριθμοί; '); readln(m); sum:=0; for i:=1 to m do sum:=sum+i; end;

11

1/11/2013

Είσοδος από τον χρήστη.

εξόδου ή παράμετρος μεταβλητής: μέσω αυτής της μεταβλητής η διαδικασία μπορεί να δεχθεί μία τιμή από το κύριο πρόγραμμα αλλά και να την αλλάξει και την επιστρέψει στο κύριο πρόγραμμα.

Κέρος Α. Ιωάννης


3ο Παράδειγμα Διαδικασίας.

Παράμετρος εισόδου ή παράμετρος τιμής: μέσω αυτής της μεταβλητής η διαδικασία δέχεται μία τιμή από το κύριο πρόγραμμα.

Διαδικασία με όνομα parad3, η οποία θα δεχθεί από το κύριο πρόγραμμα έναν ακέραιο θετικό αριθμό m και θα εμφανίσει στην οθόνη το άθροισμα (sum) των ακεραίων αριθμών 1,2,3, … m, δηλαδή sum=1+2+3+…+m. procedure parad3(m:integer); Var i,sum:integer; Begin sum:=0; for i:=1 to m do sum:=sum+i; write('Το άθροισμα είναι: ',sum); end;

12

1/11/2013

Έξοδος στον χρήστη.

Κέρος Α. Ιωάννης


4ο Παράδειγμα Διαδικασίας. Διαδικασία με όνομα parad4, η οποία θα διαβάσει από τον χρήστη έναν ακέραιο θετικό αριθμό m και θα εμφανίσει στην οθόνη το άθροισμα (sum) των ακεραίων αριθμών 1,2,3, … m, δηλαδή sum=1+2+3+…+m.

procedure parad4; Var i,sum,m:integer; Begin write('Πόσοι είναι οι αριθμοί; '); readln(m); sum:=0; for i:=1 to m do sum:=sum+i; write('Το άθροισμα είναι: ',sum); end;

13

1/11/2013

Είσοδος από τον χρήστη.

Έξοδος στον χρήστη.

Κέρος Α. Ιωάννης


Δήλωση διαδικασιών. Program όνομα; Const όνομα σταθεράς 1 = τιμή 1; .

Var Λίστα Μεταβλητών 1: Τύπος Δεδομένων 1; .

{Εδώ δηλώνονται οι διαδικασίες χωρίς να έχει σημασία η σειρά τους εκτός αν μία διαδικασία καλεί μία άλλη, οπότε η καλούμενη προηγείται} Begin . .

End.

14

1/11/2013

Κέρος Α. Ιωάννης


1ο παράδειγμα Πρόγραμμα - Διαδικασία).

 Εύρεση του αποτελέσματος, δηλαδή sum=15.

Κλήση της διαδικασίας parad1 και μεταφορά της τιμής της παραμέτρου Ν (5) στην παράμετρο m και της τιμής της παραμέτρου athr (που δεν είχε τιμή) στην παράμετρο sum.

15

    

PC12Exe1.pas

Εκτέλεση της διαδικασίας parad1 με m=N=5 και sum=athr=?.

program example1; Var N,athr:integer; procedure parad1(m:integer; var sum:integer); Var i:integer; (m=N=5) (sum=athr=?) Begin sum:=0; for i:=1 to m do Επιστροφή του sum:=sum+i; αποτελέσματος sum=15 end; στην παράμετρο athr, Begin δηλαδή athr=15. write('Πόσοι είναι οι αριθμοί; '); (athr=sum=15) readln(N); (Ν=5) parad1( N, athr); write('Το άθροισμα είναι: ',athr); athr=15 End. 1/11/2013

Κέρος Α. Ιωάννης


2ο παράδειγμα Πρόγραμμα - Διαδικασία).

Εύρεση του αποτελέσματος, δηλαδή sum=15.

Κλήση της διαδικασίας parad2 και μεταφορά της τιμής της παραμέτρου athr (που δεν είχε τιμή) στην παράμετρο sum.

16

PC12Exe2.pas

Εκτέλεση της διαδικασίας parad2 με sum=athr=?.

program example2; Var athr:integer;  procedure parad2(var sum:integer); Var (sum=athr=?) i,m:integer; Begin write('Πόσοι είναι οι αριθμοί; '); (m=5)  readln(m); Επιστροφή του sum:=0; αποτελέσματος sum=15 for i:=1 to m do στην παράμετρο athr, sum:=sum+i; δηλαδή athr=15. end; Begin (athr=sum=15)  parad2( athr); write('Το άθροισμα είναι: ',athr); athr=15   End. 1/11/2013

Κέρος Α. Ιωάννης


3ο παράδειγμα Πρόγραμμα - Διαδικασία).

 Εύρεση του αποτελέσματος, δηλαδή sum=15.

Κλήση της διαδικασίας parad3 και μεταφορά της τιμής της παραμέτρου Ν (5) στην παράμετρο m.

17

   

Εκτέλεση της διαδικασίας parad3 με m=N=5.

PC12Exe3.pas

program example3; Var N:integer; procedure parad3( m:integer ); Var i,sum:integer; (m=N=5) Begin sum:=0; for i:=1 to m do sum:=sum+i;  write('Το άθροισμα είναι: ',sum); end; Begin write('Πόσοι είναι οι αριθμοί; '); readln(N); (Ν=5) parad3( N ); End. 1/11/2013

sum=15

Κέρος Α. Ιωάννης


4ο παράδειγμα Πρόγραμμα - Διαδικασία).

Εύρεση του αποτελέσματος, δηλαδή sum=15.

 Κλήση της διαδικασίας parad4.

 

18

Εκτέλεση της διαδικασίας parad4.

PC12Exe4.pas

program example4; procedure parad4; Var i,sum,m:integer; Begin write('Πόσοι είναι οι αριθμοί; '); readln(m); sum:=0; for i:=1 to m do sum:=sum+i; write('Το άθροισμα είναι: ',sum); end; Begin parad4; End. 1/11/2013

(m=5)

(sum=15)

Κέρος Α. Ιωάννης


5ο Παράδειγμα Διαδικασίας. Procedure athroisma; Var Είσοδος από τον i, m : integer; χρήστη. sum, num : real; Begin sum:=0; write('Πόσους αριθμούς θα προσθέσεις; '); readln(m); For i:=1 to m do Begin write('Δώσε τον ', i ,'o αριθμό: '); readln(num); sum:=sum+num; End; writeln('Το άθροισμα των αριθμών είναι: ',sum:3:2); Εnd;

19

1/11/2013

Διαδικασία με όνομα athroisma, η οποία θα διαβάσει από τον χρήστη πολλούς αριθμούς (το πλήθος των αριθμών θα το διαβάσει εκ' των προτέρων) και θα εμφανίσει στην οθόνη το άθροισμα τους.

Έξοδος στον χρήστη.

Κέρος Α. Ιωάννης


5ο  παράδειγμα Πρόγραμμα - Διαδικασία).

 PC12Exe5.pas  Κλήση της διαδικασίας.

 

20

Program test_subroutines1; Procedure athroisma; Var Εκτέλεση της i,m:integer; διαδικασίας. sum,num:real; Begin sum:=0; write('Πόσους αριθμούς θα προσθέσεις; '); (m=5) readln(m); For i:=1 to m do Begin write('Δώσε τον ',i,'o αριθμό: '); readln(num); (num = 7, 8, 5, 4, 9) sum:=sum+num; End; (sum=33) writeln('Το άθροισμα είναι: ',sum:3:2); End; Begin athroisma; Μεταφορά του ελέγχου ξανά στο κύριο πρόγραμμα. End. 1/11/2013

Κέρος Α. Ιωάννης


6ο Παράδειγμα Διαδικασίας.

Παράμετρος εισόδου ή παράμετρος τιμής: μέσω αυτής της μεταβλητής η διαδικασία δέχεται μία τιμή από το κύριο πρόγραμμα.

Διαδικασία με όνομα athroisma, η οποία θα διαβάσει από τον χρήστη πολλούς αριθμούς (το πλήθος των αριθμών θα το δεχθεί από το κύριο πρόγραμμα) και επιστρέψει στο κύριο πρόγραμμα το άθροισμα τους.

Procedure athroisma(m:integer; var sum:real); Var i,num:integer; Begin sum:=0; For i:=1 to m do Begin write('Δώσε τον ',i,'o αριθμό: '); readln(num); sum:=sum+num; End; End;

21

1/11/2013

Παράμετρος εξόδου ή παράμετρος μεταβλητής: μέσω αυτής της μεταβλητής η διαδικασία μπορεί να δεχθεί μία τιμή από το κύριο πρόγραμμα αλλά και να την αλλάξει και την επιστρέψει στο κύριο πρόγραμμα. Κέρος Α. Ιωάννης


6ο παράδειγμα Πρόγραμμα  - Διαδικασία).

PC12Exe6.pas

Κλήση της διαδικασίας athroisma και μεταφορά της τιμής της παραμέτρου Ν (έστω 5) στην παράμετρο m και της τιμής της παραμέτρου athr (που δεν είχε τιμή) στην παράμετρο sum.

22

    

Program test_subroutines2; Εκτέλεση της διαδικασίας Var athroisma με m=N, δηλαδή N:integer; 5 και sum=?. athr:real; Procedure athroisma(m:integer; var sum:real); Τέλος κλήσης της Var διαδικασίας και (m=Ν=5) i,num:integer; επιστροφή στο κύριο πρόγραμμα με Begin μεταφορά της τιμής sum:=0; της παραμέτρου sum For i:=1 to m do στην παράμετρο athr Begin (33). write('Δώσε τον ',i,'o αριθμό : '); readln(num); (num = 7, 8, 5, 4, 9) sum:=sum+num; (sum=athr=?) End; End; (athr=sum=33) Begin write('Πόσους αριθμούς θα προσθέσεις; '); readln(N); (Ν=5) athroisma( N, athr ); (athr=33) writeln('Το άθροισμα είναι: ',athr:3:2); End.

1/11/2013

Κέρος Α. Ιωάννης


Πραγματικές – Τυπικές Παράμετροι.

23

Program test_subroutines2; Τυπικές παράμετροι. Var N:integer; athr:real; Procedure athroisma(m:integer; var sum:real); Var i,num:integer; Παράμετροι μεταβλητής Begin (εξόδου). sum:=0; Παράμετροι τιμής For i:=1 to m do (εισόδου). Begin write('Δώσε τον ',i,'o αριθμό : '); readln(num); sum:=sum+num; Πραγματικές End; παράμετροι. End; Begin write('Πόσους αριθμούς θα προσθέσεις; '); readln(N); athroisma( N, athr ); writeln('Το άθροισμα των αριθμών που έδωσες είναι: ',athr:3:2); End.

1/11/2013

Κέρος Α. Ιωάννης


Πραγματικές – Τυπικές Παράμετροι. Ο αριθμός των τυπικών παραμέτρων πρέπει να είναι ο ίδιος με των πραγματικών. Κάθε τυπική παράμετρος αντιστοιχεί στην πραγματική παράμετρο που είναι στην ίδια θέση. (Η πρώτη της λίστας των πραγματικών στην πρώτη της λίστας των τυπικών κοκ). Η τυπική και η αντίστοιχη πραγματική παράμετρος πρέπει να είναι του ίδιου τύπου.

24

1/11/2013

Κέρος Α. Ιωάννης


Συναρτήσεις (Functions). Ορισμός: Μία συνάρτηση είναι ένα είδος υποπρογράμματος που υπολογίζει και επιστρέφει μία μόνο τιμή με το όνομα της, όπως οι μαθηματικές συναρτήσεις.

ΕΙΣΟΔΟΣ

ΑΠΟ ΤΟ ΠΡΟΓΡΑΜΜΑ (Παράμετρος εισόδου)

ΕΞΟΔΟΣ

ΣΥΝΑΡΤΗΣΗ

ΣΤΟ ΠΡΟΓΡΑΜΜΑ (Παράμετρος εξόδου)

ΜΙΑ ΜΟΝΟ

25

1/11/2013

Κέρος Α. Ιωάννης


Άσκηση. Τι είδους υποπρόγραμμα μπορείς να χρησιμοποιήσεις για τα παρακάτω προβλήματα; Διαδικασία (Δ) ή Συνάρτηση (Σ); Σε κάποια προβλήματα μπορεί να ταιριάζουν και δύο απαντήσεις.

26

Υπολογισμός και επιστροφή στο κύριο πρόγραμμα του μικρότερου από πέντε ακεραίους.

Δ, Σ

Υπολογισμός και επιστροφή στο κύριο πρόγραμμα των δυο μικρότερων από πέντε ακεραίους.

Δ

Έλεγχος και επιστροφή στο κύριο πρόγραμμα αν δυο αριθμοί είναι ίσοι. Αυτό που επιστρέφεται είναι μία λογική τιμή (Αληθής / Ψευδής).

Δ, Σ

Να ταξινομεί και να επιστρέφει στο κύριο πρόγραμμα ταξινομημένους πέντε αριθμούς.

Δ

Έλεγχος και επιστροφή στο κύριο πρόγραμμα αν ένας χαρακτήρας είναι φωνήεν ή σύμφωνο. Αυτό που επιστρέφεται είναι μία λογική τιμή (Αληθής / Ψευδής).

Δ, Σ

1/11/2013

Κέρος Α. Ιωάννης


Άσκηση (συνέχεια) . Τι είδους υποπρόγραμμα μπορείς να χρησιμοποιήσεις για τα παρακάτω προβλήματα; Διαδικασία (Δ) ή Συνάρτηση (Σ); Σε κάποια προβλήματα μπορεί να ταιριάζουν και δύο απαντήσεις.

27

Διάβασμα τριών αριθμών και επιστροφή τους στο κύριο πρόγραμμα.

Δ

Διάβασμα ενός αριθμού και επιστροφή του στο κύριο πρόγραμμα.

Δ

Εμφάνιση τριών αριθμών.

Δ

Εμφάνιση ενός αριθμού.

Δ

Υπολογισμός και επιστροφή στο κύριο πρόγραμμα του μέγιστου από δύο αριθμών.

Δ, Σ

1/11/2013

Κέρος Α. Ιωάννης


Το όνομα της συνάρτησης είναι η μία και μοναδική παράμετρος εξόδου που έχει κάθε συνάρτηση.

Οι παράμετροι εισόδου (τιμής) είναι μεταβλητές που χρησιμοποιούνται για είσοδο δεδομένων από το κύριο πρόγραμμα.

Γενική μορφή συνάρτησης. Function όνομα (παράμετροι εισόδου): Τύπος Συνάρτησης; Const όνομα σταθεράς 1 = τιμή 1;

Εκφράζει το είδος της τιμής που επιστρέφει η συνάρτηση: integer, real, boolean, char, string.

. .

Var

Λίστα Μεταβλητών 1: Τύπος Δεδομένων 1; . .

Begin . .

Προσοχή στην χρήση του ;

End;

28

1/11/2013

Κέρος Α. Ιωάννης


Συναρτήσεις (Functions). Μια συνάρτηση είναι ένα είδος υποπρογράμματος που έχει την ίδια μορφή με την διαδικασία με την διαφορά ότι αντί της λέξης procedure βάζουμε την λέξη function. Η πρώτη γραμμή της συνάρτησης καθορίζει το όνομα της συνάρτησης (που είναι η μία και μοναδική παράμετρος εξόδου που έχει κάθε συνάρτηση), τις παραμέτρους εισόδου που χρησιμοποιούνται για την είσοδο τιμών στην συνάρτηση καθώς και τον τύπο της τιμής που επιστρέφει η συνάρτηση μέσω του ονόματος της.

29

1/11/2013

Κέρος Α. Ιωάννης


Δήλωση διαδικασιών - συναρτήσεων. Program όνομα; Const όνομα σταθεράς 1 = τιμή 1; .

Var Λίστα Μεταβλητών 1: Τύπος Δεδομένων 1; .

{Εδώ δηλώνονται οι διαδικασίες και οι συναρτήσεις, χωρίς να έχει σημασία η σειρά που το κάνουμε εκτός αν μία διαδικασία ή συνάρτηση καλεί μία άλλη διαδικασία ή συνάρτηση οπότε η καλούμενη πρέπει να προηγείται} Begin . .

End.

30

1/11/2013

Κέρος Α. Ιωάννης


1ο Παράδειγμα Συνάρτησης. Συνάρτηση με όνομα athr, η οποία δεχθεί έναν ακέραιο θετικό αριθμό m από το κύριο πρόγραμμα και επιστρέψει σε αυτό το άθροισμα των αριθμών 1+2+3+…+m. Παράμετρος

Παράμετρος εξόδου ή παράμετρος μεταβλητής: μέσω του ονόματος της (athr) η συνάρτηση επιστρέφει στο κύριο πρόγραμμα το αποτέλεσμα της.

31

function athr(m:integer):integer; Var i,sum:integer; Begin sum:=0; for i:=1 to m do sum:=sum+i; athr:=sum; end; 1/11/2013

εισόδου ή παράμετρος τιμής: μέσω αυτής της μεταβλητής η συνάρτηση δέχεται μία τιμή (m) από το κύριο πρόγραμμα.

Εκχώρηση του αποτελέσματος στο όνομα της συνάρτησης.

Κέρος Α. Ιωάννης


Παράμετροι εισόδου ή παράμετροι τιμής: μέσω αυτών των μεταβλητών η συνάρτηση δέχεται δύο τιμές (basi) (ekth) από το κύριο πρόγραμμα.

2ο Παράδειγμα Συνάρτησης.

Συνάρτηση με όνομα power, η οποία δέχεται την βάση (basi) και τον εκθέτη (ekth) από το κύριο πρόγραμμα και επιστρέφει σε αυτό την δύναμη basi^ekth.

Παράμετρος εξόδου ή παράμετρος μεταβλητής : μέσω του ονόματος της (power) η συνάρτηση επιστρέφει στο κύριο πρόγραμμα το αποτέλεσμα της.

32

Function power(basi:real; ekth:integer):real; Var apotel:real; Begin apotel:=1; For i:=1 to ekth do apotel:=apotel*basi; power:=apotel; End; 1/11/2013

Εκχώρηση του αποτελέσματος στο όνομα της συνάρτησης.

Κέρος Α. Ιωάννης


3o Παράδειγμα Συνάρτησης. Συνάρτηση trigono, που δέχεται από το κύριο πρόγραμμα 3 γωνίες σε μοίρες και επιστρέφει σε αυτό true αν σχηματίζουν τρίγωνο, διαφορετικά false. Υπενθυμίζεται ότι 3 γωνίες σχηματίζουν τρίγωνο αν το άθροισμα τους είναι 180 μοίρες.

Παράμετρος εξόδου : μέσω του ονόματος της (trigono) η συνάρτηση επιστρέφει στο κύριο πρόγραμμα το αποτέλεσμα της.

33

Function trigono(gonia1,gonia2,gonia3:real):boolean; Παράμετροι Var εισόδου ή sum:real; παράμετροι τιμής: μέσω αυτών των t:boolean; μεταβλητών η Begin συνάρτηση sum:=gonia1+gonia2+gonia3; δέχεται τρεις τιμές (gonia1) (gonia2) if sum=180 then (gonia3) από το t:=true κύριο πρόγραμμα. else Εκχώρηση του αποτελέσματος t:=false; στο όνομα της συνάρτησης. trigono:=t; End; 1/11/2013 Κέρος Α. Ιωάννης


1ο παράδειγμα Πρόγραμμα - Συνάρτηση).

Εκτέλεση της συνάρτησης athr με m=N=5.

 PC12Exe7.pas

Κλήση της συνάρτησης athr και μεταφορά της τιμής της παραμέτρου N (5) στην παράμετρο m.

       

34

Program test_function1; Var N,apot:integer; Function athr(m:integer):integer; Var i,sum:integer; (N=m=5) Begin sum:=0; for i:=1 to m do sum:=sum+i; (sum=15) (athr=15) athr:=sum; end; Begin write('Δώστε έναν αριθμό: '); (5) readln(N); apot:=athr( N ); (apot=15) write('Το άθροισμα είναι: ',apot); End. 1/11/2013

Τέλος κλήσης της συνάρτησης και επιστροφή στο κύριο πρόγραμμα με μεταφορά της τιμής του ονόματος της (δηλαδή 15) στο σημείο κλήσης.

(15)

Κέρος Α. Ιωάννης


2ο παράδειγμα  Πρόγραμμα - Συνάρτηση).

PC12Exe8.pas  Κλήση της συνάρτησης power και μεταφορά της τιμής της παραμέτρου ba (2) στην παράμετρο basi, της ek (3) στην παράμετρο ekth.

 

 

  

35

Program test_function2; Εκτέλεση της συνάρτησης power Var με basi=ba=2, ekth=ek=3. ek:integer; ba,y:real; Function power(basi:real; ekth:integer):real; Var apotel:real; (basi=ba=2) i:integer; (ekth=ek=3) Begin apotel:=1; For i:=1 to ekth do apotel:=apotel*basi; power:=apotel; Τέλος κλήσης της End; συνάρτησης και Begin επιστροφή στο κύριο write('Δώστε την βάση της δύναμης: '); πρόγραμμα με readln(ba); (2) μεταφορά της τιμής while ba>0 do του ονόματος της begin (δηλαδή 8) στο write('Δώστε τον εκθέτη της δύναμης: '); σημείο κλήσης. (8) readln(ek); (3) y:=power(ba, ek); writeln(ba:3:2,'^',ek,'=',y:3:2); (8) write('Δώστε την βάση της δύναμης: '); readln(ba); end; End. 1/11/2013

Κέρος Α. Ιωάννης


Εκτέλεση της συνάρτησης trigono με gonia1=g1=100, gonia2=g2=20 και gonia3=g3=60.

3ο

παράδειγμα Πρόγραμμα  - Συνάρτηση).

PC12Exe9.pas Κλήση της συνάρτησης trigono και μεταφορά της τιμής της παραμέτρου g1 (100) στην παράμετρο gonia1, της g2 (20) στην παράμετρο gonia2 και της g3 (60) στην παράμετρο gonia3.

      

36

Program test_function3; Var g1,g2,g3:real; Function trigono(gonia1,gonia2,gonia3:real):boolean; Var sum:real; gonia1=g1=100 t:boolean; gonia2=g2=20 Begin sum:=gonia1+gonia2+gonia3; gonia3=g3=60 if sum=180 then t:=true else Τέλος κλήσης της t:=false; συνάρτησης και trigono:=t; επιστροφή στο κύριο End; πρόγραμμα με Begin μεταφορά της τιμής writeln('Δώστε τις τρεις γωνίες του τριγώνου σε μοίρες: '); του ονόματος της write('1η γωνία='); (δηλαδή true) στο (100) readln(g1); σημείο κλήσης. write('2η γωνία='); (20) readln(g2); write('3η γωνία='); (60) readln(g3); (true) if trigono( g1, g2, g3 ) then writeln('Οι 3 γωνίες σχηματίζουν τρίγωνο') (Οι …) else writeln('Οι 3 γωνίες δεν σχηματίζουν τρίγωνο'); End. 1/11/2013 Κέρος Α. Ιωάννης


Χρήσιμες Πληροφορίες. Ένα υποπρόγραμμα μπορεί να κληθεί από το κύριο πρόγραμμα αλλά και από τα υπόλοιπα υποπρογράμματα, ακόμη και τον ίδιο του τον εαυτό (Το τελευταίο ονομάζεται αναδρομή, αλλά είναι εκτός ύλης).

Οι παράμετροι τιμής (εισόδου), είναι μεταβλητές που δεσμεύονται κατά την κλήση του υποπρογράμματος και αποδεσμεύονται μετά το τέλος κλήσης της. Χάνουν δηλαδή τις τιμές που είχαν μετά το τέλος κλήσης τους. Δεν μεταφέρουν δηλαδή τις τιμές τους στο κύριο πρόγραμμα ακόμα και αν τις είχαν αλλάξει. Οι παράμετροι μεταβλητής (εξόδου), είναι μεταβλητές που εξακολουθούν να παραμένουν δεσμευμένες και μετά το τέλος της κλήσης του υποπρογράμματος. Στην ουσία οι πραγματικές και οι αντίστοιχες τυπικές παράμετροι μεταβλητής (εξόδου) αναφέρονται στην ίδια περιοχή μνήμης και για αυτό έχουν την ικανότητα να μεταφέρουν τις τιμές τους πίσω στο κύριο πρόγραμμα.

37

1/11/2013

Κέρος Α. Ιωάννης


Ενσωματωμένες συναρτήσεις. Η Pascal περιλαμβάνει πολλές ενσωματωμένες συναρτήσεις, όπως: 1. 2. 3. 4. 5. 6.

38

abs(x), για την απόλυτη τιμή του x, sin(x), για το ημίτονο του x, cos(x), για το συ��ημίτονο του x, sqr(x), για το τετράγωνο του x, sqrt(x), για την τετραγωνική ρίζα του x, ln(x), για τον λογάριθμο του x, κτλ.

1/11/2013

Κέρος Α. Ιωάννης


Πότε χρησιμοποιούμε συναρτήσεις και πότε όχι; Το σχολικό βιβλίο προτείνει την χρήση των συναρτήσεων στις ακόλουθες περιπτώσεις: Αν το τμήμα προγράμματος επιστρέφει περισσότερες από μία τιμές ή αλλάζει τιμές πραγματικών παραμέτρων, τότε δεν χρησιμοποιούμε συνάρτηση. Αν το τμήμα προγράμματος εκτελεί είσοδο δεδομένων ή έξοδο αποτελεσμάτων, τότε δεν χρησιμοποιούμε συνάρτηση.

Αν το τμήμα προγράμματος, επιστρέφει μία τιμή και η τιμή αυτή είναι λογική (boolean), τότε χρησιμοποιούμε συνάρτηση. Αν το τμήμα προγράμματος, επιστρέφει μία τιμή και η τιμή αυτή χρησιμοποιείται άμεσα σε μία παράσταση, τότε χρησιμοποιούμε συνάρτηση. Αν υπάρχει αμφιβολία είναι προτιμότερο να χρησιμοποιήσουμε την διαδικασία. Στην διαδικασία τον ρόλο του ονόματος της συνάρτησης παίζει μία παράμετρος μεταβλητής.

39

Αν είναι δυνατόν να χρησιμοποιήσουμε και τις δύο, δηλαδή διαδικασία ή συνάρτηση, επιλέγουμε αυτή με την οποία αισθανόμαστε πιο άνετα στην υλοποίηση. 1/11/2013

Κέρος Α. Ιωάννης


Par12