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



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

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

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

Βασικοί τύποι δεδομένων (Pascal) ΕΠΑ.Λ Αλίμου Γ Πληροφορική Δομημένος Προγραμματισμός (Ε) Σχολ. Ετος Κων/νος Φλώρος

2ο ΓΕΛ ΑΓ.ΔΗΜΗΤΡΙΟΥ ΑΕΠΠ ΘΕΟΔΟΣΙΟΥ ΔΙΟΝ ΠΡΟΣΟΧΗ ΣΤΑ ΠΑΡΑΚΑΤΩ

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

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

Συναρτήσεις στη Visual Basic 6.0

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

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

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

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

Ρητή μετατροπή αριθμητικής τιμής σε άλλο τύπο. Τι θα τυπωθεί στον παρακάτω κώδικα;

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

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

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

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

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

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

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

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

3.1 Αριθμητικοί και Λογικοί Τελεστές, Μετατροπές Τύπου (Casting)

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

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

Βασικές έννοιες προγραμματισμού

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

5 &6. Τύποι δεδομένων, τελεστές και

Εισαγωγή στην γλώσσα προγραμματισμού C

Εισαγωγή στη γλώσσα προγραμματισμού C++

Εισαγωγή στη γλώσσα προγραμματισμού Fortran 95

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

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

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

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

Βασικά στοιχεία γλώσσας προγραμματισμού. Σπάχος Κυριάκος Καθηγητής Πληροφορικής ΠΕ19

8 FORTRAN 77/90/95/2003

Πρόβλημα 29 / σελίδα 28

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

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

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος

2.1. Εντολές Σχόλια Τύποι Δεδομένων

Διαδικασιακός Προγραμματισμός

Διαδικασιακός Προγραμματισμός

ΚΕΦΑΛΑΙΟ 7 ο. Έτσι ο προγραµµατισµός µε τη ΓΛΩΣΣΑ εστιάζεται στην ανάπτυξη του αλγορίθµου και τη µετατροπή του σε σωστό πρόγραµµα.

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

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

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

Αναφορά (1/2) Μπορούμε να ορίσουμε μια άλλη, ισοδύναμη αλλά ίσως πιο σύντομη, ονομασία για ποσότητα (μεταβλητή, σταθερή, συνάρτηση, κλπ.

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

ΗΥ-150. Προγραμματισμός

7.1 Αλφάβητο. 7.2 Τύποι δεδομένων. 7.3 Σταθερές. 7.4 Μεταβλητές. 7.5 Αριθμητικοί τελεστές. 7.6 Συναρτήσεις. 7.7 Αριθμητικές εκφράσεις. 7.

ΗΥ-150. Προγραμματισμός

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

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

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

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL)

Φυσικές και τεχνητές γλώσσες. Το αλφάβητο της ΓΛΩΣΣΑΣ, Τύποι Δεδομένων. Σταθερές, Μεταβλητές, Τελεστές, Συναρτήσεις, Δομή Προγράμματος

ΥΠΟΛΟΓΙΣΤΕΣ Ι. Τι χρειάζεται η εντολή DO ; ΕΠΑΝΑΛΗΨΕΙΣ ΕΝΤΟΛΗ DO. Όταν απαιτείται να εκτελεστεί πολλές φορές το ίδιο τμήμα ενός προγράμματος.

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΣΕ ΓΛΩΣΣΟΜΑΘΕΙΑ

Σημαντικές δυνατότητες των σύγχρονων υπολογιστικών μηχανών: Αξιόπιστη καταγραφή πολύ μεγάλου όγκου δεδομένων

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) (PASCAL ) Μεταβλητές- Τύποι- Τελεστές

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον

ΕΙ ΑΓΩΓΉ ΣΗΝ FORTRAN

ΣΥΝΑΡΤΗΣΕΙΣ. Η σύνταξη μιας συνάρτησης σ ένα κελί έχει την γενική μορφή: =όνομα_συνάρτησης(όρισμα1; όρισμα2;.)

Εισαγωγή στη γλώσσα προγραμματισμού Fortran 95

Εφαρμοσμένη Πληροφορική ΙΙ (Θ) Είσοδος/Έξοδος Μεταβλητές Τύποι Μεταβλητών Τελεστές και Προτεραιότητα Μετατροπές Μεταξύ Τύπων

2 ΟΥ και 7 ΟΥ ΚΕΦΑΛΑΙΟΥ

Αλγόριθμοι Αναπαράσταση αλγορίθμων Η αναπαράσταση των αλγορίθμων μπορεί να πραγματοποιηθεί με:

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

Εισαγωγή στη γλώσσα προγραμματισμού Fortran 95

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

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

Διαδικασιακός Προγραμματισμός

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τι χρειάζεται η εντολή if ; Εντολή if. Παράδειγμα #1. Παράδειγμα #1

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

Βασικά στοιχεία της Java

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

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

Διάλεξη 2. Μεταβλητές - Δομές Δεδομένων - Eίσοδος δεδομένων - Έξοδος: Μορφοποίηση - Συναρτήσεις. Διοργάνωση : ΚΕΛ ΣΑΤΜ

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ. Δρ. Π. Νικολαΐδου

