Συναρτήσεις - Διαδικασίες Ν. Π. Καραμπετάκης Τμήμα Μαθηματικών, Α.Π.Θ.

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Προγραμματισμός PASCAL
Advertisements

Κεφάλαιο Τμηματικός προγραμματισμός
7.3.8 Μεταφραστές Ελληνογαλλική Σχολή Καλαμαρί - Τίκβα Χριστίνα.
ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ ΥΠΟΡΟΥΤΙΝΕΣ
ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ ΤΜΗΜΑΤΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ
Εισαγωγή στους Η/Υ Πίνακες.
ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ Διάλεξη 2: Πίνακες και δυναμικά δεδομένα στη FORTRAN 90 Εαρινό εξάμηνο 2009 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ.
ΣΤΟΙΧΕΙΑ ΨΕΥΔΟΚΩΔΙΚΑ ΒΑΣΙΚΕΣ ΔΟΜΕΣ ΒΑΣΙΚΟΙ ΑΛΓΟΡΙΘΜΟΙ ΠΙΝΑΚΩΝ
Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού
Αναδρομη και static Γραψετε την συναρτηση sequence_size που διαβαζει μια απροσδιοριστου μεγεθους σειρας και υπολογιζει και τυπωνει το μεγεθος της. int.
ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ Διάλεξη 4: Δείκτες, συναρτήσεις και διαδικασίες Εαρινό εξάμηνο 2009 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ.
HY100 : ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΟΝΤΕΣ Αντώνιος Σαββίδης, Χρήστος.
MATrix LABoratory Εισαγωγή στο MatLab
Προγραμματισμός PASCAL Πληροφορική Γ' Λυκείου μέρος γ
Προγραμματισμός PASCAL Πληροφορική Γ' Λυκείου μέρος ε
ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ Διάλεξη 5: Επαναληπτικές και εξωτερικές συναρτήσεις και διαδικασίες Εαρινό εξάμηνο 2009.
ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ Διάλεξη 3: Δείκτες Εαρινό εξάμηνο 2009 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ι. Σαρρής, τηλ.
Η ΓΛΩΣΣΑ C ΜΑΘΗΜΑ 2.
Ολυμπιάδα Πληροφορικής
ΣΥΝΑΡΤΗΣΕΙΣ.
ΗΥ302 Διδακτική της Πληροφορικής Η γλώσσα προγραμματισμού LOGO Writer Ομάδα Εργασία: Αλεβίζου Βασιλική (Α.Μ.:1029) Κοφφινά Ιωάννα (Α.Μ.:1035) Τριανταφυλλίδου.
Μεταβλητές – εντολές εκχώρησης- δομή ακολουθίας
Ενότητα Α.4. Δομημένος Προγραμματισμός
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ Ι. Σαρρής, τηλ. Διάλεξη 2: Αντικείμενα.
Διαφάνειες παρουσίασης Πίνακες (συνέχεια) Αριθμητικοί υπολογισμοί Αναδρομή.
Επικοινωνία Ανθρώπου Μηχανής HTML CGI JAVASCRIPT Κουμπούλης Χρήστος Α.Μ. 921 Χαλαβαζής Βασίλης Α.Μ. 988.
ΛΟΓΙΣΜΙΚΟ ΒΕΛΤΙΣΤΟΠΟΙΗΣΗΣ MERLIN / MCL 3.0 ΠΕΡΙΒΑΛΛΟΝ ΕΛΑΧΙΣΤΟΠΟΙΗΣΗΣ.
HY100 : ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΟΝΤΕΣ Αντώνιος Σαββίδης, Χρήστος.
Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών – Τμήμα Πληροφορικής και Τηλεπικοινωνιών 1 Κεφάλαιο 4 Σημασιολογία μιας Απλής Προστακτικής Γλώσσας Προπτυχιακό.
ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου
Κεφάλαιο 10 – Υποπρογράμματα
Αλγόριθμοι - Τμήμα Πληροφορικής ΑΠΘ - 4ο εξάμηνο1 Ανάλυση Αλγορίθμων b Θέματα: Ορθότητα Χρονική αποδοτικότητα Χωρική αποδοτικότητα Βελτιστότητα b Προσεγγίσεις:
ΜΑΘ3122/106 – Γλώσσα προγραμματισμούΞενοφών Ζαμπούλης ΜΑΘ3122/106 Γλώσσα προγραμματισμού Συναρτήσεις.
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου
ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου
Διαφάνειες παρουσίασης #2
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Συναρτήσεις.
HY100 : ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΟΝΤΕΣ Αντώνιος Σαββίδης, Χρήστος.
Επιστημονικός Υπολογισμός Ι Πρώτο Εργαστήριο Εισαγωγή στο matlab 15 Οκτωβρίου 2010 Γιώργος Δρακόπουλος ΤΜΗΥΠ.
ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι 4-1 Στην ενότητα αυτή θα μελετηθεί η χρήση στοιβών στις εξής εφαρμογές: Αναδρομικές συναρτήσεις Ισοζυγισμός Παρενθέσεων.
ΗΥ-340 Γλώσσες και Μεταφραστές Φροντιστήριο Syntax Directed Translation and alpha Language.
Κατηγορίες δεδομένων Σταθερές. Αυτά που έχουν σταθερή τιμή κατά τη διάρκεια εκτέλεσης του προγράμματος. Οι σταθερές χωρίζονται σε δύο κατηγορίες : α) στις.
Οι εντολές επανάληψης Σε πολλά προβλήματα απαιτείται η επανάληψη ενός συνόλου ενεργειών προκειμένου να λυθεί το πρόβλημα. Θα αναφέρουμε δύο χαρακτηριστικά.
2η άσκηση Να γραφεί πρόγραμμα που θα ζητάει τους a,b συντελεστές και τους δύο πρώτους όρους x 1, x 2 της αναγωγικής ακολουθίας x n = ax n-1 +bx n-2 και.
Πολυδιάστατοι πίνακες α) Στατικοί πίνακες Πως δηλώνονται: π.χ. INTEGER A(3,5) REAL B(1991:2000,1:12) REAL C(4,8,12:20) ή INTEGER, DIMENSION(3,5)::A REAL,
Ο τελεστής ανάθεσης Ο τελεστής ανάθεσης (=) χρησιμοποιείται για να τοποθετήσουμε το αποτέλεσμα μιας έκφρασης (σταθερά, μεταβλητή ή παράσταση) σε μια μεταβλητή.
Υποπίνακες REAL A(10) A(1:9:2)=7 τότε θα έχουμε A(1)=A(3)=A(5)=A(7)=A(9)=7 A(3:)=7 τότε θα έχουμε A(3)=…=A(10)=7 A(:5)=7 τότε θα έχουμε A(1)=A(2)=A(3)=A(4)=A(5)=7.
Βασικά στοιχεία της Java
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Συναρτήσεις (μέρος δεύτερο) και Μεταβλητές.
2) Aν δανειστούμε ένα ποσό Α με επιτόκιο Τ=Ε% και υποχρεωθούμε να το ξεχρεώσουμε σε Ν χρόνια, τότε το ποσό της μηνιαίας δόσης Μ θα δίνεται από τον τύπο.
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Τύποι Μεταβλητών Τελεστές Βασική Είσοδος/Έξοδος.
Αναδρομικές Συναρτήσεις Σύνταξη: RECURSIVE type FUNCTION name1 (variables) RESULT (name2) IMPLICIT NONE Τμήμα δηλώσεων Εκτελέσιμες εντολές END FUNCTION.
ΚΕΦΑΛΑΙΟ Το αλφάβητο της ΓΛΩΣΣΑΣ
ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ
Γλώσσες Προγραμματισμού Μεταγλωττιστές Πίνακας Συμβόλων Πανεπιστήμιο Μακεδονίας Τμήμα Εφαρμοσμένης Πληροφορικής Ηλίας Σακελλαρίου.
Βασικές έννοιες προγραμματισμού Κεφάλαιο 7 ο. Βασικές έννοιες προγραμματισμού Αλφάβητο και τύποι δεδομένων Σταθερές και μεταβλητές Τελεστές, συναρτήσεις.
Ε ΙΣΑΓΩΓΉ Σ ΤΟΥΣ Μ ΟΝΟΔΙΑΣΤΑΤΟΥΣ Π ΊΝΑΚΕΣ Αστρινάκη Μαρία.
ΑΣΤΡΙΝΆΚΗ ΜΑΡΊΑ Δυσδιάστατοι πίνακες. Γιατί πολυδιάστατους πίνακες; Αναλόγως με τις ανάγκες του προγράμματος, μπορεί να είναι πιο εύχρηστοι Προβλήματα.
ΚΕΦΑΛΑΙΟ 2ο - ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΑΛΓΟΡΙΘΜΩΝ
Βρόχος Do … Loop Σκοπός Μαθήματος Χρήση Do… Loop για την εκτέλεση μιας ομάδας εντολών μέχρι να εκπληρωθεί μια συγκεκριμένη συνθήκη.
Αρχεσ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Η/Υ ΤΑξη Β΄
ΑΛΓΟΡΙΘΜΟΣ ΠΡΟΒΛΗΜΑ ΑΛΓΟΡΙΘΜΟΣ ΛΥΣΗ
Εφαρμογές Υπολογιστών
ΠΛΗΡΟΦΟΡΙΚΗ ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ
Ενισχυτική διδασκαλία
Γενικές Διαδικασίες.
Τεχνολογία και Προγραμματισμός Υπολογιστών
ΣΥΝΑΡΤΗΣΕΙΣ (Functions)
Η Γλώσσα Pascal Υποπρογράμματα
ΗΥ-150 Προγραμματισμός Αναδρομή (1/2).
Μεταγράφημα παρουσίασης:

