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



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

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

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

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

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

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

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

ΚΕΦΑΛΑΙΟ 10 ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ

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

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

8 FORTRAN 77/90/95/2003

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

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

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

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

Εισαγωγή στην Αριθμητική Ανάλυση

Εργαστήριο 9 Συναρτήσεις στη PASCAL. Η έννοια του κατακερματισμού. Συναρτήσεις. Σκοπός

Εισαγωγή στον Προγραμματισμό Python Μάθημα 4: Συναρτήσεις (functions) και δομοστοιχεία (modules) στην Python

ΦΥΣ-151. Ηλεκτρονικοί Υπολογιστές Ι (FORTRAN 77) (Άνοιξη 2004)

Σύντομες εισαγωγικές σημειώσεις για την. Matlab

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

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

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

ΥΠΟΛΟΓΙΣΤΕΣ Ι. Τύποι δεδομένων ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΠΡΑΞΕΙΣ. Παράδειγμα #1. Πράξεις μεταξύ ακεραίων αριθμών

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

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

Εισαγωγή στη Fortran. Μάθημα 1 ο. Ελευθερία Λιούκα

ΦΥΣ-151. Ηλεκτρονικοί Υπολογιστές Ι (FORTRAN 77) (Άνοιξη 2004)

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

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

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

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

ΕΙ ΑΓΩΓΉ ΣΗΝ FORTRAN

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

Εισαγωγή στη Fortran. Μάθημα 3 ο. Ελευθερία Λιούκα

ΚΕΦΑΛΑΙΟ 9 ΒΑΣΙΚΕΣ ΕΝΤΟΛΕΣ

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

Pascal, απλοί τύποι, τελεστές και εκφράσεις

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

Κεφάλαιο 2.6: Είσοδος / Έξοδος Δεδομένων, Μορφοποίηση Δεδομένων Εξόδου. (Διάλεξη 7) Είσοδος/ Έξοδος

Κεφάλαιο 2.6: Είσοδος / Έξοδος Δεδομένων, Μορφοποίηση Δεδομένων Εξόδου. (Διάλεξη 7)

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

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

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

Κεφάλαιο 10 ο Υποπρογράµµατα

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

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

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

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL

Χρησιμοποιείται για να αποφασίσει το πρόγραμμα αν θα κάνει κάτι σε ένα σημείο της εκτέλεσής του, εξετάζοντας αν ισχύει ή όχι μια συνθήκη.

1. Λογικά λάθη ονομάζονται αυτά που οφείλονται σε σφάλματα κατά την υλοποίηση του αλγόριθμου.

Εισαγωγή στην Tcl. Τί είναι η Tcl;

Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: ΕΠΛ 131 Αρχές Προγραµµατισµού I 4-2

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

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

Πρώτη επαφή με το μαθηματικό πακέτο Mathematica

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τύποι δεδομένων ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΠΡΑΞΕΙΣ ΜΕΤΑΒΛΗΤΕΣ. Ακέραιοι αριθμοί (int) Πράξεις μεταξύ ακεραίων αριθμών

ΜΑΗΣ ΕΞΕΤΑΣΤΙΚΟ ΔΟΚΙΜΙΟ

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ. Πως γίνεται ο ορισμός μιας διαδικασίας; Να δοθούν σχετικά παραδείγματα. ΑΡΧΗ Εντολές ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ

Κεφάλαιο 2.6: Είσοδος / Έξοδος εδοµένων, Μορφοποίηση εδοµένων Εξόδου. ( ιάλεξη 7) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Σημειώσεις του εργαστηριακού μαθήματος Πληροφορική ΙΙ. Εισαγωγή στην γλώσσα προγραμματισμού

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

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

Κεφάλαιο 3.1, : Συναρτήσεις I. (Διάλεξη 11)

ΦΥΣ Διαλ.03. Ø Εντολές ελέγχου και λογικής. Ø Εντολές µεταφοράς. Ø Βρόγχοι επανάληψης εντολών. Ø Βρόγχοι επανάληψης µε λογικές σχέσεις

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 24/3/2007