Χρονικές σειρές 1 ο μάθημα: Εισαγωγή στη MATLAB

Κεφάλαιο 1. Τι θα μάθουμε σήμερα: -AND, OR, NOT. -Ενσωματωμένες συναρτήσεις. -Μαθηματικοί τελεστές -ΤΕΛΕΣΤΕΣ DIV ΚΑΙ MOD. -Προτεραιότητα πράξεων

Γ7.1 Επανάληψη ύλης Β Λυκείου. Γ Λυκείου Κατεύθυνσης

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΑΛΓΟΡΙΘΜΟΥΣ ΚΑΙ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ. Διδάσκουσα Δρ Β.

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

Εισαγωγή στη γλώσσα προγραμματισμού C++14

Διαδικασιακός Προγραμματισμός

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

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

Σκοπός. Αλγεβρικοί και Λογικοί Υπολογισμοί στη PASCAL

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

Δεδομένα, τελεστές, είσοδος/έξοδος

Δομές Ακολουθίας- Επιλογής - Επανάληψης. Δομημένος Προγραμματισμός

Κεφάλαιο 2 ο Βασικές Έννοιες Αλγορίθμων (σελ )

Εισαγωγή στη Matlab Βασικές Συναρτήσεις

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


ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal 1 ο Μέρος σηµειώσεων (Ενότητες 8.1 & 8.2 σχολικού βιβλίου)

Προγραμματισμός Η/Υ. Ενότητα 2β: Εισαγωγή στη C (Μέρος Δεύτερο)

Transcript:

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

Δομή Κυρίως Προγράμματος Δήλωση Μεταβλητών και Επώνυμων Σταθερών Αρχικοποίηση Μεταβλητών Είσοδος Δεδομένων Υπολογισμοί Έξοδος Αποτελεσμάτων

Κύρια στοιχεία ενός προγράμματος Ένα πρόγραμμα αποτελείται από Εντολές Εισόδου Εξόδου Χειρισμού αρχείων, Εκχώρησης, Απόφασης, Επανάληψης, Μορφοποίησης, Κλήσης υποπρογραμμάτων Σχόλια Ελεύθερο κείμενο που ξεκινά με τον χαρακτήρα! Σταθερές Ρητές και Επώνυμες Μεταβλητές Ακέραιες, Πραγματικές, Μιγαδικές, Χαρακτήρων, Λογικές Πίνακες

Βασικοί Τύποι Δεδομένων Αριθμητικοί Ακέραιοι (integer) Πραγματικοί (real) Μιγαδικοί (complex) Μη Αριθμητικοί Λογικοί (logical) Χαρακτήρων ή αλφαριθμητικών ή συμβολοσειρών (character) Κάθε τύπος δεδομένων έχει τέσσερα χαρακτηριστικά Όνομα Πεδίο επιτρεπτών τιμών (εύρος τιμών) Τρόπο αναπαράστασης των σταθερών Σύνολο τελεστών που μπορεί να συνδυαστεί Η δήλωση του τύπου των δεδομένων γίνεται με προκαθορισμένους και συγκεκριμένους κανόνες σύνταξης

Είδος (Κind) Βασικών Τύπων Δεδομένων (FTN95) Όνομα ΚΙΝD (στην FTN95) Μέγεθος (Βytes) Παραδείγματα Ρητών Σταθερών Integer 1, 2, 3, 4 1,2,4,8 12345 b 01101-78 o 3470 32_4 z 4fa2 Real 1, 2, 3 4,8,10 1.2345 123.45Ε-4_2.12345D1 Complex 1, 2, 3 8,16,20 (2., 3.) (2.E0, 30.E-1) (.2D1,.03D2) Character όσο δηλωθούν (προκαθορισμένο = 1) 'abc' "abc" '$&3%(A"lfaBita' Logical 1,2,3 1,2,4.TRUE..FALSE.

Παραδείγματα Ρητών Αριθμητικών Σταθερών INTEGER Σωστό Λάθος -435 1,234 245 --3 +35_2 5- b'01101' 1b4 z'1d4' Δεκτό o'643' 43.0 1D4 REAL Σωστό Λάθος 123.45 12,342.43.123 43.2_10 543. 3EE4-0.12 E4 +12.0 3E3.4 12.34E3 Δεκτό 12.3E-3 65 3.E+4_2 3E2 2.4D-2 COMPLEX Σωστό Λάθος CMPLX(4.33,8.4) (1,234,4) (4.33,8.4) (1.7,E4) (-4.E3,-2.4) Δεκτό (5.D3,-.3D-1) (2.4,3) (0.,0.) 43.0 (3) (4,6)

Παραδείγματα Ρητών Λογικών Σταθερών και Σταθερών Χαρακτήρα CHARACTER Σωστό 'Jim' "Foithths" 'Mechanical Engineering #1' '' ' ' 'fuw@!dfsfd*(77-33)%' 'Don''t forget' "Don't forget" 'This is a very & &long string' Λάθος 'John 'Don't forget' 'Good Morning" 'Πανεπιστήμιο' LOGICAL Σωστό.True..TRUE..False..FAlsE. Λάθος True.T..F. T F.False '.True.' 'False'