Συναρτήσεις - Διαδικασίες Ν. Π. Καραμπετάκης Τμήμα Μαθηματικών, Α.Π.Θ.

Παραδείγματα όπου απαιτείται η χρήση συναρτήσεων - διαδικασιών

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

Τι είναι το υποπρόγραμμα ; Ένα τμήμα προγράμματος που επιτελεί ένα αυτόνομο έργο και έχει γραφτεί χωριστά από το υπόλοιπο πρόγραμμα. Αν έχει γραφεί μέσα στο πρόγραμμα λέγεται εσωτερικό (internal) ενώ αν έχει γραφεί εξωτερικά από το πρόγραμμα λέγεται εξωτερικό (external).

Ποιοι είναι οι κύριοι λόγοι ανάπτυξης των υποπρογραμμάτων ; Είναι ευκολότερο το γράψιμο και ο έλεγχος των προγραμμάτων αυτών, εφόσον γίνεται χώρια από το κυρίως πρόγραμμα. Η τεκμηρίωση (έλεγχος των λαθών) είναι ευκολότερη επειδή δουλεύουμε με μικρότερα προγράμματα. Τα ανεξάρτητα αυτά προγράμματα μπορούν να χρησιμοποιηθούν και από άλλα προγράμματα. Τα προγράμματα είναι πιο αναγνώσιμα λόγω αυτής της δομής. Πολλοί προγραμματιστές μπορούν να δουλέψουν σε ξεχωριστά προγράμματα ενός κυρίου προγράμματος, σχεδόν ανεξάρτητα ο ένας από τον άλλο. Ανεξάρτητα κομμάτια του προγράμματος γίνονται μικρότερα και συνεπώς απλούστερα. Ένα τέτοιο πρόγραμμα μπορεί να χρησιμοποιηθεί πολλές φορές από το ίδιο το πρόγραμμα.