Κεφάλαιο 10 Υποπρογράμματα. Καραμαούνας Πολύκαρπος


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

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

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

Γραφικά υπολογιστών Εργαστήριο 1 Εισαγωγή στην Python

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

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τι είναι ; Συναρτήσεις. Παράδειγμα #1. double convert ( double cm ) { double inch;

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

ΕισαγωγήστουςΗ/Υ. PHP Hypertext Preprocessor

53 Χρόνια ΦΡΟΝΤΙΣΤΗΡΙΑ ΜΕΣΗΣ ΕΚΠΑΙΔΕΥΣΗΣ Σ Α Β Β Α Ϊ Δ Η Μ Α Ν Ω Λ Α Ρ Α Κ Η

Τυπικές χρήσεις της Matlab

ΦΥΣ 145 Μαθηµατικές Μέθοδοι στη Φυσική. Πρόοδος 20 Μαρτίου 2011 Οµάδα

ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ. Διαδικασίες και συναρτήσεις. 22 Νοε 2008 Ανάπτυξη εφαρμογών/ Υποπρογράμματα 1

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

Προγραμματισμός και Χρήση Ηλεκτρονικών Υπολογιστών - Βασικά Εργαλεία Λογισμικού

Λογικός τύπος Τελεστές σύγκρισης Λογικοί τελεστές Εντολές επιλογής Εμβέλεια Μαθηματικές συναρτήσεις Μιγαδικός τύπος ΔΕΥΤΕΡΗ ΔΙΑΛΕΞΗ

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

Λογισµικό (Software SW) Γλώσσες

- Αναπαράσταση ακέραιας τιµής : - Εύρος ακεραίων : - Ακέραιοι τύποι: - Πράξεις µε ακεραίους (DIV - MOD)

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

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

ΠΡΟΤΕΙΝΟΜΕΝΑ ΘΕΜΑΤΑ ΔΟΜΗΜΕΝΟΥ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Γ ΕΠΑΛ

ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ PASCAL

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

Κεφάλαιο 10ο. ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ ιαδικασίες - Συναρτήσεις

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

ΦΥΣ-151. Ηλεκτρονικοί Υπολογιστές Ι (FORTRAN 77) (Άνοιξη 2004)

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

Μεθόδων Επίλυσης Προβλημάτων

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

Κεφάλαιο 10 Υποπρογράμματα. Καραμαούνας Πολύκαρπος

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

Transcript:

ΦΥΣ 145 - Διαλ.05 1 Υπο-προγράμματα στη Fortran q Mέχρι τώρα τα προβλήματα και τα προγράμματα που έχουμε δεί ήταν αρκετά απλά και επομένως ένα και μόνο πρόγραμμα ήταν αρκετό για να τα λύσουμε q Όταν τα προγράμματα γίνονται μεγάλα είναι πολλές φορές δύσκολο να αποφασίσουμε από που θα ξεκινήσουμε τους υπολογισμούς. q Ακόμα όταν τα προγράμματα γίνονται μεγάλα είναι αρκετά δύσκολο να τα έχουμε σε ένα ενιαίο μοναδικό πρόγραμμα. Και αυτό γιατί είναι δύσκολο να παρακολουθήσουμε πολλές γραμμές κώδικα q Επομένως σε στύλ «από πάνω προς τα κάτω» (top-down) προσέγγισης ενός πολύπλοκου προβλήματος είναι να χρησιμοποιήσουμε μια στατηγική διαίρεσης και επίλυσης επιμέρους τμημάτων του προβλήματος

