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

Σχετικά έγγραφα
Εισαγωγή στον Προγραμματισμό H/Y (Fortran 90/95/2003)

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

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

Ηλεκτρονικοί Υπολογιστές

Γενικά Μαθηματικά Ι. Ενότητα 1: Συναρτήσεις και Γραφικές Παραστάσεις. Λουκάς Βλάχος Τμήμα Φυσικής ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

Προγραμματισμός Η/Υ. Συναρτήσεις & Υποπρογράμματα. ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος

Λογισμός 3. Ενότητα 19: Θεώρημα Πεπλεγμένων (γενική μορφή) Μιχ. Γ. Μαριάς Τμήμα Μαθηματικών ΑΝΟΙΚΤΑ ΑΚΑ ΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

Γενικά Μαθηματικά Ι. Ενότητα 15: Ολοκληρώματα Με Ρητές Και Τριγωνομετρικές Συναρτήσεις Λουκάς Βλάχος Τμήμα Φυσικής

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

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

Λογισμός 3. Ενότητα 12:Οι κλασικοί μετασχηματισμοί και ο κανόνας της αλυσίδας. Μιχ. Γ. Μαριάς Τμήμα Μαθηματικών ΑΝΟΙΚΤΑ ΑΚΑ ΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

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

Λογισμός 3. Ενότητα 18: Θεώρημα Πεπλεγμένων (Ειδική περίπτωση) Μιχ. Γ. Μαριάς Τμήμα Μαθηματικών ΑΝΟΙΚΤΑ ΑΚΑ ΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

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

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

Ιστορία της μετάφρασης

Τίτλος Μαθήματος: Μαθηματική Ανάλυση Ενότητα Γ. Ολοκληρωτικός Λογισμός

Γενικά Μαθηματικά Ι. Ενότητα 17: Αριθμητική Ολοκλήρωση, Υπολογισμός Μήκους Καμπύλης Λουκάς Βλάχος Τμήμα Φυσικής ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ

Κλασσική Θεωρία Ελέγχου

Γενικά Μαθηματικά Ι. Ενότητα 12: Κριτήρια Σύγκλισης Σειρών. Λουκάς Βλάχος Τμήμα Φυσικής ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

Γενικά Μαθηματικά Ι. Ενότητα 16: Ολοκλήρωση Τριγωνομετρικών Συναρτήσεων, Γενικευμένα Ολοκληρώματα Λουκάς Βλάχος Τμήμα Φυσικής

Γενικά Μαθηματικά Ι. Ενότητα 14: Ολοκλήρωση Κατά Παράγοντες, Ολοκλήρωση Ρητών Συναρτήσεων Λουκάς Βλάχος Τμήμα Φυσικής

Γενικά Μαθηματικά Ι. Ενότητα 2: Τριγωνομετρικές, Εκθετικές και Σύνθετες Συναρτήσεις. Λουκάς Βλάχος Τμήμα Φυσικής ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

Ενότητα 6: Ακρότατα συναρτησιακών διανυσματικών συναρτήσεων. Νίκος Καραμπετάκης Τμήμα Μαθηματικών

Γενικά Μαθηματικά Ι. Ενότητα 5: Παράγωγος Πεπλεγμένης Συνάρτησης, Κατασκευή Διαφορικής Εξίσωσης. Λουκάς Βλάχος Τμήμα Φυσικής

ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 4: Συναρτήσεις

Εκκλησιαστικό Δίκαιο. Ενότητα 10η: Ιερά Σύνοδος της Ιεραρχίας και Διαρκής Ιερά Σύνοδος Κυριάκος Κυριαζόπουλος Τμήμα Νομικής Α.Π.Θ.

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

Ηλεκτρονικοί Υπολογιστές

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

Ηλεκτρονικοί Υπολογιστές

Μηχανολογικό Σχέδιο Ι

Μοντέρνα Θεωρία Ελέγχου

Οικονομετρία. Εξειδίκευση του υποδείγματος. Μορφή της συνάρτησης: Πολυωνυμική, αντίστροφη και αλληλεπίδραση μεταβλητών

Προγραμματισμός Η/Υ. 8 η ενότητα: Περιβαλλοντικά και μαθηματικά προβλήματα. Τμήμα. Τεχνολόγων Περιβάλλοντος. ΤΕΙ Ιονίων Νήσων