Διαχωρισμός των υποπρογραμμάτων σε δύο κατηγορίες Συνάρτηση (function) : είναι ένα υποπρόγραμμα που στόχο του έχει να υπολογίζει και να επιστρέφει μόνο μια τιμή (αριθμητική, χαρακτήρα, λογική) με το όνομά της όπως οι γνωστές μαθηματικές συναρτήσεις, πρδ. SIN(X), COS(X) κ.λ.π.. Διαδικασία (subroutine) : είναι ένα υποπρόγραμμα το οποίο έχει όλα τα χαρακτηριστικά ενός προγράμματος.

Διαχωρισμός των συναρτήσεων σε κατηγορίες

Συναρτήσεις βιβλιοθήκης Οι συναρτήσεις βιβλιοθήκης είναι οι γνωστές αριθμητικές και αλφαριθμητικές συναρτήσεις που αναφέραμε στο κεφάλαιο 2, π.χ. COS, SIN, TAN, EXP, LEN, TRIM, κ.λ.π.

Συναρτήσεις εντολής «όνομα συνάρτησης»(λίστα μεταβλητών) = έκφραση PROGRAM TESTFUNCTION REAL ::X,Y,DIST DIST(X,Y)=SQRT(X**2+Y**2) READ*,X,Y PRINT*,DIST(X,Y) END PROGRAM TESTFUNCTION

Συναρτήσεις υποπρογράμματος «Τύπ. Δεδομ.» FUNCTION «όνομα συνάρτ.»([Λίστα Μεταβλητών]) [RESULT=όνομα] IMPLICIT NONE Τμήμα Δηλώσεων Τμήμα Εκτέλεσης Τμήμα Υποπρογράμματος END FUNCTION «όνομα συνάρτησης»

Συναρτήσεις υποπρογράμματος - Παράδειγμα REAL FUNCTION DIST(X,Y) IMPLICIT NONE REAL, INTENT(IN) :: X,Y DIST= SQRT(X**2+Y**2) END FUNCTION DIST Η δήλωση INTENT(IN) σημαίνει ότι η συνάρτηση δέχεται δεδομένα εκτός συνάρτησης, π.χ. από το πρόγραμμα, τα οποία και δεν πρέπει να αλλάξουν τιμή μέσα στη συνάρτηση.