ΦΥΣ 145 - Διαλ.05 2 Υπο-προγράμματα στη Fortran q Τα πλεονεκτήματα χρήσης μικρών υποπρογραμμάτων στην επίλυση ενός μεγαλύτερου προβλήματος είναι πολλά: Τεμαχίζει το πρόγραμμα σε μικρές λογικές μονάδες οι οποίες είναι πολύ πιο εύκολο να λυθούν και να παρακολουθήσουμε τη λειτουργία τους Κάνει πιό ευανάγνωστα και ευκολονόητα τα μεγάλα προγράμματα Επιτρέπει την ανάπτυξη προγραμμάτων σε επίπεδο τμήματος του προγράμματος σε αντίθεση με την προσπάθεια ανάπτυξης ολόκληρου του προγράμματος σα ενιαία οντότητα Είναι πολύ πιο εύκολο να βρεθούν λάθη τόσο λογικής αλλά και υπολογισμού μια και μπορούν να απομονωθούν σε τμήματα του προγράμματος Τα υποπρογράμματα αυτά γράφονται μια φορά αλλά μπορούν να κληθούν πολλαπλές φορές μέσα από ένα πρόγραμμα ή άλλα προγράμματα. Δημιουργούμε έτσι μια βιβλιοθήκη υποπρογραμμάτων Πολύ σημαντικό το γεγονός ότι αποφεύγεται η γραφή του ίδιου κώδικα πολλαπλές φορές.

ΦΥΣ 145 - Διαλ.05 3 Συναρτήσεις(Functions) & Υπορουτίνες (Subroutines) q Δύο είδη υπογραμμάτων στη FORTRAN: Ø Oι συναρτήσεις (functions) Ø Oι υπορουτίνες (subroutines) q Για να χρησιμοποιήσουμε Functions και Subroutines χρειάζεται να γράψουμε ένα κύριο πρόγραμμα στο οποίο υπάρχουν οι αναφορές σε όλα τα καλούμενα υποπρογράμματα σύμφωνα με την επιθυμητή σειρά κλίσης και κατόπιν προχωρούμε στη γραφή των επιμέρους υποπρογραμμάτων. q Η γραφή αυτή είναι παρόμοια με το να γράψουμε το σκελετό μιας έκθεσης και κατόπιν αναπτύσσουμε το θέμα χρησιμοποιώντας τα θέματα του σκελετού σαν οδηγό.

ΦΥΣ 145 - Διαλ.05 4 Συναρτήσεις Functions q Ο λόγος για τον οποίο χρησιμοποιούμε τις συναρτήσεις είναι να δώσουμε μια σειρά από μεταβλητές (arguments) ή σταθερές, να εκτελέσουμε ένα υπολογισμό με αυτά που δώσαμε σαν arguments και να μας επιστραφεί το αποτέλεσμα και μόνο του υπολογισμού. q Υπάρχει μια σειρά από συναρτήσεις που είναι γραμμένες ήδη στη βιβλιοθήκη της Fortran (library functions ή intrinsic functions) και μας βοηθούν σε διάφορους υπολογισμούς. Για παράδειγμα η συνάρτηση SQRT(x) υπολογίζει τη τετραγωνική ρίζα της μεταβλητής x. Kάθε φορά που καλούμε τη συνάρτηση SQRT με κάποιο argument παίρνουμε πίσω μια και μοναδική τιμή που δεν είναι άλλη από την τετραγωνική ρίζα του argument (μεταβλητής ή σταθεράς). q Tο πλεονέκτημα των συναρτήσεων είναι ότι εκτελούν κάθε φορά τον ίδιο υπολογισμό χωρίς να χρειάζεται κάθε φορά να επαναλαμβάνουμε τον ίδιο κώδικα. Απλά χρειάζεται να γράψουμε το κώδικα του υποπρογράμματος μια φορά και κατόπιν στο κύριο μέρος του προγράμματος αναφερόμαστε στη συνάρτηση.

ΦΥΣ 145 - Διαλ.05 5 Functions q O γενικός τρόπος με τον οποίο μπορούμε να ενεργοποιήσουμε μια συνάρτηση είναι να χρησιμοποιήσουμε το όνομα της συνάρτησης σε μαθηματική έκφραση. q Το όνομα της συνάρτησης ακολουθείται από μια σειρά από μεταβλητές εισόδου (input arguments) που περικλείονται σε παρενθέσεις. solution = function_name(arg1, arg2, arg3,.) Ø Υποπρόγραμμα συνάρτησης <type> FUNCTION function_name(arg1, arg2, arg3, ) δηλώσεις μεταβλητών εντολές του υποπρογράμματος

