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

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

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

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

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

Πρόβλημα 1: Αναζήτηση Ελάχιστης/Μέγιστης Τιμής

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

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

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

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

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

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

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

Ει αγωγή η Fortran.

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

Ο πιο κάτω πίνακας περιγράφει σε ποιες περιπτώσεις χρησιμοποιούμε τους τρεις πιο πάνω τρόπους:

Δομή Επανάληψης. Κεφάλαιο 7 Mike Trimos

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

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

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

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 22/11/07

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

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

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008

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

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

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

Στόχοι και αντικείμενο ενότητας. Πέρασμα Πίνακα σε Συνάρτηση (συν.) Πέρασμα Πίνακα σε Συνάρτηση. #8.. Ειδικά Θέματα Αλγορίθμων

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

8 FORTRAN 77/90/95/2003

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

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

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

Είσοδος -Έξοδος. Άνοιγµα αρχείου:

ΣΥΝΑΡΤΗΣΕΙΣ FORTRAN 90/95

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

Άθροισμα τριών ποσοτήτων (1/2)

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

Υπολογισμός - Εντολές Επανάληψης

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

Κεφάλαιο : Επαναλήψεις (o βρόγχος While) (Διάλεξη 9) Δομές Έλεγχου Προγράμματος

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

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

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

Ασκήσεις σε Επαναληπτικούς Βρόχους και Συναρτήσεις. Επανάληψη για την ενδιάμεση εξέταση. (Διάλεξη 13)

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

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

ΕΝΟΤΗΤΑ 4 Λήψη Αποφάσεων και Συναρτήσεις Ελέγχου

Διάλεξη 6: Δείκτες και Πίνακες

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

Διάλεξη 9η: Πίνακες (arrays)

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

ΗΜΥ 100 ΕΙΣΑΓΩΓΉ ΣΤΗΝ ΤΕΧΝΟΛΟΓΊΑ

Πληρουορική Γ Γσμμασίοσ

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

Ψευδοκώδικας. November 7, 2011

bits and bytes q Ο υπολογιστής χρησιμοποιεί τη κύρια μνήμη για αποθήκευση δεδομένων

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

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

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

ΚΕΦΑΛΑΙΟ 2. Περιγραφή της Κίνησης. 2.1 Κίνηση στο Επίπεδο

4. Επιλογή και Επανάληψη

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

Κεφάλαιο : Επαναλήψεις (oι βρόχος While) ( ιάλεξη 9) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Προβλήματα, αλγόριθμοι, ψευδοκώδικας

Αποτελέσματα προόδου

Εισαγωγή στη Matlab 2 Εισαγωγή στην Αριθμητική Ανάλυση Διδάσκων: Γεώργιος Ακρίβης Βοηθός: Δημήτριος Ζαβαντής

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 6/5/2006

Β7.1.4 Δομές Επανάληψης. Β Λυκείου Κατεύθυνσης

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

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

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

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

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

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

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

Computing. Νοέμβριος Έκδοση 1.0

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

Είδη εντολών. Απλές εντολές. Εντολές ελέγχου. Εκτελούν κάποια ενέργεια. Ορίζουν τον τρόπο με τον οποίο εκτελούνται άλλες εντολές

Επανάληψη. Εντολές while, for, do-while

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

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

Μονοδιάστατοι πίνακες

Στόχοι και αντικείμενο ενότητας. Προτάσεις επανάληψης. Έλεγχος ροής προγράμματος. #5.. Εντολές Επανάληψης

Κεφάλαιο : Επαναλήψεις (oι βρόγχοιfor, do-while) (Διάλεξη 10) Εντολές Επανάληψης που θα καλυφθούν σήμερα

Κεφάλαιο : Επαναλήψεις (for, do-while)

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

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

Προγραμματισμός Η/Υ. Ενότητα 8: Ειδικά Θέματα Αλγορίθμων

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

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

Εισαγωγή στον Προγ/μό Υπολογιστών

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

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

Δομές Δεδομένων & Αλγόριθμοι

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