Συναρτήσεις υποπρογράμματος - Παρατηρήσεις Η λίστα μεταβλητών (τυπικές παράμετροι (formal arguments)) χρησιμοποιείται για την εισαγωγή δεδομένων στη συνάρτηση, ενώ το αποτέλεσμα της συνάρτησης τοποθετείται στο όνομα της συνάρτησης, το οποίο θα πρέπει να λάβει οπωσδήποτε τιμή πριν τον ορισμό του τέλους της συνάρτησης. Το όνομα της συνάρτησης ποτέ δεν πρέπει να βρεθεί δεξιά του ίσον. Η τοποθέτηση μιας εσωτερικής συνάρτησης γίνεται πριν το τέλος του προγράμματος και μετά την εντολή CONTAINS. Η χρήση των συναρτήσεων γίνεται με τον ίδιο τρόπο χρήσης των συναρτήσεων βιβλιοθήκης. Μεγάλη προσοχή θα πρέπει να δοθεί στην ταύτιση του πλήθους, της σειράς και του τύπου δεδομένων των ορισμάτων που δέχεται η συνάρτηση.

Παράδειγμα 1 (μέσω εσωτερικής συνάρτησης) Να γραφεί συνάρτηση η οποία να υπολογίζει το N!. PROGRAM FUNCTIONS1 IMPLICIT NONE INTEGER :: N PRINT*,’N=’ READ*,N PRINT*,FACTORIAL(N) CONTAINS INTEGER FUNCTION FACTORIAL(N) IMPLICIT NONE INTEGER, INTENT(IN):: N INTEGER :: I,F FACTORIAL=1 F=1 IF (N>0) THEN DO I=1,N F=F*I END DO FACTORIAL=F END IF END FUNCTION FACTORIAL END PROGRAM FUNCTIONS1

Παράδειγμα 1 (μέσω εξωτερικής συνάρτησης και block interface) Να γραφεί συνάρτηση η οποία να υπολογίζει το N!. Αρχείο 1 : FACTORIAL.F90 INTEGER FUNCTION FACTORIAL(N) IMPLICIT NONE INTEGER, INTENT(IN):: N INTEGER :: I,F FACTORIAL=1 F=1 IF (N>0) THEN DO I=1,N F=F*I END DO FACTORIAL=F END IF END FUNCTION FACTORIAL Αρχείο 2 : MAIN.F90 PROGRAM FUNCTIONS1 IMPLICIT NONE INTERFACE INTEGER FUNCTION FACTORIAL(N) INTEGER, INTENT(IN) :: N END FUNCTION FACTORIAL END INTERFACE INTEGER :: N PRINT*,’N=’ READ*,N PRINT*,FACTORIAL(N) END PROGRAM FUNCTIONS1

Παράδειγμα 1 (μέσω δήλωσης εξωτερικής συνάρτησης) Να γραφεί συνάρτηση η οποία να υπολογίζει το N!. Αρχείο 1 : FACTORIAL.F90 INTEGER FUNCTION FACTORIAL(N) IMPLICIT NONE INTEGER, INTENT(IN):: N INTEGER :: I,F FACTORIAL=1 F=1 IF (N>0) THEN DO I=1,N F=F*I END DO FACTORIAL=F END IF END FUNCTION FACTORIAL Αρχείο 2 : MAIN.F90 PROGRAM FUNCTIONS1 IMPLICIT NONE INTEGER, EXTERNAL :: FACTORIAL (ή EXTERNAL FACTORIAL ) INTEGER :: N PRINT*,’N=’ READ*,N PRINT*,FACTORIAL(N) END PROGRAM FUNCTIONS1

Παράδειγμα 2 Να γραφεί συνάρτηση η οποία να υπολογίζει την δύναμη Μ ενός πίνακα Α, διαστάσεως Ν. PROGRAM FUNCTIONS2 IMPLICIT NONE REAL, DIMENSION(:,:), ALLOCATABLE :: A INTEGER :: I,J,N,M PRINT*,’DIMENSION OF THE MATRIX=’ READ*,N ALLOCATE ( A(N,N) ) READ*, ((A(i,j),J=1,N),I=1,N) PRINT*,’POWER INDEX =’ READ*,M PRINT*, MATRIXPOWER(A,N,M)

Παράδειγμα 2 - συνέχεια CONTAINS FUNCTION MATRIXPOWER(A,N,M) IMPLICIT NONE INTEGER, INTENT(IN):: N,M REAL, DIMENSION(N,N), INTENT(IN) :: A REAL, DIMENSION(N,N):: P,MATRIXPOWER INTEGER:: I DO I=1,N P(I,I)=1 END DO DO I=1,M P=MATMUL(A,P) END DO MATRIXPOWER=P END FUNCTION MATRIXPOWER END PROGRAM FUNCTIONS2

