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

Σχετικά έγγραφα
Υπο-προγράμματα στη Fortran

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

Αριθμητική Λύση Μη Γραμμικών Εξισώσεων Η ΜΕΘΟ ΟΣ ΤΗΣ ΙΧΟΤΟΜΙΣΗΣ 01/25/05 ΜΜΕ 203 ΙΑΛ 2 1

8 FORTRAN 77/90/95/2003

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

ΑΡΙΘΜΗΤΙΚΗ ΑΝΑΛΥΣΗ, , 3 ο ΕΞΑΜΗΝΟ ΑΠΑΝΤΗΣΕΙΣ ΕΡΓΑΣΙΑΣ #1: ΑΡΙΘΜΗΤΙΚΗ ΚΙΝΗΤΗΣ ΥΠΟ ΙΑΣΤΟΛΗΣ ΚΑΙ ΡΙΖΕΣ ΕΞΙΣΩΣΕΩΝ ΕΠΙΜΕΛΕΙΑ: Σ.

Αριθμητική εύρεση ριζών μη γραμμικών εξισώσεων

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

Σχολικό Βιβλίο - Κεφάλαιο 7 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕ PASCAL ΠΑΡΟΥΣΙΑΣΗ 13

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

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

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

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

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

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

Αριθμητική Ανάλυση & Εφαρμογές

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

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

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

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

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

Παράδειγμα #2 ΑΡΙΘΜΗΤΙΚΗ ΚΙΝΗΤΗΣ ΥΠΟΔΙΑΣΤΟΛΗΣ ΚΑΙ ΡΙΖΕΣ ΕΞΙΣΩΣΕΩΝ. ΕΠΙΜΕΛΕΙΑ: Σ. Βαρούτης

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

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

ΜΑΘΗΜΑ / ΤΑΞΗ : ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ / Γ ΕΠΑΛ ΣΕΙΡΑ: ΗΜΕΡΟΜΗΝΙΑ: 27/01/2013

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

ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ ΑΡΙΘΜΗΤΙΚΗ ΑΝΑΛΥΣΗ, 3 Ο ΕΞΑΜΗΝΟ, ΔΙΔΑΣΚΩΝ: Δρ Ιωάννης Αθ. Σταυράκης

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

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

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

ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ Ι

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

ΜΕΡΙΚΑ ΣΤΟΙΧΕΙΑ ΓΙΑ ΤΙΣ ΓΛΩΣΣEΣ ΠPOΓPAMMATIΣMOY

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ - ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΑΡΙΘΜΗΤΙΚΗ ΑΝΑΛΥΣΗ, 3 Ο ΕΞΑΜΗΝΟ, ΔΙΔΑΣΚΩΝ: Δρ Ιωάννης Αθ.

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

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

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

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

ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ Ι

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

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

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

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

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

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

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

Μέθοδοι μονοδιάστατης ελαχιστοποίησης

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

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

Non Linear Equations (2)

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

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

Μέθοδοι μονοδιάστατης ελαχιστοποίησης

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

Επαναληπτικές μέθοδοι

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

Κεφάλαιο 5. Το Συμπτωτικό Πολυώνυμο

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

Θεωρητικές Ασκήσεις. ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ. 1 ο Μέρος

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

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

ΜΕΜ251 Αριθμητική Ανάλυση

Κεφάλαιο 7 ο Βασικές Έννοιες Προγραμματισμού (σελ )


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

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

ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ Ι

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

Αριθμητική Ανάλυση και Εφαρμογές

Παράδειγμα #1 ΑΡΙΘΜΗΤΙΚΗ ΚΙΝΗΤΗΣ ΥΠΟΔΙΑΣΤΟΛΗΣ ΕΠΙΜΕΛΕΙΑ: Ι. Λυχναρόπουλος

Αξιοποίηση Η/Υ και Πληροφορικής στην Μηχανική

