Συναρτήσεις και Υπορουτίνες

Σχετικά έγγραφα
Fortran και Αντικειμενοστραφής προγραμματισμός.

Υπο-προγράμματα στη Fortran

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ. Δρ. Ιωάννης Λυχναρόπουλος Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας

FORTRAN και Αντικειμενοστραφής Προγραμματισμός

Ανάπτυξη και Σχεδίαση Λογισμικού

ΥΠΟΛΟΓΙΣΤΕΣ Ι. Τι είναι μια υπορουτίνα; με υπορουτίνα ΥΠΟΡΟΥΤΙΝΕΣ. Παράδειγμα #1: η πράξη SQ. Ποια η διαφορά συναρτήσεων και υπορουτίνων;

Η γλώσσα προγραμματισμού Strange

Κεφάλαιο 7: Υποπρογράμματα. Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών

Μορφοποίηση της εξόδου

Κεφάλαιο 7: Υπορουτίνες

TO ΥΠΟΠΡΟΓΡΑΜΜΑ ΣΥΝΑΡΤΗΣΗ

Pascal. 15 Νοεμβρίου 2011

Υπολογιστές Ι. Άδειες Χρήσης. Υποπρογράμματα. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Συναρτήσεις. Υποπρόγραμμα

Τμήμα Φυσικής Πανεπιστημίου Κύπρου Εαρινό Εξάμηνο 2015/2016. ΦΥΣ145 Υπολογιστικές Μέθοδοι στην Φυσική

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8

Κεφάλαιο 7ο: Συναρτήσεις και Υπορουτίνες

Δομή προγράμματος στη Fortran

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2017

Κεφάλαιο 12 : ΕΡΓΑΣΤΗΡΙΑΚΗ ΔΡΑΣΤΗΡΙΟΤΗΤΑ 03 Συναρτήσεις

Η γλώσσα προγραμματισμού EEL

Δομή προγράμματος στη Fortran

Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών

Κεφάλαιο 12 : ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ

Κεφάλαιο 5ο: Εντολές Επανάληψης

Τεχνικός Εφαρμογών Πληροφορικής

Προγραμματισμός με FORTRAN Συνοπτικός Οδηγός Α. Σπυρόπουλος Α. Μπουντουβής

ΦΥΣ 145 Υπολογιστικές Μέθοδοι στη Φυσική. Πρόοδος 26 Μαρτίου 2007 Ομάδα 1 η

Pascal. 26 Οκτωβρίου 2011

ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ. Κάθε υποπρόγραμμα έχει μόνο μία είσοδο και μία έξοδο. Κάθε υποπρόγραμμα πρέπει να είναι ανεξάρτητο από τα άλλα.

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2017

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Εισαγωγή στην FORTRAN. Δρ. Ιωάννης Λυχναρόπουλος

Αναδρομικός αλγόριθμος

Μέρος 2 Κατασκευή Συντακτικού Αναλυτή

Fortran και Αντικειμενοστραφής προγραμματισμός.

IMPLICIT NONE INTEGER :: a, b, c

Εντολή Δεδομένα Περιεχόμενα μετά την εκτέλεση 1 read(x) 122 x= 2 read(a,b,c) a= b= c= 3 read(d,e)

Fortran και Αντικειμενοστραφής προγραμματισμός.

Άσκηση 1. Α. Υπολογίστε χωρίς να εκτελέσετε κώδικα FORTRAN τα παρακάτω: Ποιά είναι η τελική τιμή του Z στα παρακάτω κομμάτια κώδικα FORTRAN:

Δομημένος Προγραμματισμός

Πίνακες. FORTRAN και Αντικειμενοστραφής Προγραμματισμός

ΥΠΟΛΟΓΙΣΤΕΣ Ι. Τι είναι μια συνάρτηση; ΣΥΝΑΡΤΗΣΕΙΣ. Δήλωση συνάρτησης sq. Παράδειγμα συνάρτησης: υπολογισμός τετραγώνου

Η βασική συνάρτηση προγράμματος main()