Εύρος τιμών (range) των Αριθμητικών Τύπων Δεδομένων (FTN95) Integer KIND Από Έως 1-128 127 2-32 768 32 767 3-2 147 483 648 2 147 483 647 4-9 223 372 036 854 775 808 9 223 372 036 854 775 807 Real (στον πίνακα παρουσιάζουμε το εύρος των θετικών αριθμών) KIND Από Έως Precision 1 1.175495E-38 3.402823E+38 6 2 2.225073858508E-0308 1.797693134862E+0308 15 3 3.36210314311209350 E-4932 1.18973149535723176 E+4932 18 Complex = Δύο Reals

Αναπαράσταση Μεταβλητής στη Μνήμη RAM π.χ. Integer(2) :: year=2012 (2012) 10 = (11111011100) 2 = (07DC) 16 year Διεύθυνση Δεδομένα. Β3 00402001 FA 00402002 46 00402003 DC 00402004 07 004020045 F4 όνομα ή πιο απλά: τιμή year 2012 integer(2) 004020046 FF τύπος Κάθε μεταβλητή μπορεί να αποθηκεύσει ανά πάσα στιγμή μόνον ένα δεδομένο του τύπου της. Δηλ. Αν της δώσουμε νέα τιμή, η παλιά της τιμή χάνεται.

Υπονοούμενη - Ρητή Δήλωση Μεταβλητών Για αποφυγή συνήθων σφαλμάτων, στους κώδικές μας θα χρησιμοποιούμε ΠΑΝΤΟΤΕ την εντολή implicit none σαν πρώτη γραμμή του προγράμματος (αμέσως μετά τον τίτλο)

Δηλώσεις Μεταβλητών τύπος [ ( [KIND=] είδος) ] [* size in Bytes] [ [, ιδιότητες ] : : ] λίστα τύπος είδος ιδιότητες :integer, real (double precision), complex, character, logical : 1, 2, 3, :parameter, allocatable, dimension, intent,... (πιν.3-7 σελ.92) λίστα : ονόματα μεταβλητών χωρισμένα με κόμμα Παρατήρηση: Στους character αντί του KIND χρησιμοποιούμε το LEN Τα :: χρησιμοποιούνται υποχρεωτικά όταν: Δηλώσουμε μια ή περισσότερες ιδιότητες Ταυτόχρονα με τη δήλωση δώσουμε αρχικές τιμές στα δεδομένα

Παραδείγματα Δηλώσεων Μεταβλητών integer :: i,k integer(kind=3) :: i,k integer(3) :: i,k integer*4 :: i,k real :: x real(kind=1) :: x real(1) :: x real*4 :: x real(2) :: y double precision :: y real*8 :: y logical :: f logical(kind=3) :: f logical(3) :: f logical*4 :: f complex :: c complex(1) :: c character :: s character(len=1) :: s character(1) :: s character*1 :: s character(70) :: s character*70 :: s Σε κάθε ένα bullet οι δηλώσεις είναι μεταξύ τους ισοδύναμες.

Αρχικοποίηση μεταβλητών Κατά τη δήλωση μπορούμε να δώσουμε αρχικές τιμές στις μεταβλητές τύπος :: μεταβλητή = τιμή π.χ. integer :: x=4 Αν δεν αρχικοποιήσουμε την τιμή μιας μεταβλητής, τότε αυτή συνήθως (αναλόγως του compiler) παίρνει την τιμή 0 αν πρόκειται για αριθμητικό τύπο δεδομένων. ΔΕΝ ΒΑΣΙΖΟΜΑΣΤΕ ΠΟΤΕ ΣΕ ΑΥΤΟ! Στην FTN95 παράγεται Σφάλμα Χρόνου Εκτέλεσης αν χρησιμοποιηθεί σε μία έκφραση μεταβλητή που δεν έχει πάρει τιμή.

Βασικοί τρόποι απόδοσης Τιμής σε Μεταβλητή 1) Εντολή READ π.χ. READ *,x READ(10,*) x 2) Εντολή εκχώρησης τιμής = π.χ. x = 8 x = a > 4 x = Volos 3) Εντολή NAMELIST π.χ. Open(10, input_data.txt ) Namelist /mylist/ x,y; read(10, NML= mylist ) Δομή Αρχείου input_data.txt &mylist x=7 y=9 /

Επώνυμες Σταθερές τύπος, PARAMETER : : όνομα σταθεράς = τιμή

Εκφράσεις αριθμητικές Τελεστές: + - / * ** π.χ. 4+x**3/(7*y-z) Εκφράσεις λογικές Τελεστές: > ==.OR..AND. π.χ. x-4>=z.or. y/=3 αλφαριθμητικές Τελεστής: // π.χ. Tmima // Mixanologwn Κάθε τύπος δεδομένων συνοδεύεται από συγκεκριμένες εγγενείς συναρτήσεις