Θεσμοί Ευρωπαϊκών Λαών Ι 19 ος -20 ος αιώνας

Τεχνικές Προγραμματισμού και Χρήση Λογισμικού Η/Υ στις Κατασκευές

Μοντέρνα Θεωρία Ελέγχου

Μοντέρνα Θεωρία Ελέγχου

Τίτλος Μαθήματος: Μαθηματική Ανάλυση Ενότητα Β. Διαφορικός Λογισμός

Μοντέρνα Θεωρία Ελέγχου

Γενικά Μαθηματικά Ι. Ενότητα 9: Κίνηση Σε Πολικές Συντεταγμένες. Λουκάς Βλάχος Τμήμα Φυσικής ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

Εκκλησιαστικό Δίκαιο

Κλασσική Θεωρία Ελέγχου

Μαθηματικά Και Στατιστική Στη Βιολογία

Θεσμοί Ευρωπαϊκών Λαών Ι 19 ος -20 ος αιώνας

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

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

Προγραμματισμός Η/Υ. 6 η ενότητα: Συναρτήσεις. Τμήμα. Τεχνολόγων Περιβάλλοντος. ΤΕΙ Ιονίων Νήσων. Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων

Τίτλος Μαθήματος: Μαθηματική Ανάλυση Ενότητα Γ. Ολοκληρωτικός Λογισμός

Μοντέρνα Θεωρία Ελέγχου

Λογισμός 4 Ενότητα 12

Οικονομία των ΜΜΕ. Ενότητα 7: Μορφές αγοράς και συγκέντρωση των ΜΜΕ

Διοίκηση Επιχειρήσεων

Εκκλησιαστικό Δίκαιο

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

Προγραμματισμός και Εφαρμογές Υπολογιστών

Τίτλος Μαθήματος: Μαθηματική Ανάλυση Ενότητα Γ. Ολοκληρωτικός Λογισμός

Μοντέρνα Θεωρία Ελέγχου

Μαθηματικά Και Στατιστική Στη Βιολογία

ΑΝΟΙΚΤΑ ΑΚΑ ΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ. Λογισμός 3. Ενότητα 13: Τύπος του Taylor. Μιχ. Γ. Μαριάς Τμήμα Μαθηματικών

Ιστορία της μετάφρασης

Διδακτική της Πληροφορικής

Γενικά Μαθηματικά Ι. Ενότητα 13: Ακτίνα Σύγκλισης, Αριθμητική Ολοκλήρωση, Ολοκλήρωση Κατά Παράγοντες. Λουκάς Βλάχος Τμήμα Φυσικής

ΣΥΣΤΗΜΑΤΑ ΗΛΕΚΤΡΙΚΗΣ ΕΝΕΡΓΕΙΑΣ ΙIΙ

ΣΥΣΤΗΜΑΤΑ ΗΛΕΚΤΡΙΚΗΣ ΕΝΕΡΓΕΙΑΣ ΙIΙ

ΣΥΣΤΗΜΑΤΑ ΗΛΕΚΤΡΙΚΗΣ ΕΝΕΡΓΕΙΑΣ ΙIΙ

ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ. Λογισμός 4. Ενότητα 5: Το Θεώρημα του Fubini. Μιχ. Γ. Μαριάς Τμήμα Μαθηματικών

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

Παράκτια Τεχνικά Έργα

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

Ενότητα 8: Συναρτησιακά καμπύλων οι οποίες υπόκεινται σε δεσμούς. Νίκος Καραμπετάκης Τμήμα Μαθηματικών

Μοντέρνα Θεωρία Ελέγχου

Τίτλος Μαθήματος: Μαθηματική Ανάλυση Ενότητα Γ. Ολοκληρωτικός Λογισμός

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Ενότητα: ΔΟΜΕΣ ΕΠΑΝΑΛΗΨΗΣ ΚΥΡΟΠΟΥΛΟΣ ΚΩΝΣΤΑΝΤΙΝΟΣ. Τμήμα Διοίκηση Επιχειρήσεων (Κοζάνη)

Λογισμός 3. Ενότητα 4:Συνέχεια διανυσματικών συναρτήσεων-ιδιότητες της συνέχειας. Μιχ. Γ. Μαριάς Τμήμα Μαθηματικών ΑΝΟΙΚΤΑ ΑΚΑ ΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