Ενότητα 1 Διάλεξη 3. Προγραμματισμός με Εφαρμογές στην Επιστήμη του Μηχανικού. Σιέττος Κωνσταντίνος

Βαθμός Σχόλια. lab PASS 1194 PASS 1238 PASS 1239 PASS

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

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

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

Transcript:

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

Περιεχόμενα Loops External Functions Subroutines Arrays Common mistakes

Loops Ανάγκη να εκτελέσουμε τις ίδιες εντολές πολλές φορές Εφαρμόζονται με: Counter loops: Για ένα συγκεκριμένο πλήθος επαναλήψεων Logical loops: Εως ότου μια λογική συνθήκη γίνει FALSE

Loops Counter loops Εκτελούνται επαναλαμβανόμενα οι εντολές που βρίσκονται μέσα στο βρόχο Χρησιμοποιείται μια μεταβλητή ελέγχου η οποία αυξάνεται σε κάθε βήμα με κάποιο ρυθμό Μόλις η σταθερά ξεπεράσει το όριο που έχουμε θέσει, η εκτέλεση σταματά Μορφή: DO control-variable = initial value, limit, step-size execution list

Loops initial value, limit, step-size: ακέραιοι που υποδεικνύουν το πλήθος των επαναλήψεων που θα εκτελεστούν (μπορούν να είναι υπάρχουσες μεταβλητές) Το step-size δεν είναι απαραίτητο (default step-size = 1) Δεν μπορούν να αλλάξουν τιμή μέσα στον βρόχο

Loops Παράδειγμα1 INTEGER :: max = 5 DO n=1, max PRINT *, n, n*2 Παράδειγμα2 DO n = 5, 1, -1 DO m = 1,2 PRINT *, n, m Output1: 1 2 2 4 3 6 4 8 5 10 Output2: 5 1 5 2 4 1 4 2..

Loops Μπορούμε να δώσουμε ονόματα στα loops έτσι ώστε να είναι ξεκάθαρο το που αρχίζει και το που τελειώνει το καθένα (ειδικά σε εμφωλευμένα loops) π.χ. outer: DO n = 5, 1, -1 inner: DO m = 1,2 PRINT *, n, m inner outer

Loops Logical loops Βρόχοι οι οποίοι τερματίζουν όταν ικανοποιηθεί μια λογική συνθήκη Ονομάζονται και DO-EXIT Μορφή: DO execution statements IF (logical criteria) EXIT execution statements Οι εντολές εκτέλεσης μπορούν να είναι πριν, μετά ή και τα δύο από τη λογική συνθήκη

Loops Όταν η λογική συνθήκη γίνει.true τότε οι επαναλήψεις διακόπτονται. Προσοχή! Στον ορισμό της λογικής συνθήκης Αν δεν γίνει ποτέ.true θα πέσω σε ένα infinite loop Παράδειγμα n = 1 DO IF (n > 10) EXIT n = n + 1

Loops Μπορούμε να περιμένουμε από τον χρήστη να σταματήσει τις επαναλήψεις DO PRINT *, "Enter the radius of your circle." READ *, r PRINT *, "Area is ", pi*r**2 PRINT *, "Do you want to calculate another area?" READ *, response IF (response == "n") EXIT

Loops DO WHILE - expression Μορφή: DO WHILE expression execution statements n = 1 DO WHILE (n <= 10) n = n + 1 Παράδειγμα Ισοδύναμο: n = 1 DO IF (n > 10) EXIT n = n + 1

External Functions Συναρτήσεις που δεν ορίζει η Fortran Αφού οριστεί μια τέτοια συνάρτηση, χρησιμοποιείται κατά τον ίδιο τρόπο όπως οποιαδήποτε συνάρτηση της βιβλιοθήκης της Fortran Μορφή: PROGRAM name... variable = functionname (argument_list1)... END PROGRAM type FUNCTION function_name(argument_list2) type declarations functionname = expression RETURN END FUNCTION