Μια έκφραση μπορεί να αποτελείται από: Μία ρητή σταθερά π.χ. 4 Μία επώνυμη σταθερά π.χ. pi (όπου το pi έχει δηλωθεί ως parameter) Μία μεταβλητή π.χ. z Mία εγγενή συνάρτηση π.χ. sin(x) Συνδυασμό των παραπάνω μαζί με τελεστές π.χ. 2-z**3/(y-sin(x))

Τελεστές Σειρά Προτεραιότητας Αριθμητικοί ** * / + - Αλφαριθμητικοί // Σχεσιακοί ή Συγκριτικοί (Χωρίς προτεραιότητα μεταξύ τους).lt..le..eq..ne..ge..gt. < <= == /= >= > Λογικοί.NOT..AND..OR..EQV..NEQV.

Προτεραιότητα εκτέλεσης πράξεων 1 Εκτέλεση των εκφράσεων εντός των παρενθέσεων 2 Εκτέλεση των πράξεων με εκθέτες 3 Εκτέλεση πολλαπλασιασμών και διαιρέσεων 4 Εκτέλεση προσθέσεων και αφαιρέσεων 5 Εκτέλεση αλφαριθμητικών τελεστών από μέσα προς τα έξω από δεξιά στα αριστερά από αριστερά στα δεξιά από αριστερά στα δεξιά από αριστερά στα δεξιά 6 Εκτέλεση σχεσιακών τελεστών 7 Εκτέλεση λογικών τελεστών από αριστερά στα δεξιά

Εντολές Εισόδου read(*,*) <λίστα μεταβλητών> read *, <λίστα μεταβλητών> Αμορφοποίητη είσοδος δεδομένων από το πληκτρολόγιο Τα δεδομένα τοποθετούνται στις αντίστοιχες μεταβλητές Η read διαβάζει μία γραμμή τη φορά, εκτός αν τα δεδομένα μιας γραμμής δεν επαρκούν για να καλυφτούν όλες οι μεταβλητές της, οπότε συνεχίζει το διάβασμα τιμών και από τις επόμενες γραμμές. Η read δέχεται τα δεδομένα μιας γραμμής χωρισμένα με κόμμα «,» ή κενά (spaces) μεταξύ τους. Αν τα δεδομένα μιας γραμμής είναι περισσότερα από τις μεταβλητές, τότε τα υπόλοιπα δεδομένα αγνοούνται (δεν χρησιμοποιούνται σε επόμενα read) H read * μπορεί να γραφεί και ως read* (χωρίς κενό ανάμεσα) Στο read*,x,y αν ο χρήστης δώσει 2*5, τότε θα έχουμε x=y=5 Μερικά παραδείγματα ΛΑΘΟΣ ΣΥΝΤΑΞΗ ΣΩΣΤΗ ΣΥΝΤΑΞΗ read*, x! Απαγορεύονται σταθερές read*, x read x! Λείπει το * και το κόμμα read*,x,y read*, 3! Απαγορεύονται σταθερές read(*,*) x,y read*, x+2! Απαγορεύονται εκφράσεις

Εντολές Εξόδου write(*,*) <λίστα εκφράσεων> print *, <λίστα εκφράσεων> Αμορφοποίητη έξοδος πληροφοριών στην οθόνη του Η/Υ Εμφανίζει το αποτέλεσμα των εκφράσεων το ένα δίπλα στο άλλο στην ίδια γραμμή και στο τέλος αλλάζει γραμμή Για να εμφανίσουμε μία κενή γραμμή χρησιμοποιούμε τη σύνταξη: print * ή write(*,*) (δηλ, με κενή λίστα εκφράσεων) H print * μπορεί να γραφεί και ως print* (χωρίς κενό ανάμεσα) Μερικά Παραδείγματα print *,3! Εμφανίζει το 3 print *,x! Εμφανίζει την τιμή της μεταβλητής x print *,x+2! Εμφανίζει το αποτέλεσμα της έκφρασης x+2 print *,'Hello'! Εμφανίζει το Hello (χωρίς τα εισαγωγικά) print *,x,y! Εμφανίζει τις τιμές των x και y write(*,*) x,y! Εμφανίζει τις τιμές των x και y

Εντολή Εκχώρησης <όνομα μεταβλητής> = <έκφραση> Αριστερό σκέλος: περιλαμβάνει ΜΟΝΟ το όνομα μιας μεταβλητής Δεξί σκέλος: περιλαμβάνει μεταβλητές, σταθερές, συνδυασμό τους με τελεστές Η ΤΙΜΗ του αποτελέσματος του δεξιού σκέλους ανατίθεται στην μεταβλητή του αριστερού σκέλους. Οι τύποι δεδομένων του δεξιού και του αριστερού σκέλους πρέπει να ταιριάζουν μεταξύ τους. Να μην συγχέεται με την ισότητα σε μαθηματική εξίσωση Μερικά Παραδείγματα x = 5! Εκχωρεί στην μεταβλητή x την τιμή 5 x = y+4! Εκχωρεί στην μεταβλητή x το αποτέλεσμα της έκφρασης y+4 x = x + 1! Αυξάνει την τιμή της x κατά μία μονάδα x, y = 2 ΛΑΘΟΣ ΣΥΝΤΑΞΗ