Κλασσική Θεωρία Ελέγχου

Κλασσική Θεωρία Ελέγχου

Θεσμοί Ευρωπαϊκών Λαών Ι 19 ος -20 ος αιώνας

Λογικός Προγραμματισμός Ασκήσεις

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

Μοντέρνα Θεωρία Ελέγχου

Οικονομία των ΜΜΕ. Ενότητα 9: Εταιρική διασπορά και στρατηγικές τιμολόγησης

ΑΝΟΙΚΤΑ ΑΚΑ ΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ. Λογισμός 3. Ενότητα 11: Κανόνας της αλυσίδας. Μιχ. Γ. Μαριάς Τμήμα Μαθηματικών

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

Μοντέρνα Θεωρία Ελέγχου

Εργαστήριο Χημείας Ενώσεων Συναρμογής

Προγραμματισμός Η/Υ. Ενότητα 3: Top Down Σχεδιασμός

Μάρκετινγκ Αγροτικών Προϊόντων

Οικονομετρία. Πολλαπλή Παλινδρόμηση. Στατιστικός έλεγχος γραμμικού συνδυασμού συντελεστών. Τμήμα: Αγροτικής Οικονομίας & Ανάπτυξης

1 η ΕΝΟΤΗΤΑ ΕΙΣΑΓΩΓΗ (Προγραμματισμός & MATLAB)

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

ΟΙΚΟΝΟΜΕΤΡΙΑ. Ενότητα 3: Πολλαπλή Παλινδρόμηση. Αναπλ. Καθηγητής Νικόλαος Σαριαννίδης Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 3: Συναρτήσεις

Ενδεικτικές λύσεις ασκήσεων διαχείρισης έργου υπό συνθήκες αβεβαιότητας

Αλγόριθμοι και πολυπλοκότητα Δυναμικός Προγραμματισμός

Στατιστική. 5 ο Μάθημα: Βασικές Έννοιες Εκτιμητικής. Γεώργιος Μενεξές Τμήμα Γεωπονίας ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ

Θέματα Αρμονικής Ανάλυσης

Κλασσική Θεωρία Ελέγχου

Transcript:

ΑΝΟΙΧΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Εισαγωγή στον Προγραμματισμό H/Y () Ενότητα 8: Συναρτήσεις Νίκος Καραμπετάκης Τμήμα Μαθηματικών

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς. 2

Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Αριστοτέλειο Πανεπιστήμιο Θεσσαλονίκης» έχει χρηματοδοτήσει μόνο την αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. 3

Περιεχόμενα Ενότητας 1. Η τεχνική του τμηματικού προγραμματισμού. 2. Τι είναι υποπρόγραμμα και ποιοι είναι οι κύριοι λόγοι ανάπτυξης υποπρογραμμάτων. 3. Κατηγορίες υποπρογραμμάτων. 4. Κατηγορίες Συναρτήσεων-Σύνταξη Συνάρτησης υποπρογράμματος. 5. Συναρτήσεις Διαδικασίες της αριθμητικής IMSL βιβλιοθήκης της Compaq Visual Fortran. 4

Σκοποί Ενότητας 1. Η παρουσίαση των υποπρογραμμάτων. 2. Η παρουσίαση του ορισμού και του τρόπου δήλωσης των συναρτήσεων. 3. Η παρουσίαση των μεθόδων εισαγωγής δεδομένων/ επιστροφής τιμών σε συναρτήσεις. 5

Παραδείγματα όπου απαιτείται η χρήση συναρτήσεων διαδικασιών e A = I n + 1 1! A + 1 2! A2 + 1 3! A3 + n m = n!, n > m m! n m! 6