External Functions Τα argument_list1, argument_list2 δεν είναι ανάγκη να είναι ίδια, θα πρέπει όμως να περιέχουν ίσο πλήθος και ίδιους τύπους μεταβλητών Αν τα ονόματα είναι διαφορετικά τότε το argument_list1 αντιστοιχίζεται με τις τιμές των argument_list2

External Functions Παράδειγμα PROGRAM testfunc IMPLICIT NONE REAL :: a, b, c, func a = 3.0 b = 4.0 c = func(a,b) END PROGRAM testfunc REAL FUNCTION func(x,y) REAL :: func REAL, INTENT (IN) :: x, y func = x ** 2 + 2 * y RETURN END FUNCTION func

REAL FUNCTION f(x)... External Functions Καλό είναι όσο μπορούμε να αποφεύγουμε περιττές εντολές z = f(x)/(1.0 + f(x)) Ισοδύναμα: y = f(x) z = y/(1.0 + y)

Subroutines Παρόμοιες με τις External Functions (πιο εύστροφες) External Functions Παίρνουν ορίσματα και επιστρέφουν έναν αριθμό, ένα string, μια λογική σταθερά ή έναν πίνακα Το όνομα της συνάρτησης ορίζεται να είναι και η επιστρεφόμενη τιμή στο κυρίως πρόγραμμα Καλούνται με το όνομά τους μέσα από το κυρίως πρόγραμμα Subroutines Μπορούν να επιστρέψουν πολλά δεδομένα ή καθόλου δεδομένα Το όνομα της υπορουτίνας δεν έχει τιμή Καλούνται μέσω της εντολής CALL

Subroutines Μορφή: SUBROUTINE name(dummy argument-list) specification part execution part END SUBROUTINE Η επίσημη argument-list είναι μια λίστα από identifiers για την είσοδο και την έξοδο στην υπορουτίνα Την ονομάζουμε dummy argument-list

Subroutines Κλήση υπορουτίνας: CALL name(actual argument-list) actual argument-list Μεταβλητές Σταθερές Εκφράσεις Που χρησιμοποιούνται από την υπορουτίνα Οι τιμές αυτές μπορούν είτε απλά να χρησιμοποιηθούν είτε να αλλάξουν τιμή και να επιστραφούν στο αρχικό πρόγραμμα Οι τύποι των μεταβλητών των actual argument-list και dummy argument-list πρέπει να ταιριάζουν

Subroutines MAIN PROGRAM IMPLICIT NONE CHARACTER(20) :: file_name REAL :: vel, dens, conc! Calling the subroutine.! values for vel, dens, and conc will be returned. CALL Openfile(file_name, vel, dens, conc) END PROGRAM SUBROUTINE Openfile(name, a, b, c) CHARACTER(20), INTENT(IN) :: name REAL, INTENT (OUT) :: a, b, c INTEGER :: OpenStatus OPEN (UNIT = 10, FILE = name, ACTION = "READ", & IOSTAT = Openstatus) IF (OpenStatus /= 0) STOP error opening file READ (10,*) a, b, c END SUBROUTINE

One-dimensional Arrays Μορφή: type, DIMENSION(min:max) :: array names Π.χ. REAL, DIMENSION(1:20) :: A, B REAL, DIMENSION(20) :: A, B INTEGER, DIMENSION(-1:3) :: C Ανάθεση τιμών από αρχείο: REAL, DIMENSION(5) :: A DO I = 1, 5 READ (10, *) A(I) Προσοχή! Κάθε τιμή σε ξεχωριστή γραμμή

One-dimensional Arrays Ανάθεση τιμών από αρχείο: READ (10, *) A Αναφορά σε στοιχείο: Α(i) Sum = A(3) + A(5) Π.χ. Sum = 0 DO I = 1,5 Sum = Sum + A(I)

One-dimensional Arrays Arrays VS Variables Άμεση πρόσβαση REAL :: input_1, input_2,... input_20 READ (10, *) input_1, input_2,... input_20 REAL, DIMENSION (20) :: input READ (10, *) (input (I), I = 1, 20) Περίπτωση Α: Διαβάζει όλες τις προηγούμενες για να φτάσει σε αυτήν που ψάχνω Περίπτωση Β: Πηγαίνει κατευθείαν στην τιμή που ψάχνω