Παράδειγμα 2 – ή διαφορετικά CONTAINS FUNCTION MATRIXPOWER(A,Μ) IMPLICIT NONE INTEGER, INTENT(IN) :: M REAL, DIMENSION(:,:), INTENT(IN) :: A REAL, DIMENSION(SIZE(A,1),SIZE(A,2)) :: P,MATRIXPOWER INTEGER:: I DO I=1,SIZE(A,1) P(I,I)=1 END DO DO I=1,M P=MATMUL(A,P) END DO MATRIXPOWER=P END FUNCTION MATRIXPOWER END PROGRAM FUNCTIONS2

Άσκηση Να γραφεί συνάρτηση υποπρογράμματος η οποία θα υπολογίζει το αν n>m.

Αναδρομικές συναρτήσεις RECURSIVE Τύπος Δεδομ. «όνομ. συν. 1»([μεταβλητές]) RESULT («όνομ. συν. 2»)

Παράδειγμα 1 Να υπολογιστεί το παραγοντικό ενός ακεραίου αριθμού Ν, με την βοήθεια αναδρομικής συνάρτησης, γνωρίζοντας ότι

Πρόγραμμα PROGRAM RECFUNCTIONS1 IMPLICIT NONE PRINT*,FACTORIAL(4) CONTAINS RECURSIVE INTEGER FUNCTION FACTORIAL(N) RESULT(FACT) IMPLICIT NONE INTEGER, INTENT(IN) :: N IF (N==0) THEN FACT=1 ELSE FACT=N*FACTORIAL(N  1) END IF END FUNCTION FACTORIAL END PROGRAM RECFUNCTIONS1

Τρόπος ανάκλησης

Παράδειγμα 2 Να γραφεί αναδρομική συνάρτηση υποπρογράμματος που να υπολογίζει την M-οστή δύναμη ενός πίνακα Α εκτάσεως /Ν,Ν/, χρησιμοποιώντας τον αναδρομικό τύπο :

Πρόγραμμα PROGRAM RECFUNCTIONS3 IMPLICIT NONE REAL, DIMENSION(:,:), ALLOCATABLE :: A INTEGER :: I,J,N,M PRINT*,'DIMENSION OF THE MATRIX=' READ*,N ALLOCATE ( A(N,N) ) PRINT*,'ENTER MATRIX' READ*,((A(I,J),J=1,N),I=1,N) PRINT*,'POWER INDEX=' READ*,M PRINT*,MATRIXPOWER(A,N,M)

Πρόγραμμα..συνέχεια CONTAINS RECURSIVE FUNCTION MATRIXPOWER(A,N,M) RESULT(MATPOWER) IMPLICIT NONE INTEGER, INTENT(IN) :: N,M INTEGER :: I REAL, DIMENSION(N,N), INTENT(IN) :: A REAL, DIMENSION(N,N) :: MATPOWER IF (M<0) THEN PRINT*,'ERROR' ELSE IF (M==0) THEN DO I=1,N MATPOWER(I,I)=1 END DO ELSE MATPOWER=MATMUL(MATRIXPOWER(A,N,M  1),A) END IF END FUNCTION MATRIXPOWER END PROGRAM RECFUNCTIONS3

Άσκηση Να γραφεί αναδρομική συνάρτηση που θα υπολογίζει το Ν-οστό όρο της ακολουθίας Fibonacci :

Διαχωρισμός των διαδικασιών σε κατηγορίες

Διαδικασία - Σύνταξη SUBROUTINE «όνομα υπορουτίνας»[(λίστα μεταβλητών)] IMPLICIT NONE Τμήμα Δηλώσεων Τμήμα Εκτέλεσης Τμήμα Υποπρογραμμάτων END SUBROUTINE «όνομα υπορουτίνας»

Διαχωρισμός των τυπικών παραμέτρων INTENT(IN) : δήλωση τυπικών παραμέτρων οι οποίες εισάγουν δεδομένα από το κυρίως πρόγραμμα, χωρίς να αλλάζει η τιμή τους μέσα στη διαδικασία. INTENT(OUT) : δήλωση τυπικών παραμέτρων οι οποίες εξάγουν αποτελέσματα που υπολογίστηκαν μέσα στη διαδικασία. INTENT(INOUT) : δήλωση τυπικών παραμέτρων οι οποίες εισάγουν δεδομένα από το κυρίως πρόγραμμα, αλλά και επιστρέφουν αποτελέσματα μέσω της διαδικασίας (και συνεπώς αλλάζει η τιμή τους μέσα στη διαδικασία).