ΦΥΣ 145 - Διαλ.05 6 Παραδείγματα χρήσης συναρτήσεων PRINT *, SQRT(X) O compiler θα τυπώσει τη τετραγωνική ρίζα του Χ à Το αποτέλεσμα της κλίσης συναρτήσεως πρέπει να χρησιμοποιείται σε εντολή ανάθεσης (assignment statement) ή σε εντολή PRINT Υ = SIN(X)+45 Μ = Max(A,B,C) O compiler θα υπολογίσει το ημίτονο x και κατόπιν θα προσθέσει τη σταθερά 45. Το τελικό αποτέλεσμα θα. δοθεί στη μεταβλητή Υ O compiler υπολογίζει το μέγιστο των A,B,C και το δίνει στη μεταβλητή Μ à Όπως φαίνεται από το παράδειγμα με τη συνάρτηση ΜΑΧ, μια συνάρτηση μπορεί να έχει περισσότερα από ένα arguments σαν input αλλά επιστρέφει πάντα ένα και μόνο αποτέλεσμα. C = SQRT(A**2+B**2) O compiler υπολογίζει πρώτα το άθροισμα τετραγώνων των Α και Β κατόπιν καλεί τη συνάρτηση της τετραγωνικής ρίζας και το αποτέλεσμα μεταφέρεται στη μεταβλητή C à Όπως φαίνεται από το παράδειγμα της SQRT το input argument μπορεί να είναι μια αριθμητική έκφραση, μια σταθερά ή μια μεταβλητή. Δεν είναι απαραίτητο δηλαδή να είναι μεταβλητή και μόνο.

ΦΥΣ 145 - Διαλ.05 7 Functions Ø Το αποτέλεσμα της συνάρτησης πρέπει να δίνεται σε μια μεταβλητή όπως συμβαίνει και με τις μαθηματικές συναρτήσεις

Εξωτερικές Συναρτήσεις External Functions ΦΥΣ 145 - Διαλ.05 8 Oι συναρτήσεις βιβλιοθήκης είναι πολύ χρήσιμες αλλά κάποια στιγμή δεν θα υπάρχει η συνάρτηση που θα εκτελέσει τον ακριβή υπολογισμό που θέλετε q Όταν συμβεί αυτό θα χρειαστεί να γράψετε τη δική σας function q Πριν χρησιμοποιήσετε μια συνάρτησή σας στο κύριο πρόγραμμα πρέπει να τη δηλώσετε, όπως ακριβώς κάνετε και για όλες τις μεταβλητές. Πρέπει να δηλώσετε το είδος της συνάρτησης ανάλογα με το είδος του αποτελέσματος που επιστρέφει: INTEGER REAL DOUBLE PRECISION q Tα ονόματα των συναρτήσεων ακολουθούν ακριβώς τους ίδιους κανόνες που διέπουν τα ονόματα των μεταβλητών. Δηλαδή λιγότεροι από 32 χαρακτήρες (γράμματα ή νούμερα) από τους οποίους ο πρώτος είναι πάντοτε γράμμα M Εξαιτίας αυτής της ομοιότητας τα ονόματα των συναρτήσεων δεν πρέπει να χρησιμοποιούνται σα μεταβλητές q Από τη στιγμή που έχετε γράψει τη συνάρτηση και την έχετε δηλώσει μπορείτε να τη χρησιμοποιήσετε ακριβώς όπως και τις συναρτήσεις βιβλιοθήκης