Η τεχνική του τμηματικού προγραμματισμού Είναι η τεχνική κατά την οποία η επίλυση ενός προβλήματος ανάγεται στην επίλυση άλλων απλούστερων προβλημάτων, τα οποία με τη σειρά τους μπορούν να ανάγονται σε επίσης απλούστερα προβλήματα. ΕΠΙΛΥΣΗ ΠΡΟΒΛΗΜΑΤΟΣ ΕΙΣΑΓΩΓΗ ΔΕΔΟΜΕΝΩΝ ΕΠΕΞΕΡΓΑΣΙΑ ΕΚΤΥΠΩΣΗ ΑΠΟΤΕΛΕΣΜΑΤΩΝ ΥΠΟΛΟΓΙΣΜΟΣ ΜΕΣΗΣ ΤΙΜΗΣ ΥΠΟΛΟΓΙΣΜΟΣ ΤΥΠΙΚΗΣ ΑΠΟΚΛΙΣΗΣ ΚΑΤΑΧΩΡΗΣΗ ΔΕΔΟΜΕΝΩΝ ΕΛΕΓΧΟΣ ΔΕΔΟΜΕΝΩΝ ΕΚΤΥΠΩΣΗ ΜΕΣΗΣ ΤΙΜΗΣ ΕΚΤΥΠΩΣΗ ΤΥΠΙΚΗΣ ΑΠΟΚΛΙΣΗΣ 7

Τι είναι το υποπρόγραμμα; Ένα τμήμα προγράμματος που επιτελεί ένα αυτόνομο έργο και έχει γραφτεί χωριστά από το υπόλοιπο πρόγραμμα. Αν έχει γραφεί μέσα στο πρόγραμμα λέγεται εσωτερικό (internal) ενώ αν έχει γραφεί εξωτερικά από το πρόγραμμα λέγεται εξωτερικό (external). ΕΠΙΛΥΣΗ ΠΡΟΒΛΗΜΑΤΟΣ ΕΙΣΑΓΩΓΗ ΔΕΔΟΜΕΝΩΝ ΕΠΕΞΕΡΓΑΣΙΑ ΕΚΤΥΠΩΣΗ ΑΠΟΤΕΛΕΣΜΑΤΩΝ ΥΠΟΛΟΓΙΣΜΟΣ ΜΕΣΗΣ ΤΙΜΗΣ ΥΠΟΛΟΓΙΣΜΟΣ ΤΥΠΙΚΗΣ ΑΠΟΚΛΙΣΗΣ ΚΑΤΑΧΩΡΗΣΗ ΔΕΔΟΜΕΝΩΝ ΕΛΕΓΧΟΣ ΔΕΔΟΜΕΝΩΝ ΕΚΤΥΠΩΣΗ ΜΕΣΗΣ ΤΙΜΗΣ ΕΚΤΥΠΩΣΗ ΤΥΠΙΚΗΣ ΑΠΟΚΛΙΣΗΣ 8

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

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

Διαχωρισμός των συναρτήσεων σε κατηγορίες Συναρτήσεις Βιβλιοθήκης (Intrinsic Functions) Συναρτήσεις Συναρτήσεις Εντολής (Statement Functions) Συναρτήσεις Υποπρογράμματος (Functions Subprograms) Εσωτερικές Συναρτήσεις (Internal Functions) Εξωτερικές Συναρτήσεις (External Functions) 11

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

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

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

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

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

Παράδειγμα 1 (μέσω εσωτερικής συνάρτησης) N Να γραφεί συνάρτηση η οποία να υπολογίζει το N!. PROGRAM FUNCTIONS1 IMPLICIT NONE INTEGER :: N PRINT*, N= READ*,N PRINT*,FACTORIAL(N) FACTORIAL 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 17

Παράδειγμα 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 18

Παράδειγμα 1 ( συνέχεια) (μέσω εξωτερικής συνάρτησης και block interface) Να γραφεί συνάρτηση η οποία να υπολογίζει το N!. Αρχείο 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 19

Παράδειγμα 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 20

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

Παράδειγμα 2 Να γραφεί συνάρτηση η οποία να υπολογίζει την δύναμη M ενός πίνακα A, διαστάσεως N. 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) 22

Παράδειγμα 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 23

Παράδειγμα 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 24

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

Προαιρετικές τυπικές παράμετροι Τύπος δεδομένων, OPTIONAL [,άλλα χαρακτηριστικά] :: Λίστα μεταβλητών FUNCTION MATRIXEXP(A,N,E)... REAL, OPTIONAL, INTENT(IN) :: E REAL :: E1... IF(.NOT.PRESENT(E)) THEN E1=1E-05 ELSE E1=E END IF... DO WHILE (ANY(ABS(TERM)>E1))... END FUNCTION MATRIXEXP 26