One-dimensional Arrays Ανάθεση τιμών μέσα στο πρόγραμμα: Εισαγωγή τιμών ανάμεσα από /... / INTEGER, DIMENSION (5) :: A A = (/ 2, 4, 6, 8, 10/) A = (/ (2*I, I = 1,5) /) A = (/ 2, (2*I, I = 2, 4), 10 /) Ίδια τιμή σε όλο τον πίνακα: Α = 0

One-dimensional Arrays Δυνατότητα χρήσης υποσυνόλων πινάκων array_name(min: max: step) REAL, DIMENSION (5) :: A REAL, DIMENSION (3) :: B, C A = (/ 10, 20, 30, 40, 50/) B = A(1:5:2) C = A(2:4) Αποτέλεσμα: B = (/ 10, 30, 50/) C = (/ 20, 30, 40 /)

Arrays INTRINSIC FUNCTIONS DOT_PRODUCT(A, B) Returns the dot product of A and B MAXVAL(A) Returns the maximum value in array A MINVAL(A) Returns the minimum value in array A PRODUCT(A) Returns the product of all the elements in A SIZE(A) Returns the number of elements in A SUM(A) Returns the sum of all the elements in A

Multi-dimensional Arrays Μορφή: type, DIMENSION(min1:max1, min2:max2,..., minn:maxn) :: array_names Π.χ. REAL, DIMENSION(0:4, 3:12, 5) :: A INTEGER, DIMENSION(3, 4) :: B Ή REAL :: A (0:4, 3:12, 5) INTEGER :: B (3, 4)

Multi-dimensional Arrays Ανάθεση τιμών ανά γραμμές: DO row = 1, max_rows DO col = 1, max_cols READ (10,*) array (row, col) Ανάθεση τιμών ανά στήλες: DO col = 1, max_cols DO row = 1, max_rows READ (10,*) array (row, col)

Multi-dimensional Arrays Προσοχή! Η Fortran διαβάζει ανά στήλες Α = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 INTEGER, DIMENSION(3,4) :: array READ (10,*) array Αποτέλεσμα: 1 5 9 13 2 6 10 14 3 7 11 15 4 8 12 16

Multi-dimensional Arrays Μετατροπή one-dimensional array σε multidimensional array Π.χ. RESHAPE (one-dimensionalspecifier, shape, pad, order) A = RESHAPE ((/ 1, 2, 3, 4/), (/2,3/), PAD = (/0/), ORDER = (/2, 1/)) (Old) A = 1 2 3 4 (New) A = 1 2 3 4 0 0

Common mistakes Μικτές εκφράσεις που δεν παράγουν τα αποτελέσματα που περιμένουμε a = 4.0 b = 1/2 + a**2 Correct: b = 1.0/2.0 + a**2 Λανθασμένη ενημέρωση μεταβλητών DO xnext = 1.08*xcurrent + 0.02*ycurrent ynext = ycurrent + 0.14*xcurrent znext = 1.01*zcurrent + 0.01* xcurrent**2 + 0.04*ycurrent xcurrent = xnext ycurrent = ynext zcurrent = znext

Common mistakes Αρχικοποίηση των μεταβλητών πριν τις χρησιμοποιήσουμε Όταν καλούμε subroutines προσοχή να δίνουμε ίσο πλήθος και ίδιους τύπους μεταβλητών CALL tempcalc(temperature,distance)!υπόποιπες εντολές SUBROUTINE tempcalc(temperature,x,y,z)

Common mistakes Αν θέλουμε η subroutine να επιστρέφει κάποια τιμή τότε θα πρέπει να οριστεί η αντίστοιχη μεταβλητή στην subroutine SUBROUTINE tempcalc(x,y,z) IMPLICIT NONE REAL temperatures, distance, x, y, z! Commands follow temperatures =! Commands follow RETURN END Correct: SUBROUTINE tempcalc(temperatures,x,y,z)

Τέλος