Σε γενικές γραμμές, είναι καλή πρακτική να γράϕουμε προγράμματα C που αποτελούνται από πολλές και μικρές συναρτήσεις, παρά από λίγες και μεγάλες.

ΣΥΝΑΡΤΗΣΕΙΣ Παραδείγματα χρήσης συναρτήσεων

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

Ηβασικήσυνάρτηση προγράμματος main()

Εισαγωγή στον Προγραµµατισµό. Πανεπιστήµιο Θεσσαλίας Τµήµα Ηλεκτρολόγων Μηχανικών και Μηχανικών Η/Υ

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού

Oι εντολές COMMON και PARAMETER

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

ΚΕΦΑΛΑΙΟ 10 ΕΝΤΟΛΕΣ ΕΠΙΛΟΓΗΣ (ή εντολές Ελέγχου και Επιλογής ή εντολές Επιλογής και Απόφασης)

8 FORTRAN 77/90/95/2003

Αντίρριο, 14/03/2017 Προδιαγραφές Εργαστηριακής Εργασίας για το μάθημα «Μεταγλωττιστές»

Υπολογιστές Ι. Άδειες Χρήσης. Συναρτήσεις. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Προγραμματισμός ΙI (Θ)

ΑΠΑΝΤΗΣΕΙΣ ΘΕΜΑ Α A1. 2-Λάθος 3-Λάθος 4-Σωστό 5-Λάθος A2. integer. real. Boolean. char. string A3.

Εισαγωγή στις Συναρτήσεις

Κεφάλαιο 6: Συναρτήσεις IΙΙ Αρθρωτός Προγραμματισμός. (Διάλεξη 14) Παράδειγμα: Αλλαγή τιμής μεταβλητής μόνο τοπικά

Διαφάνειες παρουσιάσεων Αρχικές Διαφάνειες σε Pascal: Σ.Ζάχος, Ν.Παπασπύρου Προσαρμογή σε Fortran: Α.Παγουρτζής, Δ.Σούλιου

Εισαγωγή στον Προγραμματισμό

Προγραμματισμός Η/Υ (ΤΛ2007 )

ιαφάνειες παρουσίασης #4

ΣΥΝΑΡΤΗΣΕΙΣ (Functions)

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Προγραμματισμός Η/Υ

Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Δομή Επιλογής. Ιωάννης Λυχναρόπουλος Μαθηματικός, MSc, PhD

Προγραμματισμός H/Y Ενότητα 5: Συναρτήσεις. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

ΕΠΛ 231 Δομές Δεδομένων και Αλγόριθμοι 4-1

7. ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΣΥΝΑΡΤΗΣΕΙΣ

Προγραμματισμός Ι (ΗΥ120)

Ergasthriak 'Askhsh 5

ΕΙ ΑΓΩΓΉ ΣΗΝ FORTRAN

Εισαγωγή στους Η/Υ. Γιώργος Δημητρίου. Μάθημα 3-4: Προγραμματισμός MIPS. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

Ενότητα 3: «Εισαγωγή στην Αλγοριθμική και στον Προγραμματισμό: loops, subroutines, tables»

Ανάπτυξη και Σχεδίαση Λογισμικού

Στη C++ υπάρχουν τρεις τύποι βρόχων: (a) while, (b) do while, και (c) for. Ακολουθεί η σύνταξη για κάθε μια:

Συναρτήσεις και Πίνακες

ΠΛΗΡΟΦΟΡΙΚΗ Ι (MATLAB) Ενότητα 4

Σημειωματάριο Δευτέρας 30 Οκτ. 2017

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Τι είναι υποπρόγραμμα; Τμήμα προγράμματος το οποίο επιτελεί ένα αυτόνομο υπολογιστικό έργο (γράφεται χωριστά από το υπόλοιπο πρόγραμμα)

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Δομή του προγράμματος

Εισαγωγή στον Προγραμματισμό Η/Υ για Χημικούς Μηχανικούς

Εισαγωγή στον Προγραμματισμό H/Y (Fortran 90/95/2003)

ΕΙΣΑΓΩΓΗ ΣΤΗΝ FORTRAN 77

Προγραμματισμός Αναδρομή