Παράδειγμα αποτίμησης αριθμητικής έκφρασης Υπολογίστε την παρακάτω έκφραση για α = 5.2, b=4.57, x=5.6, y=6.43, m=5, k=4 Με ποια σειρά εκτελούνται οι πράξεις;

Σημεία που πρέπει να προσέχουμε στις αριθμητικές εκφράσεις Στις ισότητες εκτιμάται πρώτα το δεξί μέλος και η τιμή του ανατίθεται στην μεταβλητή του ΑΡΙΣΤΕΡΟΥ μέλους Δεν υπονοείται τίποτα, όλες οι πράξεις ορίζονται ρητώς Δεν επιτρέπεται η χρήση δύο συνεχόμενων τελεστών Ορίζουμε κάθε μεταβλητή με ονόματα με σημασία και βάσει του τύπου της Όσες παρενθέσεις ανοίγουμε άλλες τόσες πρέπει να κλείνουμε ΠΡΟΣΟΧΗ στις διαιρέσεις και στην ύψωση σε δύναμη ΠΡΟΣΟΧΗ στις πράξεις με μικτούς τύπους αριθμών

ΔΙΑΙΡΕΣΕΙΣ Απαγορεύεται η διαίρεση με το μηδέν Προσοχή στις διαιρέσεις μεταξύ ακέραιων Αποκόπτεται το δεκαδικό μέρος του αποτελέσματος Η διαίρεση a bc γράφεται ως α/(b*c) ή a/b/c Πηλίκο και υπόλοιπο ακέραιας διαίρεσης Α Υ Β P Α = Β * P + Υ P= Πηλίκο Υ = Υπόλοιπο Στη FORTRAN πρέπει τα A, B, Y, P να είναι δηλωμένα ως INTEGER, τότε P = A / B Y = mod(a,b)

ΕΚΘΕΤΕΣ 0**0 -> 1 0.**0 -> 1.0 0**0. ή 0.**0. ΑΠΑΓΟΡΕΥΕΤΑΙ (FTN95) 0**(-2) -> 0 (FTN95)????? 0.**(-2) ΑΠΑΓΟΡΕΥΕΤΑΙ 0**(-2.) ΑΠΑΓΟΡΕΥΕΤΑΙ Απαγορεύεται η ύψωση ενός αρνητικού ακέραιου ή πραγματικού αριθμού σε μη ακέραια δύναμη. (Επιτρέπεται σε μιγαδικούς) A**3 A**1.3 A**3. A* e e 3.0ln A* 1.3ln Προσοχή: ύψωση ενός ακέραιου σε αρνητική δύναμη δίνει ΜΗΔΕΝ A A A

Μίξη αριθμητικών τύπων δεδομένων Όταν σε μία έκφραση υπάρχει μίξη τύπων τότε εκτελείται αυτόματα προαγωγή των τύπων πριν την αποτίμησή της, ως εξής: Ο integer προάγεται σε real ή complex Ο real προάγεται σε complex Είναι προτιμότερο να αποφεύγεται η μίξη των τύπων σε εκφράσεις, εκτός των περιπτώσεων ύψωσης real σε integer δύναμη ή ύψωσης integer σε real δύναμη. Για να αποφύγουμε την αυτόματη προαγωγή των τύπων, χρησιμοποιούμε κατάλληλα τις εγγενείς συναρτήσεις μετατροπής τύπων (int, real, cmplx, κτλ)

Βασικές Εγγενείς Συναρτήσεις Οι εγγενείς συναρτήσεις έχουν μεγαλύτερη προτεραιότητα από όλους τους τελεστές Τριγωνομετρικές Εκθετικές Λογαριθμικές Αριθμητικές Μετατροπής τύπου Χαρακτήρων sin(x), cos(x), tan(x), asin(x), acos(x), atan(y/x), atan2(y,x) exp(x),sinh(x),cosh(x),tanh(x) log(x), log10(x) abs(x), sqrt(x),conjg(x), aimag(x) mod(x,y), max( ), min( ) int(x), nint(x), real(x),cmplx(x,y) achar(x), iachar(x), len(x), trim(x), scan(x,y), index(x,y) ΠΡΟΣΟΧΗ - Τύπος ορισμάτων - Τύπος αποτελέσματος

Παρατηρήσεις Όταν χρησιμοποιούμε εγγενείς συναρτήσεις πρέπει να προσέχουμε να χρησιμοποιούμε το σωστό πλήθος ορισμάτων καθώς και τον σωστό τύπο δεδομένων π.χ. το abs(3) είναι λάθος ενώ το abs(3.) είναι σωστό Πολλές συναρτήσεις έχουν επιπλέον μορφές ανάλογα με τον αριθμητικό τύπο δεδομένων που δέχονται. π.χ. η abs έχει και την μορφή cabs όταν χρησιμοποιείται με μιγαδικούς. Παρόλα αυτά εμείς μπορούμε να καλούμε την απλή abs ακόμη και με μιγαδικούς. Με αυτόν τον τρόπο ο compiler αναλαμβάνει να καλέσει τη σωστή έκδοση για μας. Όλες οι τριγωνομετρικές συναρτήσεις δέχονται τις γωνίες μετρημένες σε ακτίνια και όχι σε μοίρες

