ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ ΥΠΟΡΟΥΤΙΝΕΣ ΔΙΑΔΙΚΑΣΙΕΣ(Procedures) ΣΥΝΑΡΤΗΣΕΙΣ(Functions)
Στόχοι Να γνωρίσουμε τι είναι τα Υποπρογράμματα. Ποια τα πλεονεκτήματα. Τι είναι οι διαδικασίες και οι συναρτήσεις. Να εφαρμόσουμε τις διαδικασίες και τις συναρτήσεις στην Pascal.
Διαδικασίες - Procedures Τι είναι οι διαδικασίες; Είναι μικρά προγράμματα που ανήκουν στο κυρίως πρόγραμμα. Έτσι ονομάζονται και υποπρογράμματα. Η κλήση μιας διαδικασίας στο κύριο πρόγραμμα, γίνεται με ξεχωριστή εντολή που περιλαμβάνει το όνομα της διαδικασίας, ακολουθούμενο από τις παραμέτρους σε παρενθέσεις. Procedure Ονομα διαδικασίας(Παράμετροι)
Πλεονκτήματα χρήσης διαδικασιών Πιο εύκολη αντιμετώπιση του προβλήματος. Εύκολη τροποποίηση και βελτίωση του προγράμματος, γιατί κάθε διαδικασία είναι ξεχωριστή οντότητα. Ο έλεγχος του κώδικα και εντοπισμός λαθών επιτυγχάνεται γρηγορότερα. Βελτίωση της αναγνωσιμότητας του προγράμματος.
Αρθρωτός προγραμματισμός Η μέθοδος προγραμματισμού σύμφωνα με την οποία το πρόγραμμα χωρίζεται σε αυτοτελή τμήματα, καθένα από τα οποία μπορεί να δοκιμαστεί ανεξάρτητα ή να τροποποιηθεί χωρίς να επιφέρει αλλαγές στα υπόλοιπα Υπορουτίνα Τμήμα προγράμματος που εκτελεί συγκεκριμένη διαδικασία ΥΠΟΡΟΥΤΙΝΑ όνομα_υπορουτίνας Εντολή 1 Εντολή 2 : : ΤΕΛΟΣ ΥΠΟΡΟΥΤΙΝΑΣ Συνάρτηση Τμήμα προγράμματος που εκτελεί συγκεκριμένη διαδικασία και παίρνει τιμές ΣΥΝΑΡΤΗΣΗ όνομα_συνάρτησης(παράμετρος1,...) Εντολή 1 Εντολή 2 : όνομα_συνάρτησης ← παράσταση ΤΕΛΟΣ ΣΥΝΑΡΤΗΣΗΣ
ΠΡΟΓΡΑΜΜΑ Πλακόστρωση_Δωματίου ‘Δηλώσεις ΚΑΘΟΛΙΚΗ ΜΕΤΑΒΛΗΤΗ Εμβαδόν ‘Επεξεργασία στοιχείων δωματίου ΓΡΑΨΕ ”Δώσε διαστάσεις δωματίου” ΚΑΛΕΣΕ Εμβαδόν_Ορθογωνίου Εμβαδόν_Δωματίου ← Εμβαδόν ‘Επεξεργασία στοιχείων για το πλακίδιο ΓΡΑΨΕ ”Δώσε διαστάσεις για το πλακίδιο” Εμβαδόν_Πλακιδίου ← Εμβαδόν ‘Υπολογισμός Πλήθος_Πλακιδίων ← Εμβαδόν_Δωματίου/Εμβαδόν_Πλακιδίου ‘Εμφάνιση αποτελεσμάτων ΓΡΑΨΕ ”Χρειάζονται”, Πλήθος_Πλακιδίων, ”πλακίδια” ΤΕΛΟΣ ΠΡΟΓΡΑΜΜΑΤΟΣ ‘Περιοχή Υπορουτινών ΥΠΟΡΟΥΤΙΝΑ Εμβαδόν_Ορθογωνίου ‘Εισαγωγή δεδομένων ΔΙΑΒΑΣΕ Μήκος ΔΙΑΒΑΣΕ Πλάτος ‘Επεξεργασία δεδομένων Eμβαδόν ← Μήκος*Πλάτος ΤΕΛΟΣ ΥΠΟΡΟΥΤΙΝΑΣ
ΠΡΟΓΡΑΜΜΑ Πλακόστρωση_Δωματίου ‘Δηλώσεις ΚΑΘΟΛΙΚΗ ΜΕΤΑΒΛΗΤΗ Εμβαδόν ‘Επεξεργασία στοιχείων δωματίου ΓΡΑΨΕ ”Δώσε διαστάσεις δωματίου” ΚΑΛΕΣΕ Εμβαδόν_Ορθογωνίου Εμβαδόν_Δωματίου ← Εμβαδόν ‘Επεξεργασία στοιχείων για το πλακίδιο ΓΡΑΨΕ ”Δώσε διαστάσεις για το πλακίδιο” Εμβαδόν_Πλακιδίου ← Εμβαδόν ‘Υπολογισμός Πλήθος_Πλακιδίων ← Εμβαδόν_Δωματίου/Εμβαδόν_Πλακιδίου ‘Εμφάνιση αποτελεσμάτων ΓΡΑΨΕ ”Χρειάζονται”, Πλήθος_Πλακιδίων, ”πλακίδια” ΤΕΛΟΣ ΠΡΟΓΡΑΜΜΑΤΟΣ ‘Περιοχή Υπορουτινών ΥΠΟΡΟΥΤΙΝΑ Εμβαδόν_Ορθογωνίου ‘Εισαγωγή δεδομένων ΔΙΑΒΑΣΕ Μήκος ΔΙΑΒΑΣΕ Πλάτος ‘Επεξεργασία δεδομένων Eμβαδόν ← Μήκος*Πλάτος ΤΕΛΟΣ ΥΠΟΡΟΥΤΙΝΑΣ
ΠΡΟΓΡΑΜΜΑ Πλακόστρωση_Δωματίου ‘Δηλώσεις ΚΑΘΟΛΙΚΗ ΜΕΤΑΒΛΗΤΗ Εμβαδόν ‘Επεξεργασία στοιχείων δωματίου ΓΡΑΨΕ ”Δώσε διαστάσεις δωματίου” ΚΑΛΕΣΕ Εμβαδόν_Ορθογωνίου Εμβαδόν_Δωματίου ← Εμβαδόν ‘Επεξεργασία στοιχείων για το πλακίδιο ΓΡΑΨΕ ”Δώσε διαστάσεις για το πλακίδιο” Εμβαδόν_Πλακιδίου ← Εμβαδόν ‘Υπολογισμός Πλήθος_Πλακιδίων ← Εμβαδόν_Δωματίου/Εμβαδόν_Πλακιδίου ‘Εμφάνιση αποτελεσμάτων ΓΡΑΨΕ ”Χρειάζονται”, Πλήθος_Πλακιδίων, ”πλακίδια” ΤΕΛΟΣ ΠΡΟΓΡΑΜΜΑΤΟΣ ‘Περιοχή Υπορουτινών ΥΠΟΡΟΥΤΙΝΑ Εμβαδόν_Ορθογωνίου ‘Εισαγωγή δεδομένων ΔΙΑΒΑΣΕ Μήκος ΔΙΑΒΑΣΕ Πλάτος ‘Επεξεργασία δεδομένων Eμβαδόν ← Μήκος*Πλάτος ΤΕΛΟΣ ΥΠΟΡΟΥΤΙΝΑΣ
Ορισμός διαδικασίας Procedure όνομα διαδικασίας(παράμετροι); Const {μεταβλητές} Var Begin … {Εντολές} .. End.
Συναρτήσεις - Functions Οι συναρτήσεις είναι και αυτές μικρά προγράμματα που ανήκουν σε κάποιο κύριο πρόγραμμα. Υπάρχουν έτοιμες συναρτήσεις, π.χ. Sqrt(x) που επιστρέφει την τετραγωνική ρίζα του Χ. Μπορούμε επίσης να δημιουργήσουμε τις δικές μας συναρτήσεις.
Διαφορές Συναρτήσεων και Διαδικασιών Διαφορές Συναρτήσεων και Διαδικασιών 1. Οι συναρτήσεις επιστρέφουν πίσω στο κύριο πρόγραμμα μόνο μια τιμή. Η τιμή αυτή επιστρέφεται μέσω του ονόματος της συνάρτησης. 2. Η κλήση της συνάρτησης στο κύριο πρόγραμμα γίνεται με τη χρήση του ονόματος της ακολουθούμενο από τις παραμέτρους. Αυτή η κλήση γίνεται με μια έκφραση, π.χ. Μαθηματική και όχι με μια ξεχωριστή εντολή, όπως συμβαίνει στις διαδικασίες.
Ορισμός Συνάρτησης Function όνομα_Συνάρτησης(παράμετροι):τύπος τιμήs; {o τύπος τιμής είναι π.χ. Real} Const {δήλωση σταθερών} Var {δήλωση μεταβλητών} Begin .. {εντολές} End.
Παράδειγμα-Διαδικασίας1) Να γράψετε ένα πρόβλημα το οποίο θα διαβάζει δυο αριθμούς, στη συνέχεια να υπολογίζει και τέλος να τυπώνει το άθροισμα τους. Το πρόβλημα θα χωριστεί σε τρεις διαδικασίες. 1. Διάβασε χ,Y. READ_XY 2. Υπολόγισε το άθροισμα CALC_SUM 3. Τύπωσε το αποτέλεσμα PRINT_RESULT
PROGRAM PARADEIGMA_DIADIKASIAS; Uses wincrt; Var x,y,sum:real; Procedure READ_XY(VAR x,y:REAL); Begin Write(‘x= ‘); Readln(x); Write(‘y= ‘); Readln(y); End; Procedure CALC_SUM(x,y:Real;Var sum:Real); Sum:=x,y;
Procedure PRINT_RESULT(x,y,sum:Real); Begin Writeln(‘X= ‘,x:3:1); Writeln(‘Y= ‘,y:3:1); Writeln(‘Athrisma= ‘,sum:3:1); End; Begin{Vasiko programma} {Κλήση διαδικασίας READXY} READ_XY(x,y); {Κλήση διαδικασίας CALC_SUM} CALC_SUM(x,y,sum); {Κλήση διαδικασίας PRINT_RESULT} PRINT_RESULT(x,y,sum); End.
Παράδειγμα - Διαδικασίας2 Πρόβλημα: Να γραφεί ένα πρόγραμμα το οποίο να υπολογίζει τον μεγαλύτερο αριθμό από μια λίστα με τρεις αριθμούς. Το πρόγραμμα θα χρησιμοποιεί μια διαδικασία που θα δέχεται δυο αριθμούς και υα τους επιστρέφει πίσω στο πρόγραμμα, πρώτα το μεγαλύτερο και μετά το μικρότερο.
Program diadikasia2; Uses wincrt; Var X,y,z:real; Procedure maxmin(var x,y:real); temp:real; Begin IF X<Y then begin temp:=x; x:=y; y:=temp; end;
Begin Write(‘Dose treis arithmous x,y,z..’); Readln(x,y,z); maxmin(x,y); maxmin(y,z); Writeln(‘Oi treis arithmoi se seira einai…’,x:5:1,y:5:1,z:5:1); End.
Παράδειγμα Συναρτήσεις1 H Pascal δεν έχει ενσωματωμένη συνάρτηση για τον υπολογισμό της δύναμης. Π.χ. Χn. Αυτό μπορεί να γίνει με τη χρήση της πιο κάτω ιδιότητας των λογαρίθμων. Αν Χ=αν τότε χ=e(ln(ν ln(α)))
Program synartisi1; Uses wincrt; Var X,N:real; Function Power(X,N:real):real; Begin Power:=Exp(N*ln(X)); End; Write(‘ Dose dyo arithmous…X, N:’); Readln(X,N); Writeln(‘X=‘,X:2:1,’N=‘,N:2:1); Writeln(x:2:1,’^’,N:2:1,’ = ‘,Power(X,N):2:1); End.
Παράδειγμα Συναρτήσεις2 Πρόβλημα: Ένας καθηγητής υπολογίζει τους βαθμούς του τριμήνου βάσει τριών διαγωνισμάτων. Η βαρύτητα του πρώτου διαγωνίσματος είναι 60% και των υπολοίπων δυο 20%. Το κάθε διαγώνισμα βαθμολογείται με μέγιστο βαθμό το 20. Να γράψετε πρόγραμμα που να διαβάζει τα αποτελέσματα των τριών διαγωνισμάτων και να υπολογίζει τον τελικό βαθμό του τριμήνου.
Program synartiseis2; Uses Wincrt; Const W1=0.6;W2=0.2;W3=0.2; Var test1,test2,test3:Real; Function FinalGrade(test1,test2,test3:real):Real; Begin FinalGrade:=W1*test1+W2*test2+W3*test3; End; Writeln(‘Dose tous vathmous twn triwn diagonismatwn’); Writeln; Write(‘Vathmos 1ou diagonismatos…’);Readln(test1); Write(‘Vathmos 2ou diagonismatos…’);Readln(test2); Write(‘Vathmos 3ou diagonismatos…’);Readln(test3); Write(‘O telikos vathmos tou triminou einai ’,FinalGrade(test1,test2,test3):1:1); End.
Παράδειγμα(Διαδικασία και Συνάρτηση) Να γραφεί πρόγραμμα το οποίο να διαβάζει τις τιμές των συντελεστών α,β και γ, μιας δευτεροβάθμιας εξίσωσης. Το πρόγραμμα να υπολογίζει και να ελέγχει την διακρίνουσα αν είναι θετική ή όχι. Αν είναι θετική, Δ>=0 να υπολογίζει τις πραγματικές τιμές χ1 και χ2. Διαφορετικά, να τυπώνει το μήνυμα, “Μιγαδικές ρίζες”.
Program Diadikasia_Synartisi; Uses Wincrt; Var a,b,c,x1,x2:real; d:real; Function Determinant(a,b,c:real):real; Begin Deternimant:=b*b-4*a*c; End; Procedure roots(a,b,c,d:real:var x1,x2:Real); X1:=(-b+sqrt(d))/(2*a); X2:=(-b-sqrt(d)))/(2*a);
Begin Writeln(‘ Rizes tis deuterovathmias eksisosis’); Write(‘Dose tous treis syntelestes tis eksisosis, a,b kai c: ’); Readln(a,b,c); If Deterninant(a,b,c)>=0 then roots(a,b,c,Deterninant(a,b,c),x1,x2); Writeln(‘ Oi Rizes einai ’); Writeln(‘x1= ‘,x1:2:2); Writeln(‘x2= ‘,x2:2:2); End Else Writeln(‘ Oi Rizes einai Migadiges ’); End.