Πως καλείται η διαδικασία από το κυρίως πρόγραμμα ; CALL «όνομα υπορουτίνας»[(λίστα σταθερών, μεταβλητών ή εκφράσεων)]

Παράδειγμα 1 Να γραφεί διαδικασία με το όνομα SWAP, που να μεταθέτει τις τιμές δύο πραγματικών αριθμών Α, Β. PROGRAM SUBROUTINES1 IMPLICIT NONE REAL:: A,B READ*,A,B CALL SWAPREAL(A,B) PRINT*,A,B CONTAINS SUBROUTINE SWAPREAL(X,Y) IMPLICIT NONE REAL, INTENT(INOUT) :: X,Y REAL:: S S=X X=Y Y=S END SUBROUTINE SWAPREAL END PROGRAM SUBROUTINES1

Σειρά εκτέλεσης εντολών

Μια άλλη λύση μέσω εξωτερικής διαδικασίας – Αρχείο με εξωτερικές διαδικασίες SUBROUTINE SWAPREAL(X,Y) IMPLICIT NONE REAL, INTENT(INOUT) :: X,Y REAL:: S S=X X=Y Y=S END SUBROUTINE SWAPREAL SUBROUTINE SWAPINT(X,Y) IMPLICIT NONE INTEGER, INTENT(INOUT) :: X,Y INTEGER:: S S=X X=Y Y=S END SUBROUTINE SWAPINT

Μια άλλη λύση μέσω εξωτερικής διαδικασίας – Αρχείο με το κυρίως πρόγραμμα PROGRAM SUBROUTINES1 IMPLICIT NONE INTERFACE SWAP SUBROUTINE SWAPREAL(X,Y) REAL, INTENT(INOUT) :: X,Y END SUBROUTINE SWAPREAL SUBROUTINE SWAPINT(X,Y) INTEGER, INTENT(INOUT) :: X,Y END SUBROUTINE SWAPINT END INTERFACE SWAP REAL:: A,B INTEGER:: M,N READ*,A,B ; CALL SWAP(A,B) ; PRINT*,A,B READ*,M,N ; CALL SWAP(M,N) ;PRINT*,M,N END PROGRAM SUBROUTINES1

Παράδειγμα 2 Να γραφούν δύο διαδικασίες, μια που θα διαβάζει και μια που θα εκτυπώνει έναν πραγματικό πίνακα έκτασης /Ν,Μ/.

Πρόγραμμα PROGRAM SUBROUTINES2 IMPLICIT NONE REAL, DIMENSION(:,:), ALLOCATABLE :: X INTEGER :: K,L PRINT*,’DIMENSIONS =’ READ*,K,L ALLOCATE ( X(K,L) ) CALL READMATRIX(X,K,L) CALL PRINTMATRIX(X,K,L) CONTAINS SUBROUTINE READMATRIX(A,N,M) IMPLICIT NONE INTEGER, INTENT(IN) :: N,M REAL, DIMENSION(N,M), INTENT(INOUT) :: A INTEGER :: I,J DO I=1,N READ*,(A(I,J),J=1,M) END DO END SUBROUTINE READMATRIX

Πρόγραμμα - συνέχεια SUBROUTINE PRINTMATRIX(A,N,M) IMPLICIT NONE INTEGER, INTENT(IN) :: N,M REAL, DIMENSION(N,M), INTENT(IN) :: A INTEGER :: I,J DO I=1,N PRINT*,(A(I,J),J=1,M) END DO END SUBROUTINE PRINTMATRIX END PROGRAM SUBROUTINES2

Άσκηση Να γραφεί εξωτερική διαδικασία που θα δέχεται ως είσοδο δύο πίνακες Χ, Υ τάξης 1 και έκτασης Ν, και θα υπολογίζει τους συντελεστές Α,Β της ευθείας γραμμικής παλινδρόμησης (y=Ax+B) από τον τύπο :

Αναδρομική διαδικασία Να γραφεί αναδρομική διαδικασία υπολογισμού του Ν!. PROGRAM RECSUBS IMPLICIT NONE INTEGER :: N,F READ*,N ; CALL FACTORIAL(N,F) ;PRINT*,F CONTAINS RECURSIVE SUBROUTINE FACTORIAL(N,P) IMPLICIT NONE INTEGER, INTENT(IN):: N INTEGER, INTENT(INOUT):: P IF (N==0) THEN P=1 ELSE !Υπολογισμός του (Ν-1)! και καταχώρηση του στο P CALL FACTORIAL(N-1,P) P=P*N END IF END SUBROUTINE FACTORIAL END PROGRAM RECSUBS