Διαφορά μεταξύ int και nint Η int(x) μετατρέπει τον πραγματικό αριθμό x σε ακέραιο αποκόπτοντας τα δεκαδικά του ψηφία. π.χ. int(4.6) 4 Η nint(x) μετατρέπει τον πραγματικό αριθμό x σε ακέραιο στρογγυλοποιώντας τον στον πλησιέστερο ακέραιο. π.χ. nint(4.6) 5 Διαφορά μεταξύ atan και atan2 H atan(y/x) επιστρέφει τιμές στο διάστημα (-π/2,π/2) Η atan2(y,x) επιστρέφει τιμές στο διάστημα (-π,π] Πρόβλημα: Η atan(-1/-1)=atan(1/1)=π/4 Λάθος!! Ορισμός atan2 atan(y/x) x 0 atan(y/x) y 0, x 0 atan(y/x) y 0, x 0 atan2( yx, ) /2 y 0, x 0 /2 y 0, x 0 ό y 0, x 0

Μιγαδικοί Αριθμοί Δήλωση complex :: a, b Απόδοση σταθερής τιμής π.χ. για τον μιγαδικό a = 4.5 6.21i a=cmplx(4.5, -6.21) ή απλά a=(4.5, -6.21) Απόδοση τιμής με μεταβλητό πραγματικό και φανταστικό μέρος b=cmplx(x, y) Έστω z1=a+bi, z2=c+di (με a,b,c,d πραγματικούς) Άθροιση Πολλαπλασιασμός z=z1+z2 z=z1*z2 Διαφορά z=z1-z2 Διαίρεση z=z1/z2 Έστω z=x+yi (με x,y πραγματικούς) Μέτρο m=abs(z) Συζυγής z1=conjg(z) z1= x-yi Πραγματικό μέρος x=real(z) Φανταστικό μέρος y=aimag(z)

Ανταλλαγή Τιμών 2 Μεταβλητών Για την ανταλλαγή των τιμών 2 μεταβλητών δεν γίνεται με τις εντολές απαιτείται η χρήση μίας τρίτης, βοηθητικής μεταβλητής, του ιδίου τύπου: π.χ. Έστω ότι θέλουμε να ανταλλάξουμε τις τιμές των μεταβλητών x και y. Τότε χρησιμοποιούμε μία βοηθητική μεταβλητή t ως εξής: t=x x=y y=t ΣΩΣΤΟ Ενώ είναι λάθος να γράψουμε x=y y=x ΛΑΘΟΣ

Λογικές εκφράσεις Είναι οι εκφράσεις που αποτιμώνται σε τιμή.true. ή.false. Περιέχουν σχεσιακούς τελεστές και ενδεχομένως λογικούς τελεστές. Επίσης μπορούν να χρησιμοποιηθούν και λογικές μεταβλητές. Πίνακας Αληθείας λογικών πράξεων (Άλγεβρα του Bool) P Q P.and. Q P.or. Q.not. P P.eqv. Q P.neqv. Q..true..true..true..true..false..true..false..true..false..false..true..false..false..true..false..true..false..true..true..false..true..false..false..false..false..true..true..false. Κανόνες του De Morgan.not. (P.or. Q) (.not. P).and. (.not. Q).not. (P.and. Q) (.not. P).or. (.not. Q) Χρησιμοποιούνται για έλεγχο «ισότητας/ανισότητας» λογικών εκφράσεων

Συνήθεις Συνθήκες => x>=a.and. x<=b => x<a.οr. x>b O ακέραιος x ίσος με το 0 => x==0 O ακέραιος x ίσος με τον ακέραιο y => x==y O πραγματικός x ίσος με το 0 => abs(x)<1e-6 O πραγματικός x ίσος με τον πραγματικό y => abs(x-y)<1e-6 O k διαιρέτης του N (o N ακέραιο πολλαπλάσιο του k) => mod(n,k) == 0 N άρτιος => mod(n,2) == 0 N περιττός => mod(n,2) == 1 Το δεκαδικό μέρος ενός πραγματικού αριθμού X είναι 0 => abs(x-int(x))<1e-6

Παράδειγμα αποτίμησης Λογικής Έκφρασης με τον κλασσικό τρόπο (δεν χρησιμοποιείται από την FORTRAN) Έστω a=2, b=3, c=1 τότε η ακόλουθη λογική έκφραση 1+a**2 >= 2-b.or..not. (c/=3+2*a).and. b>3 θα αποτιμηθεί ως εξής: a) Πρώτα θα αντικατασταθούν οι μεταβλητές με τις τιμές τους 1+2**2 >= 2-3.or..not. (1/=3+2*2).and. 3>3 b) Στη συνέχεια θα εκτελεστούν οι αριθμητικές πράξεις 5>= -1.or..not. (1/=7).and. 3>3 c) Έπειτα θα εκτελεσθούν οι συγκρίσεις Τ.or..not. (Τ).and. F d) Και τέλος θα εκτελεστούν οι λογικές πράξεις με τη σωστή σειρά προτεραιότητας Τ.or. F.and. F (Πρώτα το.not.) Τ.or. F (Ύστερα το.and. ) Τ (Τελευταίο το.or.)