Αριθμητικές Μέθοδοι σε Προγραμματιστικό Περιβάλλον (Εργαστήριο 2)

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

Συνάρτηση Διαδικασία

Προγραμματισμός PASCAL

Εισαγωγή στο Προγραμματισμό για Μηχανολόγους Οδηγός Προετοιμασίας για τη Τελική Εξέταση

ΕΚΦΩΝΗΣΕΙΣ ΘΕΜΑ Α. β. Οι πληροφορίες είναι δεδομένα τα οποία δεν έχουν υποστεί επεξεργασία.

Παραγωγή Ενδιάµεσου Κώδικα. Γιώργος Μανής

Δομημένος Προγραμματισμός

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

Εισαγωγή στον Προγραμματισμό με C++

Πίνακες. (i) FORTRAN και Αντικειµενοστραφής Προγραµµατισµός

Transcript:

Συναρτήσεις και Υπορουτίνες (i) Ομάδες εντολών που εκτελούν μια συγκεκριμένη εργασία (μια σειρά υπολογισμών) ή που επαναλαμβάνονται συχνά και αποτελούν ανεξάρτητες προγραμματιστικές οντότητες μπορούν να μετακινηθούν έξω από το κυρίως σώμα του προγράμματος σε υποπρογράμματα. Έτσι απλοποιείται το κυρίως πρόγραμμα και τα υποπρογράμματα μπορούν να διορθωθούν ή τροποποιηθούν πιο εύκολα. 2 Κατηγορίες υποπρογραμμάτων: Υπορουτίνες και Συναρτήσεις Οι Συναρτήσεις δηλώνονται με την εντολή Function και οι Υπορουτίνες με την εντολή Subroutine Η βασική διαφορά τους είναι πως οι συναρτήσεις επιστρέφουν μια απλή τιμή στο πρόγραμμα που τις καλεί ενώ οι υπορουτίνες επιστρέφουν πολλαπλές τιμές διαφόρων τύπων. Η δομή ενός προγράμματος με υποπρογράμματα έχει ως εξής: Κύριο Πρόγραμμα Εσωτερικά Υποπρογράμματα Τέλος κύριου Προγράμματος 1

Συναρτήσεις και Υπορουτίνες (ii) Έχουμε ένα κυρίως πρόγραμμα που καλεί εσωτερικά τα υποπρογράμματά του (συναρτήσεις και υπορουτίνες). Τα εσωτερικά προγράμματα μπορούν να χρησιμοποιηθούν μόνο από το κυρίως πρόγραμμα που τα περιλαμβάνει. Τα υποπρογράμματα δεν μπορούν να περιλαμβάνουν άλλα προγράμματα αλλά μπορούν να καλούν το ένα το άλλο αν βρίσκονται εντός του ιδίου κυρίως προγράμματος. Υπάρχουν και τα εξωτερικά υποπρογράμματα που ουσιαστικά είναι ανεξάρτητα προγράμματα αποθηκευμένα σε διαφορετικά αρχεία και μπορούν να χρησιμοποιηθούν από οποιοδήποτε άλλο πρόγραμμα και μπορεί να περιέχουν εσωτερικά υποπρογράμματα αλλά και να καλούν άλλα εξωτερικά. Στη fortran μπορούμε να συμπεριλάβουμε, σε οποιοδήποτε σημείο του κώδικα του κυρίως προγράμματος ή του υποπρογράμματος, κώδικα που είναι γραμμένος σε άλλο αρχείο χρησιμοποιώντας την εντολή INCLUDE όνομα αρχείου. Το νέο αρχείο μπορεί επίσης να έχει εντολές INCLUDE 2

Συναρτήσεις (i) Επιστρεφόμενος τύπος FUNCTION όνομα (όρισμα Α, όρισμα Β, ) τύπος ορίσματος Α :: όρισμα Α τύπος ορίσματος Β :: όρισμα Β... τύπος :: τοπική μεταβλητή... κώδικας... FUNCTION όνομα συνάρτησης Παράδειγμα: REAL FUNCTION emvado_trigwnou(a,b,c) REAL :: a,b,c,temp temp=(a+b+c)/2.0 emvado_trigwnou=sqrt (temp*(temp-a)*(temp-b)*(temp-c)) 3