ΦΥΣ 145 - Διαλ.05 9 Κανόνες γραφής των External Functions Tα υποπρογράμματα τύπου Function (όπως και όλα τα υποπρογράμματα) γράφονται μετά την εντολή του κυρίου προγράμματος. Ξεκινούν με μια γραμμή η οποία δηλώνει το είδος του αποτελέσματος που θα επιστρέψει η συνάρτηση, το όνομα της συνάρτησης και τη λίστα των arguments (ορίσματα) που η συνάρτηση δέχεται σαν input. Οποιαδήποτε arguments (συμπεριλαμβανομένων και των input arguments - ορίσματα) χρησιμοποιούνται από τη συνάρτηση θα πρέπει να δηλωθούν στην αρχή πριν από οποιαδήποτε εντολή εκτέλεσης όπως και στα κανονικά προγράμματα. Ø Το όνομα της συνάρτησης δεν δηλώνεται μέσα στο κώδικα της συνάρτησης (έχει ήδη δηλωθεί στην πρώτη γραμμή). N Η συνάρτηση θα πρέπει να πάρει οπωσδήποτε κάποια τιμή μέσα στο υποπρόγραμμά που την προσδιορίζει. Ø Πρέπει να χρησιμοποιήσετε το όνομα της συνάρτησης σε μια εντολή ανάθεσης μέσα στο υποπρόγραμμα δίνοντας έτσι τιμή στη συνάρτηση. Ø Αυτός είναι ο μόνος τρόπος για να ξέρει ο compiler τι τιμή να επιστρέψει στο κύριο πρόγραμμα που καλεί τη συνάρτηση. Ένα υποπρόγραμμα τύπου Function πρέπει να τελειώνει πάντοτε με τις ακόλουθες δύο εντολές:

ΦΥΣ 145 - Διαλ.05 10 Παράδειγμα γραφής συναρτήσεως PROGRAM DEMO C Δηλώσεις μεταβλητών για main program REAL A, B, C REAL AV, AVSQ1, AVSQ2 REAL AVRAGE C Είσοδος δεδομένων DATA A, B, C / 5.0, 2.0, 3.0/ C Υπολογισμός μέσου όρου αριθμών AV = AVRAGE(A,B,C) AVSQ1 = AVRAGE(A,B,C) **2 AVSQ2 = AVRAGE(A**2,B**2,C**2) PRINT *,'Statistical Analysis PRINT *,'The average of the numbers is:',av PRINT *,'The average squared of the numbers: ',AVSQl PRINT *,'The average of the squares is: ', AVSQ2 REAL FUNCTION AVRAGE(X,Y,Z) REAL X, Y, Z, SUM SUM = X + Y + Z AVRAGE = SUM /3.0 Ανάθεση της τιμής της συνάρτησης Δήλωση της συνάρτησης Χρησιμοποίηση της συνάρτησης μέσω assignment statement Παρατηρήστε ότι τα ονόματα των μεταβλητών εισόδου δεν είναι απαραίτητα ίδια. Πρέπει όμως να ναι του ίδιου τύπου και ίδιου πλήθους. Αρχή του υποπρογράμματος της Function ΑVRAGE Η μεταβλητή SUM υπάρχει μόνο στο κώδικα της function Δεν χρειάζεται να δηλωθεί στο MAIN πρόγραμμα

ΦΥΣ 145 - Διαλ.05 11 Παράδειγμα συνάρτησης q Ο υπολογισμός του παραγοντικού ενός αριθμού Ν FUNCTION FACTRL (N) C This function computes n!, i.e. n*(n-1)*(n-2)*...*1 INTEGER FACTRL, N, I FACTRL = 1 IF ( N.GT. 1 ) THEN DO 10 I = 2, N FACTRL = FACTRL * I 10 CONTINUE IF Η συνάρτηση αυτή μπορεί να καλείται από ένα πρόγραμμα με τη μορφή PROGRAM FACTS INTEGER J, N, FACTRL PRINT *, DWSTE TO EYROS TWN ARITHMWN READ *, N DO J = 1, N TERMA = FACTRL(J)! Υπολογισμός του παραγοντικού κάθε INTEGER J από 1 έως Ν PRINT *, To paragontiko tou, j, einai, TERMA DO

