Αναδρομικές Συναρτήσεις Σύνταξη: RECURSIVE type FUNCTION name1 (variables) RESULT (name2) IMPLICIT NONE Τμήμα δηλώσεων Εκτελέσιμες εντολές END FUNCTION.

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
(READ – WRITE) ΚΑΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ (INTEGER,REAL,CHAR)
Advertisements

Προγραμματισμός PASCAL
Κεφάλαιο Τμηματικός προγραμματισμός
ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ ΥΠΟΡΟΥΤΙΝΕΣ
Πίνακες.
ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ ΤΜΗΜΑΤΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ
Εισαγωγή στους Η/Υ Πίνακες.
ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ Διάλεξη 2: Πίνακες και δυναμικά δεδομένα στη FORTRAN 90 Εαρινό εξάμηνο 2009 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ.
Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού
Εισαγωγή στους Ηλεκτρονικούς Υπολογιστές
Αναδρομη και static Γραψετε την συναρτηση sequence_size που διαβαζει μια απροσδιοριστου μεγεθους σειρας και υπολογιζει και τυπωνει το μεγεθος της. int.
ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ Διάλεξη 4: Δείκτες, συναρτήσεις και διαδικασίες Εαρινό εξάμηνο 2009 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ.
HY100 : ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΟΝΤΕΣ Αντώνιος Σαββίδης, Χρήστος.
Συναρτήσεις Κληση/Επιστροφη Παραμετροι
Προγραμματισμός PASCAL Πληροφορική Γ' Λυκείου μέρος γ
Παράδειγμα 5: Θερμοκρασίες
Παράδειγμα 1: Κόστος Υπολογιστών Το πρόγραμμα υπολογίζει το συνολικό κόστος παραγγελιών υπολογιστών.Το πρόγραμμα διαβάζει από το πληκτρολόγιο την ποσότητα.
Προγραμματισμός PASCAL Πληροφορική Γ' Λυκείου μέρος ε
ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ Διάλεξη 5: Επαναληπτικές και εξωτερικές συναρτήσεις και διαδικασίες Εαρινό εξάμηνο 2009.
ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ Διάλεξη 3: Δείκτες Εαρινό εξάμηνο 2009 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ι. Σαρρής, τηλ.
Γενική μορφή προγράμματος Pascal
Σχεδίαση αλγορίθμων (2ο μέρος)
ΣΥΝΑΡΤΗΣΕΙΣ.
Διαφάνειες παρουσίασης #3
Μεταβλητές – εντολές εκχώρησης- δομή ακολουθίας
Γιάννης Σταματίου Αναδρομή και αναδρομικές σχέσεις
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ Ι. Σαρρής, τηλ. Διάλεξη 2: Αντικείμενα.
Διαφάνειες παρουσίασης Πίνακες (συνέχεια) Αριθμητικοί υπολογισμοί Αναδρομή.
ΛΟΓΙΣΜΙΚΟ ΒΕΛΤΙΣΤΟΠΟΙΗΣΗΣ MERLIN / MCL 3.0 ΠΕΡΙΒΑΛΛΟΝ ΕΛΑΧΙΣΤΟΠΟΙΗΣΗΣ.
HY100 : ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΟΝΤΕΣ Αντώνιος Σαββίδης, Χρήστος.
ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου
Κεφάλαιο 10 – Υποπρογράμματα
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου
ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου
Διαφάνειες παρουσίασης #2
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Συναρτήσεις.
Διαφάνειες παρουσίασης Ορθότητα (συνέχεια) Τακτικοί τύποι και τύποι υποπεριοχής Πίνακες.
ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ (ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ - ΔΙΕΡΓΑΣΙΕΣ)
HY100 : ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΟΝΤΕΣ Αντώνιος Σαββίδης, Χρήστος.
ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι 4-1 Στην ενότητα αυτή θα μελετηθεί η χρήση στοιβών στις εξής εφαρμογές: Αναδρομικές συναρτήσεις Ισοζυγισμός Παρενθέσεων.
ΗΥ-340 Γλώσσες και Μεταφραστές Φροντιστήριο Syntax Directed Translation and alpha Language.
Γλώσσα Προγραμματισμού MicroWorlds Pro
Κατηγορίες δεδομένων Σταθερές. Αυτά που έχουν σταθερή τιμή κατά τη διάρκεια εκτέλεσης του προγράμματος. Οι σταθερές χωρίζονται σε δύο κατηγορίες : α) στις.
Οι εντολές επανάληψης Σε πολλά προβλήματα απαιτείται η επανάληψη ενός συνόλου ενεργειών προκειμένου να λυθεί το πρόβλημα. Θα αναφέρουμε δύο χαρακτηριστικά.
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.
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Συναρτήσεις (μέρος δεύτερο) και Μεταβλητές.
2) Aν δανειστούμε ένα ποσό Α με επιτόκιο Τ=Ε% και υποχρεωθούμε να το ξεχρεώσουμε σε Ν χρόνια, τότε το ποσό της μηνιαίας δόσης Μ θα δίνεται από τον τύπο.
ΚΕΦΑΛΑΙΟ Το αλφάβητο της ΓΛΩΣΣΑΣ
Προγραμματισμός & Εφαρμογές Η/Υ (Θ) Ενότητα 4: Εισαγωγή στο Προγραμματισμό με τη FORTRAN 2003 (μέρος 4 ο ) Δρ. Β.Χ. Μούσας, Αναπληρωτής Καθηγητής Τμήμα.
1 Προγραμματισμός Ι Ενότητα 6 : Υποπρογράμματα III Αλέξανδρος Τζάλλας Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου.
Γλώσσες Προγραμματισμού Μεταγλωττιστές Πίνακας Συμβόλων Πανεπιστήμιο Μακεδονίας Τμήμα Εφαρμοσμένης Πληροφορικής Ηλίας Σακελλαρίου.
Ε ΙΣΑΓΩΓΉ Σ ΤΟΥΣ Μ ΟΝΟΔΙΑΣΤΑΤΟΥΣ Π ΊΝΑΚΕΣ Αστρινάκη Μαρία.
ΑΣΤΡΙΝΆΚΗ ΜΑΡΊΑ Δυσδιάστατοι πίνακες. Γιατί πολυδιάστατους πίνακες; Αναλόγως με τις ανάγκες του προγράμματος, μπορεί να είναι πιο εύχρηστοι Προβλήματα.
Βρόχος Do … Loop Σκοπός Μαθήματος Χρήση Do… Loop για την εκτέλεση μιας ομάδας εντολών μέχρι να εκπληρωθεί μια συγκεκριμένη συνθήκη. Αθήνα, 2015.
Βρόχος Do … Loop Σκοπός Μαθήματος Χρήση Do… Loop για την εκτέλεση μιας ομάδας εντολών μέχρι να εκπληρωθεί μια συγκεκριμένη συνθήκη.
Εφαρμογές Υπολογιστών
ενισχυτική διδασκαλία
Ενισχυτική διδασκαλία
ΠΑΡΑΜΕΤΡΟΙ ΥΠΟΠΡΟΓΡΑΜΜΑΤΩΝ Τυπικές Παράμετροι Πραγματικές Παράμετροι
Γενικές Διαδικασίες.
for (παράσταση_1; παράσταση_2; παράσταση_3)
Αρχεσ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Η/Υ ΤΑξη Β΄
ΣΥΝΑΡΤΗΣΕΙΣ (Functions)
Η Γλώσσα Pascal Υποπρογράμματα
Δομημένος Προγραμματισμός - Κεφάλαιο 4 - Ανάπτυξη αλγορίθμων
ΗΥ-150 Προγραμματισμός Αναδρομή (1/2).
Μεταγράφημα παρουσίασης:

Αναδρομικές Συναρτήσεις Σύνταξη: RECURSIVE type FUNCTION name1 (variables) RESULT (name2) IMPLICIT NONE Τμήμα δηλώσεων Εκτελέσιμες εντολές END FUNCTION name ΠΡΟΣΟΧΗ! Στο name2 τοποθετείται η τιμή που επιστρέφει η συνάρτηση και δεν εμφανίζεται ποτέ δεξιά σε μια παράσταση που βρίσκεται στις εκτελέσιμες εντολές της συνάρτησης. Εκεί μπορεί να βρίσκεται μόνο το name1.

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

PROGRAM RECFUNCTIONS1 IMPLICIT NONE INTEGER N 10 READ*, N IF (N<0) THEN PRINT*, ‘ERROR’ GOTO 10 END IF PRINT*,FACTORIAL(N) 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 Να υπολογιστεί ο μέγιστος κοινός διαιρέτης δύο ακεραίων αριθμών α,β χρησιμοποιώντας τον αναδρομικό τύπο:

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

PROGRAM RECFUNCTIONS2 IMPLICIT NONE INTEGER :: A,B PRINT*,'A,B=' READ*,A,B PRINT*,MKD(A,B)

CONTAINS RECURSIVE INTEGER FUNCTION MKD(A,B) RESULT(MKDF) IMPLICIT NONE INTEGER, INTENT(IN) :: A,B IF (A==B) THEN MKDF=A ELSE IF (A>B) THEN MKDF=MKD(A-B,B) ELSE MKDF=MKD(A,B-A) END IF END FUNCTION MKD END PROGRAM RECFUNCTIONS2

Παράδειγμα 3 Να γράψετε πρόγραμμα το οποίο με την βοήθεια αναδρομικής συνάρτησης θα υπολογίζει τον n-οστό όρο της ακολουθίας x n =2 x n-1 +3 x n-2, n>2 x 1 =4, x 2 =5.