Συναρτήσεις (ii) Ο επιστρεφόμενος τύπος μπορεί να είναι μια δήλωση τύπου όπως real, integer, κ.λπ. ή μία από τις εντολές recursive, pure, elemental. Το όνομα της συνάρτησης θα πρέπει να δηλωθεί και στο κυρίως πρόγραμμα στις δηλώσεις μεταβλητών και ο τύπος να είναι ο ίδιος. Το όνομα είναι υποχρεωτικό και με αυτό καλείται η συνάρτηση. Ακολουθεί τους κανόνες ονοματολογίας Ορίσματα είναι η λίστα των παραμέτρων με τις οποίες καλείται η συνάρτηση και τα οποία θα πρέπει να δηλωθούν σαν μεταβλητές αντίστοιχου τύπου. Αν δεν υπάρχουν ορίσματα βάζουμε απλά τις παρανθέσεις. Ορίζονται οι τοπικές μεταβλητές της συνάρτησης Προαιρετικά μπορεί να υπάρχει η εντολή RESULT (αποτέλεσμα). Στην παρένθεση υπάρχει το όνομα της μεταβλητής που επιστρέφει η συνάρτηση. Αν δεν υπάρχει αυτή η εντολή το όνομα της συνάρτησης είναι αυτή η μεταβλητή. Αν υπάρχει εντολή RETURN διακόπτεται η εκτέλεση της συνάρτησης και συνεχίζεται η εκτέλεση του κυρίως προγράμματος. 4

Συναρτήσεις (iii) PROGRAM ypologismos_emvadou REAL::x,y,z,emv,emvado_trigwnou READ(*,*) x,y,z emv=emvado_trigwnou(x,y,z) WRITE(*,*) emv REAL FUNCTION emvado_trigwnou(a,b,c) REAL :: a,b,c,temp temp=(a+b+c)/2.0 emvado_trigwnou=sqrt (temp*(temp-a)*(temp-b)*(temp-c)) 5

Συναρτήσεις PROGRAM ypologismos_paragontikou_1 INTEGER:: x, paragontiko READ(*,*) x WRITE(*,*) "To paragontiko einai", paragontiko(x) INTEGER FUNCTION paragontiko(a) INTEGER :: a,i,p=1 DO i=1,a p=p*i DO paragontiko=p (iv) 6

Συναρτήσεις (v) 2 ος τρόπος δήλωσης με την εντολή CONTAINS PROGRAM όνομα προγράμματος Δηλώσεις μεταβλητών Κλήση συναρτήσεων με ορίσματα CONTAINS FUNCTION όνομα 1 ης συνάρτησης(όρισμα Α, όρισμα Β, ) Δηλώσεις μεταβλητών καθώς και του τύπου επιστροφής της συνάρτησης Υπολογισμός τιμής της συνάρτησης FUNCTION FUNCTION όνομα 2 ης συνάρτησης(όρισμα Α, όρισμα Β, ) Δηλώσεις μεταβλητών καθώς και του τύπου επιστροφής της συνάρτησης Υπολογισμός τιμής της συνάρτησης FUNCTION PROGRAM 7

Συναρτήσεις (vi) 2 ος τρόπος δήλωσης με την εντολή CONTAINS PROGRAM Synarthseis INTEGER:: x=12,y=10 WRITE(*,*) athroisma(x,y); WRITE(*,*) diafora(x,y) CONTAINS FUNCTION athroisma(a,b) INTEGER:: athroisma, a,b athroisma=a+b FUNCTION athroisma FUNCTION diafora(c,d) INTEGER:: diafora,c,d diafora=c-d FUNCTION diafora PROGRAM 8