ΦΥΣ 145 - Διαλ.05 12 Υπορουτίνες - Subroutines q Χρησιμοποιούμε μια συνάρτηση αν θέλουμε να κάνουμε ένα πολύπλοκο υπολογισμό ο οποίος θα επέστρεφε ένα και μόνο αποτέλεσμα το οποίο και θα μπορούσαμε να χρησιμοποιήσουμε ή όχι αργότερα σε μια μαθηματική έκφραση. Όπως στο προηγούμενο παράδειγμα της συνάρτησης όπου καλέσαμε τη Function AVRAGE και κατόπιν την υψώσαμε στο τετράγωνο με μια και μόνο εντολή. q Οι υπορουτίνες (subroutines) χρησιμοποιούνται όταν θέλουμε να κάνουμε μια σειρά υπολογισμών και να επιστρέψουμε στο κύριο πρόγραμμα περισσότερα από ένα αποτελέσματα. Κλήσεις υπορουτινών δεν μπορούν να τεθούν σε μαθηματική έκφραση. q Στο κύριο πρόγραμμα, μια υπορουτίνα καλείται χρησιμοποιώντας την εντολή CALL ακολουθούμενη από το όνομα της υπορουτίνας και μια λίστα παραμέτρων περικλειόμενες σε παρένθεση. Οι παράμετροι αυτοί μπορεί να είναι παράμετροι εισόδου (δηλαδή δίνουν κάποιες τιμές στο υποπρόγραμμα της subroutine) και παράμετροι εξόδου, δηλαδή παράμετροι που περιέχουν τα αποτελέσματα διαφόρων υπολογισμών που περιέχονται στην υπορουτίνα. Όλες αυτές οι παράμετροι ονομάζονται arguments της subroutine.

ΦΥΣ 145 - Διαλ.05 13 Subroutines Κανόνες γραφής " Tα ονόματα των subroutine ακολουθούν τους ίδιους κανόνες με τα ονόματα των functions και των υπόλοιπων μεταβλητών. Μπορεί να περιέχουν μέχρι 32 χαρακτήρες (αριθμητικούς ή όχι) αλλά ο πρώτος χαρακτήρας δεν μπορεί να είναι αριθμητικός. Τα ονόματα των subroutine δεν πρέπει να είναι ίδια με τα ονόματα μεταβλητών ή functions. " Όπως και με τις functions υπάρχουν ορισμένοι κανόνες όταν γράφουμε subroutines. Oι κανόνες είναι οι ακόλουθοι: " Σε αντίθεση με τις functions, οι subroutines δεν χρειάζεται να δηλωθούν στο κύριο πρόγραμμα. " Η πρώτη γραμμή του κώδικα μιας subroutine ξεκινά με τη γραμμή: SUBROUTINE, το όνομα της subroutine, ακολουθούμενο από τη λίστα όλων των παραμέτρων (arguments) της subroutine. " Σε περίπτωση που το μήκος των arguments ξεπερνά τις 72 στήλες μπορούμε να συνεχίσουμε στην επόμενη γραμμή με την προϋπόθεση ότι υπάρχει η κατάλληλη ένδειξη συνέχειας. " Δεν είναι ωστόσο απαραίτητο να υπάρχουν παράμετροι!!!

ΦΥΣ 145 - Διαλ.05 14 Subroutines Κανόνες γραφής " Ένας τρόπος για να ξεχωρίσουμε ποια από τα arguments είναι εισόδου και ποια εξόδου είναι να θέσουμε τις παραμέτρους εισόδου στη πρώτη γραμμή και τις παραμέτρους εξόδου στην επόμενη γραμμή. " Όλες οι παράμετροι και μεταβλητές που χρησιμοποιούνται σε μια subroutine πρέπει να δηλωθούν στο τμήμα του κώδικα της subroutine. q To όνομα της subroutine δεν δηλώνεται πουθενά στο πρόγραμμα " Όλες οι παράμετροι της subroutine πρέπει να δηλωθούν επίσης στο πρόγραμμα το οποίο καλεί την subroutine. Όπως και στην περίπτωση των functions, τα ονόματα των παραμέτρων μπορεί να είναι διαφορετικά στο πρόγραμμα που καλεί την subroutine και στο κώδικα της subroutine. q Ο αριθμός των παραμέτρων και η σειρά με την οποία δίνονται πρέπει να είναι η ίδια και στο κύριο πρόγραμμα και στo τμήμα της subroutine. " Μια subroutine τελειώνει πάντοτε με δύο εντολές: " Σε μεγάλα προγράμματα είναι πάντοτε σωστός τρόπος προγραμματισμού να περιέχονται σχόλια μετά τις εντολές FUNCTION και SUBROUTINE που να περιγράφουν τι κάνουν τα υποπρογράμματα καθώς επίσης και τη σημασία και λειτουργία των παραμέτρων.