PROGRAM RECFUNCTIONS3 IMPLICIT NONE INTEGER N 10 READ*, N IF (N<=0) THEN PRINT*, ‘ERROR’ GOTO 10 END IF PRINT*, ‘O ‘,N,’-OSTOS OROS EINAI’, & SEQUENCE(N)

CONTAINS RECURSIVE INTEGER FUNCTION SEQUENCE(N) RESULT(SEQ) IMPLICIT NONE INTEGER, INTENT(IN)::N IF (N==1) THEN SEQ=4 ELSE IF (N==2) THEN SEQ=5 ELSE SEQ=2*SEQUENCE(N-1)+3*SEQUENCE(N-2) END IF END FUNCTION SEQUENCE END PROGRAM RECFUNCTIONS3

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

Σύνταξη SUBROUTINE name[(λίστα μεταβλητών)] IMPLICIT NONE Τμήμα Δηλώσεων Τμήμα Εκτέλεσης Τμήμα Υποπρογραμμάτων END SUBROUTINE name Η διαδικασία επικοινωνεί με το κυρίως πρόγραμμα μέσo μεταβλητών, τις οποίες και ονομάζουμε τυπικές παραμέτρους (formal arguments). Οι μεταβλητές αυτές ή τυπικοί παράμετροι χωρίζονται σε τρεις κατηγορίες :

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

Σε αντίθεση με τις συναρτήσεις, το όνομα της διαδικασίας δε μπορεί να χρησιμοποιηθεί σε υπολογισμούς, παρά μόνο στο κάλεσμα της διαδικασίας. Η διαδικασία καλείται από το κυρίως πρόγραμμα μέσο της εντολής CALL CALL name [(λίστα σταθερών, μεταβλητών ή εκφράσεων)]

Παράδειγμα 1 Να γραφεί διαδικασία με το όνομα SWAP, που να μεταθέτει τις τιμές δύο πραγματικών αριθμών Α, Β. PROGRAM SUBROUTINES1 IMPLICIT NONE REAL A,B READ*,A,B CALL SWAP(A,B)

PRINT*,A,B CONTAINS SUBROUTINE SWAP(X,Y) IMPLICIT NONE REAL, INTENT(INOUT) :: X,Y REAL S S=X X=Y Y=S END SUBROUTINE SWAP END PROGRAM SUBROUTINES1

Παράδειγμα 2 Να γραφούν δύο διαδικασίες, μια που θα διαβάζει και μια που θα εκτυπώνει έναν πραγματικό ΝxΜ πίνακα. PROGRAM SUBROUTINES2 IMPLICIT NONE REAL, ALLOCATABLE :: X(:,:) INTEGER K,L PRINT*,’GIVE 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, INTENT(INOUT) :: A(N,M) INTEGER I,J READ*, ((A(I,J),J=1,M),I=1,N) END SUBROUTINE READMATRIX

SUBROUTINE PRINTMATRIX(A,N,M) IMPLICIT NONE INTEGER, INTENT(IN) :: N,M REAL, INTENT(IN) :: A(N,M) INTEGER I,J DO I=1,N DO J=1,M WRITE(*,10) A(I,J) 10 FORMAT(F7.2\) END DO PRINT* END DO END SUBROUTINE PRINTMATRIX END PROGRAM SUBROUTINES2

Αναδρομικές διαδικασίες Παράδειγμα 1 Να γραφεί αναδρομική διαδικασία για τον υπολογισμό του Ν!. PROGRAM RECSUBS1 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 CALL FACTORIAL(N-1,P) P=P*N END IF END SUBROUTINE FACTORIAL END PROGRAM RECSUBS2

Παράδειγμα 2 Να γραφεί πρόγραμμα το οποίο με την βοήθεια αναδρομικής διαδικασίας θα υπολογίζει το για n  m.

PROGRAM RECSUBS2 IMPLICIT NONE INTEGER N,Μ,F 10READ*,N,Μ IF ((N<M).OR.(N<=0).OR.(M<=0)) THEN PRINT*, ‘ERROR’ GOTO 10 ELSE CALL ΒΙFACTORIAL(N,Μ,F) END IF PRINT*,F CONTAINS

RECURSIVE SUBROUTINE FACTORIAL(N,P) IMPLICIT NONE INTEGER, INTENT(IN):: N INTEGER, INTENT(INOUT):: P IF (N==1) THEN P=1 ELSE CALL FACTORIAL(N-1,P) P=P*N END IF END SUBROUTINE FACTORIAL

SUBROUTINE BIFACTORIAL(N,M,F) IMPLICIT NONE INTEGER, INTENT(IN):: N,M INTEGER, INTENT(OUT) :: F INTEGER P1,P2,P3 CALL FACTORIAL(N,P1) CALL FACTORIAL(M,P2) CALL FACTORIAL(N-M,P3) F=P1/(P2*P3) END SUBROUTINE BIFACTORIAL END PROGRAM RECSUBS2