Παράδειγμα αποτίμησης Λογικής Έκφρασης με «έξυπνο τρόπο» (αυτός χρησιμοποιείται από την FORTRAN) Έστω a=2, b=3, c=1 τότε η ακόλουθη λογική έκφραση 1+a**2 >= 2-b.or..not. (c/=3+2*a).and. b>3 θα αποτιμηθεί ως εξής: Ελέγχεται αν είναι της μορφής:.true..or. <other conditions> ή της μορφής.false..and. <other conditions> Έτσι αρχικά υπολογίζεται η λογική τιμή μόνον του πρώτου όρου a) Πρώτα θα αντικατασταθούν οι μεταβλητές με τις τιμές τους 1+2**2 >= 2-3 b) Στη συνέχεια θα εκτελεστούν οι αριθμητικές πράξεις 5>= -1 c) Έπειτα θα εκτελεσθούν οι συγκρίσεις Τ Επομένως έχουμε την μορφή:.true..or. <other conditions> Που σημαίνει ότι το τελικό αποτέλεσμα της αρχικής έκφρασης είναι Τ

Αλφαριθμητικά Δήλωση μεταβλητών π.χ. Για να δηλώσουμε ένα αλφαριθμητικό με μέγιστο μέγεθος 5 χαρακτήρων, τα παρακάτω είναι ισοδύναμα character(len=5) :: s character(5) :: s character*5 :: s character :: s*5 ενώ η δήλωση: character(10):: s*4, f, g*2, r δίνει στα f και r μέγεθος 10 ενώ στο s μέγεθος 4 και στο g μέγεθος 2 Προσοχή: αν δεν δηλώσουμε πουθενά το μέγεθος, τότε εννοείται το 1 π.χ. το character :: s δηλώνει ότι η μεταβλητή s έχει μέγεθος ενός χαρακτήρα Επώνυμες Σταθερές με αυτόματο υπολογισμό μεγέθους π.χ. character(*),parameter :: s='abc'! To s παίρνει το μέγεθος 3 (όσο το abc) Οι σταθερές ενός αλφαριθμητικού γράφονται πάντοτε μέσα σε απλά εισαγωγικά: ' ' ή σε διπλά εισαγωγικά: " " π.χ. s='volos' ή s="volos" Στην είσοδο από το πληκτρολόγιο πρέπει να χρησιμοποιούμε τα εισαγωγικά μόνον όταν θέλουμε να συμπεριλάβουμε κενούς χαρακτήρες (spaces)

Αλφαριθμητικές εκφράσεις Είναι οι εκφράσεις που χρησιμοποιούν αλφαριθμητικά δεδομένα Τελεστής αλφαριθμητικών εκφράσεων: // : συνένωση αλφαριθμητικών δεδομένων εκατέρωθεν του τελεστή π.χ. 'Tmima' // ' Mixanologwn' 'Tmima Mixanologwn' Οι αλφαριθμητικές μεταβλητές πρέπει να δηλώνονται υποχρεωτικά ως προς τον τύπο αλλά και ως προς το μέγεθος τους. Αν δεν δηλωθεί το μέγεθος τότε αυτό παίρνει αυτόματα την τιμή 1. κάθε χαρακτήρας καταλαμβάνει και ένα πεδίο του μήκους της μεταβλητής το διάστημα (space) προσμετρείται ως χαρακτήρας τα κεφαλαία δεν είναι ίδια με τα πεζά Η σύγκριση 2 αλφαριθμητικών γίνεται αλφαβητικά χαρακτήρα προς χαρακτήρα π.χ. Το 'abcd' είναι μικρότερο από το 'ad'

Βασικές Εγγενείς Συναρτήσεις Αλφαριθμητικών ACHAR: ASCII σε χαρακτήρα π.χ. ACHAR(67) 'C' IACHAR: Χαρακτήρας σε ASCII π.χ. IACHAR('C') 67 TRIΜ: Αποκοπή κενών από το τέλος π.χ. TRIM('abc ') 'abc' LEN: Επιστρέφει το μήκος του αλφαριθμητικού π.χ. LEN('abc ') 5 LEN_TRIM: Επιστρέφει το μήκος του αλφαριθμητικού αφού πρώτα αφαιρέσει τα κενά στο τέλος του π.χ. LEN_TRIM('abc ') 3 Το ίδιο παίρνουμε και με LEN(TRIM('abc ')) 3 INDEX: Αναζητά ένα substring μέσα σε ένα αλφαριθμητικό και επιστρέφει τη θέση του από την αρχή π.χ. INDEX('tmima mixanologwn','mi') 2 (0 αν δεν βρεθεί) INDEX('tmima mixanologwn','mi',.true. ) 7 SCAN: Αναζητά έναν χαρακτήρα, από ένα δοσμένο σύνολο, μέσα σε ένα αλφαριθμητικό και επιστρέφει τη θέση του π.χ. SCAN('Volos','fog') 2 SCAN('Volos','fog',.true. ) 4 ADJUSTL: Στοιχίζει το αλφαριθμητικό αριστερά π.χ. ADJUSTL(' abcd ') 'abcd ' ADJUSTR: Στοιχίζει το αλφαριθμητικό δεξιά π.χ. ADJUSTR(' abcd ') ' abcd' Ψάχνει από το τέλος προς την αρχή