Εργαστήριο 10 Πίνακες. Πίνακες. Η έννοια της δόμησης δεδομένων στη PASCAL. Σκοπός

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

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

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

ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ - ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΑΡΙΘΜΗΤΙΚΗ ΑΝΑΛΥΣΗ, 3 Ο ΕΞΑΜΗΝΟ, ΔΙΔΑΣΚΩΝ: Δρ Ιωάννης Αθ.

ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ

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

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

ΑΡΙΘΜΗΤΙΚΕΣ ΜΕΘΟΔΟΙ, 5 Ο ΕΞΑΜΗΝΟ, ΠΕΡΙΕΧΟΜΕΝΑ ΠΑΡΑΔΟΣΕΩΝ. Κεφ. 1: Εισαγωγή (διάρκεια: 0.5 εβδομάδες)

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

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

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

Εισαγωγή στην πληροφορική

ΕΙ ΑΓΩΓΉ ΣΗΝ FORTRAN

ΚΕΝΤΡΙΚΗ ΟΡΓΑΝΩΤΙΚΗ ΕΠΙΤΡΟΠΗ 8 ου ΠΑΝΕΛΛΗΝΙΟΥ ΔΙΑΓΩΝΙΣΜΟΥ ΠΛΗΡΟΦΟΡΙΚΗΣ 1996 ΠΡΟΚΑΤΑΡΚΤΙΚΗ ΦΑΣΗ ΠΑΝΕΛΛΗΝΙΟΥ ΔΙΑΓΩΝΙΣΜΟΥ ΘΕΜΑΤΑ ΓΥΜΝΑΣΙΟΥ

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

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

Ο αλγόριθμος πρέπει να τηρεί κάποια κριτήρια

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

Στοιχειώδης προγραμματισμός σε C++

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

επιµέλεια Θοδωρής Πιερράτος

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

Πληροφορική 2. Αλγόριθμοι

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

A Τελική Εξέταση του μαθήματος «Αριθμητική Ανάλυση» Σχολή Θετικών Επιστημών, Τμήμα Μαθηματικών, Πανεπιστήμιο Αιγαίου

Κατακερματισμός. 4/3/2009 Μ.Χατζόπουλος 1

Transcript:

ΦΥΣ 145 - Διαλ.06 1 Oι εντολές COMMON και PARAMETER q Oι εντολές αυτές είναι μή εκτελέσιμες και δεν είναι απαραίτητες σε διάφορα προγράμματα. q Η ανάγκη τους όμως παρουσιάζεται σε μεγάλα και πολύπλοκα προγράμματα. Ιδιαίτερα η εντολή COMMON εμφανίζεται κυρίως σε προγράμματα πολλών subroutines όπου πληροφορίες πρέπει να περάσουν από ένα υποπρόγραμμα σε άλλο. q Οι κανόνες γραφής και χρήσης τους διαφέρουν αρκετά από υπολογιστή σε υπολογιστή. Ωστόσο είναι πολύ χρήσιμες