Αναδρομικές συναρτήσεις Να υπολογιστεί το παραγοντικό ενός ακεραίου αριθμού N, με την βοήθεια αναδρομικής συνάρτησης, γνωρίζοντας ότι 1 N = 0 N! = N N 1! N > 0 27

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

Πρόγραμμα (αναδρομική συνάρτηση) 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 29

Τρόπος ανάκλησης 4!=4*3! 3!=3*2! 2!=2*1! 1!=1*0! 0!=1 Τώρα παίρνουμε την τιμή του 0! και προχωρούμε προς τα πίσω 1!=1*1=1 2!=2*1=2 3!=3*2=6 4!=4*6=24 30

Παράδειγμα 2 (Δύναμη πίνακα) Να γραφεί αναδρομική συνάρτηση υποπρογράμματος που να υπολογίζει την M-οστή δύναμη ενός πίνακα A εκτάσεως /N,N/, χρησιμοποιώντας τον αναδρομικό τύπο : A n I = n n = 0 A A n 1 n 0 31

Πρόγραμμα (Δύναμη πίνακα) 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) 32

Πρόγραμμα (Δύναμη πίνακα) ( συνέχεια 1) 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 33

Πρόγραμμα (Δύναμη πίνακα) ( συνέχεια 2) 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 34

Παράδειγμα 3 (Μ.Κ.Δ.) Να υπολογιστεί ο μέγιστος κοινός διαιρέτης δύο θετικών ακεραίων αριθμών α, β χρησιμοποιώντας τον αναδρομικό τύπο: ΜΚΔ(α β, β) αν α > β ΜΚΔ α, β = ΜΚΔ(α, β α) αν α < β α αν α = β 35

Πρόγραμμα Μ.Κ.Δ. (1) 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 36

Πρόγραμμα Μ.Κ.Δ. (2) 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 37

Παραδείγματα Παράδειγμα 4 Να υπολογιστεί ο μέγιστος κοινός διαιρέτης δύο θετικών ακεραίων αριθμών α, β χρησιμοποιώντας τον αναδρομικό τύπο : b mod a, b = 0, a b ΜΚΔ(b, mod a, b ) mod(a, b) 0 ΜΚΔ a, b = a mod a, b = 0, a < b ΜΚΔ(mod b, a, a) mod(a, b) 0 Παράδειγμα 5 Να γραφεί αναδρομική συνάρτηση που θα υπολογίζει το N-οστό όρο της ακολουθίας Fibonacci : F i = F i 1 + F i 2, F 1 = F 2 = 1 38

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

Παράδειγμα με συναρτήσεις της 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 40

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

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

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

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

Άσκηση 2 Να γραφεί πρόγραμμα το οποίο θα υπολογίζει τις ιδιοτιμές και τα ιδιοανύσματα του πίνακα 1 2 3 4 2 3 4 1 A = 3 4 1 2 4 1 2 3 45

Βιβλιογραφία Ν. Καραμπετάκης, Εισαγωγή στη, 2 η Έκδοση, Θεσσαλονίκη: Εκδόσεις Ζήτη, 2011. 46

Σημείωμα Αναφοράς Copyright Αριστοτέλειο Πανεπιστήμιο Θεσσαλονίκης, Καραμπετάκης Νικόλαος. «Εισαγωγή στον Προγραμματισμό H/Y (). Συναρτήσεις». Έκδοση: 1.0. Θεσσαλονίκη 2014. Διαθέσιμο από τη δικτυακή διεύθυνση: http://eclass.auth.gr/courses/ocrs145/.

Σημείωμα Αδειοδότησης Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons Αναφορά, Παρόμοια Διανομή 4.0 [1] ή μεταγενέστερη, Διεθνής Έκδοση. Εξαιρούνται τα αυτοτελή έργα τρίτων π.χ. φωτογραφίες, διαγράμματα κ.λ.π., τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί με τους όρους χρήσης τους στο «Σημείωμα Χρήσης Έργων Τρίτων». [1] http://creativecommons.org/licenses/by-sa/4.0/

ΑΝΟΙΧΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Τέλος Ενότητας Επεξεργασία: Αναστασία Γ. Γρηγοριάδου Θεσσαλονίκη, Χειμερινό Εξάμηνο 2013-2014