Συνάρτηση Διαδικασία Συνάρτηση (function) : είναι ένα υποπρόγραμμα που στόχο του έχει να υπολογίζει και να επιστρέφει μόνο μια τιμή με το όνομά της όπως οι γνωστές μαθηματικές συναρτήσεις, πρδ. SIN(X), COS(X), EXP(X) κ.λ.π..
Παράδειγμα όταν είναι χρήσιμο να ορίσουμε δική μας συνάρτηση είναι αυτή: Να γράψετε πρόγραμμα που θα διαβάζει τους ακέραιους αριθμούς n, m και θα υπολογίζει το διωνυμικό συντελεστή (Binomial coefficient) n n! n m m m! n m! 0
Διαχωρισμός των υποπρογραμμάτων σε δύο κατηγορίες Υποπρογράμματα Συναρτήσεις Διαδικασίες Συνάρτηση (function) : είναι ένα υποπρόγραμμα που στόχο του έχει να υπολογίζει και να επιστρέφει μόνο μια τιμή με το όνομά της όπως οι γνωστές μαθηματικές συναρτήσεις, πρδ. SIN(X), COS(X) κ.λ.π.. Διαδικασία (subroutine) : είναι ένα υποπρόγραμμα το οποίο έχει όλα τα χαρακτηριστικά ενός προγράμματος.
Διαχωρισμός των τυπικών (formal) παραμέτρων INTENT(IN): δήλωση τυπικών παραμέτρων οι οποίες εισάγουν δεδομένα από το κύρίο πρόγραμμα, χωρίς να αλλάζει η τιμή τους μέσα στη διαδικασία. INTENT(OUT): δήλωση τυπικών παραμέτρων οι οποίες εξάγουν αποτελέσματα που υπολογίστηκαν μέσα στη διαδικασία. INTENT(INOUT): δήλωση τυπικών παραμέτρων οι οποίες εισάγουν δεδομένα από το κυρίως πρόγραμμα, αλλά και επιστρέφουν αποτελέσματα μέσω της διαδικασίας (και συνεπώς αλλάζει η τιμή τους μέσα στη διαδικασία). IN INOUT OUT
Συνάρτηση Σύνταξη: τύπος_συν. FUNCTION όνομα_συν.(μεταβλητές) δηλώσεις μεταβλητών προτάσεις RETURN! return for new compiler END FUNCTION όνομα_συν
Παράδειγμα 1: REAL FUNCTION DIST(X,Y) IMPLICIT NONE REAL:: X,Y DIST= SQRT(X**2+Y**2) RETURN END FUNCTION DIST
Παράδειγμα 2 : n! = 1 2 3 n INTEGER FUNCTION FACTORIAL(N) IMPLICIT NONE INTEGER, INTENT(IN):: N INTEGER :: I,FACT IF (N==0) THEN FACTORIAL=1 END IF FACT=1 IF (N>0) THEN DO I=1,N FACT=FACT*I END DO FACTORIAL=FACT END IF RETURN END FUNCTION FACTORIAL
Άσκηση Να γράψετε πρόγραμμα που θα ζητάει από το χρήστη 5 ζεύγη ακέραιων θετικών αριθμών και θα εκτυπώνει τους αριθμούς του κάθε ζεύγους και το Μ.Κ.Δ. των αριθμών του κάθε ζεύγους (με τη βοήθεια της συνάρτησης)
program progmkd implicit none integer i,n,m,mkd do i=1,5 print*,"assigne number to ",i,"pair of numbers" read*,n,m print*,"the values of the ",i,"pair are",n,"and",m print*,"the gcd of ",n," and",m, " is",mkd(n,m) end do end program progmkd
integer function mkd(x,y) implicit none integer x,y do while(x.ne.y) if(x>y) then x=x-y else y=y-x end if end do mkd=x return end function mkd! return for new compiler
Άσκηση Να γράψετε πρόγραμμα που θα διαβάζει τους ακέραιους αριθμούς n, m και θα υπολογίζει με τη βοήθεια της συνάρτησης το διωνυμικό συντελεστή (Binomial coefficient) n n! n m m m! n m! 0
program binom implicit none integer n,m integer factorial,binomial print*,"assigne number to n: " read*,n print*,"assigne number to m: " read*,m binomial=factorial(n)/(factorial(m)*factorial(n-m)) print*,"the result is: ",binomial end program binom
integer function factorial(n) implicit none integer n,i,fact if(n==0) then factorial=1 end if fact=1 if(n>0) then do i=1,n fact=fact*i end do end if factorial=fact return end function factorial! n παιρνει τιμές n, m, n-m
Άσκηση Να γράψετε πρόγραμμα που θα διαβάζει τους ακέραιους αριθμούς n,m και θα υπολογίζει με τη βοήθεια δύο συναρτήσεων το n n! n m m m! n m! 0
program binom2fun implicit none integer n,m,binomial print*,"assigne number to n: " read*,n print*,"assigne number to m: " read*,m print*,"the result is: " print*,binomial(n,m) end program binom2fun
! integer function binomial(n,m) implicit none integer n,m,factorial binomial=factorial(n)/(factorial(m)*factorial(n-m)) return end function binomial!
integer function factorial(n) implicit none integer n,i,fact if(n==0) then factorial=1 end if fact=1 if(n>0) then do i=1,n fact=fact*i end do end if factorial=fact return end function factorial
Recursivity function of factorial Recursivity είναι η ιδιότητα που έχει η συνάρτηση να καλεί τον εαυτό της Άσκηση Να γράψετε πρόγραμμα που θα διαβάζει τους ακέραιους αριθμούς n,m και θα υπολογίζει με τη βοήθεια δύο συναρτήσεων το n n! n m m m! n m! 0
program binom2recfun implicit none integer n,m,binomial print*,"assigne number to n: " read*,n print*,"assigne number to m: " read*,m print*,"the result is: ",binomial(n,m) end program binom2recfun
! integer function binomial(n,m) implicit none integer n,m,factorial binomial=factorial(n)/(factorial(m)*factorial(n-m)) return end function binomial!
recursive integer function factorial(n) result(fact) implicit none integer n,fact if(n==0) then fact=1 end if if(n>0) then fact=n*factorial(n-1)! recursivity n!=n*(n-1)! end if return end function factorial
Άσκηση Να γράψετε πρόγραμμα που θα υπολογίζει με την βοήθεια συναρτήσεων τον n-οστό όρο της αναδρομικής ακολουθίας x n =ax n-1 +bx n-2, n>2. Οι σταθερές a, b και οι δύο πρώτοι όροι x 1, x 2 θα καθορίζονται από το χρήστη. ( a,b,x1,x2 είναι ακέραιοί αριθμοί )
program recurfun implicit none integer a,b,x1,x2,xn,n,rec print*,"assign value to a:" read*,a print*,"assign value to b:" read*,b print*,"assign value to the first term x1:" read*,x1 print*,"assign value to the second term x2:" read*,x2 print*,"assign value to n:" read*,n
do while(n<=0) print*,"n must be greater than 0" print*,"assign value to n:" read*,n end do xn=rec(a,b,x1,x2,n) print*,"the ",n, " term of the sequence is: ",xn end program recurfun!
recursive integer function rec(a,b,x1,x2,n) result(xn) implicit none integer a,b,x1,x2,n,xn if(n==1) then xn=x1 else if(n==2) then xn=x2 else xn=a*rec(a,b,x1,x2,n-1)+b*rec(a,b,x1,x2,n-2) end if return end function rec