Τμήματα Αλφαριθμητικών Έστω ότι έχουμε δηλώσει το ακόλουθο αλφαριθμητικό character(16) :: s='abcdefghijklmnop' τότε print*, s(5:8)! Εμφανίζει τους χαρακτήρες στις θέσεις 5 έως 8, δηλ efgh print*, s(:5)! Εμφανίζει τους χαρακτήρες στις 5 πρώτους χαρακτήρες, δηλ abcde print*, s(10:)! Εμφανίζει τους χαρακτήρες από τη 10 η θέση μέχρι το τέλος, δηλ jklmnop print*, s(len(s)-2:)! Εμφανίζει τους 3 τελευταίους χαρακτήρες, δηλ nop s(3:6)='john'! Το s γίνεται: 'abjohnghijklmnop' read*, s(:4)! Διαβάζει από το πληκτρολόγιο ένα αλφαριθμητικό και το τοποθετεί στις 4 πρώτες θέσεις του s do i=4,6 print*, s(i:i)! Εμφανίζει τους χαρακτήρες 4 έως 6, δηλ τους def end do! έναν σε κάθε γραμμή

Αλφαριθμητικές εκφράσεις - Παράδειγμα Μπορούμε να χρησιμοποιήσουμε τμήματα της αλφαριθμητικής τιμής π.χ. e(4:8) από τον 4 ο μέχρι τον 8 ο χαρακτήρα (μήκος 5) π.χ. d(:6) από τον 1 ο μέχρι τον 6 ο χαρακτήρα (μήκος 6)

Συνηθισμένα λάθη κατά τον προγραμματισμό στη FORTRAN Συντακτικά λάθη: Ανοικτές παρενθέσεις Λάθη χρόνου εκτέλεσης Αδήλωτα ονόματα Χρήση μεταβλητών που δεν Λάθος γραμμένες εντολές έχουν πάρει τιμή (FTN95) Σύνταξη προτάσεων Ανοικτά εισαγωγικά " ή ' Λογικά λάθη Διαίρεση μεταξύ ακεραίων Λάθος μονάδες στους υπολογισμούς Χρήση λάθους τύπου δεδομένων Λάθος χρήση παρενθέσεων και σειράς προτεραιότητας Λάθος σειρά εντολών Λάθος τύπος δεδομένων στην εντολή read Διαίρεση με 0

Τρεις συνηθισμένες παγίδες To Α**Β**C δεν είναι ίσο με το (Α**Β)**C αλλά με το Α**(Β**C) Η διαίρεση ενός ακεραίου με ακέραιο πάντα επιστρέφει ακέραιο αποτέλεσμα Αν το μέγεθος μιας αλφαριθμητικής μεταβλητής δεν επαρκεί, η τιμή της μεταβλητής αποκόπτεται (truncated) στο δηλωμένο μήκος (parameter, read, εκχώρηση)

Τυχαίοι Αριθμοί Οι τυχαίοι αριθμοί έχουν ένα πολύ σημαντικό ρόλο στην επίλυση επιστημονικών προβλημάτων (π.χ. διαδικασίες λήψης αποφάσεων, τυχαία δειγματοληψία, προσομοίωση τυχαίων φαινομένων, κ.α.) Η παραγωγή τυχαίων αριθμών στον Η/Υ γίνεται από γεννήτριες τυχαίων αριθμών που απαιτούν συγκεκριμένη σύνταξη κατά την κλήση τους Στη FORTRAN: Παραγωγή τυχαίου αριθμού Αρχικοποίηση γεννήτριας τυχαίων αριθμών Τι συμβαίνει αν παραλείψουμε την αρχικοποίηση της γεννήτριας των τυχαίων αριθμών?

Τυχαίοι Αριθμοί (συνέχεια) H υπορουτίνα RANDOM_NUMBER(x) επιστρέφει σαν τιμή του x ένα real αριθμό στο διάστημα [0,1) Διακρίνουμε τις εξής περιπτώσεις: 1) Αν επιθυμούμε πραγματικό αριθμό στο [0,1) CALL RANDOM_NUMBER(X) 2) Αν επιθυμούμε πραγματικό αριθμό στο [a,b) CALL RANDOM_NUMBER(X) X = a + Χ * (b-a) 3) Αν επιθυμούμε ακέραιο αριθμό στο [a,b] CALL RANDOM_NUMBER(X) Υ= a+ ΝΙΝΤ(Χ * (b-a))