Τι είναι τα modules ; Τα modules έχουν δομή σχεδόν ίδια με του προγράμματος. Αποτελούν μια συλλογή από δηλώσεις σταθερών ή/και μεταβλητών, interface μπλόκ, συναρτήσεις και διαδικασίες, τα οποία είναι απαραίτητα σε ένα πρόγραμμα ή σε ένα υποπρόγραμμα, module κ.λ.π.. Δεν περιέχουν όμως εκτελέσιμες εντολές (παρά μόνο εντός υποπρογραμμάτων) και γι’ αυτό το λόγο δεν μπορούν να υπάρχουν από μόνα τους, αλλά πρέπει να χρησιμοποιούνται από άλλα modules και από το κυρίως πρόγραμμα. MODULE «όνομα module» IMPLICIT NONE [Τμήμα δηλώσεων] CONTAINS [Τμήμα συναρτήσεων-διαδικασιών] END MODULE Σύνταξη

Παράδειγμα MODULE EXAMPLE IMPLICIT NONE !ΔΗΛΩΣΕΙΣ ΣΤΑΘΕΡΩΝ, ΜΕΤΑΒΛΗΤΩΝ REAL, PARAMETER :: PI=3.14 REAL, PARAMETER:: G=9.8 TYPE STUDENTS CHARACTER, (LEN=20):: SURNAME CHARACTER, (LEN=10):: NAME INTEGER:: GRADE END TYPE STUDENTS STUDENTS:: STUDENT CONTAINS !ΔΗΛΩΣΕΙΣ ΣΥΝΑΡΤΗΣΕΩΝ, ΔΙΑΔΙΚΑΣΙΩΝ REAL FUNCTION SUM(X,Y) IMPLICIT NONE REAL, INTENT(IN):: X,Y SUM=X+Y END FUNCTION SUM END MODULE EXAMPLE

Με ποιο τρόπο καλούμε το module από το κυρίως πρόγραμμα ; USE «όνομα module» ή USE «όνομα module», ONLY : όνομα1, όνομα2, …, όνομα Ν Παράδειγμα. PROGRAM MAIN USE EXAMPLE, ONLY : PI, G IMPLICIT NONE ….. END PROGRAM MAIN

Παράδειγμα Να γραφεί module που να περιέχει συναρτήσεις για την πρόσθεση δυαδικών μεταβλητών, πρδ

Το Module MODULE BOOLEAN_OPERATIONS IMPLICIT NONE CONTAINS INTEGER FUNCTION BOOL_ADD(X,Y) IMPLICIT NONE INTEGER, INTENT(IN) :: X,Y IF ((X==0).AND.(Y==0)) THEN BOOL_ADD=0 ELSE BOOL_ADD=1 END IF END FUNCTION BOOL_ADD END MODULE BOOLEAN_OPERATIONS

Το πρόγραμμα που καλεί το module PROGRAM OPERATIONS USE BOOLEAN_OPERATIONS IMPLICIT NONE INTEGER:: A,B PRINT*,"A,B=" READ*,A,B PRINT*,"A+B=",BOOL_ADD(A,B) END PROGRAM OPERATIONS

Υπέρβαση τελεστών στο προηγούμενο παράδειγμα MODULE BOOLEAN_OPERATIONS IMPLICIT NONE INTERFACE OPERATOR(.ADD.) MODULE PROCEDURE BOOL_ADD END INTERFACE CONTAINS INTEGER FUNCTION BOOL_ADD(X,Y) …………………… END FUNCTION BOOL_ADD END MODULE BOOLEAN_OPERATIONS

Το πρόγραμμα που καλεί τον νέο τελεστή PROGRAM OPERATIONS USE BOOLEAN_OPERATIONS …………….. PRINT*,"A+B=",A.ADD.B PRINT*,"A*B=",A.MUL.B END PROGRAM OPERATIONS

Συναρτήσεις – Διαδικασίες της αριθμητικής IMSL βιβλιοθήκης της Compaq Visual Fortran α) MATH/LIBRARY : διαθέτει συναρτήσεις χρήσιμες σε περιοχές των εφαρμοσμένων μαθηματικών, όπως γραμμικά συστήματα, ανάλυση ιδιοσυστημάτων, προσέγγιση και παρεμβολή, ολοκλήρωση και διαφόριση, διαφορικές εξισώσεις, μετασχηματισμοί, μη γραμμικές εξισώσεις, βελτιστοποίηση, πράξεις πινάκων, καθώς και άλλες εφαρμογές β) STAT/LIBRARY : διαθέτει στατιστικές συναρτήσεις που αφορούν βασικά στατιστικά στοιχεία, ανάλυση συσχέτισης, μη παραμετρική στατιστική, συναρτήσεις πιθανότητας, κ.λ.π.