COMMON και COMMON blocks ΦΥΣ 145 - Διαλ.06 2 q Oι περισσότερες γλώσσες προγραμματισμού υποστηρίζουν τις λεγόμενες γενικές μεταβλητές (global variables. Mια μεταβλητή θεωρείται γενική όταν μπορεί να χρησιμοποιηθεί από διάφορα τμήματα του προγράμματος (main program, functions, subroutines. Είναι σημαντικές για να περάσουν πληροφορίες από μια μονάδα του προγράμματος σε άλλη. Ότι έχουμε δει μέχρι τώρα δεν είναι γενικές μεταβλητές. Ορίζονταν μόνο σε ένα μέρος του προγράμματος. q COMMON blocks δίνουν την ευκαιρία να ορίσουμε αυτές τις γενικές μεταβλητές διευκολύνοντας έτσι το μοίρασμα της ίδιας πληροφορίας με πολλές μονάδες του προγράμματος χωρίς να χρειάζεται να τις περάσουμε σα παραμέτρους των διαφόρων functions ή subroutines. Το πλεονέκτημα είναι ότι δεν χρειάζεται να γράφουμε πολλές παραμέτρους αν θέλουμε να μοιράζονται με διάφορα μονάδες του προγράμματος. q Τo COMMON block μας δίνει μεγάλη ευκολία αλλά πρέπει να χρησιμοποιηθεί με πολύ μεγάλη προσοχή. Αυτό γιατί με την απουσία των γενικών μεταβλητών μπορούμε να ξέρουμε τη σχέση μιας μονάδας του προγράμματος με το υπόλοιπο πρόγραμμα. Όλες οι μεταβλητές περνάνε σαν παράμετροι και ξέρουμε τι κάνουν. Με τις γενικές μεταβλητές οι τιμές τους μπορούν να αλλάξουν σε κάποια μονάδα του προγράμματος και μετά να περάσουν σε κάποια άλλη.

Common blocks COMMON / MATRIX / A ΦΥΣ 145 - Διαλ.06 3 q Ένα COMMON block είναι μια ομάδα γενικών μεταβλητών που μπορεί να μοιραστεί μεταξύ δύο τουλάχιστον μονάδων του προγράμματος Ονομάζεται block γιατί όλες οι μεταβλητές που ανήκουν στο COMMON block αποθηκεύονται στην ίδια περιοχή μνήμης του υπολογιστή. Ø Υπάρχουν πολλοί τρόποι για να ορίσουμε ένα COMMON block. q O ακόλουθος τρόπος είναι καλό να ακολουθείται για αποφυγή λαθών: q Για να δημιουργήσουμε ένα COMMON block πρέπει πρώτα να δηλώσουμε όλες τις μεταβλητές που ανήκουν σ αυτό: π.χ. REAL A(5,3 q Μετά πρέπει να δημιουργήσουμε ένα COMMON block με το να δώσουμε την εντολή COMMON ακολουθούμενη από το όνομα που θέλουμε να δώσουμε στο block και κατόπιν τη λίστα όλων των μεταβλητών που ανήκουν στο block. Αυτός είναι ο ορισμός του COMMON block. (Πρέπει να υπάρχει σε όλες τις μονάδες του προγράμματος που χρησιμοποιούν τις μεταβλητές του COMMON block. q To COMMON block πετυχαίνει το ακόλουθο: Παρόλο που το όνομα της μεταβλητής Α εμφανίζεται σε διαφορετικά σημεία του προγράμματος ωστόσο είναι αποθηκευμένη σε μια μόνο περιοχή μνήμης και μοιράζεται σε όλα τα υποπρογράμματα. Κάθε μονάδα του προγράμματος που περιέχει το COMMON/MATRIX θα έχει πρόσβαση στη μεταβλητή Α. q Το όνομα πρέπει να είναι διαφορετικό από όλα τα υπόλοιπα COMMON blocks του προγράμματος και ονόματα υποπρογραμμάτων.

Παράδειγμα ΦΥΣ 145 - Διαλ.06 4 C This subroutine prints out the global array SUBROUTINE PRNT REAL A(5,5 COMMON /MATRIX/ A INTEGER I, J DO I = 1, 5 WRITE (*,* (A(I,J, J=1,5 ENDDO END C This subroutine computes the square C root of every element in the global array. SUBROUTINE ROOT REAL A(5,5 COMMON /MATRIX/ A INTEGER I, J DO I = 1, 5 DO J = 1, 5 A(I,J = SQRT(A(I,J ENDDO ENDDO CALL PRNT END C The main program initializes the global array PROGRAM COMM REAL A(5,5 COMMON /MATRIX/ A INTEGER I, J DO I = 1, 5 DO J = 1, 5 A(I,J = I*(J+2.0 ENDDO ENDDO CALL ROOT STOP END

Κανόνες για COMMON blocks ΙΝCLUDE files ΦΥΣ 145 - Διαλ.06 5 q Χρησιμοποιείται πάντα το ίδιο όνομα μεταβλητών στον ορισμό του COMMON block στις διάφορες μονάδες του προγράμματος. q Χρησιμοποιείται πάντα τον ίδιο τύπο μεταβλητών που ανήκουν στο COMMON block. (π.χ. όχι κάποτε ορισμένες σα REAL και άλλοτε διαφορετικού τύπου q Η λίστα των μεταβλητών που βρίσκονται στον ορισμό του COMMON block πρέπει να δίνεται πάντοτε με την ίδια σειρά στα διάφορα υποπρογράμματα που χρησιμοποιούν το COMMON block και να είναι του ίδιου αριθμού κάθε φορά. π.χ. REAL A(5 COMMON / MATRIX / A Σε άλλο υποπρόγραμμα δεν μπορούμε να ορίσουμε REAL A(10 REAL X COMMON /MATRIX/A ß Λάθος (στο υποπρόγραμμα ο Α έχει μέγεθος 10 όχι 5 COMMON /MATRIX/A,X ß Λάθος (η Χ δεν υπάρχει στο αρχικό common q Mη ακολουθία των παραπάνω κανόνων προϋποθέτει γνώση του τρόπου με τον οποίο η FORTRAN οργανώνει την μνήμη... και τις περισσότερες φορές σε λάθη. " Είναι πολλές φορές χρήσιμο να γράφουμε τις μεταβλητές και τον ορισμό του COMMMON block σε ένα αρχείο με την ονομασία <onoma>.ινc και να το συμπεριλαμβάνουμε στην αρχή κάθε μονάδας που χρησιμοποιεί το COMMON block PROGRAM COMM INCLUDE MTRX.INC To αρχείο MTRX.INC περιέχει REAL A(5 COMMON/ MATRX/ A

ΦΥΣ 145 - Διαλ.06 6 Η εντολή PARAMETER q Η εντολή αυτή μας δίνει ένα τρόπο με τον οποίο μπορούμε να αντιστοιχήσουμε το όνομα μιας παραμέτρου του προγράμματος με μια σταθερά q Είδαμε σε κάποια προβλήματα ότι χρειαζόμασταν την τιμή του ( =3.141592654 το οποίο το χρησιμοποιήσαμε αρκετές φορές στο πρόγραμμα. Αντί να πληκτρολογούμε κάθε φορά το νούμερο μπορούμε να αντιστοιχήσουμε μια φορά μόνο τη τιμή στη μεταβλητή PI και κατόπιν να αναφερόμαστε σ αυτό με το όνομα PI. q Ωστόσο αν το PI ήταν μόνο μια μεταβλητή θα μπορούσαμε να κάνουμε πράξεις με αυτό και ακόμα να αλλάξουμε την τιμή του μέσω μιας εντολής ανάθεσης όπως κάνουμε με όλες τις μεταβλητές Δηλαδή REAL A, B, PI PI = 3.141592654 : : PI = 4*A/B : : Η τιμή του PI αλλάζει. Αυτό μπορεί να προκλήθηκε και τυχαία ενώ θέλαμε να γράψουμε LI=4*A/B (P και L είναι κοντά στο πληκτρολόγιο. Αυτό δεν βρίσκεται από το compiler. Η Fortran μας βοηθά με τη χρήση της εντολής PARAMETER που πρέπει να ακολουθεί μια δήλωση τύπου μεταβλητής

ΦΥΣ 145 - Διαλ.06 7 Η εντολή PARAMETER Τρόπος χρήσης Ø Ø Ø REAL PI, C, CHARGE PARAMETER(PI=3.14159254, C=2.997925 PARAMETER(CHARGE = 1.6021917 Ποιο το πλεονέκτημα της εντολής PARAMETER? Δεν μπορείς να αλλάξεις αργότερα μέσα στο πρόγραμμα την τιμή της παραμέτρου με μια εντολή ανάθεσης. Δηλαδή η τιμή για τις μεταβλητές PI, C και CHARGE είναι πλέον αμετάβλητες στο πρόγραμμα και ο compiler θα δηλώσει κάποιο μήνυμα αν συναντήσει κάποια εντολή που προσπαθεί να αλλάξει κάποια από τις μεταβλητές που δηλώθηκαν σαν σταθερές PARAMETER Μια εντολή PARAMETER μπορεί να περιέχει και μια αριθμητική έκφραση, ώστε κάποιες απλές αριθμητικές πράξεις μπορούν να χρησιμοποιηθούν όταν ορίζουμε τη τιμή μια σταθεράς PARAMETER, π.χ. REAL PI, TWOPI, RADIAN PARAMETER(PI=3.14159254, TWOPI=2.*PI, RADIAN=360./PI Η εντολή είναι χρήσιμη για να δηλώνουμε το μέγεθος ενός πίνακα π.χ. INTEGER NDIM PARAMETER (NDIM=100 REAL MATRX(NDIM

H εντολή DATA ΦΥΣ 145 - Διαλ.06 8 q H εντολή DATA εξυπηρετεί τις περιπτώσεις που θέλουμε να καθορίσουμε τιμές μεταβλητών χωρίς ο υπολογιστής να διαβάσει κάποια στοιχεία από κάποιο αρχείο ή το πληκτρολόγιο. q Η γενική μορφή της εντολής είναι: DATA M / Σ / όπου Μ είναι της μορφής m 1, m 2,,m n μεταβλητές και Σ είναι της μορφής σ 1, σ 2,..., σ n σταθερές H σημασία είναι: δώσε στην μεταβλητή m 1 την τιμή σ 1 κ.ο.κ q Το πλήθος μεταβλητών (που χωρίζονται με κόμμα θα πρέπει να είναι ίσο με το πλήθος των σταθερών που επίσης χωρίζονται με κόμμα. Παράδειγμα: DATA AX, AY, AZ / 10.0, -2.0, 3.1/ έχει σαν αποτέλεσμα η μεταβλητή ΑΧ=10.0, η ΑΥ=-2.0 και η ΑΖ=3.1 REAL X(5 DATA X/1.1, 2.1, 3.1, 4.1, 5.1/ Στην περίπτωση αυτή γεμίζουμε τα στοιχεία ενός πίνακα Χ(5 με τις τιμές ώστε μετά θα έχουμε Χ(1=1.1, Χ(2=2.1,... Χ(5=5.5 DATA B,C,D,E/3.1,3*2.5/ H B=3.1 και C=D=E=2.5 (3*2.5 δηλώνει 3 φορές 2.5

Λογικές μεταβλητές ΦΥΣ 145 - Διαλ.06 9 q Πολύ συχνά συναντούμε περιπτώσεις που χρειαζόμαστε δυαδική πληροφορία της μορφής ΟΝ/OFF, TRUE/FALSE, YES/NO και στις περιπτώσεις αυτές χρησιμοποιούμε τις μεταβλητές τύπου LOGICAL LOGICAL FLAG Οι λογικές μεταβλητές παίρνουν μόνο 2 τιμές: FLAG=.TRUE. ή FLAG=.FALSE. Προσοχή στις (. Έχουμε ήδη δει τις λογικές μεταβλητές από τις εντολές IF: IF (A.EQ.B THEN Η λογική έκφραση (A.EQ.B επιστρέφει μια τιμή η οποία είναι TRUE/FALSE και η οποία προσδιορίζει τη ροή που θα ακολουθηθεί. Α η ποσότητα είναι TRUE τότε (THEN εκτελούμε το επόμενη εντολή, διαφορετικά (ΕLSE κάνουμε κάτι άλλο. Κατά το ίδιο τρόπο τα ακόλουθα ισχύουν: LOGICAL FLAG FLAG =.TRUE. : IF (FLAG THEN : ELSE : ENDIF

ΦΥΣ 145 - Διαλ.06 10 Μαθηματικές μέθοδοι Βασικές ιδέες q q q Οι μαθηματικές μέθοδοι χρησιμοποιούν αριθμούς για την προσομοίωση μαθηματικών διεργασιών που με την σειρά τους συνήθως χρησιμοποιούνται για να προσομοιώσουν καταστάσεις που συναντιόνται στη καθημερινή ζωή. Η επιλογή μιας εξίσωσης ή αλγόριθμου για την επίλυση ενός προβλήματος επηρεάζει όχι μόνο τους υπολογισμούς αλλά και την κατανόηση των αποτελεσμάτων που θα πάρουμε. Οι βασικές ιδέες που προσπαθούν να εφαρμόσουν και να επιλύσουν: Ø Ø Ø Ø Ø Εύρεση ενός πλήθους μεθόδων και σχολιασμός για την εφαρμογή τους σε γενικές περιπτώσεις Μελέτη οικογενειών όμοιων προβλημάτων και σύνδεση της μιας οικογένειας με άλλη αποφεύγοντας μεμονωμένους αλγόριθμους ή εξισώσεις Υπολογισμός ή αποφυγή σφάλματος στρογγυλοποίησης. Η μεγαλύτερη απώλεια σημαντικότητας σε νούμερα συμβαίνει όταν 2 αριθμοί περίπου ίδιου μεγέθους αφαιρούνται με αποτέλεσμα τα περισσότερα από τα αρχικά σημαντικά ψηφία αναιρούνται. Υπολογισμός σφάλματος αποκοπής: Ο υπολογιστής έχει πεπερασμένη ταχύτητα και μπορεί να κάνει πεπερασμένο αριθμό πράξεων σε ορισμένο χρονικό διάστημα Ανατροφοδότηση (feedback σταθερότητα

ΦΥΣ 145 - Διαλ.06 11 Σφάλματα υπολογισμών q Ανθρώπινα λάθη q Πολλές φορές σφάλματα ερμηνείας ή τυπογραφικά λάθη q Τυχαία σφάλματα q Φυσικά φαινόμενα (κοσμική ακτινοβολία, διακοπή/διαταραχή ρεύματος q Σφάλμα προσέγγισης και αποκοπής q Σφάλμα λόγω υπερχείλισης ή υποχείλισης q Σφάλμα στρογγυλοποίησης

ΦΥΣ 145 - Διαλ.06 12 Εύρεση ριζών Bisection Method q H γραφική παράσταση του παρακάτω σχήματος μιας μονότονης συναρτήσεως y(x κόβει τον άξονα των x σ ένα σημείο μεταξύ x=0 και x=1 H αναλυτική εξάρτηση του y από το x δεν είναι γνωστή. Για κάθε x όμως στο διάστημα 0 x 1 μπορούμε να βρούμε με τον Η/Υ το αντίστοιχο y με ένα δεδομένο πρόγραμμα. Θέλουμε το πρόγραμμα που να βρίσκει τη ρίζα x 0 της εξίσωσης y(x = 0 με προσέγγιση 0.01. y 0 1 x

ΦΥΣ 145 - Διαλ.06 13 Εύρεση ριζών Bisection Method Στην αρχή ορίζουμε 2 αριθμούς L=0 και R=1 (όρια Οι L και R θα αλλάξουν πολλές τιμές αλλά πάντα L x 0 R Ρωτάμε αν η διαφορά R-L 0.01 (προσέγγιση Την πρώτη φορά η διαφορά είναι 1. Προχωρούμε προς τα κάτω και ορίζουμε σα x το μέσο του διαστήματος μεταξύ των σημείων με τετμημένες L και R. Υπολογίζουμε το y (με το Η/Υ που αντιστοιχεί στο x. Αν το y > 0, θέτουμε R=x και έχουμε ένα νέο διάστημα (L,R μέσα στo οποίο είναι το x 0. Aν το y < 0 θέτουμε L=x. Πάλι x 0 είναι στο διάστημα (L,R. Ρωτάμε R-L < 0.01? Έτσι υποδιπλασιάζουμε το διάστημα (L,R συνεχώς έως R-L<0.01 οπότε και κρατάμε την τελευταία τιμή του x για τον οποίο y=0.

ΦΥΣ 145 - Διαλ.06 14 Bisection program Τµήµα κώδικα που εφαρµόζει τη µέθοδο της διχοτόµησης φαίνεται παρακάτω Read*, low_x Read*, up_x Half = (up_x low_x / 2 Do while (half.gt. Epsi mid_x = (up_x + low_x/2 if (funct(mid_x * funct(low_x.lt. 0 then up_x = mid_x else low_x = mid_x endif half = (up_x low_x/2 Enddo Σύγκλιση της µεθόδου: Αν το αρχικό διάστηµα είναι ε i το σφάλµα θα είναι ε i /2. Μετά από κάθε επανάληψη το αρχικό σφάλµα διαιρείται µε 2 οπότε µετά από Ν επαναλήψεις το σφάλµα είναι ε f = ε i /2 N όπου ε f η επιθυµητή ακρίβεια Εποµένως ο αριθµός των βηµάτων για την επίτευξη της επιθυµητής ακρίβειας είναι N = log! i /! f ( /log 2 (

ΦΥΣ 145 - Διαλ.06 15 f(x Εύρεση ριζών Newton s Method (Newton-Rhapson Μέθοδος εύρεσης λύσης μη γραμμικής εξίσωσης. Συγκλίνει αν η αρχική προσεγγιστική τιμή για την ρίζα είναι κοντά στην πραγματική τιμή. H σύγκλιση είναι ανάλογη του τετραγώνου του αρχικού σφάλματος! i = x " x i Γρηγορότερη από τη μέθοδο της διχοτόμησης Μειονέκτημα ----> Πρέπει να υπολογισθεί η παράγωγος της μη γραμμικής συνάρτησης g(x=f (x Η μέθοδος στηρίζεται στην χρησιμοποίηση των παραγώγων f (x της συνάρτησης f(x για ταχύτερη σύγκλιση στην εύρεση των ριζών της f(x =0 a x i+1 g(x x i H βασική ιδέα: Μια συνεχής συνάρτηση, παραγωγίσιμη συνάρτηση f(x που έχει συνεχή δεύτερη παράγωγο, μπορεί να αναπτυχθεί κατά Taylor ως προς ένα σημείο x n που είναι κοντά στη ρίζα. Έστω ότι η πραγματική ρίζα αυτή είναι α f ""(x f (a = f (x n + (a! x n f "(x n + (a! x n 2 n +! 2! Εφόσον x=α είναι ρίζα της f, τότε f(α = 0 οπότε από τους 2 πρώτους όρους του αναπτύγματος έχουμε: 0 = f (a = f (x n + (a! x n f "(x n! a = x n " f (x n f #(x n

Εύρεση ριζών Newton s Method ΦΥΣ 145 - Διαλ.06 16 Επομένως χρειαζόμαστε f(x και f (x για την μέθοδο. Κάθε επανάληψη της μεθόδου βρίσκει x k +1 = x k! f (x k f "(x k Σφάλμα: x k+1! a = x k! a! f (x k f "(x k #! =! + f (x k k+1 k f "(x k Χρησιμοποιώντας τους 3 πρώτους όρους από Taylor: f(x f ""(x 0 = f (a = f (x k + (a! x k f "(x k + (a! x k 2 k 2 f ##(x! f (x k = "(a " x k f #(x k " (a " x k 2 k g(x 2 2 f ##(x! f (x Αντικαθιστώντας στην (Α a x k = "! k f #(x k "! k k i+1 2! k +1 = "! 2 k f ##(x k Ρυθμός σύγκλισης: 2 f #(x k Προβλήματα της μεθόδου: (A f(x (a Αργή σύγκλιση προς τη ρίζα όταν f (x~0 κοντά στη ρίζα f(x (γ έλλειψη σύγκλισης για ασύμμετρες συναρτήσεις f(x (b Τοπικό ακρότατο στέλνει μακριά την τιμή x k+1 που χρησιμοποιείται στην επόμενη επανάληψη f (x + a =! f (x! a

ΦΥΣ 145 - Διαλ.06 17 Μέθοδος Newton s - πρόγραµµα Error = func(x / deriv(x Do while (abs(error.gt. Epsi x = x error error = func(x / deriv(x enddo! Οπου θα πρέπει να οριστούν οι συναρτήσεις deriv και func