Συναρτήσεις: πέρασμα παραμέτρων PROGRAM perasma_timi_anafora INTEGER:: x=5,y=10,k,l,syn1,syn2 WRITE(*,*) x,y k=syn1(x) l=syn2(y) WRITE(*,*) x,y INTEGER FUNCTION syn1(a) INTEGER,INTENT(in):: a a=a*10 syn1=5 FUNCTION syn1 INTEGER FUNCTION syn2(b) INTEGER,INTENT(inout):: b b=b*10 syn2=30 FUNCTION syn2! Πέρασμα κατά τιμή! Compilation error! Πέρασμα κατ αναφορά 9

Συναρτήσεις: πέρασμα παραμέτρων PROGRAM perasma_anafora_synartisi INTEGER::x,y,w,allagi READ(*,*) x,y WRITE(*,*) arxika x kai y: ", x, y w=allagi(x,y) WRITE(*,*) telika x kai y: ", x, y Πληκτρολογήστε το πρόγραμμα και δείτε ποιές είναι οι τιμές των x, y πρίν και μετά την κλήση της συνάρτησης INTEGER FUNCTION allagi(a,b) INTEGER :: a,b,temp temp=a a=b! Συμπεραίνεται: a κατ αναφορά b=temp! Συμπεραίνεται: b κατ αναφορά allagi=temp 10

Διαδικασίες PROGRAM perasma_anafora_diadikasia INTEGER::x,y READ(*,*) x,y WRITE(*,*) arxika x kai y: ", x, y CALL allagi(x,y) WRITE(*,*) telika x kai y: ", x, y SUBROUTINE allagi(a,b) INTEGER :: a,b,temp temp=a a=b b=temp Πληκτρολογήστε το πρόγραμμα και δείτε ποιές είναι οι τιμές των x, y πρίν και μετά την κλήση της συνάρτησης! Συμπεραίνεται: a κατ αναφορά! Συμπεραίνεται: b κατ αναφορά 11

Συναρτήσεις με αναδρομή PROGRAM ypologismos_paragontikou_2 INTEGER:: x, paragontiko READ(*,*) x WRITE(*,*) "To paragontiko einai", paragontiko(x) INTEGER RECURSIVE FUNCTION paragontiko(a) result (parag_result) INTEGER :: a IF (a==0) THEN parag_result=1 ELSE parag_result=a*paragontiko(a-1) IF 12

Διαδικασίες με αναδρομή PROGRAM hanoitowers INTEGER::n READ(*,*) n CALL hanoi(n,'a', b', c') RECURSIVE SUBROUTINE hanoi(n,frompeg,auxpeg,topeg) INTEGER:: n CHARACTER:: frompeg,auxpeg,topeg IF (n == 1) THEN WRITE(*,101) 1, frompeg, topeg ELSE CALL hanoi(n-1,frompeg,topeg,auxpeg) WRITE(*,101) n, frompeg,topeg CALL hanoi(n-1,auxpeg,frompeg,topeg) IF 101 FORMAT(1x,"Move disk ",i1," from peg ", A1, " to peg ", A1) 13

Διαδικασίες με αναδρομή PROGRAM hanoitowers INTEGER::n READ(*,*) n CALL hanoi(n,'a', b', c') RECURSIVE SUBROUTINE hanoi(n,frompeg,auxpeg,topeg) INTEGER:: n CHARACTER:: frompeg,auxpeg,topeg IF (n == 1) THEN WRITE(*,101) 1, frompeg, topeg ELSE CALL hanoi(n-1,frompeg,topeg,auxpeg) WRITE(*,101) n, frompeg,topeg CALL hanoi(n-1,auxpeg,frompeg,topeg) IF 101 FORMAT(1x,"Move disk ",i1," from peg ", A1, " to peg ", A1) Έξοδος στην οθόνη Move disk 1 from peg a to peg b Move disk 2 from peg a to peg c Move disk 1 from peg b to peg c Move disk 3 from peg a to peg b Move disk 1 from peg c to peg a Move disk 2 from peg c to peg b Move disk 1 from peg a to peg b Move disk 4 from peg a to peg c Move disk 1 from peg b to peg c Move disk 2 from peg b to peg a Move disk 1 from peg c to peg a Move disk 3 from peg b to peg c Move disk 1 from peg a to peg b Move disk 2 from peg a to peg c Move disk 1 from peg b to peg c 14