Παράδειγμα με συναρτήσεις της MATH/IMSL βιβλιοθήκης της Compaq Visual Fortran PROGRAM LIBRARY USE NUMERICAL_LIBRARIES IMPLICIT NONE REAL, DIMENSION(:,:), ALLOCATABLE :: A, AINV INTEGER :: I,J INTEGER:: N PRINT*,'DIMENSION OF THE SQUARE MATRIX =' READ*,N ALLOCATE ( A(N,N), AINV(N,N) ) READ*, ((A(I,J),J=1,N),I=1,N) CALL LINRG(N,A,N,AINV,N) ! Υπολογίζει τον αντίστροφο AINV του A CALL WRRRN('AINV',N,N,AINV,N,0) ! Εκτυπώνει τον AINV END PROGRAM LIBRARY

Σύνταξη της LINRG LINRG (N, A, LDA, AINV, LDAINV) Ορίσματα N —Διάσταση του πίνακα A. (Είσοδος) A —Πίνακας N επί N, του οποίου ζητάμε τον αντίστροφο. (Είσοδος) LDA —Η διάσταση του Α όπως αυτή ορίστηκε στο πρόγραμμα που καλεί τη διαδικασία. (Είσοδος) AINV —Ο αντίστροφος πίνακας του Α. (Έξοδος) Εάν ο Α δε χρειάζεται μπορούμε να χρησιμοποιήσουμε στην θέση του ΑINV τον Α και συνεπώς θα μοιραστούν την ίδια θέση μνήμης. LDAINV — Η διάσταση του AINV όπως ακριβώς έχει οριστεί στο πρόγραμμα που καλεί τη διαδικασία. (Είσοδος)

Σύνταξη της WRRRN WRRRN (TITLE, NRA, NCA, A, LDA, ITRING) Ορίσματα TITLE — Αλυσίδα χαρακτήρων η οποία προσδιορίζει τον τίτλο που θα εμφανισθεί πριν τον πίνακα που θα εκτυπωθεί.(Είσοδος) NRA —Πλήθος γραμμών. (Είσοδος) NCA —Πλήθος στηλών. (Είσοδος) A —Ο NRA επί NCA πίνακας που πρόκειται να εκτυπωθεί. (Είσοδος) LDA —Η διάσταση του πίνακα A όπως αυτή δηλώθηκε στο πρόγραμμα που καλεί την διαδικασία. (Είσοδος) ITRING —Επιλογή εκτύπωσης.(Είσοδος)

Επιλογή εκτύπωσης ITRING 0Ο πλήρης πίνακας εκτυπώνεται. 1Ο πίνακας πάνω από την κύρια διαγώνιο του Α εκτυπώνεται, συμπεριλαμβανομένης και της κυρίας διαγωνίου. 2Ο πίνακας πάνω από την κύρια διαγώνιο του Α εκτυπώνεται, μη συμπεριλαμβανομένης της κυρίας διαγωνίου. -1Ο πίνακας κάτω από την κύρια διαγώνιο του Α εκτυπώνεται, συμπεριλαμβανομένης και της κυρίας διαγωνίου. -2Ο πίνακας πάνω από την κύρια διαγώνιο του Α εκτυπώνεται, μη συμπεριλαμβανομένης της κυρίας διαγωνίου.

Διαδικασία μετάφρασης/εκτέλεσης προγραμμάτων με συναρτήσεις από την IMSL βιβλιοθήκη Αφού γράψουμε το πρόγραμμά μας, στη συνέχεια κάνουμε τη μετάφραση του προγράμματος. Πριν τη δημιουργία όμως του εκτελέσιμου προγράμματος, κατά την διάρκεια της σύνδεσης, θα πρέπει να συνδέσουμε την βιβλιοθήκη SMATHS.LIB στο αντικείμενο πρόγραμμα μας, αν και αυτό συνήθως γίνεται αυτόματα. Θα πρέπει λοιπόν να πάμε στην επιλογή PROJECTS-SETTINGS- LINK και να δηλώσουμε επιπλέον στο Object/library modules την βιβλιοθήκη SMATHS.LIB, πρδ. KERNEL32.LIB ; SMATHS.LIB, η οποία περιέχει τις παραπάνω συναρτήσεις (αντίστοιχα την STATS.LIB για στατιστικές συναρτήσεις) που χρησιμοποιήσαμε. (Για περισσότερες πληροφορίες δες εγχειρίδιο χρήσης της Compaq Visual Fortran).

Άσκηση Να γραφεί πρόγραμμα το οποίο θα υπολογίζει τις ιδιοτιμές και τα ιδιοανύσματα του πίνακα