ΦΥΣ 145 - Διαλ.05 15 Παράδειγμα Subroutine Χωρίς arguments SUBROUTINE MESSAG PRINT*,'THIS MESSAGE Με input/output arguments SUBROUTINE CONVER (R, TH, X, Y) REAL R, TH, X, Y X = R * COS(TH) Y = R * SIN(TH) q Η subroutine στα αριστερά δεν έχει κανένα argument και απλά τυπώνει ένα μήνυμα όταν καλείται. Ø Η subroutine στα δεξιά χρησιμοποιεί τις μεταβλητές R, ΤΗ σε πολικές συντεταγμένες και τις μετατρέπει σε καρτεσιανές. Οι μεταβλητές αυτές επιστρέφονται στο καλών την υπορουτίνα πρόγραμμα ή άλλο υποπρόγραμμα χρησιμοποιώντας τις output μεταβλητές Χ και Y.

ΦΥΣ 145 - Διαλ.05 16 Subroutines q Τα arguments τα οποία περνούν σε subroutines µπορεί να είναι: q Απλές µεταβλητές (Μπορείτε να περάσετε µια µαθηµατική έκφραση σαν argument. Πρώτα θα υπολογισθεί η έκφραση και το αποτέλεσµα θα περάσει σαν argument. To αποτέλεσµα πρέπει ωστόσο να ταυτίζεται µε το δηλωµένο τύπο του argument q Πίνακες. Περνούν χρησιµοποιώντας το όνοµα του πίνακα. Ο πίνακας θα πρέπει να δηλωθεί στην subroutine µε µέγεθος όχι µεγαλύτερο από αυτό που έχει δηλωθεί για το πίνακα στο κύριο πρόγραµµα. Ένα στοιχείο του πίνακα χρησιµοποιείται ακριβώς σα να είναι µεταβλητή, π.χ. Α(5) αναφέρεται σε µια µεταβλητή. Οι πίνακες µπορεί να έχουν µεταβαλλόµενο µέγεθος, δηλαδή µπορούµε να ορίσουµε το µέγεθος ενός πίνακα σε µια subroutine βασιζόµενοι στην τιµή ενός argument της subroutine π.χ. : SUBROUTINE STUFF(AX, BX, N) REAL AX(N), BX(N) :

Subroutine Array μεταβλητού μεγέθους ΦΥΣ 145 - Διαλ.05 17 PROGRAM COMPUTE REAL X(100), Y(100) C read in some data. C.Check to make sure Ν is less than or equal to 100. ΟPEN (1,file= MY.DATA ) READ(1,*) N IF ( N.GT. 100 ) THEN WRITE(6,*) ' N too large. Make dimensions bigger and try again STOP ELSE DO 100 I=1, N READ(1,*) X(I), Y(I) 100 CONTINUE IF C C Call subroutine STUFF to do some "stuff": CALL STUFF(X,Y,N)... SUBROUTINE STUFF(AX,BX,N) REAL AX(N), BX(N) ΙΝΤEGER N :

ΦΥΣ 145 - Διαλ.05 18 Παράδειγμα χρήσης SUBROUTINE PROGRAM DEMO_SUBROUTINE REAL A,B,C,SUM,SUMSQ CALL INPUT( A,B,C) CALL CALC(A,B,C,SUM,SUMSQ) CALL OUTPUT(SUM,SUMSQ) SUBROUTINE INPUT(X, Y, Z) REAL X,Y,Z PRINT *,'ENTER THREE NUMBERS => ' READ *,X,Y,Z SUBROUTINE CALC(X,Y,Z, ASUM,SQSUM) REAL X,Y,Z,ASUM,SQSUM ASUM = X + Y + Z SQSUM = ASUM **2 SUBROUTINE OUTPUT(SUM,SUMSQ) REAL SUM, SUMSQ PRINT *,'The sum of the numbers you entered are: ',SUM PRINT *,'And the square of the sum is:',sumsq