You are on page 1of 106

ΥΠΟΛΟΓΙΣΤΕΣ Ι

Προγραμματισμός με τη γλώσσα Fortran

Ε. Λοιδωρίκης, Δ. Παπαγεωργίου

Πανεπιστήμιο Ιωαννίνων
Τα επιμέρους τμήματα
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ


ΚΕΝΤΡΙΚΗ
ΕΙΣΟΔΟΣ ΕΞΟΔΟΣ
ΜΝΗΜΗ

Η ΔΟΜΗ TOY ΥΠΟΛΟΓΙΣΤΗ


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

1 2

Αναπαράσταση μεγεθών Αναλογική αναπαράσταση


ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ


Η αναπαράσταση του μεγέθους είναι απευθείας
ανάλογη της αντίστοιχης μετρούμενης ποσότητας.

ΑΝΑΠΑΡΑΣΤΑΣΗ
ΜΕΤΡΟΥΜΕΝΟ
ΣΤΟΝ Π.Χ. ΘΕΡΜΟΜΕΤΡΟ ΥΔΡΑΡΓΥΡΟΥ
ΜΕΓΕΘΟΣ
ΥΠΟΛΟΓΙΣΤΗ
Μπορούμε να διακρίνουμε θερμοκρασίες
25.1, 25.2, … κλπ
ή
25.12, 25.14, … κλπ
ανάλογα με τη διακριτική ικανότητα του
ΑΝΑΛΟΓΙΚΗ ΨΗΦΙΑΚΗ οργάνου και την ικανότητα του παρατηρητή

3 4
Ψηφιακή αναπαράσταση Οι σύγχρονοι ΗΥ είναι ψηφιακοί
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ


Η αναπαράσταση του μεγέθους παίρνει μόνο
ορισμένες διακριτές τιμές. Οι σύγχρονοι υπολογιστές είναι ψηφιακοί και
χρησιμοποιούν το δυαδικό σύστημα αρίθμησης.
Π.Χ. ΨΗΦΙΑΚΟ ΘΕΡΜΟΜΕΤΡΟ ΑΥΤΟΚΙΝΗΤΟΥ

Μπορούμε να διακρίνουμε
θερμοκρασίες
23, 24, 25, … κλπ.
Μπορούν να απεικονιστούν το πολύ
100 θερμοκρασίες (ή 199 αν υπάρχει
πρόσημο).

5 6

Το δυαδικό σύστημα αρίθμησης Παράδειγμα


ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ


Δεκ. Δυαδ. Δεκ. Δυαδ.
• Χρησιμοποιούνται δύο ψηφία 0 1 (Δυαδικά
ψηφία ή Bits)‫‏‬ 0 0000 8 1000
1 0001 9 1001
• Όλοι οι αριθμοί κατασκευάζονται από τα δύο
αυτά δυαδικά ψηφία 2 0010 10 1010
Πχ: 6 110 3 0011 11 1011
12 1100 4 0100 12 1100
• Το δυαδικό σύστημα επικράτησε λόγω της 5 0101 13 1101
ευκολίας υλοποίησης από πλευράς υλικού. 6 0110 14 1110
7 0111 15 1111

7 8
Μετατροπή δυαδικού σε δεκαδικό Άλλα συστήματα αρίθμησης
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ


Έστω δυαδικός ακέραιος: αn αn-1 … α2 α1 α0 Δεκαδικό: 0123456789
Δυαδικό: 01
Ο αντίστοιχος δεκαδικός είναι: Οκταδικό: 01234567
D = 2nαn + 2n-1αn-1 + … + 22α2 + 2α1 + α0 =
Δεκαεξαδικό: 0123456789ABCDEF

Πχ: 1100111
D = 1x26 + 1x25 + 0x24 + 0x23 + 1x22 + 1x21 + 1x20
= 103

9 10

ΥΠΟΛΟΓΙΣΤΕΣ Ι Τι είναι η κεντρική μνήμη ;


ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ


• Κεντρική μνήμη: Αποθηκευτικός χώρος που
υλοποιείται από ηλεκτρονικά κυκλώματα.
ΤΑ ΕΠΙΜΕΡΟΥΣ ΤΜΗΜΑΤΑ
• Χρησιμοποιείται για την προσωρινή αποθήκευση
ΤΟΥ ΗΥ προγραμμάτων και δεδομένων.

• Όλοι οι ΗΥ έχουν κεντρική μνήμη.

11 12
Κεντρική μνήμη - Ένα απλό μοντέλο Πόσο μεγάλος χώρος είναι το 1 byte ;
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ


Σε 1 byte μπορεί να αποθηκευτούν:
Διεύθυνση 0 0 1 1 1 0 0 1 0 1 byte
1
2 • Ένας χαρακτήρας (πχ. a,b,c, …)
1 bit
3
4 • Ένας μικρός ακέραιος αριθμός στην περιοχή
5 0…255 ή στην περιοχή -128…127
.. ..
. .

13 14

Μονάδες μέτρησης μνήμης Τυπικές τιμές μνήμης


ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ


1 byte
1 Kb = 2
10
b = 1024 b 1 Gb … 4 Gb για προσωπικούς υπολογιστές
20
1 Mb = 2 b = 1024 x 1024 b = 1048576 b 4 Gb … 32 Gb για εξυπηρετητές ομάδας
1 Gb = 230 b = 1024 x 1024 x 1024 b 32 Gb … για πολυχρηστικά υπολογιστικά
= 1073741824 b συστήματα υψηλών επιδόσεων

ΟΜΩΣ ΠΡΟΣΟΧΗ
1 Km= 1000 m
1 Kgr= 1000 gr

15 16
Τύποι μνήμης - Κατηγοριοποίηση Τύποι μνήμης - Κατηγοριοποίηση
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ


ΠΑΡΑΜΕΝΟΥΝ ΤΑ ΠΕΡΙΕΧΟΜΕΝΑ 0 1 1 1 0 0 1 0
ΜΠΟΡΕΙ Ο ΧΡΗΣΤΗΣ ΝΑ ΑΛΛΑΞΕΙ
ΜΕΤΑ ΑΠΟ ΔΙΑΚΟΠΗ ΠΑΡΟΧΗΣ ΤΑ ΠΕΡΙΕΧΟΜΕΝΑ (π.χ. να αποθηκεύσει κάτι);

ΡΕΥΜΑΤΟΣ ;
1 0 0 0 1 1 0 1
0 1 1 1 0 0 1 0

0 0 0 0 0 0 0 0

17 18

Τύποι μνήμης - RAM Τύποι μνήμης - ROM


ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ


RAM RΟM
RANDOM ACCESS MEMORY READ ONLY MEMORY
ΜΝΗΜΗ ΤΥΧΑΙΑΣ ΠΡΟΣΠΕΛΑΣΗΣ ΜΝΗΜΗ ΑΝΑΓΝΩΣΗΣ ΜΟΝΟ

• Τα περιεχόμενα διατηρούνται όσο υπάρχει παροχή


• Τα περιεχόμενα διατηρούνται ακόμη και αν
ρεύματος.
διακοπεί η παροχή ρεύματος.
• Τα περιεχόμενα μπορούν να τροποποιηθούν.
• Τα περιεχόμενα δεν μπορούν να τροποποιηθούν.
• Είναι ο κύριος τύπος μνήμης κάθε Η/Υ.
• Χρήση: Βασικά προγράμματα εκκίνησης Η/Υ.
• Χρήση: προσωρινή αποθήκευση προγραμμάτων
και δεδομένων.

19 20
Τύποι μνήμης Τύποι δεδομένων
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ


Τι μπορεί να αποθηκευτεί στην κεντρική μνήμη ;
Κάθε ΗΥ έχει και τα δύο είδη μνήμης Τι μπορεί να επεξεργαστεί ο ΗΥ ;

Τυπικές τιμές: Απλοί τύποι δεδομένων


RAM: 1 Gb … 4 Gb • Χαρακτήρες
• Ακέραιοι αριθμοί
ROM: μερικά Mb
• Πραγματικοί αριθμοί

Σύνθετοι τύποι δεδομένων


(προκύπτουν από τους απλούς τύπους)‫‏‬
• Σειρές χαρακτήρων - Κείμενο
• Μιγαδικοί αριθμοί
• Σύνθετες δομές από διαφορετικούς τύπους
21 22

Χαρακτήρες Αντιστοιχία χαρακτήρων-ακεραίων


ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ


• Ως χαρακτήρες νοούνται όλοι οι χαρακτήρες του
• Κάθε χαρακτήρας αντιστοιχίζεται με ένα ακέραιο
πληκτρολογίου (αλφαβητικοί, αριθμητικά ψηφία,
αριθμό στην περιοχή 0…255
σύμβολα).

• Η αντιστοιχία εξαρτάται κατά κύριο λόγο από το


• Κεφαλαίοι-μικροί και Ελληνικοί-Λατινικοί είναι
λειτουργικό σύστημα του ΗΥ.
διαφορετικοί χαρακτήρες.

• Σε ευρεία χρήση είναι ο κώδικας ASCII (American


• Υπάρχουν 256 διαφορετικοί χαρακτήρες, εκ των
Standard Code for Information Interchange) με
οποίων ορισμένοι δεν υπάρχουν στο
επεκτάσεις για Ελληνικούς χαρακτήρες όπως
πληκτρολόγιο (μη εκτυπώσιμοι).
έχουν καθοριστεί από τον ΕΛΟΤ.

• Κάθε χαρακτήρας καταλαμβάνει 1 byte μνήμης.


23 24
Κώδικας ASCII Κωδικοποίηση Unicode
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ


0-31 Μη εκτυπώσιμοι χαρακτήρες • Η αναπαράσταση ενός χαρακτήρα με 1 μόνο
48-57 Ψηφία 0…9 byte αποδεικνύεται ανεπαρκής.
65-90 Α…Ζ
97-122 a…z • Σε ευρεία χρήση είναι η κωδικοποίηση Unicode,
128- Ελληνικά όπου κάθε χαρακτήρας αναπαρίσταται με 2
bytes.

• Έτσι υπάρχει δυνατότητα για 216 = 65536


διαφορετικούς χαρακτήρες.

25 26

Ακέραιοι αριθμοί Πραγματικοί αριθμοί


ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ


• Συνήθως χρησιμοποιούνται 1, 2 ή 4 bytes για την • Χρησιμοποιούνται 4 (αριθμοί απλής ακρίβειας) ή 8 bytes
(αριθμοί διπλής ακρίβειας) για την αναπαράσταση
αναπαράσταση ακέραιων αριθμών.
πραγματικών αριθμών.

• Με 1 byte μπορούν να αναπαρασταθούν 28=256 • Η αναπαράσταση γίνεται στην επιστημονική μορφή με


δεκαδικό μέρος και εκθέτη.
ακέραιοι αριθμοί (πχ. -128…127 ή 0…255).
• Παράδειγμα: ο αριθμός 127.3561 αποθηκεύεται ως
1.273561 x 102
• Με 2 bytes μπορούν να αναπαρασταθούν
216=65536 ακέραιοι αριθμοί (-32768…32767 ή • Από τα 32 ή 64 bits ενός πραγματικού αριθμού ορισμένα
0…65535). χρησιμοποιούνται για το δεκαδικό μέρος και ορισμένα για
τον εκθέτη του 10. Πχ. για αριθμούς απλής ακρίβειας:
Πρόσημο: 1 bit
• Με 4 bytes μπορούν να αναπαρασταθούν Εκθέτης: 7 bits
Δεκαδικό μέρος: 24 bits
232=4294967296 ακέραιοι αριθμοί.
27 28
Πραγματικοί αριθμοί Κεντρική Μονάδα Επεξεργασίας
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ


• Οι πραγματικοί αριθμοί απλής ακρίβειας έχουν Τι κάνει:
περίπου 7 σημαντικά ψηφία και κυμαίνονται στην • Συνολικός έλεγχος ΗΥ
περιοχή -1038…-10-38 10-38…1038 • Αριθμητικές και λογικές πράξεις
• Συγκρίσεις
• Μεταξύ -10-38...10-38 με εξαίρεση το 0 δεν
μπορούν να αναπαρασταθούν.
Τι είναι:
• Οι πραγματικοί αριθμοί διπλής ακρίβειας έχουν • 1 ολοκληρωμένο κύκλωμα
περίπου 15 σημαντικά ψηφία και κυμαίνονται • Δεκάδες εκατομμύρια ημιαγωγοί
στην περιοχή -10300…-10-300 10-300…10300 • Χαμηλό κόστος

29 30

Πόσες διαφορετικές ΚΜΕ υπάρχουν ; Τρόπος λειτουργίας


ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ


ΠΑΡΑΔΕΙΓΜΑ
• INTEL Pentium-Xeon Να γίνει η πράξη 3+5
• AMD Athlon-Opteron
• SUN UltraSparc
• MIPS R12000
ΔΕΔΟΜΕΝΑ
3 5 ΚΕΝΤΡΙΚΗ
ΑΠΟΤΕΛΕΣΜΑΤΑ
Σε τι διαφέρουν: ΜΟΝΑΔΑ
• Εσωτερική αρχιτεκτονική ΕΠΕΞΕΡΓΑΣΙΑΣ 8
• Ρεπερτόριο εντολών ΕΝΤΟΛΕΣ

ΠΡΟΣΘΕΣΕ
31 32
Η διαδικασία αναλυτικά Ρεπερτόριο Εντολών ΚΜΕ
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ


1. Πάρε τον πρώτο αριθμό από τη μνήμη 1) Πρόσθεσε, αφαίρεσε, πολ/σε, διαίρεσε
2) Σύγκρινε δύο αριθμούς
2. Πάρε τον δεύτερο αριθμό από τη μνήμη
3) Πάρε αριθμούς από τη μνήμη
3. Πρόσθεσε 4) Αποθήκευσε αποτελέσματα στη μνήμη
4. Αποθήκευσε το αποτέλεσμα στη μνήμη … και πολλές άλλες

Κάθε εντολή ΚΜΕ αναπαρίσταται με ένα αριθμό. Πχ.


Πρόσθεσε 25
Αφαίρεσε 87
ΕΝΤΟΛΕΣ ΚΕΝΤΡΙΚΗΣ ΜΟΝΑΔΑΣ ΕΠΕΞΕΡΓΑΣΙΑΣ Αποθήκευσε 123
… κλπ
33 34

Ο ρόλος της κεντρικής μνήμης Αλληλουχία εντολών - Πρόγραμμα


ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ


1) Πάρε τον πρώτο αριθμό από τη μνήμη
3 2) Πάρε τον δεύτερο αριθμό από τη μνήμη
ΔΕΔΟΜΕΝΑ 3) Πρόσθεσε
5
4) Αποθήκευσε το αποτέλεσμα στη μνήμη
ΚΕΝΤΡΙΚΗ
ΠΡΟΣΘΕΣΕ ΕΝΤΟΛΗ 3
ΜΟΝΑΔΑ
ΕΠΕΞΕΡΓΑΣΙΑΣ 5

8 ΑΠΟΤΕΛΕΣΜΑ ΠΑΡΕ (72)


ΠΑΡΕ (72) ΠΡΟΓΡΑΜΜΑ ΚΜΕ
.. ΠΡΟΣΘΕΣΕ (25)
. ΑΠΟΘΗΚΕΥΣΕ (123)
8
ΚΕΝΤΡΙΚΗ ΜΝΗΜΗ
35 36
Προγραμματισμός ΚΜΕ Γλώσσες υψηλού επιπέδου
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ


• Επίπονος • Σύνολο από κανόνες για τη διατύπωση των
• Απευθύνεται σε συγκεκριμένο τύπο ΚΜΕ προγραμμάτων πιο «ανθρώπινο» τρόπο.
• Τυπικό μέγεθος προγράμματος ΚΜΕ:
1000000 εντολές • Κάθε γλώσσα προγραμματισμού υψηλού
επιπέδου έχει το δικό της «αλφάβητο» και
«συντακτικό».

Γλώσσες προγραμματισμού υψηλού επιπέδου

37 38

Πόσες γλώσσες υπάρχουν ; Παράδειγμα #1


ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ


Fortran Fortran:
Να κατασκευαστεί
Cobol
πρόγραμμα που θα PROGRAM SAMPLE
PL/I εμφανίζει στην οθόνη τη WRITE (*,*) ’HELLO’
Basic φράση: Hello END
Κάθε γλώσσα έχει πλεονεκτήματα
Pascal
Lisp και μειονεκτήματα σε σχέση με τις
C άλλες Pascal: C:
C++
PROGRAM SAMPLE; #include <stdio.h>
Java main ()
BEGIN
Perl WRITELN (’HELLO’) {
Python END. printf(”Hello\n”);
}

39 40
Παράδειγμα #2 Πλεονεκτήματα-Μειονεκτήματα
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ


Fortran: Πλεονεκτήματα
Να κατασκευαστεί • Η γραφή - εκσφαλμάτωση είναι πιο εύκολη
πρόγραμμα που θα
υπολογίζει και θα εμφανίζει PROGRAM ADD • Το πρόγραμμα είναι ευκολότερα αντιληπτό
στην οθόνη το αποτέλεσμα K = 3+5 • Το πρόγραμμα είναι μεταφέρσιμο
της πράξης 3+5 WRITE (*,*) K
END
Μειονεκτήματα
C: • Το πρόγραμμα δεν μπορεί να εκτελεστεί απευθείας
Pascal:
από την κεντρική μονάδα επεξεργασίας
PROGRAM ADD; #include <stdio.h>
main ()
VAR K:INTEGER; {
BEGIN int k;
K:=3+5; k = 3+5;
WRITELN (K) printf(”%d\n”,k);
END. }
Χρειάζεται μετατροπή σε εντολές ΚΜΕ
41 42

Διαδικασία μετάφρασης Κύκλος ανάπτυξης προγράμματος


ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ


Πηγαίος κώδικας Fortran
ΚΕΝΤΡΙΚΗ ΠΗΓΑΙΟΣ
PROGRAM ADD ΜΟΝΑΔΑ
ΚΩΔΙΚΑΣ
K = 3+5 ΕΠΕΞΕΡΓΑΣΙΑΣ
WRITE (*,*) K Συντακτικά
END λάθη
Λογικά
λάθη ΜΕΤΑΦΡΑΣΗ
Εκτελέσιμο πρόγραμμα
72
34
48
ΜΕΤΑΦΡΑΣΤΗΣ 123 Εντολές ΚΜΕ
ΕΚΤΕΛΕΣΗ
17
82
... 43 44
Ένα πρώτο πρόγραμμα
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ

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


Κατασκευάστε
Κατασκευάστε πρόγραμμα
πρόγραμμα που
που θα
θα
εμφανίζει στην οθόνη τη λέξη:
εμφανίζει στην οθόνη τη λέξη:
ΔΟΜΗ
HELLO
HELLO
TOY
ΠΡΟΓΡΑΜΜΑΤΟΣ
PROGRAM FIRST
C Αυτό είναι ένα απλό υπόδειγμα προγράμματος.
WRITE (*,*) 'HELLO'
END

1 2

Από τι αποτελείται ένα πρόγραμμα Τι σημαίνουν οι εντολές


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

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


• Κάθε πρόγραμμα αποτελείται από μια σειρά από PROGRAM FIRST
εντολές. Δήλωση έναρξης προγράμματος. FIRST: Συμβολικό
όνομα που δίνουμε στο πρόγραμμα.
• Κάθε εντολή ενός προγράμματος λέει στον
υπολογιστή να κάνει μια συγκεκριμένη C Αυτό είναι ένα απλό υπόδειγμα προγράμματος.
ενέργεια (εκτελέσιμη εντολή). Επεξηγηματικό σχόλιο. Απευθύνεται σε όποιον διαβάσει
το πρόγραμμα και όχι στον υπολογιστή.
• Ορισμένες εντολές απλώς δηλώνουν κάτι
(δηλώσεις). WRITE (*,*) 'HELLO'
Εντολή εμφάνισης ενός μηνύματος στην οθόνη.
• Οι εντολές ενός προγράμματος εκτελούνται
διαδοχικά η μια μετά την άλλη.
END
Εντολή τερματισμού προγράμματος.
3 4
Πως γράφεται το πρόγραμμα Τι γράφουμε σε κάθε στήλη
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ

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


Κάθε εντολή γράφεται ξεκινώντας από τη στήλη 7. Στήλη 1: Εάν περιέχει το χαρακτήρα C ή * τότε η
Μπορούμε να χρησιμοποιήσουμε κεφαλαία ή μικρά. γραμμή είναι επεξηγηματικό σχόλιο.

Παράδειγμα: Παράδειγμα:
C Α υ τ ό ε ί ν α ι σ χ ό λ ι ο

1 2 3 4 5 6 7 8 9 Θέσεις στη γραμμή


Στήλες 1-5: Περιέχουν σε κάποιες περιπτώσεις
P R O G R A M F I R S T ακέραιους αριθμούς από 1 έως 99999 για την
αρίθμηση εντολών.

Παράδειγμα:
1 2 0 W R I T E ( * , * ) ' O K '
5 6

Τι γράφουμε σε κάθε στήλη Πρακτικός κανόνας


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

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


Στήλη 6: Εάν περιέχει οποιοδήποτε χαρακτήρα, τότε Για να γράψουμε μια εντολή Fortran:
η γραμμή αυτή αποτελεί συνέχεια της προηγούμενης.
(Χρήσιμο για να γράφουμε πολύ μεγάλες εντολές σε
δύο γραμμές).
αφήνουμε πρώτα έξι κενά
Παράδειγμα:
W R I T E ( * , * )
ή
& ' H E L L O '

πατάμε μία φορά το πλήκτρο Tab.


Στήλες 7-72: Γράφονται οι εντολές Fortran.

Στήλες 73- : Αγνοούνται.


7 8
Συμβολικά ονόματα Παραδείγματα συμβολικών ονομάτων
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ

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


Στην εντολή PROGRAM FIRST χρησιμοποιήσαμε το
συμβολικό όνομα FIRST.
FIRST Σωστό. Είναι ίδιο με το first

A2 Σωστό.
Συμβολικά ονόματα χρησιμοποιούνται σε πολλά άλλα
σημεία ενός προγράμματος. 2ND Λάθος. Ξεκινάει με ψηφίο.

ΧΥΖ#Α Λάθος. Περιέχει το σύμβολο #


Κανόνες για τα συμβολικά ονόματα:
ΙΣΤΡ2 Λάθος. Περιέχει ελληνικό χαρακτήρα.
• Αποτελούνται από ένα μέχρι έξι χαρακτήρες.
• Επιτρέπονται μόνο αγγλικά γράμματα και αριθμοί. AVLSN6QPT Λάθος. Έχει πάνω από 6
• Ο πρώτος χαρακτήρας πρέπει να είναι γράμμα. χαρακτήρες. Όμως κάποιοι
• Κεφαλαία και μικρά θεωρούνται ίδια. μεταφραστές το επιτρέπουν.
9 10

Πως επιλέγουμε συμβολικά ονόματα Η εντολή WRITE


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

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


Παρότι υπάρχει μεγάλη ελευθερία στην επιλογή
Με την εντολή WRITE εμφανίζουμε στην οθόνη
συμβολικών ονομάτων, αυτά δεν επιλέγονται τυχαία.
κάποιο μήνυμα. Το μήνυμα βρίσκεται εντός απλών
Κάθε συμβολικό όνομα επιλέγεται πάντα ανάλογα με αποστρόφων. Πχ.
WRITE (*,*) 'HELLO'
τη χρήση του.

Η επιλογή πρέπει να είναι τέτοια ώστε να μας Μπορούμε να εμφανίσουμε και δεύτερο μήνυμα με
την ίδια εντολή WRITE χωρίζοντάς τα με κόμμα:
διευκολύνει να καταλάβουμε τη σημασία του σε
WRITE (*,*) 'HELLO ', 'WORLD'
σχέση με το πρόβλημα που προσπαθούμε να
επιλύσουμε.
Θα εμφανιστεί:
Πχ. Το πρώτο μας πρόγραμμα το ονομάσαμε FIRST. HELLO WORLD
Θα ήταν παράδοξο να δίναμε ένα όνομα της μορφής:
PROGRAM X2WT6 Κάθε εντολή WRITE εμφανίζει μία γραμμή στην οθόνη
11 12
Η εντολή WRITE Παράδειγμα
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ

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


Εάν υπάρχουν κενά εντός των αποστρόφων αυτά
εμφανίζονται στην οθόνη, εκτός των αποστρόφων Κατασκευάστε
Κατασκευάστε πρόγραμμα
πρόγραμμα τοτο οποίο
οποίο θα
θα εμφανίζει
εμφανίζει
αγνοούνται. Π.χ. Οι εντολές: στην
στην οθόνη τα στοιχεία σας με την εξής μορφή:
οθόνη τα στοιχεία σας με την εξής μορφή:
WRITE (*,*) 'HELLO'
WRITE (*,*) ' HELLO'
Εμφανίζουν: +-------------------+
HELLO | ΑΠΟΣΤΟΛΟΣ |
HELLO | ΑΠΟΣΤΟΛΟΠΟΥΛΟΣ |
| ΑΜ: 932 |
Ενώ οι εντολές: +-------------------+
WRITE (*,*) 'HELLO'
WRITE (*,*) 'HELLO'
Εμφανίζουν ακριβώς το ίδιο:
HELLO
HELLO
13 14

Παράδειγμα
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ

PROGRAM ΜΥNAME
C Το πρόγραμμα αυτό εμφανίζει στην οθόνη
C τα στοιχεία μου.
WRITE (*,*) '+-------------------+'
WRITE (*,*) '| ΑΠΟΣΤΟΛΟΣ |'
WRITE (*,*) '| ΑΠΟΣΤΟΛΟΠΟΥΛΟΣ |'
WRITE (*,*) '| ΑΜ: 932 |'
WRITE (*,*) '+-------------------+'
END

15
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΠΡΑΞΕΙΣ
Τύποι δεδομένων

Οι παρακάτω τύποι δεδομένων υποστηρίζονται


ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ

από τη γλώσσα προγραμματισμού Fortran:


ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ
ΚΑΙ 1) Ακέραιοι αριθμοί (INTEGER).
2) Πραγματικοί αριθμοί απλής ακρίβειας (REAL).
ΠΡΑΞΕΙΣ
3) Πραγματικοί αριθμοί διπλής ακρίβειας
(DOUBLE PRECISION).
4) Χαρακτήρες (CHARACTER).

1 2
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΠΡΑΞΕΙΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΠΡΑΞΕΙΣ


Πράξεις μεταξύ ακεραίων αριθμών Παράδειγμα #1

Μεταξύ δύο ακεραίων αριθμών μπορούν να γίνουν


οι παρακάτω πράξεις χρησιμοποιώντας το αντίστοιχο 3+5 Αποτέλεσμα: 8
σύμβολο:
4-8 Αποτέλεσμα: -4
+ Πρόσθεση 6*2 Αποτέλεσμα: 12
- Αφαίρεση
8/4 Αποτέλεσμα: 2
* Πολλαπλασιασμός
4**2 Αποτέλεσμα: 16
/ Διαίρεση
** Ύψωση σε δύναμη

Το αποτέλεσμα μιας πράξης μεταξύ ακεραίων


αριθμών είναι πάντα ακέραιος αριθμός.

3 4
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΠΡΑΞΕΙΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΠΡΑΞΕΙΣ


Ακέραια διαίρεση Σύνθετες αριθμητικές παραστάσεις

Η διαίρεση δύο ακεραίων αριθμών δίνει ως Για να υπολογιστούν πιο σύνθετες αριθμητικές
αποτέλεσμα επίσης ένα ακέραιο αριθμό. παραστάσεις όπως πχ.

Κατά τη διαίρεση δύο ακεραίων αριθμών τυχόν 2+4*3/2-7


δεκαδικά ψηφία που προκύπτουν κατά τη 6+(4/2-8)**2
διαίρεση αποκόπτονται.
έχει ανατεθεί σε κάθε πράξη μια προτεραιότητα.
Παραδείγματα:
9/2 Αποτέλεσμα: 4 (όχι 4.5)
1/3 Αποτέλεσμα: 0 (όχι 0.33333…) Πράξη Προτεραιότητα
2/3 Αποτέλεσμα: 0 (όχι 0.66666…)
** Υψηλή
* /
-6/4 Αποτέλεσμα: -1 (όχι –1.5)
+ - Χαμηλή
Η διαδικασία αυτή ονομάζεται ακέραια διαίρεση.
5 6
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΠΡΑΞΕΙΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΠΡΑΞΕΙΣ


Κανόνες υπολογισμού σύνθετων παραστάσεων Παράδειγμα #2
Σε μια σύνθετη αριθμητική παράσταση: Να υπολογιστεί η παράσταση: 2+4*3/2-7
Πρώτα θα γίνουν οι πολλαπλασιασμοί και οι διαιρέσεις,
1. Πρώτα γίνονται οι πράξεις με τη μεγαλύτερη δηλαδή το κομμάτι 4*3/2
προτεραιότητα. Επειδή οι πράξεις * και / έχουν την ίδια προτεραιότητα,
ακολουθούμε τον κανόνα από αριστερά προς τα δεξιά,
2. Μεταξύ πράξεων με την ίδια προτεραιότητα οι οπότε πρώτα γίνεται η πράξη 4*3 και κατόπιν ότι
πράξεις γίνονται από αριστερά προς τα δεξιά, με προκύψει διαιρείται με το 2. Αποτέλεσμα: 6
εξαίρεση την ύψωση σε δύναμη που γίνονται από Η παράσταση τώρα έχει έρθει στη μορφή: 2+6-7
δεξιά προς αριστερά.
Επειδή οι πράξεις + και – έχουν την ίδια προτεραιότητα
3. Εάν υπάρχουν παρενθέσεις, τότε πρώτα γίνονται ακολουθούμε πάλι τον κανόνα από αριστερά προς τα
δεξιά, οπότε πρώτα γίνεται η πρόσθεση δίνοντας
οι πράξεις εντός του πιο εσωτερικού ζεύγους αποτέλεσμα 8, και κατόπιν η αφαίρεση δίνοντας τελικό
παρενθέσεων. αποτέλεσμα 1
7 8
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΠΡΑΞΕΙΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΠΡΑΞΕΙΣ


Παράδειγμα #3 Παράδειγμα #4
Να υπολογιστεί η παράσταση: 7*((3+6/4)+1)
Να υπολογιστεί η παράσταση: 2**3**2
Πρώτα γίνονται οι πράξεις στο εσώτατο ζεύγος
παρενθέσεων, δηλαδή (3+6/4) δίνοντας αποτέλεσμα 4
Ακολουθούμε τον κανόνα από δεξιά προς
Η παράσταση έχει γίνει: 7*(4+1) αριστερά, οπότε πρώτα γίνεται η πράξη 3**2
δίνοντας αποτέλεσμα 9
Στη συνέχεια γίνονται οι πράξεις εντός των
παρενθέσεων, δηλαδή (4+1) δίνοντας αποτέλεσμα 5 Στη συνέχεια γίνεται η πράξη 2**9 δίνοντας ως
τελικό αποτέλεσμα 512
Η παράσταση έχει γίνει: 7*5

Τέλος γίνεται ο πολλαπλασιασμός δίνοντας τελικό


αποτέλεσμα 35
9 10
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΠΡΑΞΕΙΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΠΡΑΞΕΙΣ


Παράδειγμα #5 Παράδειγμα #5

Να υπολογίσετε τις παραστάσεις:


a) 2*3+4-2**4/2 Αποτέλεσμα: 2
a) 2*3+4-2**4/2 b) 1+8/3*(2+4/2**2) Αποτέλεσμα: 7
b) 1+8/3*(2+4/2**2) c) (4/(7-4)*2+1)**(2/3*4+1) Αποτέλεσμα: 3

c) (4/(7-4)*2+1)**(2/3*4+1)

11 12
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΠΡΑΞΕΙΣ
Πραγματικοί αριθμοί: Επιστημονική

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΠΡΑΞΕΙΣ


Πραγματικοί αριθμοί: Συμβολισμός
αναπαράσταση
Αριθμός Επιστ. αναπαράσταση Σημαίνει
Οι πραγματικοί αριθμοί γράφονται πάντα με τη
32.76 3.276Ε1 3.276 x 101
χρήση υποδιαστολής. Π.χ.
-98541.34 -9.854134Ε4 -9.854134 x 104
3.14159 0.000035 3.5Ε-5 3.5 x 10-5
-3.5
Πραγματικοί
2.0
8. Οι πραγματικοί αριθμοί διπλής ακρίβειας γράφονται
στην επιστημονική αναπαράσταση χρησιμοποιώντας
74 Ακέραιος
το χαρακτήρα D αντί για το E.

Παράδειγμα:
Προσοχή: Ως υποδιαστολή χρησιμοποιούμε 3.276Ε1 Ο αριθμός 32.76 σε απλή ακρίβεια.
τελεία και όχι κόμμα.
3.276D1 Ο αριθμός 32.76 σε διπλή ακρίβεια.

13 14
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΠΡΑΞΕΙΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΠΡΑΞΕΙΣ


Πράξεις μεταξύ πραγματικών αριθμών Μικτή αριθμητική
Όπως και στους ακεραίους γίνονται οι πράξεις: Όταν σε μια πράξη συμμετέχουν αριθμοί από δύο
διαφορετικούς τύπους δεδομένων, τότε:
+ - * / **
τα δεδομένα προάγονται αυτόματα στον
Η διαίρεση γίνεται κατά το συνήθη τρόπο, δηλαδή ανώτερο από τους δύο τύπους
αν προκύψουν δεκαδικά ψηφία, αυτά παραμένουν
στον αριθμό. και κατά συνέπεια το αποτέλεσμα θα είναι του
ανώτερου τύπου.
Παραδείγματα:
Οι τύποι δεδομένων ιεραρχούνται ως εξής:
2.3761/1.4
6.55**(1./4.) DOUBLE PRECISION Ανώτερος
REAL
INTEGER Κατώτερος
15 16
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΠΡΑΞΕΙΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΠΡΑΞΕΙΣ


Παραδείγματα μικτής αριθμητικής Συναρτήσεις
3 + 7.2 Αποτέλεσμα: 10.2 Η γλώσσα προγραμματισμού Fortran περιέχει μια
σειρά από ενσωματωμένες συναρτήσεις.
INTEGER REAL REAL
Πχ. για να υπολογίσουμε την παράσταση:
8 / 3. Αποτέλεσμα: 2.666667
Γράφουμε: SQRT(2.5)
INTEGER REAL REAL

Συνάρτηση Όρισμα
3. / 2.5D0 Αποτέλεσμα: 1.2D0

REAL DOUBLE PRECISION DOUBLE PRECISION


17 18
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΠΡΑΞΕΙΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΠΡΑΞΕΙΣ


Ενσωματωμένες συναρτήσεις Ενσωματωμένες συναρτήσεις
Για να υπολογίσουμε Γράφουμε Όλες οι συναρτήσεις δέχονται ως όρισμα αριθμούς
REAL ή DOUBLE PRECISION και επιστρέφουν
Τετραγωνική ρίζα SQRT(X) αποτέλεσμα του αντίστοιχου τύπου. Πχ.
ex Εκθετικό EXP(X)
|x| Απόλυτη τιμή ABS(X) SQRT(5.0) Σωστό
lnx Νεπέρειος λογάριθμος LOG(X) SQRT(5) Λάθος
logx Λογάριθμος με βάση 10 LOG10(X) Η συνάρτηση ABS(X) δέχεται ως όρισμα και
sinx Ημίτονο SIN(X) INTEGER επιστρέφοντας ακέραιο αποτέλεσμα.
cosx Συνημίτονο COS(X)
Οι τριγωνομετρικές συναρτήσεις δέχονται το όρισμα
tanx Εφαπτομένη TAN(X) σε ακτίνια, όχι μοίρες.
sin-1x Τόξο ημιτόνου ASIN(X)
cos-1x Τόξο συνημιτόνου ACOS(X) Οι αντίστροφες τριγωνομετρικές συναρτήσεις
επιστρέφουν αποτέλεσμα σε ακτίνια, όχι μοίρες.
tan-1x Τόξο εφαπτομένης ATAN(X)
19 20
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΠΡΑΞΕΙΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΠΡΑΞΕΙΣ


Παράδειγμα #6 Παράδειγμα #6
Γράψτε παραστάσεις Fortran για τα παρακάτω: 1) 32+6 3**(2+6)
Τι τύπου είναι τα αποτελέσματα των πράξεων; 2) 3-4 8 3**(-4)*8

1) 32+6 5) ( (1-4)/9 )**2


3)

2) 3-4 8 6) 4) LOG(2.)-SQRT(8.)/9

3) 7) 5) 8**(1./3.)

6) 6*(2+(8*ABS(SQRT(11.)-6**2)+1))
4)
7) SQRT(10-EXP(2.)) + ACOS(-1.)

π ACOS(-1.) e EXP(1.)
21 22
Τι είναι οι μεταβλητές
Συμβολικά ονόματα που δίνονται σε θέσεις μνήμης

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΕΤΑΒΛΗΤΕΣ
όπου αποθηκεύονται αριθμοί.
Διεύθυνση 0
1
Κ
ΜΕΤΑΒΛΗΤΕΣ 2
ΥΠΟΛΟΓΙΣΤΕΣ Ι -

3
4
MNHMH 5 Α
6
7
8
9
.. ..
1 . . 2

Ονόματα μεταβλητών Τύποι μεταβλητών


Η γλώσσα προγραμματισμού Fortran έχει ένα
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΕΤΑΒΛΗΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΕΤΑΒΛΗΤΕΣ
Ακολουθούν τους κανόνες για τα συμβολικά ονόματα:
προκαθορισμένο κανόνα, για να προσδιορίζεται
• Αποτελούνται από ένα μέχρι έξι χαρακτήρες. ο τύπος κάθε μεταβλητής:
• Επιτρέπονται μόνο αγγλικά γράμματα και αριθμοί. Οι μεταβλητές που το όνομά τους αρχίζει από
• Ο πρώτος χαρακτήρας πρέπει να είναι γράμμα. I, J, K, L, M, N θεωρούνται ακέραιες.
• Κεφαλαία και μικρά θεωρούνται ίδια. Όλες οι υπόλοιπες θεωρούνται πραγματικές απλής
ακρίβειας.
Παραδείγματα μεταβλητών: Παραδείγματα:
ΟΝΕ ΟΝΕ Πραγματική απλής ακρίβειας.
Κ4 Κ4 Ακέραια.
NPO NPO Ακέραια.
STEP STEP Πραγματική απλής ακρίβειας.
3 4
Τύποι μεταβλητών Τύποι μεταβλητών
Δεν θα χρησιμοποιήσουμε τον προκαθορισμένο
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΕΤΑΒΛΗΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΕΤΑΒΛΗΤΕΣ
Για τις μεταβλητές διπλής ακρίβειας δεν υπάρχει
προκαθορισμένος κανόνας. Πρέπει να δηλωθούν κανόνα για τους τύπους των μεταβλητών, αλλά
στην αρχή του προγράμματος. θα δηλώνουμε κάθε φορά τι είδους
μεταβλητές θέλουμε:
Παράδειγμα: Κατάργηση του
PROGRAM VAR προκαθορισμένου
IMPLICIT NONE κανόνα για τους
PROGRAM VAR τύπους των
DOUBLE PRECISION MS, DGP INTEGER N, POINTS μεταβλητών
DOUBLE PRECISION MS, DGP
..
. REAL X, Y, Z
..
END .
Χωρίς τη δήλωση Χωρίς τη δήλωση είναι END
είναι ακέραια πραγματική απλής ακρίβειας 5 6

Εντολή ανάθεσης τιμής Εντολή ανάθεσης τιμής: Σύνταξη

Για να αποθηκεύσουμε μια συγκεκριμένη τιμή στο


ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΕΤΑΒΛΗΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΕΤΑΒΛΗΤΕΣ
Μεταβλητή = Αριθμητική παράσταση
χώρο μνήμης που δεσμεύτηκε για μια μεταβλητή
χρησιμοποιούμε την εντολή ανάθεσης τιμής:
Αριστερά του = είναι πάντα μια μεταβλητή
Παράδειγμα: Δεξιά του = είναι πάντα μια αριθμητική παράσταση
Κ = 2
2 Κ
Προσοχή δεν γράφουμε: Παραδείγματα:
2 = Κ
R = 5.
Η μνήμη μετά Α D = B**2-4*A*C
την εκτέλεση της ERM = (XM-XS)/2
εντολής AREA = ACOS(-1.0)*R**2
.. X1 = (-B+SQRT(D))/(2*A)
. 7 8
Τι σημαίνουν ; Παράδειγμα #1
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΕΤΑΒΛΗΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΕΤΑΒΛΗΤΕΣ
Ν = Ν + 1 Αύξησε την τιμή της μεταβλητής
Ν κατά 1. Η
Η ακτίνα
ακτίνα ενός
ενός κύκλου
κύκλου είναι 25cm. Κατασκευάστε
είναι 25cm. Κατασκευάστε
πλήρες
πλήρες πρόγραμμα
πρόγραμμα που
που θα
θα υπολογίζει
υπολογίζει το
το εμβαδόν
εμβαδόν
του.
του.
Κ = 2 Δώσε στη μεταβλητή K την τιμή 2.
Κ = Μ+L Κατόπιν δώσε στην Κ την τιμή
M+L. Η παλαιά τιμή (2) χάνεται. Υπενθύμιση:

Το εμβαδόν κύκλου είναι:

9 10

Παράδειγμα #1 (1/9) Παράδειγμα #1 (2/9)


ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΕΤΑΒΛΗΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΕΤΑΒΛΗΤΕΣ
PROGRAM CIRCLE PROGRAM CIRCLE
C Αυτό το πρόγραμμα υπολογίζει το εμβαδόν C Αυτό το πρόγραμμα υπολογίζει το εμβαδόν
C κύκλου με ακτίνα 25cm. C κύκλου με ακτίνα 25cm.
IMPLICIT NONE IMPLICIT NONE
DOUBLE PRECISION R, PI, E DOUBLE PRECISION R, PI, E
R = 25. R = 25.
PI = ACOS(-1.) PI = ACOS(-1.)
E = PI*R**2 E = PI*R**2
WRITE (*,*) 'Το εμβαδόν είναι ', E WRITE (*,*) 'Το εμβαδόν είναι ', E
END END

Έναρξη του προγράμματος Σχόλια

11 12
Παράδειγμα #1 (3/9) Παράδειγμα #1 (4/9)
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΕΤΑΒΛΗΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΕΤΑΒΛΗΤΕΣ
PROGRAM CIRCLE PROGRAM CIRCLE
C Αυτό το πρόγραμμα υπολογίζει το εμβαδόν C Αυτό το πρόγραμμα υπολογίζει το εμβαδόν
C κύκλου με ακτίνα 25cm. C κύκλου με ακτίνα 25cm.
IMPLICIT NONE IMPLICIT NONE
DOUBLE PRECISION R, PI, E DOUBLE PRECISION R, PI, E
R = 25. R = 25.
PI = ACOS(-1.) PI = ACOS(-1.)
E = PI*R**2 E = PI*R**2
WRITE (*,*) 'Το εμβαδόν είναι ', E WRITE (*,*) 'Το εμβαδόν είναι ', E
END END

Κατάργηση του προκαθορισμένου κανόνα για τους Δήλωση μεταβλητών διπλής ακρίβειας:
τύπους των μεταβλητών
R: Ακτίνα PI: Ο αριθμός π Ε: Το εμβαδόν
13 14

Παράδειγμα #1 (5/9) Παράδειγμα #1 (6/9)


ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΕΤΑΒΛΗΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΕΤΑΒΛΗΤΕΣ
PROGRAM CIRCLE PROGRAM CIRCLE
C Αυτό το πρόγραμμα υπολογίζει το εμβαδόν C Αυτό το πρόγραμμα υπολογίζει το εμβαδόν
C κύκλου με ακτίνα 25cm. C κύκλου με ακτίνα 25cm.
IMPLICIT NONE IMPLICIT NONE
DOUBLE PRECISION R, PI, E DOUBLE PRECISION R, PI, E
R = 25. R = 25.
PI = ACOS(-1.) PI = ACOS(-1.)
E = PI*R**2 E = PI*R**2
WRITE (*,*) 'Το εμβαδόν είναι ', E WRITE (*,*) 'Το εμβαδόν είναι ', E
END END

Ορίζουμε την ακτίνα Ορίζουμε τον αριθμό π

15 16
Παράδειγμα #1 (7/9) Παράδειγμα #1 (8/9)
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΕΤΑΒΛΗΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΕΤΑΒΛΗΤΕΣ
PROGRAM CIRCLE PROGRAM CIRCLE
C Αυτό το πρόγραμμα υπολογίζει το εμβαδόν C Αυτό το πρόγραμμα υπολογίζει το εμβαδόν
C κύκλου με ακτίνα 25cm. C κύκλου με ακτίνα 25cm.
IMPLICIT NONE IMPLICIT NONE
DOUBLE PRECISION R, PI, E DOUBLE PRECISION R, PI, E
R = 25. R = 25.
PI = ACOS(-1.) PI = ACOS(-1.)
E = PI*R**2 E = PI*R**2
WRITE (*,*) 'Το εμβαδόν είναι ', E WRITE (*,*) 'Το εμβαδόν είναι ', E
END END

Υπολογίζουμε το εμβαδόν του κύκλου Εμφανίζουμε στην οθόνη το εμβαδόν

17 18

Παράδειγμα #1 (9/9) Αποτέλεσμα στην οθόνη


Μόλις γράψουμε το πρόγραμμα πρέπει:
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΕΤΑΒΛΗΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΕΤΑΒΛΗΤΕΣ
PROGRAM CIRCLE • Να το αποθηκεύσουμε
C Αυτό το πρόγραμμα υπολογίζει το εμβαδόν
C κύκλου με ακτίνα 25cm. • Να το μεταφράσουμε
IMPLICIT NONE • Να δώσουμε εντολή για να ξεκινήσει η εκτέλεση
DOUBLE PRECISION R, PI, E
R = 25. Το αποτέλεσμα στην οθόνη θα είναι:
PI = ACOS(-1.) Το εμβαδόν είναι 1963.495
E = PI*R**2
WRITE (*,*) 'Το εμβαδόν είναι ', E Στην εντολή WRITE:
END • Ότι είναι εντός απλών αποστρόφων θεωρείται
μήνυμα και εμφανίζεται όπως είναι.
Τέλος του προγράμματος • Ότι είναι εκτός απλών αποστρόφων θεωρείται
μεταβλητή και εμφανίζεται η τιμή της.
19 20
Τι γίνεται με τις μονάδες μέτρησης ; Παράδειγμα #1 – Επεκτάσεις

Στον υπολογιστή δεν εισάγουμε μονάδες μέτρησης.


ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΕΤΑΒΛΗΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΕΤΑΒΛΗΤΕΣ
Γράφουμε: Κατασκευάστε
Κατασκευάστε πρόγραμμα
πρόγραμμα που
που θα
θα υπολογίζει
υπολογίζει το
το
R = 25 εμβαδόν
εμβαδόν και
και την
την περίμετρο
περίμετρο κύκλου,
κύκλου, όταν
όταν δίνεται
δίνεται
και όχι:
ηη ακτίνα
ακτίνα του.
του.
R = 25cm

Βεβαίως R=25 μπορεί να σημαίνει 25m. Σε σχέση με το προηγούμενο πρόγραμμα:

• Η ακτίνα δεν θα είναι σταθερή (25cm) αλλά


θα εισάγεται από το πληκτρολόγιο.
Οι μονάδες μέτρησης είναι στο μυαλό του • Θα υπολογίζει επιπλέον και την περίμετρο
προγραμματιστή. του κύκλου.

21 22

Παράδειγμα #1 – Επεκτάσεις Εντολή READ


Τι χρειάζεται:
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΕΤΑΒΛΗΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΕΤΑΒΛΗΤΕΣ
PROGRAM CIRCLE
Για να εισάγουμε από το πληκτρολόγιο τιμές σε μεταβλητές
C Αυτό το πρόγραμμα υπολογίζει το εμβαδόν την ώρα της εκτέλεσης του προγράμματος.
C και την περίμετρο κύκλου.
IMPLICIT NONE Σύνταξη:
READ (*,*) μεταβλητή1, μεταβλητή2, …
DOUBLE PRECISION R, PI, E, S
WRITE (*,*) 'Εισάγετε την ακτίνα' Πως λειτουργεί:
READ (*,*) R Μόλις το πρόγραμμα συναντήσει την εντολή READ, δεν
προχωρά στην επόμενη εντολή παρά περιμένει να
PI = ACOS(-1.)
πληκτρολογήσουμε τις τιμές των μεταβλητών.
E = PI*R**2 Εμείς: πληκτρολογούμε τις τιμές και πατάμε ENTER.
WRITE (*,*) 'Το εμβαδόν είναι ', E Τότε το πρόγραμμα συνεχίζει στην επόμενη εντολή.
S = 2*PI*R
Συνήθως:
WRITE (*,*) 'Η περίμετρος είναι ', S Πριν από την εντολή READ βάζουμε μια εντολή WRITE
END προκειμένου να εμφανιστεί ένα προτρεπτικό μήνυμα.
23 24
Παράδειγμα #2 Παράδειγμα #2
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΕΤΑΒΛΗΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΕΤΑΒΛΗΤΕΣ
Η Πως γράφω σε Fortran τη σχέση
Η θερμομετρική
θερμομετρική κλίμακα
κλίμακα Fahreneit
Fahreneit
χρησιμοποιείται
χρησιμοποιείται στις ΗΠΑ. Συνδέεται
στις ΗΠΑ. Συνδέεται με
με την
την
κλίμακα Celcius με
κλίμακα Celcius με τη
τη σχέση:
σχέση: F = 9/5*C+32 Λάθος

Κατασκευάστε F = 9./5.*C+32 Σωστό


Κατασκευάστε πρόγραμμα
πρόγραμμα τοτο οποίο
οποίο θα
θα βρίσκει
βρίσκει σε
σε
ποια
ποια θερμοκρασία Fahreneit παγώνει
θερμοκρασία Fahreneit παγώνει και
και βράζει
βράζει
το
το νερό.
νερό. F = 9*C/5+32 Σωστό

25 26

Παράδειγμα #2 Παράδειγμα #3
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΕΤΑΒΛΗΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΕΤΑΒΛΗΤΕΣ
PROGRAM WATER
C Αυτό το πρόγραμμα υπολογίζει τη θερμοκρασία Κατασκευάστε
Κατασκευάστε πρόγραμμα
πρόγραμμα που
που θα
θα υπολογίζει
υπολογίζει τον
τον
C τήξης και εξάτμισης του νερού στην κλίμακα Fahreneit. όγκο
όγκο σφαίρας,
σφαίρας, όταν
όταν δίνεται
δίνεται ηη ακτίνα
ακτίνα του.
του.
IMPLICIT NONE
DOUBLE PRECISION C, F
C = 0. Υπενθύμιση:
F = 9*C/5+32
WRITE (*,*) 'Το νερό παγώνει σε ',F,' Fahreneit.' Ο όγκος σφαίρας είναι:
C = 100.
F = 9*C/5+32
WRITE (*,*) 'Το νερό εξατμίζεται σε ',F,' Fahreneit.'
END

27 28
Παράδειγμα #3 Παράδειγμα #4
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΕΤΑΒΛΗΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΕΤΑΒΛΗΤΕΣ
PROGRAM MOVE Κατασκευάστε
Κατασκευάστε πρόγραμμα
πρόγραμμα που
που θα
θα υπολογίζει
υπολογίζει τον
τον
C Το πρόγραμμα αυτό υπολογίζει τον όγκο σφαίρας. αριθμητικό
αριθμητικό και
και το
το γεωμετρικό
γεωμετρικό μέσο
μέσο όρο
όρο τριών
τριών
IMPLICIT NONE αριθμών A,B,C που
αριθμών A,B,C που θα
θα εισάγονται
εισάγονται από
από το
το
DOUBLE PRECISION R, VOL, PI πληκτρολόγιο.
πληκτρολόγιο.
WRITE (*,*) 'Εισάγετε την ακτίνα'
READ (*,*) R Υπενθύμιση:
PI = ACOS(-1.)
Αριθμητικός μέσος όρος:
VOL = 4*PI*R**3/3
WRITE (*,*) 'Ο όγκος είναι ', VOL
END Γεωμετρικός μέσος όρος:

29 30

Παράδειγμα #4 Παράδειγμα #5
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΕΤΑΒΛΗΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΕΤΑΒΛΗΤΕΣ
PROGRAM AVG
C Το πρόγραμμα αυτό υπολογίζει τον αριθμητικό Να
Να υπολογιστεί
υπολογιστεί ηη βαρυτική
βαρυτική δύναμη
δύναμη μεταξύ
μεταξύ δύο
δύο
C και γεωμετρικό μέσο τριών αριθμών. σωμάτων
σωμάτων όταν
όταν δίνονται
δίνονται οι
οι μάζες
μάζες τους
τους Α,
Α, ΒΒ σε
σε
IMPLICIT NONE εκατοντάδες
εκατοντάδες τόνους
τόνους και
και ηη απόστασή
απόστασή τους
τους CC σε
σε
DOUBLE PRECISION A, B, C, AM, GM μέτρα.
μέτρα.
WRITE (*,*) 'Εισάγετε τρεις αριθμούς'
READ (*,*) A, B, C
Υπενθύμιση:
AM = (A+B+C)/3
GM = (A*B*C)**(1./3.) Βαρυτική δύναμη: G=6.673 x 10-11 Nm2/Kg2
WRITE (*,*) 'Αριθμητικός μέσος: ', ΑΜ M1, M2 είναι σε Kgr
WRITE (*,*) 'Γεωμετρικός μέσος: ', GΜ R είναι σε m
END F είναι σε Ν

31 32
Παράδειγμα #5 (1ος τρόπος) Παράδειγμα #5 (2ος τρόπος)
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΕΤΑΒΛΗΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΕΤΑΒΛΗΤΕΣ
PROGRAM FORCE1
C Το πρόγραμμα αυτό υπολογίζει τη βαρυτική δύναμη μεταξύ
C δύο σωμάτων (1ος τρόπος). Βαρυτική δύναμη: G=6.673 x 10-11 Nm2/Kg2
IMPLICIT NONE
DOUBLE PRECISION A, B, C, G, F
WRITE (*,*) 'Εισάγετε τις μάζες σε εκατοντάδες τόνους'
READ (*,*) A, B
WRITE (*,*) 'Εισάγετε την απόσταση σε μέτρα'
READ (*,*) C
G = 6.673E-11
C Μετατροπή σε Kg.
Α = 1.Ε5*Α
Β = 1.Ε5*Β
C Υπολογισμός δύναμης.
F = G*A*B/C**2
WRITE (*,*) 'Η δύναμη είναι ', F
END
33 34

Παράδειγμα #5 (2ος τρόπος) Παράδειγμα #6


ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΕΤΑΒΛΗΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΕΤΑΒΛΗΤΕΣ
PROGRAM FORCE2
C Το πρόγραμμα αυτό υπολογίζει τη βαρυτική δύναμη μεταξύ
Ένα
Ένα σώμα
σώμα ξεκινά
ξεκινά από
από την
την ηρεμία
ηρεμία σε
σε χρόνο
χρόνο t=0.
t=0.
C δύο σωμάτων (2ος τρόπος).
IMPLICIT NONE Κατόπιν
Κατόπιν για
για χρόνο
χρόνο tt11 δέχεται
δέχεται επιτάχυνση a. Μετά
επιτάχυνση a. Μετά
DOUBLE PRECISION A, B, C, G, F την
την πάροδο
πάροδο του
του χρονικού
χρονικού διαστήματος
διαστήματος tt11,, ηη
WRITE (*,*) 'Εισάγετε τις μάζες σε εκατοντάδες τόνους'
δύναμη
δύναμη που
που το
το επιτάχυνε
επιτάχυνε παύει
παύει και
και το
το σώμα
σώμα
READ (*,*) A, B
WRITE (*,*) 'Εισάγετε την απόσταση σε μέτρα' εκτελεί
εκτελεί ομαλή
ομαλή κίνηση
κίνηση για
για επιπλέον
επιπλέον χρόνο
χρόνο tt22..
READ (*,*) C Πόσο
Πόσο είναι
είναι το
το ολικό
ολικό διάστημα
διάστημα που
που διένυσε
διένυσε ;;
F = 6.673Ε-1*Α*Β/C**2
WRITE (*,*) 'Η δύναμη είναι ', F
END

35 36
Παράδειγμα #6 – Λίγη ανάλυση Παράδειγμα #6
Το σώμα εκτελεί δύο διαφορετικές κινήσεις:
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΕΤΑΒΛΗΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΕΤΑΒΛΗΤΕΣ
• Ευθύγραμμη επιταχυνόμενη κίνηση. PROGRAM MOVE
• Ευθύγραμμη ομαλή. IMPLICIT NONE
DOUBLE PRECISION T1, T2, A, S1, S2, S
Κατά την πρώτη κίνηση ξεκινά με μηδενική ταχύτητα, WRITE (*,*) 'Εισάγετε τα t1, t2 και a1'
άρα διανύει διάστημα: READ (*,*) T1, T2, A
S1 = A*T1**2/2
S2 = A*T1*T2
S = S1+S2
Η δεύτερη κίνηση ξεκινά με την ταχύτητα που έχει
ήδη από την πρώτη κίνηση, άρα διανύει διάστημα: WRITE (*,*) 'Το ολικό διάστημα είναι ', S
END

37 38

Παράδειγμα #7 Παράδειγμα #7
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΕΤΑΒΛΗΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΕΤΑΒΛΗΤΕΣ
PROGRAM DIST
Να
Να υπολογιστεί
υπολογιστεί ηη απόσταση
απόσταση του
του σημείου
σημείου C Το πρόγραμμα αυτό υπολογίζει την απόσταση σημείου
(x
(x00,y )=(2,3) από
,y00)=(2,3) από την
την ευθεία
ευθεία με
με εξίσωση
εξίσωση C από ευθεία.
Ax+By+C=0 IMPLICIT NONE
Ax+By+C=0
DOUBLE PRECISION X0, Y0
(x0,y0)
DOUBLE PRECISION A, B, C
y
DOUBLE PRECISION D
d 0 WRITE (*,*) 'Εισάγετε τις συντεταγμένες του σημείου'
C= READ (*,*) Χ0, Υ0
+
By WRITE (*,*) 'Εισάγετε τους συντελεστές της ευθείας'
+
Ax READ (*,*) Α, Β, C
x D = (A*X0+B*Y0+C)/SQRT(A**2+B**2)
WRITE (*,*) 'Η απόσταση είναι ', D
END

39 40
Τι χρειάζεται η εντολή IF
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ IF

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ IF
• Μέχρι τώρα είδαμε ότι οι εντολές ενός
προγράμματος εκτελούνται από την αρχή έως
το τέλος διαδοχικά η μία μετά την άλλη.

ΕΝΤΟΛΗ IF • Υπάρχουν προγράμματα όπου χρειάζεται σε


κάποια περίπτωση να εκτελεστούν ορισμένες
εντολές και σε κάποια άλλη όχι.

Η εντολή IF επιτρέπει την επιλεκτική εκτέλεση


κάποιων εντολών ελέγχοντας μια συνθήκη.

1 2

Παράδειγμα #1 Παράδειγμα #1
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ IF

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ IF
PROGRAM SOLVE1
IMPLICIT NONE
Κατασκευάστε
Κατασκευάστε πρόγραμμα
πρόγραμμα πουπου θα
θα επιλύει
επιλύει την
την DOUBLE PRECISION A, B, X
εξίσωση πρώτου βαθμού
εξίσωση πρώτου βαθμού
WRITE (*,*) 'Εισάγετε τους συντελεστές Α,Β'
Ax+B=0
Ax+B=0 READ (*,*) A, Β
όταν
όταν δίνονται
δίνονται τα
τα ΑΑ και
και Β.
Β.
IF (A.NE.0) THEN
X = -B/A
WRITE (*,*) 'Η λύση είναι: ', X
Υπενθύμιση: Η λύση είναι αν ELSE
WRITE (*,*) 'Δεν υπάρχει λύση'
αλλιώς δεν υπάρχει λύση. END IF

END

3 4
Συντακτικό της εντολής IF (1/4) Τι συγκρίσεις μπορεί να γίνουν ;
Μεταξύ δύο μεταβλητών ή γενικότερα δύο
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ IF

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ IF
IF ( σύγκριση ) ΤΗΕΝ παραστάσεων A και B μπορούν να γίνουν οι
εντολή1 παρακάτω συγκρίσεις:
εντολή2 Σύγκριση Τι σημαίνει
.. Ετυμολογία
. A .EQ. B A=B EQual
ELSE A .NE. B A B Not EQual
εντολή1
A .GT. B A>B Greater Than
εντολή2
.. A .LT. B A<B Less Than
. Σημείωση: κάθε εντολή A .GE. B A B Greater or Equal
END IF γράφεται μερικά κενά (ή
ένα tab) πιο δεξιά για A .LE. B A B Less or Equal
ευκρίνεια.
Κάθε σύγκριση είναι είτε αληθής είτε ψευδής.
5 6

Πως λειτουργεί η εντολή IF Παράδειγμα #2


Πρώτα γίνεται η σύγκριση
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ IF

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ IF
IF ( σύγκριση ) ΤΗΕΝ Κατασκευάστε
Κατασκευάστε πρόγραμμα
πρόγραμμα πουπου θα
θα βρίσκει
βρίσκει το
το
εντολή1 Εάν η σύγκριση είναι
αληθής εκτελείται το μεγαλύτερο από δύο αριθμούς Α, Β που
μεγαλύτερο από δύο αριθμούς Α, Β που θαθα
εντολή2
.. πρώτο τμήμα εντολών και εισάγονται
εισάγονται από
από το
το πληκτρολόγιο.
πληκτρολόγιο.
. το πρόγραμμα συνεχίζει
ELSE μετά το END IF.
εντολή1
εντολή2 Εάν η σύγκριση είναι
.. ψευδής εκτελείται το
. δεύτερο τμήμα εντολών.
END IF
Σημείωση: Το τμήμα ELSE
μπορεί να παραληφθεί.
7 8
Παράδειγμα #2 Παράδειγμα #2 - Επέκταση
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ IF

PROGRAM LARGE

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ IF
IMPLICIT NONE
DOUBLE PRECISION A, B, M Πως
Πως θα
θα βρούμε
βρούμε το
το μεγαλύτερο
μεγαλύτερο από
από τρεις
τρεις
αριθμούς
αριθμούς Α, Β, C που θα εισάγονται από το
Α, Β, C που θα εισάγονται από το
WRITE (*,*) 'Εισάγετε δύο αριθμούς Α, Β'
READ (*,*) A, Β
πληκτρολόγιο
πληκτρολόγιο ; ;

IF (A.GT.B) THEN
M = A
ELSE
M = B
END IF Σκεφτείτε το
WRITE (*,*) 'Ο μεγαλύτερος είναι', Μ

END
9 10

Παράδειγμα #3 Παράδειγμα #3
PROGRAM DIST
Κατασκευάστε
Κατασκευάστε πρόγραμμα
πρόγραμμα που που θα
θα βρίσκει
βρίσκει ποιο
ποιο από
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ IF

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ IF
από IMPLICIT NONE
τα δύο σημεία του επιπέδου ,y ) και
τα δύο σημεία του επιπέδου (x11,y11) και (x22,y22))
(x (x ,y DOUBLE PRECISION Χ0, Υ0, Χ1, Υ1, Χ2, Υ2
DOUBLE PRECISION D1, D2
βρίσκεται
βρίσκεται πιο
πιο μακριά
μακριά και
και πόσο
πόσο από
από το
το σημείο
σημείο
(x
(x00,y
,y00).
). WRITE (*,*) 'Εισάγετε τα σημεία'
READ (*,*) Χ0, Υ0, Χ1, Υ1, Χ2, Υ2
y (x1,y1)

d1
Υπενθύμιση: D1 = SQRT((X1-X0)**2+(Y1-Y0)**2)
(x0,y0) D2 = SQRT((X2-X0)**2+(Y2-Y0)**2)
Η απόσταση d1 είναι: IF (D1.GT.D2) THEN
(x2,y2) d2
WRITE (*,*) 'Μακρύτερα είναι το πρώτο', D1
x ELSE
WRITE (*,*) 'Μακρύτερα είναι το δεύτερο', D2
END IF
END
11 12
Παράδειγμα #4 Παράδειγμα #4
PROGRAM CIRCLΕ
Κατασκευάστε
Κατασκευάστε πρόγραμμα
πρόγραμμα που που θα θα βρίσκει
βρίσκει εάν
εάν ένα
ένα
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ IF

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ IF
IMPLICIT NONE
σημείο του επιπέδου βρίσκεται εντός ή
σημείο του επιπέδου (x11,y11) βρίσκεται εντός ή εκτός
(x ,y ) εκτός DOUBLE PRECISION Χ0, Υ0, R, Χ1, Υ1, D
κύκλου
κύκλου με
με κέντρο
κέντρο (x ,y00)) και
(x00,y και ακτίνα
ακτίνα R.
R.
WRITE (*,*) 'Εισάγετε κέντρο και ακτίνα κύκλου'
Στην
Στην πρώτη
πρώτη περίπτωση
περίπτωση τοτο πρόγραμμα
πρόγραμμα να να εμφανίζει
εμφανίζει READ (*,*) Χ0, Υ0, R
την
την απόσταση από το κέντρο του κύκλου ενώ
απόσταση από το κέντρο του κύκλου ενώ στη
στη WRITE (*,*) 'Εισάγετε το σημείο'
δεύτερη την απόσταση από την περιφέρειά
δεύτερη την απόσταση από την περιφέρειά του. του. READ (*,*) Χ1, Υ1
y y
(x1,y1) D = SQRT((X0-X1)**2+(Y0-Y1)**2)
(x1,y1) IF (D.LE.R) THEN
WRITE (*,*) 'Το σημείο είναι εντός ', D
(x0,y0) (x0,y0) ELSE
D = D-R
x x WRITE (*,*) 'Το σημείο είναι εκτός ', D
END IF
ΕΝΤΟΣ ΕΚΤΟΣ
13
END 14

Συντακτικό της εντολής IF (2/4) Συντακτικό της εντολής IF (3/4)

IF ( σύγκριση1 ) ΤΗΕΝ Ορισμένες παρατηρήσεις για την εντολή IF:


ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ IF

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ IF
εντολή
.. Τμήμα IF • Το πρώτο τμήμα IF πρέπει να υπάρχει
.
ELSE IF ( σύγκριση2 ) ΤΗΕΝ υποχρεωτικά.
εντολή
.. 1o τμήμα ELSE IF • Το τμήμα ELSE μπορεί να παραληφθεί.
.
ELSE IF ( σύγκριση3 ) ΤΗΕΝ • Μπορεί να υπάρχουν πολλά τμήματα ELSE IF.
εντολή
.. 2o τμήμα ELSE IF
. • Εκτελούνται οι εντολές ενός μόνο από όλα τα
ELSE τμήματα μιας εντολής IF.
εντολή Τμήμα ELSE. Εκτελείται
..
. όταν όλες οι συγκρίσεις • Εντός κάθε τμήματος επιτρέπεται να υπάρχουν
END IF είναι ψευδείς. άλλες εντολές IF.
15 16
Συντακτικό της εντολής IF (4/4) Παράδειγμα #5
Η εντολή IF που περιγράψαμε λέγεται τμηματική εντολή IF.
Κατασκευάστε
Κατασκευάστε πρόγραμμα
πρόγραμμα πουπου θα
θα βρίσκει
βρίσκει τις
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ IF

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ IF
Σε ορισμένες περιπτώσεις δεν υπάρχουν τα τμήματα ELSE IF τις
και ELSE, και επιπλέον το τμήμα IF περιέχει μια μόνο εντολή, πραγματικές
πραγματικές λύσεις (αν υπάρχουν)
λύσεις (αν υπάρχουν) της
της
δηλαδή είναι της μορφής: δευτεροβάθμιας εξίσωσης
δευτεροβάθμιας εξίσωσης
Ax22 +
Ax + Bx
Bx + +CC==0 0
IF ( σύγκριση ) ΤΗΕΝ όταν
όταν δίνονται
δίνονται τα
τα Α,
Α, BB και
και C.
C.
εντολή
END IF Υπενθύμιση:
Τότε η εντολή μπορεί να απλοποιηθεί σε μια γραμμή ως εξής:
• Αν Α=0 τότε έχουμε μια εξίσωση πρώτου βαθμού.
IF ( σύγκριση ) εντολή
• Οι λύσεις της δευτεροβάθμιας είναι:
Η εντολή αυτή ονομάζεται λογική εντολή IF.
17 18

Παράδειγμα #5 Παράδειγμα #5 (συνέχεια)


ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ IF

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ IF
PROGRAM SOLVE2 …Συνέχεια
IMPLICIT NONE ELSE
DOUBLE PRECISION A, B, C, X, D, X1, X2 C Είναι εξίσωση δευτέρου βαθμού.
D = B**2-4*A*C
WRITE (*,*) 'Εισάγετε τους συντελεστές Α,Β,C' IF (D.EQ.0) THEN
READ (*,*) A, Β, C Χ = -Β/(2*Α)
WRITE (*,*) ' Η λύση είναι: ', X
IF (A.EQ.0) THEN ELSE IF (D.GT.0) THEN
C Είναι εξίσωση πρώτου βαθμού. Χ1 = (-B+SQRT(D))/(2*A)
IF (B.NE.0) THEN Χ2 = (-B-SQRT(D))/(2*A)
X = -C/B WRITE (*,*) ' Η λύσεις είναι:',X1,Χ2
WRITE (*,*) ' Η λύση είναι: ', X ELSE
ELSE WRITE (*,*) 'Δεν υπάρχει λύση'
WRITE (*,*) 'Δεν υπάρχει λύση' END IF
END IF END IF
Συνεχίζεται… END
19 20
Σύνθετες λογικές παραστάσεις Πίνακες αλήθειας (.AND.)

Μπορούμε να κατασκευάσουμε σύνθετες λογικές


ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ IF

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ IF
σύγκριση1 σύγκριση2 σύγκριση1 .AND. σύγκριση2
παραστάσεις με τη χρήση των λογικών τελεστών
.OR. .AND. .NOT. Α Α Α
Α Ψ Ψ
IF ( σύγκριση1 .AND. σύγκριση2 ) ΤΗΕΝ Ψ Α Ψ
IF ( σύγκριση1 .OR. σύγκριση2 ) ΤΗΕΝ Ψ Ψ Ψ
IF ( .NOT. σύγκριση ) ΤΗΕΝ

Πρακτικός κανόνας:
Το αποτέλεσμα μιας σύνθετης λογικής παράστασης Το τελικό αποτέλεσμα είναι αληθές όταν
είναι είτε αληθές είτε ψευδές και εξαρτάται από τις και οι δύο
επιμέρους συγκρίσεις. συγκρίσεις είναι αληθείς
21 22

Πίνακες αλήθειας (.OR.) Πίνακες αλήθειας (.NOT.)


ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ IF

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ IF
σύγκριση1 σύγκριση2 σύγκριση1 .OR. σύγκριση2
σύγκριση .NOT. σύγκριση
Α Α Α Α Ψ
Α Ψ A Ψ Α
Ψ Α A
Ψ Ψ Ψ

Πρακτικός κανόνας: Ο τελεστής .NOT. αντιστρέφει το αποτέλεσμα της


Το τελικό αποτέλεσμα είναι αληθές όταν σύγκρισης.
είτε η μία είτε η άλλη
σύγκριση είναι αληθείς
23 24
Παράδειγμα #6 Παράδειγμα #6
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ IF

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ IF
Χ Α Β
Με
Με ποια
ποια εντολή IF μπορούμε
εντολή IF μπορούμε να
να βρούμε
βρούμε αν
αν μια
μια
μεταβλητή ΙF (X.GE.A .AND. X.LE.B) THEN Ψευδής
μεταβλητή XX είναι
είναι μεταξύ
μεταξύ δύο
δύο δοσμένων
δοσμένων ορίων
ορίων Α,
Α, ΒΒ ;;

Ψευδής Αληθής

Α Χ Β

Α Β Χ
ΙF (X.GE.A .AND. X.LE.B) THEN Αληθής
ΙF (X.GE.A .AND. X.LE.B) THEN Ψευδής
Αληθής Αληθής
Αληθής Ψευδής
25 26

Προτεραιότητες λογικών τελεστών Παράδειγμα #7


Σε μια σύνθετη λογική παράσταση όπως πχ.
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ IF

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ IF
A.GT.0 .AND. B.GT.0 .OR. C.EQ.4 Με
Με ποια
ποια εντολή IF μπορούμε
εντολή IF μπορούμε να να διαπιστώσουμε
διαπιστώσουμε αν
αν
η σειρά των λογικών πράξεων καθορίζεται από την ένας
ένας ακέραιος
ακέραιος είναι
είναι άρτιος
άρτιος ήή περιττός
περιττός ;;
προτεραιότητα των τελεστών. Για τελεστές ίδιας
προτεραιότητας οι πράξεις γίνονται από αριστερά
προς τα δεξιά. Υπενθύμιση:
Τελεστής Προτεραιότητα
.ΝΟΤ. Υψηλή Ένας ακέραιος είναι άρτιος αν είναι πολλαπλάσιο
.AND. του δύο, δηλαδή διαιρείται ακριβώς με το δύο
.OR. Χαμηλή χωρίς να αφήνει υπόλοιπο.
Οι πράξεις σε παρενθέσεις γίνονται πάντα πρώτες. Π.χ.
A.GT.0 .AND. (B.GT.0 .OR. C.EQ.4)
27 28
Παράδειγμα #7 Παράδειγμα #7 (συνάρτηση MOD)

Έστω Ν ο ακέραιος. Η συνάρτηση MOD(A,B) επιστρέφει ως αποτέλεσμα


ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ IF

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ IF
το υπόλοιπο της διαίρεσης του Α από τον Β.
Κ = Ν/2 Ακέραια διαίρεση με το 2.
Υ = Ν-2*Κ Υπόλοιπο της διαίρεσης. IF (MOD(N,2).EQ.0) THEN
IF (Y.EQ.0) THEN Έλεγχος του υπολοίπου. … άρτιος …
… άρτιος … ELSE
ELSE … περιττός …
… περιττός … END IF
END IF
Με την ίδια συνάρτηση μπορούμε να βρούμε αν ένας
ή πιο σύντομα: ακέραιος είναι π.χ. πολλαπλάσιο του 7:
IF (Ν-2*(Ν/2).EQ.0) THEN IF (MOD(N,7).EQ.0) THEN
29 30

Παράδειγμα #8 Παράδειγμα #8
Δίνεται
Δίνεται τετράγωνο
τετράγωνο με με κέντρο
κέντρο το (0,0) και
το (0,0) και πλευρά
πλευρά Α.
Α.
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ IF

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ IF
(-A/2,A/2) y (A/2,A/2)
Κατασκευάστε πρόγραμμα που θα βρίσκει
Κατασκευάστε πρόγραμμα που θα βρίσκει αν ένα αν ένα
σημείο (x,y) είναι
σημείο (x,y) είναι εντός
εντός ήή εκτός
εκτός του
του τετραγώνου.
τετραγώνου. Για να είναι ένα σημείο
Στην
Στην πρώτη περίπτωση θα εμφανίζει την απόσταση
πρώτη περίπτωση θα εμφανίζει την απόσταση (x,y) εντός του
από τετραγώνου πρέπει:
από το
το κέντρο
κέντρο των
των αξόνων
αξόνων ενώενώ στη
στη δεύτερη
δεύτερη την
την
απόσταση από την πάνω δεξιά
απόσταση από την πάνω δεξιά γωνία. γωνία.
Η συντεταγμένη x να είναι
y y x μεταξύ –A/2 και Α/2

Επίσης η συντεταγμένη y
(x,y) (x,y) να είναι μεταξύ –A/2 και
Α/2
x x
(-A/2,-A/2) (A/2,-A/2)

ΕΝΤΟΣ ΕΚΤΟΣ 31 32
Παράδειγμα #8 Παράδειγμα #8
PROGRAM SQUARE
Πως βρίσκω αν το Χ είναι μεταξύ –Α/2 και Α/2 ;
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ IF

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ IF
IMPLICIT NONE
DOUBLE PRECISION Χ, Υ, A, D
IF (X.GE.-A/2 .AND. X.LE.A/2) THEN WRITE (*,*) 'Εισάγετε την πλευρά του τετραγώνου'
READ (*,*) A
WRITE (*,*) 'Εισάγετε το σημείο'
Πως βρίσκω αν το Y είναι μεταξύ –Α/2 και Α/2 ; READ (*,*) Χ, Υ
IF ( X.GE.-A/2 .AND. X.LE.A/2 .AND.
IF (Y.GE.-A/2 .AND. Y.LE.A/2) THEN & Y.GE.-A/2 .AND. Y.LE.A/2 ) THEN
D = SQRT(X**2+Y**2)
WRITE (*,*) 'Το σημείο είναι εντός ', D
Οι δύο έλεγχοι μπορούν να συνδυαστούν σε μία εντολή: ELSE
D = SQRT((A/2-X)**2+(A/2-Y)**2)
IF ( X.GE.-A/2 .AND. X.LE.A/2 .AND. WRITE (*,*) 'Το σημείο είναι εκτός ', D
Y.GE.-A/2 .AND. Y.LE.A/2 ) THEN END IF
END
33 34

Παράδειγμα #8 – Επέκταση#1 Παράδειγμα #8 – Επέκταση#2


ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ IF

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ IF
Πως
Πως θα
θα βρούμε
βρούμε αν
αν ένα
ένα σημείο
σημείο είναι
είναι εντός
εντός ήή εκτός
εκτός Πως
Πως θα
θα βρούμε
βρούμε αναν έναένα σημείο
σημείο είναι
είναι εντός
εντός ήή εκτός
εκτός
παραλληλογράμμου με κέντρο την
παραλληλογράμμου με κέντρο την αρχή τωναρχή των παραλληλογράμμου με κέντρο
παραλληλογράμμου με κέντρο το σημείο το σημείο
αξόνων
αξόνων και
και πλευρές
πλευρές Α,
Α, ΒΒ ;; (x ,y00)) και
(x00,y και πλευρές
πλευρές Α,
Α, ΒΒ ;;

Σκεφτείτε το Σκεφτείτε το

35 36
Παράδειγμα #9 Παράδειγμα #9
(x1,y1)
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ IF

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ IF
Δίνεται
Δίνεται κύκλος
κύκλος ακτίνας
ακτίνας RR με
με κέντρο
κέντρο την
την αρχή
αρχή των
των y y (x1,y1) y
d1
αξόνων και δύο σημεία με συντεταγμένες
αξόνων και δύο σημεία με συντεταγμένες (x1,y1)
(x1,y1) (x2,y2)
(x1,y1)
και
και (x2,y2).
(x2,y2). d2
Αν
Αν και
και τα
τα δύο
δύο σημεία
σημεία είναι
είναι εντός
εντός του
του κύκλου
κύκλου ήή και
και (x2,y2)
x x (x2,y2) x
τα δύο είναι εκτός του κύκλου βρείτε τη μεταξύ
τα δύο είναι εκτός του κύκλου βρείτε τη μεταξύ
τους
τους απόσταση.
απόσταση.
Αν
Αν ένα
ένα σημείο
σημείο είναι
είναι εντός
εντός και
και το
το άλλο
άλλο είναι
είναι εκτός
εκτός
βρείτε
βρείτε ποιο από τα δύο απέχει λιγότερο από την
ποιο από τα δύο απέχει λιγότερο από την ΤΑ ΔΥΟ ΣΗΜΕΙΑ ΤΑ ΔΥΟ ΣΗΜΕΙΑ ΕΝΑ ΣΗΜΕΙΟ ΕΝΤΟΣ
περιφέρεια του κύκλου και ποια είναι η απόσταση
περιφέρεια του κύκλου και ποια είναι η απόσταση ΕΝΤΟΣ ΕΚΤΟΣ ΕΝΑ ΣΗΜΕΙΟ ΕΚΤΟΣ

αυτή.
αυτή.
Η διακεκομμένη γραμμή δείχνει ποια απόσταση ζητείται
37 38

Παράδειγμα #9 Παράδειγμα #9

Με ποια εντολή IF διαπιστώνω σε ποια από τις


ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ IF

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ IF
Όμως και στις δύο πρώτες περιπτώσεις ζητείται
τρεις περιπτώσεις βρίσκομαι ; η απόσταση μεταξύ των δύο σημείων. Μπορώ να
συνδυάσω τους δύο ελέγχους:
A1 = SQRT(X1**2+Y1**2)
A2 = SQRT(X2**2+Y2**2) A1 = SQRT(X1**2+Y1**2)
IF (A1.LE.R .AND. A2.LE.R) THEN
A2 = SQRT(X2**2+Y2**2)
…και τα δύο σημεία εντός…
IF (A1.LE.R .AND. A2.LE.R .OR.
ELSE IF (A1.GT.R .AND. A2.GT.R) THEN
A1.GT.R .AND. A2.GT.R) THEN
…και τα δύο σημεία εκτός…
…και τα δύο σημεία εντός ή εκτός…
ELSE
ELSE
…ένα σημείο εντός και ένα εκτός…
…ένα σημείο εντός και ένα εκτός…
END IF
END IF
39 40
Παράδειγμα #9 Παράδειγμα #9
Πως υπολογίζω τις αποστάσεις d1 και d2 ;
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ IF

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ IF
Μπορώ να συνδυάσω τις δύο περιπτώσεις
(x1,y1) (x2,y2)
υπολογίζοντας τις αποστάσεις d1 και d2 ως:
y y
d1 d2

D1 = ABS(R-A1)
d2 d1
D2 = ABS(A2-R)
(x2,y2) x (x1,y1) x

D1 = A1-R D1 = R-A1
D2 = R-A2 D2 = A2-R
41 42

Παράδειγμα #9 Παράδειγμα #9 (συνέχεια)

…Συνέχεια
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ IF

PROGRAM CIRC2

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ IF
IMPLICIT NONE ELSE
DOUBLE PRECISION R, X1, Y1, X2, Y2 D1 = ABS(R-A1)
DOUBLE PRECISION A1, A2, D, D1, D2 D2 = ABS(A2-R)
IF (D1.LT.D2) THEN
WRITE (*,*) 'Εισάγετε τα R,X1,Y1,X2,Y2' D = D1
READ (*,*) R, X1, Y1, X2, Y2 ELSE
A1 = SQRT(X1**2+Y1**2) D = D2
A2 = SQRT(X2**2+Y2**2) END IF
WRITE (*,*) D
IF (A1.LE.R .AND. A2.LE.R .OR. END IF
& A1.GT.R .AND. A2.GT.R) THEN END
D = SQRT((X1-X2)**2+(Y1-Y2)**2)
WRITE (*,*) D
Συνεχίζεται…
43 44
Παράδειγμα #10 Παράδειγμα #10
y
Δίνεται
Δίνεται τετράγωνο
τετράγωνο πλευράς
πλευράς 22 καθώς
καθώς και
και οο εγγεγραμμένος
εγγεγραμμένος καικαι Ορισμένες παρατηρήσεις:
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ IF

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ IF
οο περιγεγραμμένος
περιγεγραμμένος κύκλος.
κύκλος. Δεδομένου
Δεδομένου ενός
ενός σημείου
σημείου (x,y)
(x,y) (-1,1) (1,1)
βρείτε
βρείτε αν
αν το
το σημείο
σημείο αυτό:
αυτό: • Οι συντεταγμένες των
•• Είναι
Είναι εντός
εντός του
του περιγεγραμμένου
περιγεγραμμένου y
τεσσάρων γωνιών του
κύκλου
κύκλου (πορτοκαλί περιοχή).
(πορτοκαλί περιοχή). τετραγώνου είναι: x
•• Είναι
Είναι εντός
εντός του
του τετραγώνου
τετραγώνου αλλά
αλλά
1
εκτός του εγγεγραμμένου κύκλου
εκτός του εγγεγραμμένου κύκλου
• Η ακτίνα του
(-1,-1) (1,-1)
(λευκή περιοχή).
(λευκή περιοχή). -1 1
εγγεγραμμένου κύκλου
Είναι είναι 1
Είναι εντός
εντός του
του περιγεγραμμένου
•• x
περιγεγραμμένου
κύκλου
κύκλου αλλά
αλλά εκτός
εκτός του
του
τετραγώνου • Η ακτίνα του
τετραγώνου (γαλάζια περιοχή).
(γαλάζια περιοχή). -1
Είναι
περιγεγραμμένου κύκλου
•• Είναι εκτός
εκτός του
του περιγεγραμμένου
περιγεγραμμένου
κύκλου.
είναι
κύκλου.
45 46

Παράδειγμα #10
PROGRAM INAREA
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ IF

IMPLICIT NONE
DOUBLE PRECISION X, Y

WRITE (*,*) 'Εισάγετε τα X, Y'


READ (*,*) X, Y

IF (SQRT(X**2+Y**2).LE.1) THEN
WRITE (*,*) 'Εντός του εγγεγραμμένου κύκλου'
ELSE IF (X.GE.-1 .AND. X.LE.1 .AND.
& Y.GE.-1 .AND. Y.LE.1) THEN
WRITE (*,*) 'Εντός του τετραγώνου'
ELSE IF (SQRT(X**2+Y**2).LE.SQRT(2.D0)) THEN
WRITE (*,*) 'Εντός του περιγεγραμμένου κύκλου'
ELSE
WRITE (*,*) 'Εκτός του περιγεγραμμένου κύκλου'
END IF
END 47
Τι χρειάζεται η εντολή DO ;
Ι - ΕNΤΟΛΗ DO

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

ΥΠΟΛΟΓΙΣΤΕΣ
Κατασκευάστε
Κατασκευάστε πρόγραμμα
πρόγραμμα που
που θα
θα εμφανίζει
εμφανίζει στην
στην
οθόνη 10 φορές
οθόνη 10 φορές τη
τη λέξη
λέξη HELLO.
HELLO.

1 2

Τι χρειάζεται η εντολή DO ; Τι χρειάζεται η εντολή DO ;


Ι - ΕNΤΟΛΗ DO

Ι - ΕNΤΟΛΗ DO
PROGRAM HELLO

WRITE (*,*) 'HELLO' PROGRAM HELLO2


WRITE (*,*) 'HELLO' IMPLICIT NONE
WRITE (*,*) 'HELLO' INTEGER K
WRITE (*,*) 'HELLO'
Επανέλαβε τις
WRITE (*,*) 'HELLO' DO K=1,10 εντολές μεταξύ DO
ΥΠΟΛΟΓΙΣΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ
WRITE (*,*) 'HELLO' WRITE (*,*) 'HELLO' και END DO
WRITE (*,*) 'HELLO' END DO 10 φορές.
WRITE (*,*) 'HELLO'
WRITE (*,*) 'HELLO' END
WRITE (*,*) 'HELLO'

END

Αν όμως έπρεπε το HELLO να εμφανιστεί 1000 φορές ;


3 4
Πως λειτουργεί η εντολή DO Παράδειγμα #1
Ι - ΕNΤΟΛΗ DO

Ι - ΕNΤΟΛΗ DO
DO K=1,10
Σε κάθε επανάληψη η
WRITE (*,*) 'HELLO' μεταβλητή έχει
διαφορετική τιμή. Κατασκευάστε
Κατασκευάστε πρόγραμμα
πρόγραμμα το το οποίο
οποίο θα
θα εμφανίζει
εμφανίζει
END DO
στην
στην οθόνη
οθόνη την
την 22 και
η
η και 33 δύναμη
η
η δύναμη των
των ακεραίων
ακεραίων
Στην εντολή DO υπάρχει μια ακέραια μεταβλητή (Κ), μια αρχική από
από 11 έως

τιμή (1) και μια τελική τιμή (10).
έως 100.
100.
ΥΠΟΛΟΓΙΣΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ
• Μόλις το πρόγραμμα φτάσει στην εντολή DO, από την αρχική και
τελική τιμή υπολογίζεται πόσες επαναλήψεις θα γίνουν (10
επαναλήψεις).

• Κατόπιν η μεταβλητή λαμβάνει την αρχική τιμή (Κ=1) και


εκτελούνται για πρώτη φορά οι εντολές μέχρι το END DO.

• Το πρόγραμμα επιστρέφει πίσω στην εντολή DO.

• H μεταβλητή αυξάνεται (Κ=2) και η διαδικασία επαναλαμβάνεται.


5 6

Παράδειγμα #1 Συντακτικό της εντολής DO (1/2)


Ι - ΕNΤΟΛΗ DO

Ι - ΕNΤΟΛΗ DO
PROGRAM REPEAT
DO μεταβλητή = αρχική τιμή, τελική τιμή, βήμα
IMPLICIT NONE
INTEGER K εντολή1
εντολή2
DO K=1,100 ..
WRITE (*,*) K, K**2, K**3 .
END DO
END DO
ΥΠΟΛΟΓΙΣΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ

END

Σημείωση: κάθε εντολή γράφεται μερικά κενά (ή ένα tab)


Στην εντολή WRITE μπορούμε να γράψουμε όχι μόνο
πιο δεξιά για ευκρίνεια.
μηνύματα και μεταβλητές, αλλά και ολόκληρες αριθμητικές
παραστάσεις.

7 8
Συντακτικό της εντολής DO (2/2) Παράδειγμα #2
Ορισμένες παρατηρήσεις για την εντολή DO:
Ι - ΕNΤΟΛΗ DO

Ι - ΕNΤΟΛΗ DO
Πόσες
Πόσες επαναλήψεις
επαναλήψεις θα
θα γίνουν
γίνουν από
από τις
τις παρακάτω
παρακάτω
Η μεταβλητή πρέπει να είναι ακέραια. εντολές

εντολές DO ; Ποια είναι η τιμή της μεταβλητής σε
DO ; Ποια είναι η τιμή της μεταβλητής σε
κάθε
κάθε επανάληψη
επανάληψη ;;
• Το βήμα μπορεί να παραληφθεί, οπότε θεωρείται 1.

• Το βήμα μπορεί να λάβει και αρνητικές τιμές, όχι όμως 0.


DO K=2,9,2 4 επαναλήψεις K=2,4,6,8
ΥΠΟΛΟΓΙΣΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ
• Η μεταβλητή αυξάνεται αυτόματα από την εντολή DO με
το βήμα σε κάθε επανάληψη. Δεν επιτρέπεται η αλλαγή
της μεταβλητής από εμάς (πχ. να γράψουμε Κ=Κ+1).
DO Μ=0,-5,-3 2 επαναλήψεις Μ=0,-3
• Ανάλογα με την αρχική τιμή, τελική τιμή και βήμα μπορεί
να μην γίνουν καθόλου επαναλήψεις.

• Εντός της εντολής DO επιτρέπεται να υπάρχουν άλλες DO Ν=15,8,2 Καμία επανάληψη


εντολές DO.
9 10

Παράδειγμα #3 Παράδειγμα #3
Ι - ΕNΤΟΛΗ DO

Ι - ΕNΤΟΛΗ DO
Πόσες
1) DO L=1,7,2 4 επαναλήψεις L=1,3,5,7
Πόσες επαναλήψεις
επαναλήψεις θα
θα γίνουν
γίνουν από
από τις
τις παρακάτω
παρακάτω
εντολές
εντολές DO ; Ποια είναι η τιμή της μεταβλητής σε
DO ; Ποια είναι η τιμή της μεταβλητής σε
κάθε
κάθε επανάληψη
επανάληψη ;; 2) DO L=10,17,3 3 επαναλήψεις L=10,13,16

1) DO L=1,7,2 6) DO M=7,4,-1
ΥΠΟΛΟΓΙΣΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ
3) DO K=-2,2 5 επαναλήψεις K=-2,-1,0,1,2
2) DO L=10,17,3 7) DO K=7,1,4
3) DO K=-2,2 8) DO M=25,20
4) DO N=1,10,25 9) DO J=-5,-10 4) DO N=1,10,25 1 επανάληψη N=1
5) DO K=-8,-10,-2 10) DO J=12,12,-1

5) DO K=-8,-10,-2 2 επαναλήψεις Κ=-8,-10


11 12
Παράδειγμα #3 Παράδειγμα #4
Ι - ΕNΤΟΛΗ DO

Ι - ΕNΤΟΛΗ DO
6) DO M=7,4,-1 4 επαναλήψεις Μ=7,6,5,4 Κατασκευάστε
Κατασκευάστε πρόγραμμα
πρόγραμμα που
που θα
θα τυπώνει
τυπώνει τους
τους
τριγωνομετρικούς
τριγωνομετρικούς αριθμούς
αριθμούς ημίτονο,
ημίτονο, συνημίτονο
συνημίτονο καικαι
εφαπτομένη για μια περιοχή γωνιών από Μ1 έως
εφαπτομένη για μια περιοχή γωνιών από Μ1 έως Μ2 Μ2
7) DO K=7,1,4 0 επαναλήψεις μοίρες
μοίρες ανά
ανά μία
μία μοίρα.
μοίρα.
Τα
Τα Μ1, Μ2 θα εισάγονται από το
Μ1, Μ2 θα εισάγονται από το πληκτρολόγιο.
πληκτρολόγιο.
ΥΠΟΛΟΓΙΣΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ
8) DO M=25,20 0 επαναλήψεις Π.χ. για Μ1=0 και Μ2=5 το αποτέλεσμα θα πρέπει να είναι:
Γωνία Ημίτονο Συνημίτονο Εφαπτομένη
0 0.00000000 1.00000000 0.00000000
9) DO J=-5,-10 0 επαναλήψεις 1 0.01745241 0.99984770 0.01745506
2 0.03489950 0.99939083 0.03492077
3 0.05233596 0.99862953 0.05240778
10) DO J=12,12,-1 1 επανάληψη J=12 4 0.06975647 0.99756405 0.06992681
13
5 0.08715574 0.99619470 0.08748866 14

Παράδειγμα #4 Παράδειγμα #4
PROGRAM TRIGON
Ι - ΕNΤΟΛΗ DO

Ι - ΕNΤΟΛΗ DO
IMPLICIT NONE
Υπενθύμιση: INTEGER M1, M2, M
DOUBLE PRECISION PI, R
Οι τριγωνομετρικές συναρτήσεις SIN(X), COS(X) DOUBLE PRECISION S, C, T
WRITE (*,*) 'Εισάγετε τα M1, M2'
και TAN(X) δέχονται το όρισμά τους σε ακτίνια.
READ (*,*) M1, M2
ΥΠΟΛΟΓΙΣΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ
PI = ACOS(-1.0D0)
Η μετατροπή από μοίρες σε ακτίνια γίνεται ως εξής: WRITE (*,*) 'Γωνία Ημίτονο Συνημίτονο Εφαπτομένη'
DO M = M1,M2
R = M*PI/180
S = SIN(R)
C = COS(R)
T = TAN(R)
WRITE (*,*) M, S, C, T
END DO
15 END 16
Παράδειγμα #4 Παράδειγμα #4
Ι - ΕNΤΟΛΗ DO

Ι - ΕNΤΟΛΗ DO
Όμως το αποτέλεσμα θα είναι:
Αντικαθιστούμε την εντολή:
Γωνία Ημίτονο Συνημίτονο Εφαπτομένη
0 0. 1. 0. WRITE (*,*) M, S, C, T
1 0.0174524064 0.999847695 0.0174550649
2 0.0348994967 0.999390827 0.0349207695 Με τις εντολές:
ΥΠΟΛΟΓΙΣΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ
3 0.0523359562 0.998629535 0.0524077793
4 0.0697564737 0.99756405 0.0699268119 WRITE (*,10) M, S, C, T
5 0.0871557427 0.996194698 0.0874886635 10 FORMAT(I6,3X,F11.8,3X,F11.8,3X,F11.8)

Ο πίνακας δεν είναι στοιχισμένος


17 18

Εντολή μορφοποίησης - FORMAT Πεδία μορφοποίησης


Ι - ΕNΤΟΛΗ DO

Ι - ΕNΤΟΛΗ DO
WRITE (*,10) M, S, C, T Ι6 3 2
Ακέραιος αριθμός σε 6 θέσεις.
Για την εμφάνιση των μεταβλητών στην οθόνη
χρησιμοποίησε την εντολή μορφοποίησης FORMAT
3X 6
με αριθμό 10.
Τρεις κενές θέσεις.
ΥΠΟΛΟΓΙΣΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ

10 FORMAT(I6,3X,F11.8,3X,F11.8,3X,F11.8) 8
F11.8
Πραγματικός αριθμός σε
Εντολή μορφοποίησης. Για κάθε μεταβλητή υπάρχει
11 θέσεις εκ των οποίων
ένα πεδίο μορφοποίησης που καθορίζει πως θα - 0 . 1 7 8 9 1 4 5 4
8 είναι δεκαδικά ψηφία.
εμφανιστεί η μεταβλητή στην οθόνη.

11
19 20
Αθροίσματα Αθροίσματα
Ι - ΕNΤΟΛΗ DO

Ι - ΕNΤΟΛΗ DO
Μια σημαντική εφαρμογή της εντολής DO είναι ο Χρησιμοποιούμε μια μεταβλητή S (ονομάζεται
υπολογισμός αθροισμάτων. Π.χ: αθροιστής) στην οποία θα αποθηκεύσουμε το
άθροισμα.
Για
Για γνωστό
γνωστό Ν,
Ν, να
να υπολογιστεί
υπολογιστεί το
το άθροισμα:
άθροισμα:
SS =
= 1+2+3+
1+2+3+ … … +Ν
ΥΠΟΛΟΓΙΣΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ

S = 0 Αρχική τιμή.
DO K=1,Ν
Υπενθύμιση: S = S+K Προσθήκη στο άθροισμα.
END DO
Το άθροισμα δίνεται από τη σχέση:

21 22

Αθροίσματα Παράδειγμα #5
Ι - ΕNΤΟΛΗ DO

Ι - ΕNΤΟΛΗ DO
Ποια είναι η τιμή του αθροιστή S στο τέλος κάθε Τροποποιήστε
Τροποποιήστε τον
τον προηγούμενο
προηγούμενο κώδικα
κώδικα ώστε
ώστε να
να
επανάληψης ; υπολογίζει
υπολογίζει επιπλέον
επιπλέον και
και τα
τα αθροίσματα:
αθροίσματα:
2 2 2
S2
S2 = = 112+2
+22+3
+32++… …+ N22
+N
Κ S S3
S3 = = 1133+2
+233+3
+333+
+… …+ N33
+N
S = 0 1 1 S4
S4 = = 1144+2
+244+3
+344+
+… …+ N44
+N
ΥΠΟΛΟΓΙΣΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ
DO K=1,Ν 2 1+2
S = S+K 3 1+2+3 Σημείωση:
END DO 4 1+2+3+4
5 1+2+3+4+5
… …
Ν 1+2+3+4+…+Ν
23 24
Παράδειγμα #5 Παράδειγμα #6
Ι - ΕNΤΟΛΗ DO

Ι - ΕNΤΟΛΗ DO
S = 0 Γράψτε
Γράψτε απόσπασμα
απόσπασμα προγράμματος
προγράμματος για
για να
να
S2 = 0 υπολογίσετε το άθροισμα:
Αρχικές τιμές σε 4 αθροιστές. υπολογίσετε το άθροισμα:
S3 = 0
S4 = 0
DO K=1,Ν
ΥΠΟΛΟΓΙΣΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ
S = S + K
S2 = S2 + K**2
Υπενθύμιση:
S3 = S3 + K**3
S4 = S4 + K**4
END DO

25 26

Παράδειγμα #6 Παράδειγμα #7
Ι - ΕNΤΟΛΗ DO

Ι - ΕNΤΟΛΗ DO
Προσοχή: Γράψτε
Γράψτε απόσπασμα
απόσπασμα προγράμματος
προγράμματος για
για να
να
• Αριθμητής και παρονομαστής είναι ακέραιοι υπολογίσετε το
υπολογίσετε το γινόμενο:γινόμενο:
• Το συνολικό άθροισμα είναι πραγματικός 11 .. 22 .. 33 .. 44 .. …
… .. N
N

Υπενθύμιση:
Το γινόμενο αυτό ονομάζεται παραγοντικό και
ΥΠΟΛΟΓΙΣΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ

Α = 0.
συμβολίζεται με Ν!
DO K=1,N
Α = Α + 2./(1+K**2)
P = 1
END DO
DO K=2,N
P = P*K
END DO
27 28
Παράδειγμα #8 Παράδειγμα #8
Ι - ΕNΤΟΛΗ DO

Ι - ΕNΤΟΛΗ DO
Υπολογίστε
Υπολογίστε το
το άθροισμα
άθροισμα

S = 0.
μόνο
μόνο για
για τις
τις περιττές
περιττές τιμές
τιμές k.
k. DO K=1,N,2
S = S+1./K
ΥΠΟΛΟΓΙΣΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ
END DO
Σημείωση:
Το ζητούμενο άθροισμα είναι:

29 30

Παράδειγμα #9 Παράδειγμα #9
Ι - ΕNΤΟΛΗ DO

Ι - ΕNΤΟΛΗ DO
Υπολογίστε
Υπολογίστε το
το άθροισμα:
άθροισμα: S = 0
DO K=1,N
αν k άρτιος IF (MOD(K,2).EQ.0) THEN
όπου QK = K**2
αν k περιττός
ELSE
QK = N**K
ΥΠΟΛΟΓΙΣΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ
END IF
S = S + QK
Παρατήρηση:
END DO
Το ζητούμενο άθροισμα είναι:

31 32
Παράδειγμα #9 (2ος τρόπος) Παράδειγμα #10
Χωρίζουμε το άθροισμα σε δύο επιμέρους αθροίσματα:
Ι - ΕNΤΟΛΗ DO

Ι - ΕNΤΟΛΗ DO
Υπολογίστε
Υπολογίστε το
το άθροισμα:
άθροισμα:
Άθροισμα περιττών όρων (qk = Nk)

Άθροισμα άρτιων όρων (qk = k2)

S1 = 0
DO K=1,N,2
ΥΠΟΛΟΓΙΣΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ
S1 = S1 + N**K
Άθροισμα περιττών όρων Σημείωση:
END DO Το άθροισμα συγκλίνει στο π/4.
S2 = 0
DO K=2,N,2 Παρατηρήσεις:
Άθροισμα άρτιων όρων
S2 = S2 + K**2
• Οι παρανομαστές αυξάνουν κατά 2.
END DO
• Κάθε όρος έχει αντίθετο πρόσημο από τον
S = S1+S2 Ολικό άθροισμα προηγούμενο.
33 34

Παράδειγμα #10 Παράδειγμα #10 (2ος τρόπος)


Χωρίζουμε το άθροισμα σε δύο επιμέρους αθροίσματα:
Ι - ΕNΤΟΛΗ DO

Ι - ΕNΤΟΛΗ DO
Εκτός από τον αθροιστή, ορίζουμε μια μεταβλητή
για το πρόσημο η οποία παίρνει τις τιμές 1 ή –1.

S1 = 0 S = 0. Αθροιστής
DO K=1,N,4 Πρόσημο
ΥΠΟΛΟΓΙΣΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ
Άθροισμα θετικών όρων
P = 1.
S1 = S1 + 1./K
END DO DO K=1,N,2
S = S+P/K Άθροιση
S2 = 0 P = -P Αλλαγή προσήμου
DO K=3,N,4
Άθροισμα αρνητικών όρων END DO
S2 = S2 - 1./K
END DO WRITE (*,*) S Εμφάνιση αθροίσματος

S = S1 + S2 Ολικό άθροισμα
35 36
Αναδρομικές σχέσεις Αναδρομικές σχέσεις
Ι - ΕNΤΟΛΗ DO

Ι - ΕNΤΟΛΗ DO
Σειρές αριθμών όπου ο κάθε όρος εξαρτάται Στο πρόγραμμα χρησιμοποιούμε μία μόνο μεταβλητή
από προηγούμενους όρους περιγράφονται από (και όχι μία για κάθε όρο). Η μεταβλητή αυτή
αναδρομικές σχέσεις. Π.χ. περιέχει κάθε φορά τον τρέχοντα όρο της σειράς.

Δίνεται
Δίνεται ηη σειρά
σειρά αριθμών
αριθμών αα11,, αα22,, αα33,, …
… A = 1 Πρώτος όρος
ΥΠΟΛΟΓΙΣΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ
με α = 1 και α
με α11 = 1 και αnn = 1+ αn-1
= 1+ α n-1 DO K=2,N
Ποιοι
Ποιοι είναι
είναι οι
οι επόμενοι
επόμενοι όροι
όροι ;; A = 1+A Επόμενος όρος
WRITE (*,*) A
α2 = 1+α1 = 1+1 = 2 END DO
α3 = 1+α2 = 1+2 = 3
α4 = 1+α3 = 1+3 = 4
37 38

Παράδειγμα #11 Παράδειγμα #11


Ι - ΕNΤΟΛΗ DO

Ι - ΕNΤΟΛΗ DO
A = 1 Πρώτος όρος
Κατασκευάστε
Κατασκευάστε πρόγραμμα
πρόγραμμα που
που θα
θα υπολογίζει
υπολογίζει το
το DO K=2,N
Ν-οστό
Ν-οστό όρο
όρο της
της ακολουθίας:
ακολουθίας: A = 2+1./Α Επόμενος όρος
WRITE (*,*) A
END DO
με
με πρώτο
πρώτο όρο
όρο αα11=1
=1
ΥΠΟΛΟΓΙΣΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ

Για Ν=6 θα εμφανιστεί στην οθόνη:


Σημείωση: 3.00000000000000
Η ακολουθία αυτή συγκλίνει γρήγορα στην τιμή 2.33333333333333
2.42857142857143
2.41176470588235
2.41463414634146
39 40
Παράδειγμα #12 Παράδειγμα #12
Ονομάζουμε τα διαδοχικά βήματα:
Ι - ΕNΤΟΛΗ DO

Ι - ΕNΤΟΛΗ DO
β1, β2, β3, …, βΝ
Ένας
Ένας άνθρωπος
άνθρωπος ξεκινά
ξεκινά να
να περπατά
περπατά μεμε βήμα
βήμα BB
εκατοστά.
εκατοστά. Μετά
Μετά από
από κάθε
κάθε βήμα
βήμα αυξάνει
αυξάνει τοτο βήμα
βήμα Τα βήματα μπορούν να εκφραστούν από την
του κατά Α% σε σχέση με το προηγούμενο
του κατά Α% σε σχέση με το προηγούμενο αναδρομική σχέση:
βήμα.
βήμα. Εάν
Εάν κάνει N βήματα
κάνει N βήματα πόση
πόση απόσταση
απόσταση θα θα
ΥΠΟΛΟΓΙΣΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ
έχει
έχει διανύσει
διανύσει συνολικά
συνολικά ;; με γνωστό πρώτο όρο β1

Όμως στο πρόβλημα αυτό δεν ζητείται να βρεθούν οι


όροι της ακολουθίας, αλλά το άθροισμα όλων των
όρων, δηλαδή: S = β1 + β2 + β3 + … + βΝ
41 42

Παράδειγμα #12 Παράδειγμα #13


Ι - ΕNΤΟΛΗ DO

Ι - ΕNΤΟΛΗ DO
PROGRAM STEP
IMPLICIT NONE Ακολουθία
Ακολουθία Fibonacci
Fibonacci
INTEGER K, N
DOUBLE PRECISION B, A, S Υπολογίστε
Υπολογίστε το
το Ν-στο
Ν-στο όροόρο της
της ακολουθίας:
ακολουθίας:
WRITE (*,*) 'Εισάγετε τα B, A, N' FFnn =
= FFn-1 + F n-2
n-1 + Fn-2
READ (*,*) B, A, N με
με FF00 = = 00 καικαι FF11 =
= 11
ΥΠΟΛΟΓΙΣΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ

S = B Αρχική τιμή αθροίσματος


DO K=2,N
B = B + A/100*B Νέο βήμα
Χρησιμοποιούμε δύο μεταβλητές:
S = S + B Άθροιση βήματος • P για τον προηγούμενο όρο (Fn-1)
END DO • PP για τον προ-προηγούμενο όρο (Fn-2)
WRITE (*,*) 'Η συνολική απόσταση είναι',S

END
43 44
Παράδειγμα #13 Παράδειγμα #13
Ι - ΕNΤΟΛΗ DO

Ι - ΕNΤΟΛΗ DO
PROGRAM FIBO
F0 PP=1 IMPLICIT NONE
F1 P=1 PP INTEGER PP, P, A, N, I
WRITE (*,*) 'Μέχρι ποιον όρο;'
F2 A=P+PP P PP READ (*,*) N
F3 A=P+PP P PP PP = 0
P = 1
F4 A=P+PP P
ΥΠΟΛΟΓΙΣΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ
WRITE (*,*) PP
F5 A=P+PP WRITE (*,*) P
DO I=2,N
A = PP+P
Κάθε φορά: WRITE (*,*) A
PP = P
• στη θέση PP αποθηκεύεται η P PP = P
P = A P = A
• στη θέση P αποθηκεύεται η Α END DO
END
45 46

Παράδειγμα #14 Παράδειγμα #14


Ι - ΕNΤΟΛΗ DO

Ι - ΕNΤΟΛΗ DO
PROGRAM BANK
Καταθέτουμε
Καταθέτουμε σε σε μια
μια τράπεζα
τράπεζα ένα
ένα αρχικό
αρχικό IMPLICIT NONE
DOUBLE PRECISION K, E, A, T
κεφάλαιο
κεφάλαιο Κ.Κ. Το
Το ποσό
ποσό αυτό
αυτό ανατοκίζεται
ανατοκίζεται στο
στο INTEGER N, I
τέλος κάθε μήνα με επιτόκιο Ε%. Κάθε
τέλος κάθε μήνα με επιτόκιο Ε%. Κάθε μήνα μήνα
μετά WRITE (*,*) 'Εισάγετε τα K, E, A, N'
μετά τον
τον ανατοκισμό
ανατοκισμό ακολουθεί
ακολουθεί ανάληψη
ανάληψη
READ (*,*) K, E, A, N
ποσού
ποσού Α αν υπάρχει επαρκές υπόλοιπο. Πόσο
Α αν υπάρχει επαρκές υπόλοιπο. Πόσο
ΥΠΟΛΟΓΙΣΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ

είναι
είναι το
το υπόλοιπο
υπόλοιπο του
του λογαριασμού
λογαριασμού μετά
μετά από
από ΝΝ DO I=1,N
μήνες T = K*E/100 Μηνιαίος τόκος
μήνες ;;
K = K+T Προσθήκη στο κεφάλαιο
IF (K.GE.A) K = K-A Ανάληψη
END DO
WRITE (*,*) 'Το τελικό κεφάλαιο είναι', K

END
47 48
Παράδειγμα #15 Παράδειγμα #15
Ι - ΕNΤΟΛΗ DO

Ι - ΕNΤΟΛΗ DO
Υπολογισμός
Υπολογισμός ολοκληρώματος
ολοκληρώματος

Υπολογίστε
Υπολογίστε προσεγγιστικά
προσεγγιστικά το
το ολοκλήρωμα
ολοκλήρωμα
ΥΠΟΛΟΓΙΣΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ
όταν
όταν δίνεται
δίνεται ηη συνάρτηση f(x) και
συνάρτηση f(x) και τα
τα όρια
όρια
ολοκλήρωσης
ολοκλήρωσης a, a, bb χρησιμοποιώντας
χρησιμοποιώντας τον
τον
Αλγόριθμος:
κανόνα
κανόνα του
του παραλληλογράμμου.
παραλληλογράμμου.
1. Χωρίζουμε το διάστημα [α,b] σε N ίσα υποδιαστήματα.
2. Υπολογίζουμε το εμβαδόν του κάθε ορθογωνίου παραλληλο-
Το ζητούμενο ολοκλήρωμα ισούται με το εμβαδόν γράμμου θεωρώντας ως ύψος την τιμή της συνάρτησης στο
της περιοχής μεταξύ της συνάρτησης και του μέσον του.
άξονα x. 3. Αθροίζουμε όλα τα επιμέρους εμβαδά.
49 50

Παράδειγμα #15 Παράδειγμα #15


Ποιο είναι το μέσον του k υποδιαστήματος ;
Ι - ΕNΤΟΛΗ DO

Ι - ΕNΤΟΛΗ DO
h
Ποιο είναι το μήκος κάθε υποδιαστήματος ;

α b
Το 1o υποδιάστημα ξεκινάει στο: α
Το 2o υποδιάστημα ξεκινάει στο: α+h
ΥΠΟΛΟΓΙΣΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ
Το 3o υποδιάστημα ξεκινάει στο: α+2h
Το 4o υποδιάστημα ξεκινάει στο: α+3h

Το k υποδιάστημα ξεκινάει στο: α+(k-1)h

Το μέσον του k υποδιαστήματος είναι:

51 52
Παράδειγμα #15 Παράδειγμα #15
Ι - ΕNΤΟΛΗ DO

Ι - ΕNΤΟΛΗ DO
PROGRAM INTEG
Ποιο είναι το εμβαδόν του υποδιαστήματος k ; IMPLICIT NONE
DOUBLE PRECISION A, B, H, S, X, F
INTEGER N, K
WRITE (*,*) 'Εισάγετε τα Α,Β,Ν'
READ (*,*) A, Β, N
Η = (B-A)/N Μήκος υποδιαστήματος
ΥΠΟΛΟΓΙΣΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ
Ποιο είναι το συνολικό εμβαδόν ; S = 0.
DO K=1,N
X = A+K*H-H/2 Μέσον του υποδιαστήματος
F = SIN(X) Τιμή της συνάρτησης
S = S+H*F Άθροιση επιμέρους εμβαδού
END DO
WRITE (*,*) 'Ολοκλήρωμα = ', S
END

53 54

Παράδειγμα #16 Παράδειγμα #16


Ι - ΕNΤΟΛΗ DO

Ι - ΕNΤΟΛΗ DO
Ο κάθε όρος του αθροίσματος
Υπολογίστε
Υπολογίστε το
το άθροισμα
άθροισμα είναι της μορφής:

Ο αριθμητής υπολογίζεται ως: Α = Χ**Κ


ΥΠΟΛΟΓΙΣΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ
όταν
όταν δίνεται
δίνεται το
το xx και
και το
το Ν.
Ν.
Ο παρανομαστής υπολογίζεται ως:

Υπενθύμιση: P = 1
Το ανωτέρω άθροισμα είναι η σειρά Taylor του ex DO Μ=2,K
P = P*Μ
END DO
55 56
Παράδειγμα #16 Παράδειγμα #16
Ι - ΕNΤΟΛΗ DO

Ι - ΕNΤΟΛΗ DO
PROGRAM EX
IMPLICIT NONE Πόσες
Πόσες πράξεις
πράξεις γίνονται
γίνονται στο
στο πρόγραμμα
πρόγραμμα ;;
DOUBLE PRECISION X, S, A
INTEGER N, M, K, P DO K=1,N
WRITE (*,*) 'Εισάγετε τα Χ, Ν' 1 ύψωση σε δύναμη
READ (*,*) X, N
A = X**K
S = 1. P = 1
DO K=1,N DO M=2,K
ΥΠΟΛΟΓΙΣΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ
A = X**K P = P*M Κ-1 πολλαπλασιασμοί
P = 1 END DO
Εξωτερικό DO M=2,K
DO για κάθε P = P*M Εσωτερικό DO για το k! S = S + A/P 1 πρόσθεση, 1 διαίρεση
όρο END DO END DO
S = S + A/P
END DO Συνολικά εντός του εξωτερικού DO γίνονται
WRITE (*,*) S
Κ+2 πράξεις
END
57 58

Παράδειγμα #16 Παράδειγμα #16 (2ος τρόπος)


Ι - ΕNΤΟΛΗ DO

Ι - ΕNΤΟΛΗ DO
Κ Πράξεις (Κ+2)
1 1+2
2 2+2 Παρατηρείστε ότι ο κάθε όρος του αθροίσματος
3 3+2 μπορεί να γραφεί σε σχέση με τον προηγούμενο.
4 4+2 Παράδειγμα:
ΥΠΟΛΟΓΙΣΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ

5 5+2
… …
Ν Ν+2

Σύνολο πράξεων: προηγούμενος προηγούμενος


3ος όρος 4ος όρος
όρος όρος
59 60
Παράδειγμα #16 (2ος τρόπος) Παράδειγμα #16 (2ος τρόπος)
Ι - ΕNΤΟΛΗ DO

Ι - ΕNΤΟΛΗ DO
PROGRAM EX2
Γενικά: IMPLICIT NONE
DOUBLE PRECISION X, S, T
INTEGER N, I, K
WRITE (*,*) 'Εισάγετε τα X, N'
READ (*,*) X, N
ΥΠΟΛΟΓΙΣΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ
S = 1. Αρχική τιμή αθροίσματος
T = 1. Πρώτος όρος
DO K=1,N
T = T*X/K Επόμενος όρος
S = S + T Άθροιση
END DO
Αναδρομική σχέση με ένα προηγούμενο όρο.
WRITE (*,*) S
Προσοχή: δεν ζητούνται οι επιμέρους όροι αλλά το άθροισμά τους. END

61 62

Παράδειγμα #16 (2ος τρόπος) Παράδειγμα #17


Ι - ΕNΤΟΛΗ DO

Ι - ΕNΤΟΛΗ DO
Υπολογίστε
Υπολογίστε το
το άθροισμα
άθροισμα
Πόσες
Πόσες πράξεις
πράξεις γίνονται
γίνονται με
με τον
τον 22οο τρόπο
τρόπο ;;

DO K=1,N
T = T*X/K όταν
όταν δίνεται
δίνεται το
το xx και
και το
το Ν.
Ν.
3Ν πράξεις
ΥΠΟΛΟΓΙΣΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ
S = S + T
END DO Υπενθύμιση:
Το ανωτέρω άθροισμα είναι η σειρά Taylor του cosx
Θυμηθείτε: με τον προηγούμενο τρόπο χρειαζόμαστε
Παρατηρήσεις:
πράξεις • Υπάρχουν μόνο όροι άρτιας τάξης
• Το πρόσημο εναλλάσσεται
63 64
Παράδειγμα #17 Παράδειγμα #17
Ι - ΕNΤΟΛΗ DO

Ι - ΕNΤΟΛΗ DO
Γενικά:

Παρατηρείστε ότι ο κάθε όρος του αθροίσματος


όρος τάξης k όρος τάξης k-2
μπορεί να γραφεί σε σχέση με τον προηγούμενο.
Παράδειγμα:
ΥΠΟΛΟΓΙΣΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ
Αναδρομική σχέση με ένα προηγούμενο όρο.
όρος 4ης προηγούμενος όρος 6ης προηγούμενος Προσοχή: δεν ζητούνται οι επιμέρους όροι αλλά το άθροισμά τους.
τάξης όρος τάξης όρος
65 66

Παράδειγμα #17 Παράδειγμα #18


Ι - ΕNΤΟΛΗ DO

Ι - ΕNΤΟΛΗ DO
PROGRAM COSINE
IMPLICIT NONE
Υπολογίστε
Υπολογίστε το
το άθροισμα
άθροισμα
DOUBLE PRECISION X, S, T
INTEGER N, K
WRITE (*,*) 'Εισάγετε τα X, N'
READ (*,*) X, N
όταν
όταν δίνεται
δίνεται το
το xx και
και το
το Ν.
Ν.
ΥΠΟΛΟΓΙΣΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ
S = 1. Αρχική τιμή
T = 1. Πρώτος όρος
DO K=2,N,2
T = -T*X**2/(K*(K-1)) Επόμενος όρος Υπενθύμιση:
S = S + T Άθροιση Το ανωτέρω άθροισμα είναι η σειρά Taylor του sinx
END DO
WRITE (*,*) S
END

67 68
Παράδειγμα #18 Παράδειγμα #18
Ι - ΕNΤΟΛΗ DO

Ι - ΕNΤΟΛΗ DO
PROGRAM SINE
IMPLICIT NONE
DOUBLE PRECISION X, S, T
Κάθε όρος μπορεί να γραφεί σε σχέση με τον INTEGER N, K
προηγούμενο: WRITE (*,*) 'Εισάγετε τα X, N'
READ (*,*) X, N
ΥΠΟΛΟΓΙΣΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ
S = X Αρχική τιμή
όρος τάξης k όρος τάξης k-2 T = X Πρώτος όρος
DO K=3,N,2
T = -T*X**2/(K*(K-1)) Επόμενος όρος
S = S + T Άθροιση
END DO
Όμως προσοχή: ο πρώτος όρος είναι x WRITE (*,*) S
END

69 70

x
όρος k = όρος k −1 + όρος 0 = 1
k
x3 x5 x7 xN
Ι - ΕNΤΟΛΗ DO

Ι - ΕNΤΟΛΗ DO
x − + − + ... x6 x2 x4
− =− Γενικά:
3! 5 ! 7 ! N! 6! 5 ⋅ 6 4!
x 2 x3 x 4 xN
1 + x + + + + ... +
x4 x2 ⎛ x2 ⎞ x2 2! 3! 4 ! N!
=− ⎜− ⎟ =− ⋅
3 ⋅ 4 ⎜⎝ 2 ! ⎟⎠
ΥΠΟΛΟΓΙΣΤΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ
3 2
4! k (k − 1) x x x
=
3! 2 ! 3
x2 x4 x6 xN
1 − + − + ... x 4 x3 x xk x k −1 x
2! 4! 6 ! N! = =
A 4 ! 3! 4 k ! (k − 1) ! k
β k = β k −1 + β k −1
100 71 72
Ι - ΕNΤΟΛΗ DO

∑q
k =1
k = q1 + q2 + q3 + ... + q N

S1 = q1 + q3 + q5 + ... N 2 + 5N
2
S 2 = q2 + q4 + q6 + ...
ΥΠΟΛΟΓΙΣΤΕΣ

1 1 1
S1 = 1 + + + + ...
5 9 13
1 1 1 1
S 2 = − − − − ...
3 7 11 15 73
Γιατί χρειαζόμαστε πίνακες;

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ


ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ

• Σε πολλά προγράμματα μπορεί να χρειαστεί να


ορίσουμε πολλές μεταβλητές παρόμοιου τύπου
ΜΟΝΟΔΙΑΣΤΑΤΟΙ – π.χ. να ορίσουμε και σώσουμε τις τιμές μιας συνάρτησης
σε Ν σημεία
ΠΙΝΑΚΕΣ • Αντί να δηλώσουμε Ν διαφορετικές μεταβλητές,
δηλώνουμε μία μεταβλητή με Ν δείκτες → πίνακας

• Πίνακας: μεταβλητή με δείκτες

Απλή μεταβλητή: ένα όνομα, μία θέση στην μνήμη


Πίνακας: ένα όνομα, πολλές διαδοχικές θέσεις στην μνήμη
1 2

Παράδειγμα #1Α (χωρίς πίνακες) Παράδειγμα #1B (με πίνακες)


ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ


Κατασκευάστε πρόγραμμα που θα δέχεται 5 Κατασκευάστε πρόγραμμα που θα δέχεται 5
αριθμούς και θα τυπώνει το τετράγωνό τους αριθμούς και θα τυπώνει το τετράγωνό τους
PROGRAM SQUARE_1A PROGRAM SQUARE_1B
IMPLICIT NONE IMPLICIT NONE
DOUBLE PRECISION A1, A2, A3, A4, A5 DOUBLE PRECISION A(5)
INTEGER I
WRITE(*,*) ‘ΔΩΣΤΕ 5 ΑΡΙΘΜΟΥΣ’
READ(*,*) A1, A2, A3, A4, A5 WRITE(*,*) ‘ΔΩΣΤΕ 5 ΑΡΙΘΜΟΥΣ’
READ(*,*) A(1), A(2), A(3), A(4), A(5)
WRITE(*,*) ‘ΤΟ ΤΕΤΡΑΓΩΝΟ ΤΟΥ’, Α1, ’ΕΙΝΑΙ’, Α1**2
WRITE(*,*) ‘ΤΟ ΤΕΤΡΑΓΩΝΟ ΤΟΥ’, Α2, ’ΕΙΝΑΙ’, Α2**2 DO I = 1, 5
WRITE(*,*) ‘ΤΟ ΤΕΤΡΑΓΩΝΟ ΤΟΥ’, Α3, ’ΕΙΝΑΙ’, Α3**2 WRITE(*,*) ‘ΤΟ ΤΕΤΡΑΓΩΝΟ ΤΟΥ’,Α(I),’ΕΙΝΑΙ’, Α(I)**2
WRITE(*,*) ‘ΤΟ ΤΕΤΡΑΓΩΝΟ ΤΟΥ’, Α4, ’ΕΙΝΑΙ’, Α4**2 END DO
WRITE(*,*) ‘ΤΟ ΤΕΤΡΑΓΩΝΟ ΤΟΥ’, Α5, ’ΕΙΝΑΙ’, Α5**2
END
END 3 4
Δήλωση μονοδιάστατων πινάκων Μέγεθος πίνακα
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ


• Όλα τα στοιχεία ενός πίνακα είναι υποχρεωτικά του • Στη δήλωση του πίνακα το μέγεθος πρέπει να είναι μια
ίδιου τύπου σταθερή αριθμητική τιμή
– ακέραιο νούμερο
• Δηλώνεται ως συνήθης μεταβλητή αλλά με μέγεθος
– σταθερή ακέραια μεταβλητή με αναθετημένη τιμή
• Το μέγεθος αυτομάτως επισημαίνει ότι είναι πίνακας ο μεταφραστής πρέπει να ξέρει πόσο χώρο στην μνήμη χρειάζεται

Παράδειγμα: δηλώστε σε πρόγραμμα έναν ακέραιο πίνακα 100


• Για δημιουργία σταθερής ακέραιας μεταβλητής
στοιχείων και έναν ρητό 200 στοιχείων
χρησιμοποιούμε την εντολή parameter
PROGRAM MATRIX
τύπος μεταβλητή
IMPLICIT NONE
INTEGER K(100)
DOUBLE PRECISION A(200) parameter(μεταβλητή=τιμή)
• Η ανάθεση γίνεται πρίν την δήλωση του πίνακα
εντολές… • Η τιμή της μεταβλητής δεν μπορεί να αλλάξει στο πρόγραμμα
END 5 6

Παράδειγμα #2 Ανάθεση τιμών σε πίνακα


ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ


Δηλώστε σε πρόγραμμα:
- 3 ακέραιους πίνακας 200 στοιχείων, και • Καλούμε τα στοιχεία του πίνακα χρησιμοποιώντας
- 3 πίνακες διπλής ακρίβειας 100 στοιχείων ακέραιους δείκτες
– προσοχή να μη ξεπεράσουμε τα όρια του πίνακα
PROGRAM MATRIX2
IMPLICIT NONE • Από εκεί και πέρα όπως κάθε άλλη μεταβλητή
INTEGER NMAX
PARAMETER(NMAX=100)
INTEGER I(2*NMAX), J(2*NMAX), K(2*NMAX) Γενικά μπορούμε να χρησιμοποιήσουμε 3 τρόπους
DOUBLE PRECISION A(NMAX), B(NMAX), C(NMAX) για την γρήγορη ανάθεση τιμών:
• με απευθείας ανάθεση
εντολές… • με εντολή DATA
END
• με εντολή εισόδου READ

7 8
Παράδειγμα ανάθεσης τιμών #1 Παράδειγμα ανάθεσης τιμών #2
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ


Δηλώστε πίνακα ακεραίων με 5 στοιχεία, και Δηλώστε πίνακα ακεραίων με 5 στοιχεία, και
αναθέσετε τους τις τιμές 10, 20, ..., 50 αντίστοιχα αναθέσετε τους τις τιμές 10, 20, ..., 50 αντίστοιχα

1. Απευθείας ανάθεση: 2. Εντολή DATA:


PROGRAM MATRIX3Α PROGRAM MATRIX3B
PROGRAM MATRIX3Α
IMPLICIT NONE IMPLICIT NONE
IMPLICIT NONE
INTEGER Α(5) INTEGER Α(5)
INTEGER Α(5), I
Α(1) = 10 DATA A / 10, 20, 30, 40, 50/
DO I = 1, 5
Α(2) = 20
Α(I) = 10 * I
Α(3) = 30 END
END DO
Α(4) = 40
Α(5) = 50 Προσοχή: στην εντολή DATA υποχρεωτικά αναθέτουμε
END
όλες τις τιμές του πίνακα. Εαν θέλουμε να αναθέσουμε
END
9 μέρος αυτών, χρησιμοποιούμε μια απο τις άλλες δύο 10

Παράδειγμα ανάθεσης τιμών #3 Παράδειγμα ανάθεσης τιμών #3


ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ


(1/3) (2/3)
Δηλώστε πίνακα ακεραίων με 5 στοιχεία, και Δηλώστε πίνακα ακεραίων με 5 στοιχεία, και
αναθέσετε τους τις τιμές 10, 20, ..., 50 αντίστοιχα αναθέσετε τους τις τιμές 10, 20, ..., 50 αντίστοιχα

3. Εντολή READ 1: 3. Εντολή READ 2:


PROGRAM MATRIX3C
PROGRAM MATRIX3C
IMPLICIT NONE
IMPLICIT NONE
INTEGER Α(5)
INTEGER Α(5)
WRITE(*,*) ‘ΕΙΣΑΓΕΤΕ 5 ΤΙΜΕΣ’
WRITE(*,*) ‘ΕΙΣΑΓΕΤΕ 5 ΤΙΜΕΣ’
READ(*,*) A
READ(*,*) A(1), A(2), A(3), A(4), A(5)
END
END
Προσοχή: εδώ υποχρεωτικά αναθέτουμε όλα τα στοιχεία
Η ανάθεση εδώ γίνεται απο το πληκτρολόγιο του Α. Εαν θέλουμε να αναθέσουμε μέρος αυτών,
11 χρησιμοποιούμε μια απο τις άλλες δύο μεθόδους READ. 12
Παράδειγμα ανάθεσης τιμών #3
Βρόγχοι DO και εντολή READ
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ


(3/3)
Δηλώστε πίνακα ακεραίων με 5 στοιχεία, και Ποιά η διαφορά στα δύο παρακάτω παραδείγματα;
αναθέσετε τους τις τιμές 10, 20, ..., 50 αντίστοιχα
PROGRAM MATRIX3C
IMPLICIT NONE
3. Εντολή READ 3: Έμμεσο DO INTEGER Α(5), I
(το DO “μέσα” WRITE(*,*) ‘ΕΙΣΑΓΕΤΕ 5 ΤΙΜΕΣ’
PROGRAM MATRIX3C στο READ) READ(*,*) (A(I), I = 1, 5)
IMPLICIT NONE END
INTEGER Α(5), I
PROGRAM MATRIX3C2
WRITE(*,*) ‘ΕΙΣΑΓΕΤΕ 5 ΤΙΜΕΣ’ IMPLICIT NONE
READ(*,*) (A(I), I = 1, 5) INTEGER Α(5), I
Aμμεσο DO WRITE(*,*) ‘ΕΙΣΑΓΕΤΕ 5 ΤΙΜΕΣ’
END (το READ “μέσα” DO I = 1, 5
στο DO) READ(*,*) A(I)
Το παραπάνω ονομάζεται έμμεσος βρόγχος DO END DO
13
END 14

Παράδειγμα εξαγωγής τιμών #1 Παράδειγμα εξαγωγής τιμών #1


ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ


(1/2) ( 2/ 2 )
Δηλώστε πίνακα ακεραίων με 5 στοιχεία, και εισάγετε 5 Δηλώστε πίνακα ακεραίων με 5 στοιχεία, και εισάγετε 5
τιμές. Κατόπιν εξάγετε το τετράγωνα της κάθε τιμής. τιμές. Κατόπιν εξάγετε το τετράγωνα της κάθε τιμής.
PROGRAM MATRIX3C
PROGRAM MATRIX3C IMPLICIT NONE
IMPLICIT NONE INTEGER Α(5), I
INTEGER Α(5), I
WRITE(*,*) ‘ΕΙΣΑΓΕΤΕ 5 ΤΙΜΕΣ’
WRITE(*,*) ‘ΕΙΣΑΓΕΤΕ 5 ΤΙΜΕΣ’ READ(*,*) (A(I), I = 1, 5)
READ(*,*) (A(I), I = 1, 5)
WRITE(*,*) ‘TΑ ΤΕΤΡΑΓΩΝΑ ΤΩΝ ΑΡΙΘΜΩΝ ΕΙΝΑΙ:’
WRITE(*,*) ‘TΑ ΤΕΤΡΑΓΩΝΑ ΤΩΝ ΑΡΙΘΜΩΝ ΕΙΝΑΙ:’ WRITE(*,*) (A(I)**2, I = 1, 5)
WRITE(*,*) A(1)**2, A(2)**2, A(3)**2, A(4)**2, A(5)**2
END
END
Με έμμεσο βρόγχο DO
15 16
Βρόγχοι DO και εντολή WRITE Παράδειγμα #3
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ


Ποια η διαφορά στα δύο παρακάτω παραδείγματα; • Πρόγραμμα που να ζητάει την εισαγωγή δεδομένων
και να υπολογίζει τον μέσο όρο
PROGRAM AVERAGE
IMPLICIT NONE
INTEGER NMAX, Ν, I
Έμμεσο DO WRITE(*,*) (A(I)**2, I = 1, 5)
PARAMETER(NMAX = 1000)
DOUBLE PRECISION X(NMAX), A

WRITE(*,*) ‘ΠΟΣΕΣ ΤΙΜΕΣ ΘΑ ΕΙΣΑΓΕΤΕ’


READ(*,*) Ν
DO I = 1, 5 C.... ΕΛΕΓΧΟΥΜΕ ΝΑ ΜΗΝ ΞΕΠΕΡΑΣΤΟΥΝ ΤΑ ΟΡΙΑ ΤΟΥ ΠΙΝΑΚΑ
WRITE(*,*) A(I)**2
Άμμεσο DO IF (N .GT. NMAX .OR. N .LE. 0) THEN
END DO WRITE(*,*) ‘ΛΑΘΟΣ: ΜΕΧΡΙ’, ΝΜΑΧ, ‘ΤΙΜΕΣ’
STOP
END IF
17 ΣΥΝΕΧΙΖΕΤΑΙ...18

Παράδειγμα #3 (συνέχεια...) Παράδειγμα #4


ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ


• Πρόγραμμα που να ζητάει την εισαγωγή δεδομένων • Πρόγραμμα που να ζητάει την εισαγωγή δεδομένων και
και να υπολογίζει τον μέσο όρο να υπολογίζει τον μικρότερο όρο
PROGRAM ΧMIN
WRITE(*,*) ‘ΕΙΣΑΓΕΤΕ ΤΙΣ ΤΙΜΕΣ’
IMPLICIT NONE
READ(*,*) (X(I), I = 1, N)
INTEGER NMAX, Ν, I
PARAMETER(NMAX = 1000)
A = 0
DOUBLE PRECISION X(NMAX), XMIN
DO I = 1, N
A = A + X(I)
WRITE(*,*) ‘ΠΟΣΕΣ ΤΙΜΕΣ ΘΑ ΕΙΣΑΓΕΤΕ’
END DO
READ(*,*) Ν
A = A / N
C.... ΕΛΕΓΧΟΥΜΕ ΝΑ ΜΗΝ ΞΕΠΕΡΑΣΤΟΥΝ ΤΑ ΟΡΙΑ ΤΟΥ ΠΙΝΑΚΑ
IF (N .GT. NMAX .OR. N .LE. 0) THEN
WRITE(*,*) ‘Ο ΜΕΣΟΣ ΟΡΟΣ ΤΩΝ ΣΤΟΙΧΕΙΩΝ ΕΙΝΑΙ:’, Α
WRITE(*,*) ‘ΛΑΘΟΣ: ΜΕΧΡΙ’, ΝΜΑΧ, ‘ΤΙΜΕΣ’
STOP
END
END IF
19 ΣΥΝΕΧΙΖΕΤΑΙ...20
Παράδειγμα #4 (συνέχεια...) Παράδειγμα #5
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ


• Πρόγραμμα που να ζητάει την εισαγωγή δεδομένων και • Πρόγραμμα που να ζητάει την εισαγωγή δεδομένων και
να υπολογίζει τον μικρότερο όρο να υπολογίζει τον μεγαλύτερο όρο και την θέση στον
πίνακα στην οποία εμφανίζεται αυτός
PROGRAM ΧMAX
WRITE(*,*) ‘ΕΙΣΑΓΕΤΕ ΤΙΣ ΤΙΜΕΣ’ IMPLICIT NONE
READ(*,*) (X(I), I = 1, N) INTEGER NMAX, Ν, I, IMΑΧ
PARAMETER(NMAX = 1000)
XMIN = X(1) DOUBLE PRECISION X(NMAX), XMΑΧ
DO I = 2, N
IF (X(I) .LT. XMIN) XMIN = X(I) WRITE(*,*) ‘ΠΟΣΕΣ ΤΙΜΕΣ ΘΑ ΕΙΣΑΓΕΤΕ’
END DO READ(*,*) Ν

WRITE(*,*) ‘Ο ΜΙΚΡΟΤΕΡΟΣ ΟΡΟΣ ΕΙΝΑΙ:’, ΧΜΙΝ C.... ΕΛΕΓΧΟΥΜΕ ΝΑ ΜΗΝ ΞΕΠΕΡΑΣΤΟΥΝ ΤΑ ΟΡΙΑ ΤΟΥ ΠΙΝΑΚΑ
IF (N .GT. NMAX .OR. N .LE. 0) THEN
END WRITE(*,*) ‘ΛΑΘΟΣ: ΜΕΧΡΙ’, ΝΜΑΧ, ‘ΤΙΜΕΣ’
STOP
21 END IF ΣΥΝΕΧΙΖΕΤΑΙ...22

Παράδειγμα #5 (συνέχεια...) Εύρεση βέλτιστης ευθείας


ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ


• Πρόγραμμα που να ζητάει την εισαγωγή δεδομένων και • Πολλές φορές χρειαζόμαστε να βρούμε την καλύτερη
να υπολογίζει τον μεγαλύτερο όρο και την θέση του ευθεία που περιγράφει μια συλογή πειραματικών σημείων
WRITE(*,*) ‘ΕΙΣΑΓΕΤΕ ΤΙΣ ΤΙΜΕΣ’ – π.χ. πειραματικές μετρήσεις όπου x είναι η θερμοκρασία και y
READ(*,*) (X(I), I = 1, N) είναι η ηλεκτρική αντίσταση ενός μετάλου

XMAX = X(1)
IMAX = 1 y
DO I = 2, N
IF (X(I) .GT. XMΑΧ) THEN
XMAX = X(I)
IMAX = I
END IF
END DO

WRITE(*,*) ‘Ο ΜΕΓΑΛΥΤΕΡΟΣ ΟΡΟΣ ΕΙΝΑΙ:’, ΧΜΑΧ


WRITE(*,*) ‘ΚΑΙ ΕΜΦΑΝΙΖΕΤΑΙ ΣΤΗΝ ΘΕΣΗ:’,ΙΜΑΧ
END 23
x 24
Παράδειγμα #6
Εύρεση βέλτιστης ευθείας
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ


Μέθοδος Ελαχίστων Τετραγώνων
• Στην βέλτιστη ευθεία ελαχιστοποιούνται οι κατακόρυφες • Η ευθεία που ελαχιστοποιεί τα σφάλματα
αποστάσεις των σημείων από αυτήν (κατακόρυφες αποστάσεις) από Ν σημεία είναι η:
– δηλ. ελαχιστοποιούνται τα λάθη στην πρόβλεψη τιμής

y y = a + bx
s xx s y − s x s xy Ns xy − s x s y
a= , b=
Ns xx − s x s x Ns xx − s x s x
N N N N
x s x = ∑ x i s y = ∑ y i s xx = ∑ x i s xy = ∑ x i y i
2
Η βέλτιστη ευθεία βρίσκεται με την i =1 i =1 i =1 i =1
Μέθοδο των Ελαχίστων Τετραγώνων 25 26

Παράδειγμα #6 Παράδειγμα #6
Μέθοδος Ελαχίστων Τετραγώνων (1/2) Μέθοδος Ελαχίστων Τετραγώνων (2/2)
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ


PROGRAM LEAST_SQUARES SX = 0
IMPLICIT NONE SY = 0
INTEGER NMAX, Ν, I SXX = 0
PARAMETER(NMAX = 1000) SXY = 0
DOUBLE PRECISION X(NMAX), Y(NMAX)
DOUBLE PRECISION SX, SY, SXX, SXY, A, B DO I = 1, N
SX = SX + X(I)
WRITE(*,*) ‘ΠΟΣΑ ΣΗΜΕΙΑ ΘΑ ΕΙΣΑΓΕΤΕ;’ SY = SY + Y(I)
READ(*,*) Ν SXX = SXX + X(I)**2
IF (N .GT. NMAX .OR. N .LE. 1) THEN SXY = SXY + X(I) * Y(I)
WRITE(*,*) ‘ΛΑΘΟΣ: ΜΕΧΡΙ’, ΝΜΑΧ, ‘ΤΙΜΕΣ’ END DO
STOP
END IF A = (SXX*SY – SX*SXY) / (N*SXX – SX*SX)
B = (N*SXY – SX*SY) / (N*SXX – SX*SX)
WRITE(*,*) ‘ΕΙΣΑΓΕΤΕ ΤΑ ΣΗΜΕΙΑ’
DO I = 1, N WRITE(*,*) ‘Η ΚΛΙΣΗ ΤΗΣ ΕΥΘΕΙΑΣ ΕΙΝΑΙ:’, B
READ(*,*) X(I), Y(I) WRITE(*,*) ‘ΚΑΙ Ο ΣΤΑΘΕΡΟΣ ΤΗΣ ΟΡΟΣ:’,A
END DO ΣΥΝΕΧΙΖΕΤΑΙ...27 END 28
Παράδειγμα #7 Παράδειγμα #7
Εσωτερικό γινόμενο δύο διανυσμάτων
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ


Εσωτερικό γινόμενο δύο διανυσμάτων
• Στον τρισδιάστατο χώρο, για δύο διανύσματα Κατασκευάστε πρόγραμμα που δέχεται δύο διανύσματα Ν
διαστάσεων και θα υπολογίζει το εσωτερικό τους γινόμενο
R1 = ( x 1 , y 1 , z 1 ) R2 = ( x 2 , y 2 , z 2 ) PROGRAM DOT_PRODUCT
IMPLICIT NONE
• Το εσωτερικό τους γινόμενο ορίζεται ως INTEGER NMAX, Ν, I
R1 ⋅ R 2 = x 1 x 2 + y 1 y 2 + z 1z 2 PARAMETER(NMAX = 1000)
DOUBLE PRECISION X(NMAX), Y(NMAX), PRODUCT

WRITE(*,*) ‘ΠΟΣΑ ΔΙΑΣΤΑΣΕΙΣ ΕΙΝΑΙ ΤΑ ΔΙΑΝΥΣΜΑΤΑ;’


• Στην γενική περίπτωση διανυσμάτων Ν διαστάσεων READ(*,*) Ν

X = ( x 1 , x 2 , x 3 ,....., x N ) Y = ( y 1 , y 2 , y 3 ,....., y N ) IF (N .GT. NMAX .OR. N .LE. 0) THEN


WRITE(*,*) ‘ΛΑΘΟΣ: ΜΕΧΡΙ’, ΝΜΑΧ, ‘ΤΙΜΕΣ’
STOP
• Το εσωτερικό τους γινόμενο ορίζεται ως END IF
X ⋅Y = x 1 y 1 + x 2 y 2 + x 3 y 3 + ..... + x N y N 29
ΣΥΝΕΧΙΖΕΤΑΙ...
30

Παράδειγμα #7 Παράδειγμα #8
Εσωτερικό γινόμενο δύο διανυσμάτων
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ


Αριθμός σημείων μέσα σε κύκλο
WRITE(*,*) ‘ΕΙΣΑΓΕΤΕ ΤΙΣ ΤΙΜΕΣ ΤΟΥ 1ΟΥ ΔΙΑΝΥΣΜΑΤΟΣ’
• Έστω Ν σημεία στο επίπεδο { (xi,yi), για i=1,2,…, N }
READ(*,*) (X(I), I = 1, N)
WRITE(*,*) ‘ΤΩΡΑ ΤΙΣ ΤΙΜΕΣ ΤΟΥ 2ΟΥ ΔΙΑΝΥΣΜΑΤΟΣ’ Πόσα είναι μέσα σε κύκλο ακτίνας r και κέντρου (x0,y0);
READ(*,*) (Y(I), I = 1, N)

PRODUCT = 0
απόσταση σημείου απο
DO I = 1, N
PRODUCT = PRODUCT + X(I) * Y(I) το κέντρο του κύκλου:
r
d i = ( x i − x 0 )2 + ( y i − y 0 )2
END DO

WRITE(*,*) ‘ΤΟ ΕΣΩΤΕΡΙΚΟ ΓΙΝΟΜΕΝΟ ΕΙΝΑΙ’, PRODUCT


(x0,y0)
το σημείο είναι μέσα
END
στον κύκλο εαν
di ≤ r
31 32
Παράδειγμα #8 Παράδειγμα #8
Αριθμός σημείων μέσα σε κύκλο (1/2)
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ


Αριθμός σημείων μέσα σε κύκλο (2/2)
Κατασκευάστε πρόγραμμα που δέχεται Ν σημεία και WRITE(*,*) ‘ΕΙΣΑΓΕΤΕ ΤΑ ΣΗΜΕΙΑ’
υπολογίζει πόσα απο αυτά ανήκουν σε δοθέν κύκλο DO I = 1, N
READ(*,*) X(I), Y(I)
PROGRAM POINTS_IN_CIRCLE END DO
IMPLICIT NONE
INTEGER NMAX, Ν, I, NUMBER WRITE(*,*) ‘ΕΙΣΑΓΕΤΕ ΤΟΝ ΚΥΚΛΟ’
PARAMETER(NMAX = 1000) READ(*,*) X0, Y0, R
DOUBLE PRECISION X(NMAX), Y(NMAX), X0, Y0, R, D
NUMBER = 0
WRITE(*,*) ‘ΠΟΣΑ ΣΗΜΕΙΑ ΘΑ ΕΙΣΑΓΕΤΕ;’ DO I = 1, N
READ(*,*) Ν D = SQRT( (X(I)-X0)**2 + (Y(I)-Y0)**2 )
IF (D .LE. R) NUMBER = NUMBER +1
IF (N .GT. NMAX .OR. N .LE. 0) THEN END DO
WRITE(*,*) ‘ΛΑΘΟΣ: ΜΕΧΡΙ’, ΝΜΑΧ, ‘ΤΙΜΕΣ’
STOP WRITE(*,*) ‘ΜΕΣΑ ΣΤΟΝ ΚΥΚΛΟ ΕΙΝΑΙ’, NUMBER, ‘ΣΗΜΕΙΑ’
END IF
ΣΥΝΕΧΙΖΕΤΑΙ...33 END 34

Παράδειγμα #9 Παράδειγμα #9
Αναδρομική ακολουθία
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ


Αναδρομική ακολουθία
PROGRAM ANADROMIKI
IMPLICIT NONE
Κατασκευάστε πρόγραμμα που δέχεται έναν αριθμό και INTEGER NMAX, Ν, I
αναθέτει σε πίνακα τις 100 πρώτες τιμές της παρακάτω PARAMETER(NMAX = 100)
ακολουθίας. Κατόπιν να τυπώνει τους 50 πρώτους όρους DOUBLE PRECISION X(NMAX)

WRITE(*,*) ‘ΕΙΣΑΓΕΤΕ ΕΝΑΝ ΑΡΙΘΜΟ’


READ(*,*) X(1)

X n +1 = X n (1 − X n ) DO I = 2, 100
X(I) = X(I-1) * (1 – X(I-1))
END DO

ο αριθμός που δέχεται το πρόγραμμα DO I = 1, 50


είναι ο πρώτος όρος της ακολουθίας WRITE(*,*) ‘Ο ΟΡΟΣ’, I, ‘ΕΙΝΑΙ’, X(I)
END DO

35 END 36
Παράδειγμα #10 Παράδειγμα #10
Στατιστική ανάλυση (1/2)
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ


Στατιστική ανάλυση
• Σε ένα σύνολο μετρήσεων xi, i=1, N, υπολογίζουμε Κατασκευάστε πρόγραμμα που δέχεται Ν αριθμούς και
μέσος όρος στατιστική απόκλιση (σφάλμα) θα κάνει στατιστική ανάλυση
1/ 2
N
⎡N 2⎤
∑xi ⎢ ∑ (x i − x ) ⎥
PROGRAM STATISTICS
IMPLICIT NONE
x= i =1 σ x = ⎢ i =1 ⎥ INTEGER NMAX, Ν, I
⎢ N − 1 ⎥ PARAMETER(NMAX = 1000)
N ⎢⎣ ⎥⎦ DOUBLE PRECISION X(NMAX), XMEAN, STDX, STDX1, ERROR

WRITE(*,*) ‘ΠΟΣΕΣ ΤΙΜΕΣ ΘΑ ΕΙΣΑΓΕΤΕ’


σφάλμα μέσης τιμής σχετικό σφάλμα READ(*,*) Ν
σx σx
σx = r= ⋅ 100
IF (N .GT. NMAX .OR. N .LE. 0) THEN
WRITE(*,*) ‘ΛΑΘΟΣ: ΜΕΧΡΙ’, ΝΜΑΧ, ‘ΤΙΜΕΣ’
N x STOP
END IF
αποτέλεσμα: x = x +σ x 37
WRITE(*,*) ‘ΕΙΣΑΓΕΤΕ ΤΙΣ ΤΙΜΕΣ’
READ(*,*) (X(I), I = 1, N) ΣΥΝΕΧΙΖΕΤΑΙ... 38

Παράδειγμα #10 Παράδειγμα #11


Στατιστική ανάλυση (2/2) Ταξινόμηση στοιχείων πίνακα
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ


XMEAN = 0
DO I = 1, N
• Είναι πολύ συχνό σε εφαρμογές να θέλουμε να
XMEAN = XMEAN + X(I)
END DO ταξινομήσουμε τα στοιχεία ενός πίνακα
XMEAN = XMEAN / N – π.χ. ταξινόμηση σε αύξουσα σειρά

STDX = 0 Έστω ο πίνακας Χ με στοιχεία


DO I = 1, N
STDX = STDX + (X(I) – XMEAN)**2 στο τέλος του
Χ={13, 25, 6, 94, 26, 73, 14, 59, 93, 65}
END DO πρώτου κύκλου,
STDX = SQRT(STDX / (N-1)) το μεγαλύτερο
συγκρίνουμε το πρώτο με το δεύτερο:
στοιχείο είναι στη
εάν μεγαλύτερο, τους αλλάζουμε θέση
STDX1 = STDX / SQRT(N) τελευταία θέση
R = STDX1 / XMEAN * 100 του πίνακα
συγκρίνουμε το δεύτερο με το τρίτο:
εάν μεγαλύτερο, τους αλλάζουμε θέση
WRITE(*,*) ‘ΤΟ ΑΠΟΤΕΛΕΣΜΑ ΕΙΝΑΙ’, ΧΜΕΑΝ, ‘+-’, STDX1 .
WRITE(*,*) ‘ΚΑΙ ΕΜΦΑΝΙΖΕI ΣΧΕΤΙΚΟ ΣΦΑΛΜΑ’, R, ‘%’ . κοκ
END 39 40
Παράδειγμα #11 Παράδειγμα #11
Ταξινόμηση στοιχείων πίνακα Ταξινόμηση στοιχείων πίνακα (1/2)
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ


Κατασκευάστε πρόγραμμα που δέχεται έναν πίνακα
Έστω ο πίνακας Χ με 10 στοιχεία ρητών και τους ταξινομεί κατά αύξουσα σειρά
Χ={13, 25, 6, 94, 26, 73, 14, 59, 93, 65} PROGRAM BUBBLE_SORT
IMPLICIT NONE
εκτελούμε τον πρώτο κύκλο με Ν βήματα INTEGER NMAX, Ν, I, J
Χ={13, 6, 25, 26, 73, 14, 59, 93, 65, 94} PARAMETER(NMAX = 1000)
στο τέλος Ν-1 DOUBLE PRECISION X(NMAX), TEMP
εκτελούμε τον δεύτερο κύκλο με Ν-1 βήματα κύκλων, όλα τα
Χ={6, 13, 25, 26, 14, 59, 73, 65, 93, 94} στοιχεία είναι WRITE(*,*) ‘ΠΟΣΕΣ ΤΙΜΕΣ ΘΑ ΕΙΣΑΓΕΤΕ’
ταξινομημένα READ(*,*) Ν
εκτελούμε τον τρίτο κύκλο με Ν-2 βήματα IF (N .GT. NMAX .OR. N .LE. 0) THEN
Χ={6, 13, 25, 14, 26, 59, 65, 73, 93, 94} WRITE(*,*) ‘ΛΑΘΟΣ: ΜΕΧΡΙ’, ΝΜΑΧ, ‘ΤΙΜΕΣ’
STOP
. END IF
. κοκ WRITE(*,*) ‘ΕΙΣΑΓΕΤΕ ΤΙΣ ΤΙΜΕΣ’
41
READ(*,*) (X(I), I = 1, N) ΣΥΝΕΧΙΖΕΤΑΙ... 42

Παράδειγμα #11 Παράδειγμα #12


Ταξινόμηση στοιχείων πίνακα (2/2)
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ


Δυαδική αναζήτηση
C.....ΓΙΑ ΚΑΘΕ ΘΕΣΗ J Δεδομένου ταξινομημένου πίνακα, να φτιάξετε
DO J = N, 2, -1
πρόγραμμα που δέχεται έναν αριθμό και βρίσκει την
C...........ΒΡΙΣΚΟΥΜΕ ΚΑΙ ΤΟΠΟΘΕΤΟΥΜΕ
C...........ΤΟ ΑΝΤΙΣΤΟΙΧΟ ΜΕΓΙΣΤΟ κοντινότερη θέση στον πίνακα
DO I = 1, J-1
IF(X(I) .GT. X(I+1))THEN παράδειγμα, έστω πίνακας
TEMP = X(I) Χ={2, 5, 8, 12, 16, 32, 43, 47, 76, 78, 84, 91, 92}
X(I) = X(I+1) και μας ζητείται να βρούμε την κοντινότερη θέση του 90
X(I+1) = TEMP
END IF εαν τα ψάξουμε ένα-ένα, θα πάρει πολύ χρόνο
END DO
END DO Γρήγορος τρόπος:
Κοιτάμε στην μέση του πίνακα και αποφασίζουμε εαν το νούμερο
WRITE(*,*) ‘Ο ΤΑΞΙΝΟΜΗΜΕΝΟΣ ΠΙΝΑΚΑΣ ΕΙΝΑΙ:’ είναι απο τα αριστερά ή απο τα δεξιά
WRITE(*,*) (X(I), I = 1, N) Θέτουμε νέα όρια στον πίνακα
Κοιτάμε στην νέα μέση του πίνακα και αποφασίζουμε...
END .
43 44
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ Παράδειγμα #12 Παράδειγμα #12

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ


Δυαδική αναζήτηση (1/2) Δυαδική αναζήτηση (2/2)
PROGRAM BINARY_SEARCH DO M = 1, NMAX
i1=1
IMPLICIT NONE IC = (I1 + I2) / 2
i2=n
INTEGER NMAX, M, Ι1, Ι2, IC do j=1,n IF (X0 .GT. X(IC) )THEN
PARAMETER(NMAX = 1000) ic=(i1+i2)/2 I1 = IC
DOUBLE PRECISION X(NMAX), X0 if(x0.ge.x(ic))then ELSE
i1=ic I2 = IC
WRITE(*,*) ‘ΔΩΣΤΕ ΕΝΑ ΝΟΥΜΕΡΟ’ else
END IF
READ(*,*) Χ0 i2=ic
IF (I2-I1 .EQ. 1) GOTO 11
endif
if(i2.eq.i1+1) goto 100 END DO
I1 = 1
end do
I2 = N 11 IF( X0-X(I1) .LT. X(I2)-X0 )THEN
100 if(abs(x0-x(i1)).le.abs(x0-x(i2)))then
DO M = 1, NMAX i0=i1 WRITE(*,*) ‘Η ΚΟΝΤΙΝΟΤΕΡΗ ΘΕΣΗ ΕΙΝΑΙ Η’, I1
IC = (I1 + I2) / 2 else ELSE
IF (X0 .GT. X(IC))THEN i0=i2 WRITE(*,*) ‘Η ΚΟΝΤΙΝΟΤΕΡΗ ΘΕΣΗ ΕΙΝΑΙ Η’, I2
I1 = IC endif END IF
ELSE print*, i0,x(i0),x0
I2 = IC END
END IF ΣΥΝΕΧΙΖΕΤΑΙ...45 46

Παράδειγμα #13 Παράδειγμα #13


Ξεδιάλεγμα σημείων μέσα σε κύκλο(1/2)
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ


Ξεδιάλεγμα σημείων μέσα σε κύκλο
• Έστω Ν σημεία στο επίπεδο { (xi,yi), για i=1,2,…, N } Κατασκευάστε πρόγραμμα που δέχεται Ν σημεία και
Βρείτε και κρατήστε μόνο όσα είναι μέσα σε κύκλο κρατάει μόνο όσα ανήκουν σε δοθέν κύκλο
ακτίνας r και κέντρου (x0,y0)
PROGRAM POINTS_IN_CIRCLE2
IMPLICIT NONE
INTEGER NMAX, Ν, I, INEW
απόσταση σημείου απο
PARAMETER(NMAX = 1000)
το κέντρο του κύκλου: DOUBLE PRECISION X(NMAX), Y(NMAX), X0, Y0, R, D
r
d i = ( x i − x 0 )2 + ( y i − y 0 )2 WRITE(*,*) ‘ΠΟΣΑ ΣΗΜΕΙΑ ΘΑ ΕΙΣΑΓΕΤΕ;’
READ(*,*) Ν
(x0,y0)
το σημείο είναι μέσα
IF (N .GT. NMAX .OR. N .LE. 0) THEN
στον κύκλο εαν WRITE(*,*) ‘ΛΑΘΟΣ: ΜΕΧΡΙ’, ΝΜΑΧ, ‘ΤΙΜΕΣ’
di ≤ r STOP
END IF
47
ΣΥΝΕΧΙΖΕΤΑΙ...48
Παράδειγμα #14
Παράδειγμα #13
Ταξινόμηση στοιχείων πίνακα
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ


Ξεδιάλεγμα σημείων μέσα σε κύκλο(2/2)
(απ’ ευθείας επιλογή)
WRITE(*,*) ‘ΕΙΣΑΓΕΤΕ ΤΑ ΣΗΜΕΙΑ’
READ(*,*) (X(I), I = 1, N), (Y(I), I = 1, N) Έστω ο πίνακας Χ με 10 στοιχεία
WRITE(*,*) ‘ΕΙΣΑΓΕΤΕ ΤΟΝ ΚΥΚΛΟ’
READ(*,*) X0, Y0, R Χ={13, 25, 6, 94, 26, 73, 14, 59, 93, 65}

INEW = 0 Βρίσκουμε το μικρότερο και το βάζουμε στην αρχή


DO I = 1, N Χ={6, 25, 13, 94, 26, 73, 14, 59, 93, 65}
D = SQRT( (X(I)-X0)**2 + (Y(I)-Y0)**2 ) στο τέλος Ν-1
IF (D .LE. R) THEN Βρίσκουμε το επόμενο μικρότερο και το βάζουμε κύκλων, όλα
INEW = INEW + 1 στην δεύτερη θέση τα στοιχεία
X(INEW) = X(I) Χ={6, 13, 25, 94, 26, 73, 14, 59, 93, 65} είναι
Y(INEW) = Y(I) ταξινομημένα
END IF Βρίσκουμε το επόμενο μικρότερο και το βάζουμε
END DO στην δεύτερη θέση
N = INEW Χ={6, 13, 14, 94, 26, 73, 25, 59, 93, 65}

END 49
. κοκ 50

Παράδειγμα #14 Παράδειγμα #14


Ταξινόμηση στοιχείων πίνακα (απ’ ευθείας Ταξινόμηση στοιχείων πίνακα (απ’ ευθείας
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ


επιλογή) (1/2) επιλογή) (2/2)
Κατασκευάστε πρόγραμμα που δέχεται έναν πίνακα C.....ΓΙΑ ΚΑΘΕ ΘΕΣΗ J
DO J = 1, N-1
ρητών και τους ταξινομεί κατά αύξουσα σειρά
C...........ΒΡΙΣΚΟΥΜΕ ΤΟ ΑΝΤΙΣΤΟΙΧΟ ΕΛΑΧΙΣΤΟ
PROGRAM ΜΙΝ_SORT XMIN = X(J)
IMPLICIT NONE IMIN = J
INTEGER NMAX, Ν, I, J, IMIN DO I = J+1, N
PARAMETER(NMAX = 1000) IF(X(I) .LT. XMIN)THEN
DOUBLE PRECISION X(NMAX), TEMP XMIN = X(I)
IMIN = I
WRITE(*,*) ‘ΠΟΣΕΣ ΤΙΜΕΣ ΘΑ ΕΙΣΑΓΕΤΕ’ END IF
READ(*,*) Ν END DO
IF (N .GT. NMAX .OR. N .LE. 0) THEN TEMP = X(J)
WRITE(*,*) ‘ΛΑΘΟΣ: ΜΕΧΡΙ’, ΝΜΑΧ, ‘ΤΙΜΕΣ’ X(J) = X(IMIN)
STOP X(IMIN) = TEMP
END IF END DO
WRITE(*,*) ‘ΕΙΣΑΓΕΤΕ ΤΙΣ ΤΙΜΕΣ’ WRITE(*,*) ‘Ο ΤΑΞΙΝΟΜΗΜΕΝΟΣ ΠΙΝΑΚΑΣ ΕΙΝΑΙ:’
READ(*,*) (X(I), I = 1, N) ΣΥΝΕΧΙΖΕΤΑΙ... 51 WRITE(*,*) (X(I), I = 1, N) 52
END
Παράδειγμα #15
Στροφή διανύσματος κατά γωνία Θ
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ


Μετατόπιση σημείων και στροφή
• Έστω Ν σημεία στο επίπεδο { (xi,yi), για i=1,2,…, N }
y
Μετακινήστε τα στη μέση θέση τους, και μετά στρέψτε
τα κατά γωνία θ | R |= x 12 + y 12
y1
R | R |=| R '|
Θ
θ1
x2
x1 x θ 1 = a tan( y 1 / x 1 )
y2
θ
R’
θ 2 = θ1 + Θ

x 2 =| R | cos θ 2 y 2 =| R | sin θ 2
53 54

Παράδειγμα #15 Παράδειγμα #15


ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ


Μετατόπιση σημείων και στροφή(1/4) Μετατόπιση σημείων και στροφή(2/4)
PROGRAM TURN_POINTS C.....ΒΡΙΣΚΟΥΜΕ ΤΗΝ ΜΕΣΗ ΘΕΣΗ
IMPLICIT NONE XMEAN = 0
INTEGER NMAX, Ν, I YMEAN = 0
PARAMETER(NMAX = 1000) DO I = 1, N
DOUBLE PRECISION X(NMAX), Y(NMAX), THETA(NMAX), XMEAN = XMEAN + X(I)
& THETA0, R, XMEAN, YMEAN, PI YMEAN = YMEAN + Y(I)
END DO
WRITE(*,*) ‘ΠΟΣΑ ΣΗΜΕΙΑ ΘΑ ΕΙΣΑΓΕΤΕ;’
READ(*,*) Ν C.....ΜΕΤΑΚΙΝΟΥΜΕ ΤΑ ΣΗΜΕΙΑ ΚAΤΑ ΤΗ ΜΕΣΗ ΘΕΣΗ ΤΟΥΣ
IF (N .GT. NMAX .OR. N .LE. 0) THEN DO I = 1, N
WRITE(*,*) ‘ΛΑΘΟΣ: ΜΕΧΡΙ’, ΝΜΑΧ, ‘ΤΙΜΕΣ’ X(Ι) = X(I) – XMEAN / N
STOP Y(I) = Y(I) - YMEAN / N
END IF END DO
WRITE(*,*) ‘ΕΙΣΑΓΕΤΕ ΤΑ ΣΗΜΕΙΑ’
READ(*,*) (X(I), I = 1, N), (Y(I), I = 1, N) PI = ACOS(-1.0) ΣΥΝΕΧΙΖΕΤΑΙ...
WRITE(*,*) ‘ΕΙΣΑΓΕΤΕ ΤΗΝ ΓΩΝΙΑ ΣΤΡΟΦΗΣ ΣΕ MOIRES’
READ(*,*) THETA0 ΣΥΝΕΧΙΖΕΤΑΙ... 55 56
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ Παράδειγμα #15 Παράδειγμα #15

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ


Μετατόπιση σημείων και στροφή(3/4) Μετατόπιση σημείων και στροφή(4/4)
C....ΒΡΙΣΚΟΥΜΕ THN ΓΩΝΙΑ ΤΟΥ ΚΑΘΕ ΣΗΜΕΙΟΥ
DO I = 1, N
IF (X(I) .EQ. 0 .AND. Y(I) .EQ. 0) THEN C....ΣΤΡΕΦΟΥΜΕ TΟ ΔΙΑΝΥΣΜΑ ΤΟΥ ΚΑΘΕ ΣΗΜΕΙΟΥ
THETA(I) = 0 DO I = 1, N
ELSE IF (X(I) .EQ. 0 .AND. Y(I) .GT. 0) THEN THETA(I) = THETA(I) + THETA0 * PI / 180
THETA(I) = PI / 2 R = SQRT ( X(I)**2 + Y(I)**2 )
ELSE IF (X(I) .EQ. 0 .AND. Y(I) .LT. 0) THEN X(I) = R * COS(THETA(I))
THETA(I) = 3 * PI /2 Y(I) = R * SIN(THETA(I))
ELSE IF (X(I) .LT. 0) THEN END DO
THETA(I) = ATAN( Y(I) / X(I) ) + PI
ELSE IF (Y(I) .LT. 0) THEN END
THETA(I)= ATAN( Y(I) / X(I) ) + 2 * PI
ELSE
THETA(I) = ATAN( Y(I) / X(I) )
END IF
END DO
ΣΥΝΕΧΙΖΕΤΑΙ...57 58

Παράδειγμα #16 Παράδειγμα #16


Κέντρο μάζας ατόμων και μέση απόσταση Κέντρο μάζας ατόμων και μέση απόσταση
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ


(1/3)
Κατασκευάστε πρόγραμμα που δέχεται Ν άτομα PROGRAM MASS_CENTER
(2 διαστάσεις) και τις μάζες τους και υπολογίζει το IMPLICIT NONE
κέντρο μάζας και την μέση απόσταση μεταξύ τους INTEGER NMAX, Ν, I
PARAMETER(NMAX = 1000)
Κέντρο μάζας DOUBLE PRECISION X(NMAX), Y(NMAX),
N & M(NMAX),ΜΧ, ΜΥ, MMEAN, D, DMEAN
∑ x i mi
μx = i =1 WRITE(*,*) ‘ΠΟΣΑ ATOMA ΘΑ ΕΙΣΑΓΕΤΕ;’
N READ(*,*) Ν
∑ mi IF (N .GT. NMAX .OR. N .LE. 0) THEN
i =1 WRITE(*,*) ‘ΛΑΘΟΣ: ΜΕΧΡΙ’, ΝΜΑΧ, ‘ΤΙΜΕΣ’
STOP
Μέση απόσταση END IF
N N
WRITE(*,*) ‘ΕΙΣΑΓΕΤΕ ΤΑ ΣΗΜΕΙΑ ΚΑΙ ΜΑΖΕΣ’
∑ ∑ d ij READ(*,*) (X(I), I = 1, N), (Y(I), I = 1, N),
j =1 i = j +1
d = & (Μ(I), I = 1, N)
N (N − 1) / 2 59 ΣΥΝΕΧΙΖΕΤΑΙ...60
Παράδειγμα #16 Παράδειγμα #16
Κέντρο μάζας ατόμων και μέση απόσταση Κέντρο μάζας ατόμων και μέση απόσταση
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ


(2/3) (3/3)
C.....ΒΡΙΣΚΟΥΜΕ ΤΟ ΚΕΝΤΡΟ ΜΑΖΑΣ C.....ΒΡΙΣΚΟΥΜΕ ΤΗ ΜΕΣΗ ΑΠΟΣΤΑΣΗ
ΜΧ = 0 DMEAN = 0
ΜΥ = 0 DO J = 1, N
ΜΜΕΑΝ = 0 DO I = J+1, N
DO I = 1, N D = SQRT((X(J)-X(I))**2+(Y(J)-Y(I))**2)
ΜΧ = ΜΧ + X(I) * Μ(Ι) DMEAN = DMEAN + D
ΜΥ = ΜΥ + Y(I) * Μ(Ι) END DO
ΜMEAN = ΜMEAN + M(I) END DO
END DO
DMEAN = DMEAN / (N * (N-1) / 2 )
ΜΧ = ΜΧ / ΜΜΕΑΝ
ΜΥ = ΜΥ / ΜΜΕΑΝ WRITE(*,*) ‘Η ΜΕΣΗ ΑΠΟΣΤΑΣΗ ΕΙΝΑΙ’, DMEAN

WRITE(*,*) ‘ΤΟ ΚΕΝΤΡΟ ΜΑΖΑΣ ΕΙΝΑΙ’, ΜΧ, ΜΥ END

ΣΥΝΕΧΙΖΕΤΑΙ...
61 62

Παράδειγμα #17 Παράδειγμα #17


Ιστόγραμμα απόστασης ατόμων
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ


Ιστόγραμμα απόστασης ατόμων(1/2)
Κατασκευάστε πρόγραμμα που δέχεται Ν άτομα PROGRAM HISTOGRAM
(2 διαστάσεις) και υπολογίζει τις σχετικές τους αποστάσεις IMPLICIT NONE
και δημιουργεί ιστόγραμμα με την κατανομή τους INTEGER NMAX, Ν, I
PARAMETER(NMAX = 1000)
Για παράδειγμα, έστω οτι θέλουμε να DOUBLE PRECISION X(NMAX), Y(NMAX), H, DMAX, D
κατασκευάσουμε ένα ιστόγραμμα με INTEGER HIST(100)
100 σημεία για αποστάσεις μέχρι
DMAX. Διαιρούμε σε 100 διαστήματα WRITE(*,*) ‘ΠΟΣΑ ATOMA ΘΑ ΕΙΣΑΓΕΤΕ;’
πάχους H = DMAX / 100. Βρίσκουμε READ(*,*) Ν
πόσες αποστάσεις είναι μέσα στο πρώτο IF (N .GT. NMAX .OR. N .LE. 0) THEN
διάστημα, πόσες στο δεύτερο, κοκ. WRITE(*,*) ‘ΛΑΘΟΣ: ΜΕΧΡΙ’, ΝΜΑΧ, ‘ΤΙΜΕΣ’
STOP
END IF
WRITE(*,*) ‘ΕΙΣΑΓΕΤΕ ΤΑ ΣΗΜΕΙΑ’
READ(*,*) (X(I), I = 1, N), (Y(I), I = 1, N)
WRITE(*,*) ‘ΕΙΣΑΓΕΤΕ TO ΟΡΙO TOY ΙΣΤΟΓΡΑΜΜΑΤΟΣ’
READ(*,*) DMAX ΣΥΝΕΧΙΖΕΤΑΙ...
63 64
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ Παράδειγμα #17
Ιστόγραμμα απόστασης ατόμων(2/2)
C.....ΤΟ ΔΙΑΣΤΗΜΑ ΤΟΥ ΙΣΤΟΓΡΑΜΜΑΤΟΣ
H = DMAX / 100
DO K = 1, 100
HIST(K) = 0
END DO

DO J = 1, N
DO I = J+1, N
D = SQRT((X(J)-X(I))**2+(Y(J)-Y(I))**2)
K = MAX( INT(D / H) + 1, 100)
HIST(K) = HIST(K) + D
END DO
END DO
WRITE(*,*) ‘ΤΟ ΙΣΤΟΓΡΑΜΜΑ ΚΑΤΑΝΟΜΗΣ ΑΠΟΣΤΑΣΕΩΝ:’
DO K = 1, 100
WRITE(*,*) ‘ΑΠΟ’,(K-1)*H,‘ΜΕΧΡΙ’, Κ*Η, HIST(K)
END DO
END 65
Γιατί πολυδιάστατους πίνακες;
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΠΟΛΥΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΠΟΛΥΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ


• Αναλόγως με τις ανάγκες του προγράμματος,
μπορεί να είναι πιο εύχρηστοι
• Προβλήματα γραμμικής άλγεβρας
ΠΟΛΥΔΙΑΣΤΑΤΟΙ
Παράδειγμα: δηλώστε σε πρόγραμμα έναν πίνακα για 100
ΠΙΝΑΚΕΣ σημεία με δύο συνιστώσες το καθένα

PROGRAM POINTS
IMPLICIT NONE
DOUBLE PRECISION P(2,100)

εντολές…

END
1 2

Δήλωση πολυδιάστατων πινάκων Δήλωση πολυδιάστατων πινάκων


ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΠΟΛΥΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΠΟΛΥΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ


• Οι επιπλέον διαστάσεις χωρίζονται με κόμμα • Οι επιπλέον διαστάσεις χωρίζονται με κόμμα
PROGRAM EXAMPLE
PROGRAM EXAMPLE IMPLICIT NONE
IMPLICIT NONE INTEGER N1, N2, N3
DOUBLE PRECISION P(2,100) PARAMETER(N1 = 100, N2 = 2, N3 = 3)
INTEGER I(2,2), K(3,3), M(2,2,2) DOUBLE PRECISION P(N2,N1)
DOUBLE PRECISION R(100,100,100) INTEGER I(N2,N2), K(N3,N3), M(N2,N2,N2)
DOUBLE PRECISION R(N1,N1,N1)
εντολές…
εντολές…
END
END
• Στη Fortran μπορούμε να έχουμε μέχρι και 7 διαστάσεις • Στη Fortran μπορούμε να έχουμε μέχρι και 7 διαστάσεις
3 4
Απευθείας ανάθεση τιμών:
Δισδιάστατοι πίνακες
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΠΟΛΥΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΠΟΛΥΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ


Παράδειγμα #1
Γράψτε πρόγραμμα που δημιουργεί τον παρακάτω
DOUBLE PRECISION Α(2,2) 2×2 πίνακα:
δύο γραμμές δύο στήλες
PROGRAM EXAMPLE
IMPLICIT NONE
⎛ 10 20 ⎞ INTEGER Α(2,2)
Ο πίνακας Α είναι ο:
Τα στοιχεία του πίνακα είναι: ⎜⎜ ⎟⎟ Α(1,1)
Α(1,1) ⎝ 30 40 ⎠
= 10

⎛ A11 A12 ⎞ Α(1,2)


Α(2,1)
Α(1,2)
= 30

⎜⎜ ⎟⎟
= 20
Α(2,2)
Α(2,1)
= 40

⎝ A21 A22 ⎠ Α(2,2) END

5 6

Απευθείας ανάθεση τιμών: Απευθείας ανάθεση τιμών:


ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΠΟΛΥΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΠΟΛΥΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ


Παράδειγμα #2 Παράδειγμα #2β
Γράψτε πρόγραμμα που δημιουργεί τον παρακάτω Γράψτε πρόγραμμα που δημιουργεί τον παρακάτω
2×3 πίνακα: 2×3 πίνακα:

PROGRAM EXAMPLE PROGRAM EXAMPLE


IMPLICIT NONE IMPLICIT NONE
INTEGER Α(2,3) INTEGER Α(2,3), I, J, T
⎛ 10 20 30 ⎞ ⎛ 10 20 30 ⎞
⎜⎜ ⎟⎟ Α(1,1) = 10 ⎜⎜ ⎟⎟ T = 0
⎝ 40 50 60 ⎠ Α(1,2) = 20 ⎝ 40 50 60 ⎠ DO I = 1, 2
Α(1,3) = 30 DO J = 1, 3
Α(2,1) = 40 T = T + 10
Α(2,2) = 50 A(I,J) = T
Α(2,3) = 60 END DO
END DO
END
END
7 8
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΠΟΛΥΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ
Απευθείας ανάθεση τιμών: Ανάθεση τιμών με εντολή READ:

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΠΟΛΥΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ


Παράδειγμα #2γ Παράδειγμα #3α
Γράψτε πρόγραμμα που δημιουργεί τον παρακάτω Γράψτε πρόγραμμα που δημιουργεί και διαβάζει
2×3 πίνακα: έναν πίνακα 2×3, μια-μια τις στήλες
PROGRAM EXAMPLE
PROGRAM EXAMPLE IMPLICIT NONE
IMPLICIT NONE INTEGER Α(2,3)
INTEGER Α(2,3), I, J, T WRITE(*,*) ‘ΔΩΣΕ ΤΑ ΣΤΟΙΧΕΙΑ ΤΟΥ ΠΙΝΑΚΑ’
⎛ 10 30 50 ⎞ WRITE(*,*) ‘ΔΩΣΕ ΜΙΑ-ΜΙΑ ΤΙΣ ΣΤΗΛΕΣ’
⎜⎜ ⎟⎟ T = 0 READ(*,*) A(1,1),A(2,1),A(1,2),A(2,2),A(1,3),A(2,3)
⎝ 20 40 60 ⎠ DO J = 1, 3 END
DO I = 1, 2
T = T + 10
ή PROGRAM EXAMPLE
A(I,J) = T IMPLICIT NONE
END DO INTEGER Α(2,3), I, J
END DO WRITE(*,*) ‘ΔΩΣΕ ΤΑ ΣΤΟΙΧΕΙΑ ΤΟΥ ΠΙΝΑΚΑ’
WRITE(*,*) ‘ΔΩΣΕ ΜΙΑ-ΜΙΑ ΤΙΣ ΣΤΗΛΕΣ’
END READ(*,*) ((A(I,J), I = 1, 2), J = 1, 3)
9
END 10

Ανάθεση τιμών με εντολή READ:


Αποθήκευση πίνακα στη μνήμη
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΠΟΛΥΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΠΟΛΥΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ


Παράδειγμα #3β
Γράψτε πρόγραμμα που δημιουργεί και διαβάζει
έναν πίνακα 2×3, μια-μια τις γραμμές • Τελικά, τι να κάνουμε, γραμμή-γραμμή ή στήλη-στήλη;
PROGRAM EXAMPLE_Β
IMPLICIT NONE • Στην μνήμη, η Fortran αποθηκεύει τους πίνακες στήλη-
INTEGER Α(2,3) στήλη. Π.χ ο παρακάτω πίνακας αποθηκεύεται ως
WRITE(*,*) ‘ΔΩΣΕ ΤΑ ΣΤΟΙΧΕΙΑ ΤΟΥ ΠΙΝΑΚΑ’
WRITE(*,*) ‘ΔΩΣΕ ΜΙΑ-ΜΙΑ ΤΙΣ ΓΡΑΜΜΕΣ’ ΠΙΝΑΚΑΣ ΔΙΑΤΑΞΗ ΣΤΗ ΜΝΗΜΗ
READ(*,*) A(1,1),A(1,2),A(1,3),A(2,1),A(2,2),A(2,3) θέση 1: Α(1,1)
ή
END
⎛ 10 20 30 ⎞ θέση 2: Α(2,1)
PROGRAM EXAMPLE_Β ⎜⎜ ⎟⎟ θέση 3: Α(1,2)
IMPLICIT NONE
⎝ 40 50 60 ⎠ θέση 4: Α(2,2)
INTEGER Α(2,3), I, J
WRITE(*,*) ‘ΔΩΣΕ ΤΑ ΣΤΟΙΧΕΙΑ ΤΟΥ ΠΙΝΑΚΑ’ θέση 5: Α(1,3)
WRITE(*,*) ‘ΔΩΣΕ ΜΙΑ-ΜΙΑ ΤΙΣ ΓΡΑΜΜΕΣ’ θέση 6: Α(2,3)
READ(*,*) ((A(I,J), J = 1, 3), I = 1, 2) • Εάν ακολουθούμε την διάταξη της μνήμης, οι πράξεις
END 11 εκτελούνται πιο γρήγορα 12
Παράδειγμα #4: Υπολογισμός
Εξαγωγή τιμών ίχνους τετραγωνικού πίνακα
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΠΟΛΥΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΠΟΛΥΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ


Γράψτε πρόγραμμα που δημιουργεί τον παρακάτω
2×3 πίνακα, και κατόπιν τον εξάγει στην οθόνη • Το ίχνος ενός τετραγωνικού πίνακα Ν×Ν είναι το
άθροισμα των στοιχείων της διαγωνίου
⎛ 10 30 50 ⎞
PROGRAM EXAMPLE

⎜⎜ ⎟⎟
IMPLICIT NONE
INTEGER Α(2,3), I, J, T
⎝ 20 40 60 ⎠ T = 0 ⎛ A11 A12 ⋅ ⋅ ⎞
DO J = 1, 3 ⎜ ⎟
DO I = 1, 2 ⎜ A21 A22 ⋅ ⋅ ⎟
Tr { A } = Tr ⎜ = A11 + A22 + ... + ANN
⋅ ⋅⎟
T = T + 10
A(I,J) = T ⋅ ⋅
στην οθόνη ⎜ ⎟
END DO
⎜ ⋅ ⋅ ⋅ ⋅ ⎟⎠
εμφανίζεται END DO
DO I = 1, 2

10 30 50 WRITE(*,*) (A(I,J), J = 1, 3)
END DO
20 40 60 END
13 14

Παράδειγμα #4: Υπολογισμός Παράδειγμα #4: Υπολογισμός


ίχνους τετραγωνικού πίνακα (1/2) ίχνους τετραγωνικού πίνακα (2/2)
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΠΟΛΥΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΠΟΛΥΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ


PI = ACOS(-1.0)
Γράψτε πρόγραμμα που δημιουργεί
⎛ 2π ⎞ DO J = 1, Ν
πίνακα Ν×Ν σύμφωνα με την δίπλα
σχέση, και κατόπιν να εξάγει στην
Aij = sin⎜⎜ ⎟⎟ DO I = 1, Ν

⎝i + j ⎠
A(I,J) = SIN( 2*PI / (I+J) )
οθόνη τον πίνακα και το ίχνος του END DO
END DO
PROGRAM TRACE
IMPLICIT NONE T = 0
INTEGER NMAX, N, I, J DO I = 1, N
PARAMETER (NMAX = 100) T = T + A(I,I)
DOUBLE PRECISION Α(NMAX,NMAX), T, PI END DO

WRITE(*,*) ‘ΠΟΙΑ Η ΔΙΑΣΤΑΣΗ ΤΟΥ ΠΙΝΑΚΑ;’ WRITE(*,*) ‘Ο ΠΙΝΑΚΑΣ ΠΟΥ ΔΗΜΙΟΥΡΓΗΘΗΚΕ ΕΙΝΑΙ:’
READ(*,*) Ν DO I = 1, N
IF (N .GT. NMAX .OR. N .LE. 0) THEN WRITE(*,*) (A(I,J), J = 1, N)
WRITE(*,*) ‘ΛΑΘΟΣ: ΜΕΧΡΙ’, ΝΜΑΧ END DO
STOP WRITE(*,*) ‘ΚΑΙ ΕΧΕΙ ΙΧΝΟΣ’, Τ
END IF ΣΥΝΕΧΙΖΕΤΑΙ...15 END 16
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΠΟΛΥΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ
Παράδειγμα #5 Αντιγραφή πίνακα Παράδειγμα #5 Αντιγραφή πίνακα από

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΠΟΛΥΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ


από μονοδιάστατο σε δισδιάστατο μονοδιάστατο σε δισδιάστατο (1/2)
Γράψτε πρόγραμμα που PROGRAM COPY_MATRIX
1) διαβάζει μονοδιάστατο πίνακα Α(100) στοιχείων IMPLICIT NONE
2) τον αντιγράφει σε δισδιάστατο πίνακα Β(10,10) ως εξής: INTEGER N, I, J, K
i. τα 10 πρώτα στοιχεία του Α στην πρώτη γραμμή του Β PARAMETER (N = 10)
ii. τα 10 επόμενα του Α στην δεύτερη γραμμή του Β, κοκ. DOUBLE PRECISION Α(N*N), B(N,N), C(N/2,N/2), T
3) Αντιγράφει σε δισδιάστατο πίνακα C(5,5) τις τιμές του τρίτου
τεταρτημορίου (κάτω αριστερά) του Β WRITE(*,*) ‘ΔΩΣΕ ΤΑ ΣΤΟΙΧΕΙΑ ΤΟΥ ΠΙΝΑΚΑ Α’
4) Εκτυπώνει τον πίνακα C και το ίχνος του READ(*,*) (A(I), I = 1, N*N)
π.χ. για Α(16), Β(4,4) και C(2,2)
K = 0
A = { A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 } DO I = 1, N
⎛ A1 A2 A3 A4 ⎞ DO J = 1, N
⎜ ⎟ K = K + 1
⎜ A5 A6 A7 A8 ⎟ ⎛ A9 A10 ⎞
B(I,J) = A(K)
B =⎜ ⎟
A A10 A11 A12 C = ⎜⎜ ⎟⎟ END DO
⎜ 9 ⎟ A A END DO
⎜A ⎟ ⎝ 13 14 ⎠ ΣΥΝΕΧΙΖΕΤΑΙ...
⎝ 13 A14 A15 A16 ⎠ 17 18

Παράδειγμα #5 Αντιγραφή πίνακα από Παράδειγμα #5 Πολλαπλασιασμός


μονοδιάστατο σε δισδιάστατο (2/2)
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΠΟΛΥΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΠΟΛΥΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ


πινάκων
DO I = 1, N/2 • Έστω δύο πίνακες Α(Ν,Ν) και Β(Ν,Ν). Το γινόμενό
DO J = 1, N/2 τους Α·Β είναι ένας πίνακας C(Ν,Ν), όπου το κάθε
C(I,J) = B(I+N/2, J)
END DO στοιχείο Cij είναι το εσωτερικό γινόμενο της i γραμμής
END DO του Α επί την j στήλη του Β

T = 0 π.χ. για 2×2 πίνακες:


DO I = 1, N/2 ⎛ A11 A12 ⎞⎛ B 11 B 12 ⎞ ⎛ A11B 11 + A12 B 21 A11B 12 + A12 B 22 ⎞
⎜⎜ ⎟⎟⎜⎜ ⎟⎟ = ⎜⎜ ⎟
A21B 12 + A22 B 22 ⎟⎠
T = T + C(I,I)
END DO ⎝ A21 A 22 ⎠⎝ B 21 B 22 ⎠ ⎝ A21B 11 + A22 B 21
WRITE(*,*) ‘Ο ΠΙΝΑΚΑΣ ΠΟΥ ΔΗΜΙΟΥΡΓΗΘΗΚΕ ΕΙΝΑΙ:’
DO I = 1, N/2 Σε «μαθηματική» γλώσσα:
WRITE(*,*) (C(I,J), J = 1, N/2) N
C ij = ∑ Aik B kj
END DO
WRITE(*,*) ‘ΚΑΙ ΕΧΕΙ ΙΧΝΟΣ’, Τ
END
19
k =1 20
Παράδειγμα #6: Παράδειγμα #6:
Πολλαπλασιασμός πινάκων (1/2)
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΠΟΛΥΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΠΟΛΥΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ


Πολλαπλασιασμός πινάκων (2/2)
Γράψτε πρόγραμμα που διαβάζει δύο πίνακες Ν×Ν και
υπολογίζει και τυπώνει το γινόμενό τους DO J = 1, N
PROGRAM MULTIPLY DO I = 1, N
IMPLICIT NONE C(I,J) = 0
INTEGER NMAX, N, I, J, K DO K = 1, N
PARAMETER (NMAX = 1000) C(I,J) = C(I,J) + A(I,K) * B(K,J)
DOUBLE PRECISION Α(NMAX,NMAX), B(NMAX,NMAX), END DO
& C(NMAX,NMAX), END DO
WRITE(*,*) ‘ΠΟΙΑ Η ΔΙΑΣΤΑΣΗ ΤΩΝ ΠΙΝΑΚΩΝ;’ END DO
READ(*,*) Ν
IF (N .GT. NMAX .OR. N .LE. 0) THEN WRITE(*,*) ‘ΤΟ ΓΙΝΟΜΕΝΟ Α ΕΠΙ Β ΕΙΝΑΙ Ο ΠΙΝΑΚΑΣ:’
WRITE(*,*) ‘ΛΑΘΟΣ: ΜΕΧΡΙ’, ΝΜΑΧ DO I = 1, N
STOP WRITE(*,*) (C(I,J), J = 1, N)
END IF END DΟ
WRITE(*,*) ‘ΔΩΣΕ ΤΟΥΣ ΠΙΝΑΚΕΣ ΣΤΗΛΗ-ΣΤΗΛΗ;’
READ(*,*) ((A(I,J), I = 1, N), J = 1, N) END
READ(*,*) ((B(I,J), I = 1, N), J = 1, N) 21 22
Τι είναι μια συνάρτηση;
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΣΥΝΑΡΤΗΣΕΙΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΣΥΝΑΡΤΗΣΕΙΣ
• Μια ομάδα εντολών, σχεδιασμένη να εκτελεί έναν
υπολογισμό και να γυρνάει το αποτέλεσμα
– Ιδανικές για περιπτώσεις που ο υπολογισμός επαναλαμβάνεται
ΣΥΝΑΡΤΗΣΕΙΣ πολλές φορές μέσα στο πρόγραμμα
– Συντελούν σημαντικά στην καθαρότητα ενός προγράμματος
– Συντελούν σημαντικά στην μεταβατικότητα ενός
προγράμματος

Παράδειγμα: όλες οι «εσωτερικές» συναρτήσεις της Fortran:


cos, sin, acos, asin, sqrt, abs, κτλ

1 2

Παράδειγμα συνάρτησης:
Δήλωση συνάρτησης sq
υπολογισμός τετραγώνου
DOUBLE PRECISION FUNCTION SQ ( X )
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΣΥΝΑΡΤΗΣΕΙΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΣΥΝΑΡΤΗΣΕΙΣ
IMPLICIT NONE
• Είναι ήδη γνωστή η εσωτερική συνάρτηση για την
DOUBLE PRECISION X
τετραγωνική ρίζα sqrt. SQ = X**2
• Πως θα γράφαμε μια συνάρτηση για το τετράγωνο; RETURN
END

• Επιλέγουμε όνομα που περιγράφει συνοπτικά τι θα • Γίνεται έξω απο το κυρίως πρόγραμμα
– μετά το END του κυρίως προγράμματος
κάνει η συνάρτηση: π.χ. sq
• Χρησιμοποιείται η εντολή FUNCTION
• Επιλέγουμε τον τύπο των μεταβλητών που δέχεται – αριστερά απο το FUNCTION ο τύπος επιστροφής
– π.χ. double precision – δεξιά απο το FUNCTION το όνομα της συνάρτησης και η λίστα εισόδου
• Οι μεταβλητές εισόδου ξαναδηλώνονται
• Επιλέγουμε τον τύπο της μεταβλητής που επιστρέφει
• Το όνομα της συνάρτησης είναι η μεταβλητή εξόδου
– εδώ υποχρεωτικά double precision – είναι ήδη δηλωμένη: είναι ο τύπος της συνάρτησης
• Η εντολή RETURN μας επιστρέφει στο κυρίως πρόγραμμα
– επιστρέφει την μεταβλητή εξόδου στο κυρίως πρόγραμμα
3 4
Γενική δήλωση συνάρτησης Παράδειγμα #1: Συνάρτηση για το
τύπος FUNCTION όνομα (μεταβλητές εισόδου)
μέτρο δισδιάστατου διανύσματος
IMPLICIT NONE
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΣΥΝΑΡΤΗΣΕΙΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΣΥΝΑΡΤΗΣΕΙΣ
δηλώσεις μεταβλητών (εισόδου και τοπικών)
εντολές
όνομα = ... DOUBLE PRECISION FUNCTION MAGNITUDE ( X, Y )
RETURN IMPLICIT NONE
END DOUBLE PRECISION X, Y
• τύπος: π.χ. INTEGER, DOUBLE PRECISION
MAGNITUDE = SQRT (X**2 + Y**2)
• όνομα: κάτι που περιγράφει τον υπολογισμό που γίνεται
• μεταβλητές εισόδου: απο 0 μέχρι και 265 (χωρισμένες με
RETURN
κόμματα) Απλές μεταβλητές ή/και πίνακες. Όποιου τύπου θέλουμε.
Αρκεί να έχουν πάρει κάποια τιμή απο το κυρίως πρόγραμμα END
• δηλώσεις μεταβλητών: οποσδήποτε των μεταβλητών εισόδου, και
όποιας τοπικής μεταβλητής δηλώσουμε μέσα στην συνάρτηση
• εντολές: ο κώδικας της συνάρτησης
• όνομα=...: καθώς το όνομα της συνάρτησης ΕΙΝΑΙ η μεταβλητή
εξόδου, πρέπει να της δώσουμε τιμή πριν την έξοδο
• RETURN: επιστρέφει την μεταβλητή εξόδου στο κυρίως πρόγραμμα5 6

Παράδειγμα #2: Συνάρτηση για


τον μεγαλύτερο τριών αριθμών Κλήση συνάρτησης
DOUBLE PRECISION FUNCTION MAX3 ( X, Y, Z )
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΣΥΝΑΡΤΗΣΕΙΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΣΥΝΑΡΤΗΣΕΙΣ
• Καλείται όπως και οι «εσωτερικές» συναρτήσεις
IMPLICIT NONE
DOUBLE PRECISION X, Y, Z, M • Μόνη διαφορά: επειδή το όνομα της συνάρτησης είναι και αυτό
μεταβλητή, πρέπει να δηλωθεί στο πρόγραμμα που την καλεί
IF (X .GT. Y) THEN PROGRAM TEST_SQ
M = X IMPLICIT NONE
ELSE DOUBLE PRECISION X, SQ
M = Y WRITE(*,*) ‘ΔΩΣΕ ΕΝΑ ΝΟΥΜΕΡΟ’
END IF READ(*,*) X
WRITE(*,*) ‘ΤΟ ΤΕΤΡΑΓΩΝΟ ΤΟΥ’, Χ, ‘ΕΙΝΑΙ’, SQ(X)
IF (Z .GT. M) THEN END
MAX3 = Z
ELSE DOUBLE PRECISION FUNCTION SQ ( X )
MAX3 = M IMPLICIT NONE
END IF DOUBLE PRECISION X
SQ = X**2
RETURN RETURN
END 7 END 8
Παράδειγμα #3: Συνάρτηση για το
Κλήση συνάρτησης: λεπτομέρεια 1
μέτρο δισδιάστατου διανύσματος
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΣΥΝΑΡΤΗΣΕΙΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΣΥΝΑΡΤΗΣΕΙΣ
• Μέσα στην συνάρτηση δεν είμαστε υποχρεωμένοι να διατηρούμε PROGRAM VECTOR2D
τα ίδια ονόματα για τις μεταβλητές εισόδου, αρκεί οι τύποι να IMPLICIT NONE
είναι σωστοί, και να δίνονται με την σωστή σειρά DOUBLE PRECISION X1, Y1, MAGNITUDE, Μ
PROGRAM TEST_SQ WRITE(*,*) ‘ΔΩΣΕ ΤΙΣ ΣΥΝΙΣΤΩΣΕΣ’
IMPLICIT NONE READ(*,*) X1, Υ1
DOUBLE PRECISION X, SQ
WRITE(*,*) ‘ΔΩΣΕ ΕΝΑ ΝΟΥΜΕΡΟ’ Μ = MAGNITUDE(X1, Y1)
READ(*,*) X WRITE(*,*) ‘ΤΟ ΜΕΤΡΟ ΤΩΝ’, Χ1, Υ1, ‘ΕΙΝΑΙ’, Μ
WRITE(*,*) ‘ΤΟ ΤΕΤΡΑΓΩΝΟ ΤΟΥ’, Χ, ‘ΕΙΝΑΙ’, SQ(X)
END END

DOUBLE PRECISION FUNCTION SQ ( Y ) DOUBLE PRECISION FUNCTION MAGNITUDE ( X, Y )


IMPLICIT NONE IMPLICIT NONE
DOUBLE PRECISION Y DOUBLE PRECISION X, Y
SQ = Y**2 MAGNITUDE = SQRT (X**2 + Y**2)
RETURN RETURN
END END
9 10

Κλήση συνάρτησης: λεπτομέρεια 2 Κλήση συνάρτησης: λεπτομέρεια 3


• Εαν η τιμή μιας μεταβλητής εισόδου αλλάξει μέσα στην συνάρτηση, • Μπορούμε να δηλώσουμε νέες τοπικές μεταβλητές στην συνάρτηση.
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΣΥΝΑΡΤΗΣΕΙΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΣΥΝΑΡΤΗΣΕΙΣ
αλλάζει και στο κυρίως πρόγραμμα. Προσοχή να μην γίνει!!! Μετά την επιστροφή χάνονται, δεν επηρεάζουν το κυρίως πρόγραμμα
PROGRAM VECTOR2D PROGRAM VECTOR2D
IMPLICIT NONE IMPLICIT NONE
DOUBLE PRECISION X1, Y1, MAGNITUDE, Μ DOUBLE PRECISION X1, Y1, MAGNITUDE, Μ
WRITE(*,*) ‘ΔΩΣΕ ΤΙΣ ΣΥΝΙΣΤΩΣΕΣ’ WRITE(*,*) ‘ΔΩΣΕ ΤΙΣ ΣΥΝΙΣΤΩΣΕΣ’
READ(*,*) X1, Υ1 READ(*,*) X1, Υ1
Μ = MAGNITUDE(X1, Y1) Μ = MAGNITUDE(X1, Y1)
WRITE(*,*) ‘ΤΟ ΜΕΤΡΟ ΤΩΝ’, Χ1, Υ1, ‘ΕΙΝΑΙ’, Μ WRITE(*,*) ‘ΤΟ ΜΕΤΡΟ ΤΩΝ’, Χ1, Υ1, ‘ΕΙΝΑΙ’, Μ
END END

DOUBLE PRECISION FUNCTION MAGNITUDE ( X, Y ) DOUBLE PRECISION FUNCTION MAGNITUDE ( X, Y )


IMPLICIT NONE IMPLICIT NONE
DOUBLE PRECISION X, Y DOUBLE PRECISION X, Y, K
MAGNITUDE = SQRT (X**2 + Y**2) K = SQRT (X**2 + Y**2)
X = 10 * X MAGNITUDE = K
RETURN RETURN
END 11 END 12
Παράδειγμα #4: Συνάρτηση για Παράδειγμα #5: Συνάρτηση για τον
τον υπολογισμό τιμής έκφρασης υπολογισμό παραγώγου έκφρασης
Γράψτε συνάρτηση που να γυρνάει την τιμή της έφρασης: Γράψτε συνάρτηση που να γυρνάει την τιμή της παραγώγου
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΣΥΝΑΡΤΗΣΕΙΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΣΥΝΑΡΤΗΣΕΙΣ
της παρακάτω συνάρτησης στο x=x0
2x 2 + 3 x + 4
f (x ) = 2x 2 + 3 x + 4
5x 2 + 6 x + 7 f (x ) =
DOUBLE PRECISION FUNCTION FUNC1 ( X ) 5x 2 + 6 x + 7
IMPLICIT NONE
DOUBLE PRECISION X, Y • Υπάρχουν 2 τρόποι να επιλυθεί
– Βρίσκουμε αναλυτικά την παράγωγο και παίρνουμε την
Y = 5*X**2 + 6*X +7 τιμή της στο x=x0.
IF (Y.NE.0) THEN – Υπολογίζουμε αριθμιτικά την τιμή της παραγώγου στο
FUNC1 = (2*X**2 + 3*X + 4) / Y x=x0 χρησιμοποιώντας τον ορισμό της παραγώγου:
ELSE
df ( x ) f (x + e ) − f (x − e )
= lime →0
FUNC1 = 0
END IF
dx x = x 0
2e
RETURN
END Τι να επιλέξουμε για e;
13 14

Παράδειγμα #5: Συνάρτηση για τον Παράδειγμα #6: Συνάρτηση για τον
υπολογισμό παραγώγου έκφρασης υπολογισμό ολοκληρώματος έκφρασης
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΣΥΝΑΡΤΗΣΕΙΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΣΥΝΑΡΤΗΣΕΙΣ
• Επιλέγουμε e πολύ μικρό σχετικά με το x0, ας πούμε • Το ολοκλήρωμα υπολογίζεται με τον κανόνα του
e=x0/1.000.000 x2
ορθογωνίου N
• Χρησιμοποιούμε την συνάρτηση FUNC1 που γράψαμε ∫ f ( x )dx = ∑
i =0
f ( x i )Δx
x1
DOUBLE PRECISION FUNCTION DERIV1 ( X )
IMPLICIT NONE
DOUBLE PRECISION X, E, FUNC1

E = X * 1.0D-6
IF (X .EQ. 0) E = 1.0D-6

DERIV = (FUNC1(X+E) – FUNC1(X-E)) / (2*E)

RETURN
END x1 x2
Δx=(x2-x1)/N
15 16
Παράδειγμα #6: Συνάρτηση για τον Παράδειγμα #7: Συνάρτηση λήψης απόφασης
υπολογισμό ολοκληρώματος έκφρασης εαν σημείο είναι μέσα ή έξω απο κύκλο
Γράψτε συνάρτηση που να γυρνάει την τιμή του 2x 2 + 3 x + 4 Είσοδος: σημείο, κέντρο κύκλου, ακτίνα κύκλου
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΣΥΝΑΡΤΗΣΕΙΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΣΥΝΑΡΤΗΣΕΙΣ
ολοκληρώματος της παραδίπλα συνάρτησης απο f (x ) = Έξοδος: 1 εαν είναι μέσα, 0 εαν όχι
x1 εως x2 με 10000 διαστήματα 5x 2 + 6 x + 7
DOUBLE PRECISION FUNCTION INTEG1 ( X1, X2 ) INTEGER FUNCTION INSIDE_CIRCLE (X, Y, X0, Y0, R)
IMPLICIT NONE IMPLICIT NONE
INTEGER I, N DOUBLE PRECISION X, Y, X0, Y0, R, D
DOUBLE PRECISION X1, X2, X, DX, FUNC1
D = SQRT( (X-X0)**2 + (Y-Y0)**2)
N = 10000 IF (D .LE. R) THEN
DX = (X2 – X1) / N INSIDE_CIRCLE = 1
INTEG1 = 0 ELSE
DO I = 1, N INSIDE_CIRCLE = 0
X = (I-1) * DX + DX/2 + X1 END IF
INTEG1 = INTEG1 + FUNC1(X) * DX
END DO RETURN
RETURN END
END 17 18

Παράδειγμα #8: Αριθμός σημείων μέσα στο Παράδειγμα #8: Αριθμός σημείων μέσα στο
υπόλοιπο της τομής 3 κύκλων υπόλοιπο της τομής 3 κύκλων (1/2)
Έστω οτι δίνονται Ν σημεία στο επίπεδο. Βρέιτε πόσα απο αυτά
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΣΥΝΑΡΤΗΣΕΙΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΣΥΝΑΡΤΗΣΕΙΣ
PROGRAM POINTS_IN_CIRCLES
βρίσκονται μέσα σε κάποιον απο τους 3 κύκλους, αλλά όχι μέσα σε κοινή IMPLICIT NONE
τομή τους (δηλαδή πόσα είναι μέσα στην ανοιχτή γαλάζια περιοχή) INTEGER NMAX, Ν, I, INSIDE_CIRCLE, IN(3), SUM
PARAMETER(NMAX = 1000)
DOUBLE PRECISION X(NMAX), Y(NMAX), X0(3),
& Y0(3), R(3)

WRITE(*,*) ‘ΠΟΣΑ ΣΗΜΕΙΑ ΘΑ ΕΙΣΑΓΕΤΕ;’


READ(*,*) Ν
IF (N .GT. NMAX .OR. N .LE. 0) STOP

WRITE(*,*) ‘ΕΙΣΑΓΕΤΕ ΤΑ ΣΗΜΕΙΑ’


READ(*,*) (X(I), I = 1, N), (Y(I), I = 1, N)
WRITE(*,*) ‘ΕΙΣΑΓΕΤΕ ΤΟΥΣ 3 ΚΥΚΛΟΥΣ’
READ(*,*) (X0(I), I = 1, 3), (Y0(I), I = 1, 3),
& (R(I), I = 1, 3)
ΣΥΝΕΧΙΖΕΤΑΙ...
Χρησιμοποιήστε την συνάρτση INSIDE_CIRCLE 19 20
Παράδειγμα #8: Αριθμός σημείων μέσα στο Παράδειγμα #9: Αριθμός σημείων μέσα
υπόλοιπο της τομής 3 κύκλων (2/2) στις τομές Μ κύκλων
Έστω οτι δίνονται Ν σημεία στο επίπεδο. Βρέιτε πόσα απο αυτά
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΣΥΝΑΡΤΗΣΕΙΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΣΥΝΑΡΤΗΣΕΙΣ
βρίσκονται μέσα σε οποιαδήποτε απο τις τομές των Μ κύκλων
(δηλαδή πόσα είναι μέσα στις σκούρες γαλάζιες περιοχές)
SUM = 0

DO Ι = 1, N
IN(1)=INSIDE_CIRCLE(Χ(Ι),Υ(Ι),Χ0(1),Υ0(1),R(1))
IN(2)=INSIDE_CIRCLE(Χ(Ι),Υ(Ι),Χ0(2),Υ0(2),R(2))
IN(3)=INSIDE_CIRCLE(Χ(Ι),Υ(Ι),Χ0(3),Υ0(3),R(3))
IF (IN(1)+IN(2)+IN(3) .EQ. 1) SUM = SUM + 1
END DO

WRITE(*,*) ‘ΜΕΣΑ ΣΤΟΥΣ ΚΥΚΛΟΥΣ ΕΙΝΑΙ’, SUM, ‘ΣΗΜΕΙΑ’

END

21 22

Παράδειγμα #9: Αριθμός σημείων μέσα Παράδειγμα #9: Αριθμός σημείων μέσα
στις τομές Μ κύκλων (1/2) στις τομές Μ κύκλων (2/2)
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΣΥΝΑΡΤΗΣΕΙΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΣΥΝΑΡΤΗΣΕΙΣ
PROGRAM POINTS_IN_CIRCLES
IMPLICIT NONE SUM = 0
INTEGER NMAX, Ν, M, I, J, INSIDE_CIRCLE, IN, SUM
PARAMETER(NMAX = 1000) DO Ι = 1, N
DOUBLE PRECISION X(NMAX), Y(NMAX), X0(NMAX), IN = 0
& Y0(NMAX), R(NMAX) DO J = 1, M
IN = IN + INSIDE_CIRCLE(Χ(Ι),Υ(Ι),
WRITE(*,*) ‘ΠΟΣΑ ΣΗΜΕΙΑ ΘΑ ΕΙΣΑΓΕΤΕ; ΚΥΚΛΟΥΣ;’ & Χ0(J),Υ0(J),R(J))
READ(*,*) Ν , Μ END DO
IF (N .GT. NMAX .OR. Μ .GT. NMAX ) STOP
IF (IN .GE. 2) SUM = SUM + 1
WRITE(*,*) ‘ΕΙΣΑΓΕΤΕ ΤΑ ΣΗΜΕΙΑ’ END DO
READ(*,*) (X(I), I = 1, N), (Y(I), I = 1, N)
WRITE(*,*) ‘ΕΙΣΑΓΕΤΕ ΤΟΥΣ 3 ΚΥΚΛΟΥΣ’ WRITE(*,*) ‘ΜΕΣΑ ΣΤΟΥΣ ΚΥΚΛΟΥΣ ΕΙΝΑΙ’, SUM, ‘ΣΗΜΕΙΑ’
READ(*,*) (X0(I), I = 1, Μ), (X(I), I = 1, Μ),
& (Y(I), I = 1, Μ) END
ΣΥΝΕΧΙΖΕΤΑΙ...
23 24
Εισαγωγή πινάκων σε συναρτήσεις:
π.χ. μέτρο δισδιάστατου διανύσματος Εισαγωγή πινάκων σε συναρτήσεις
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΣΥΝΑΡΤΗΣΕΙΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΣΥΝΑΡΤΗΣΕΙΣ
PROGRAM VECTOR2D
IMPLICIT NONE • Στην λίστα μεταβλητών εισόδου μπαίνει ΜΟΝΟ
DOUBLE PRECISION P(2), MAGNITUDE, Μ το όνομα του πίνακα
WRITE(*,*) ‘ΔΩΣΕ ΤΙΣ ΣΥΝΙΣΤΩΣΕΣ’
READ(*,*) P(1), P(2)
• Στην δήλωση μεταβλητών εισόδου δηλώνουμε
Μ = MAGNITUDE(P) το μέγεθος του πίνακα:
WRITE(*,*) ‘ΤΟ ΜΕΤΡΟ ΤΩΝ’, P(1), P(2), ‘ΕΙΝΑΙ’, Μ

END • Το μέγεθος του πίνακα μπορεί να περάσει και


αυτό σαν είσοδος
DOUBLE PRECISION FUNCTION MAGNITUDE ( P )
IMPLICIT NONE
DOUBLE PRECISION P(2)
MAGNITUDE = SQRT (P(1)**2 + P(2)**2)
RETURN
END
25 26

Γιατί εισάγουμε μόνο το πλήθος


Παράδειγμα #10: Μέτρο διανύσματος Ν
διαστάσεων
των ενεργών στοιχείων και όχι την
μέγιστη διάσταση του πίνακα;
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΣΥΝΑΡΤΗΣΕΙΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΣΥΝΑΡΤΗΣΕΙΣ
Γράψτε συνάρτηση που να δέχεται έναν μονοδιάστατο πίνακα και τον
αριθμό των ενεργών στοιχείων του και να επιστρέφει το μέτρο του • Η σωστή ερώτηση είναι: όταν εισάγουμε έναν πίνακα σε
μια συνάρτηση, εισάγουμε όλο τον πίνακα (δηλαδή όλα
DOUBLE PRECISION FUNCTION MAGNITUDE_Ν (X, N)
IMPLICIT NONE
τα στοιχεία του);
INTEGER N, I • Η απάντηση είναι ΟΧΙ: κατά την είσοδο μέσα στην
DOUBLE PRECISION X(N), S συνάρτηση μεταφέρεται μόνο η διεύθυνση μνήμης του
πρώτου στοιχείου του πίνακα, τίποτα άλλο (κλήση κατά
S = 0
DO I = 1, N
αναφορά). Κατόπιν η προσπέλαση γίνεται σειριακά.
S = S + X(I)**2
END DO
• Άρα η δήλωση της μέγιστης διάστασης δεν είναι
MAGNITUDE_N = SQRT (S) υποχρεωτική όταν έχουμε μονοδιάστατο πίνακα
• Είναι υποχρεωτική όταν έχουμε πολυδιάστατο πίνακα
RETURN
END
27 28
Παράδειγμα #11: Ελάχιστο πίνακα Παράδειγμα #12: Μέσος όρος πίνακα
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΣΥΝΑΡΤΗΣΕΙΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΣΥΝΑΡΤΗΣΕΙΣ
Γράψτε συνάρτηση που να δέχεται έναν μονοδιάστατο πίνακα και Γράψτε συνάρτηση που να δέχεται έναν μονοδιάστατο πίνακα και
τον αριθμό των ενεργών στοιχείων του και να επιστρέφει το τον αριθμό των ενεργών στοιχείων του και να επιστρέφει τον
ελάχιστο στοιχείο μέσο όρο

DOUBLE PRECISION FUNCTION XMIN (X, N) DOUBLE PRECISION FUNCTION AVERAGE (X, N)
IMPLICIT NONE IMPLICIT NONE
INTEGER N, I INTEGER N, I
DOUBLE PRECISION X(N) DOUBLE PRECISION X(N)

XMIN = X(1) AVERAGE = 0


DO I = 2, N DO I = 1, N
IF(X(I).LT.XMIN) XMIN = X(I) AVERAGE = AVERAGE + X(I)
END DO END DO
AVERAGE=AVERAGE/N
RETURN RETURN
END END

29 30

Παράδειγμα #13: Σφάλμα μέσου όρου Παράδειγμα #13: Σφάλμα μέσου όρου
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΣΥΝΑΡΤΗΣΕΙΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΣΥΝΑΡΤΗΣΕΙΣ
Γράψτε συνάρτηση που να δέχεται έναν μονοδιάστατο πίνακα και 1/ 2
⎡N 2⎤ DOUBLE PRECISION FUNCTION STD (X, N)
⎢ ∑(x i − x ) ⎥
τον αριθμό των ενεργών στοιχείων του και να επιστρέφει το
σφάλμα του μέσου όρου IMPLICIT NONE
σ x = ⎢ i =1 ⎥ INTEGER N, I
⎢ N (N −1) ⎥ DOUBLE PRECISION X(N), XMEAN, AVERAGE
• Σε ένα σύνολο μετρήσεων xi, i=1, N, υπολογίζουμε ⎢⎣ ⎥⎦
XMEAN = AVERAGE(X, N)
μέσος όρος Σφάλμα μέσου όρου
1/ 2 STD = 0
N ⎡N 2⎤
∑xi ⎢ ∑ (x i − x ) ⎥
DO I = 1, N
STD = STD + (X(I) – XMEAN)**2
σ x = ⎢ i =1 ⎥
x= i =1 END DO

N ⎢ N ( N − 1) ⎥
⎢⎣ ⎥⎦ STD = SQRT( STD / (N*(N-1) ))

RETURN
END
31 32
Παράδειγμα #14 Παράδειγμα #15: Ελάχιστο πίνακα
Στατιστική ανάλυση μεταξύ Ν1 και Ν2
Κατασκευάστε πρόγραμμα που δέχεται Ν αριθμούς και θα κάνει
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΣΥΝΑΡΤΗΣΕΙΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΣΥΝΑΡΤΗΣΕΙΣ
Γράψτε συνάρτηση που να δέχεται έναν μονοδιάστατο πίνακα και
στατιστική ανάλυση δύο ακέραιους N1 και N2, και να επιστρέφει το ελάχιστο στοιχείο
PROGRAM STATISTICS μεταξύ Ν1 και Ν2
IMPLICIT NONE
INTEGER NMAX, Ν, I DOUBLE PRECISION FUNCTION XMIN (X, N1, N2)
PARAMETER(NMAX = 1000) IMPLICIT NONE
DOUBLE PRECISION X(NMAX), AVERAGE, STD INTEGER N1, N2, I
DOUBLE PRECISION X(N2)
WRITE(*,*) ‘ΠΟΣΕΣ ΤΙΜΕΣ ΘΑ ΕΙΣΑΓΕΤΕ’
READ(*,*) Ν XMIN = X(N1)
IF (N .GT. NMAX .OR. N .LE. 0) STOP DO I = N1+1, N2
IF(X(I).LT.XMIN) XMIN = X(I)
WRITE(*,*) ‘ΕΙΣΑΓΕΤΕ ΤΙΣ ΤΙΜΕΣ’ END DO
READ(*,*) (X(I), I = 1, N)
RETURN
WRITE(*,*) AVERAGE(X, N), ‘+-’, STD(X, N) END
END
33 34

Παράδειγμα #16: Θέση ελαχίστου πίνακα Παράδειγμα #16: Θέση ελαχίστου πίνακα
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΣΥΝΑΡΤΗΣΕΙΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΣΥΝΑΡΤΗΣΕΙΣ
INTEGER FUNCTION IMIN (X, N)
Γράψτε συνάρτηση που να δέχεται έναν μονοδιάστατο IMPLICIT NONE
πίνακα και να επιστρέφει την θέση στην οποία INTEGER N, I
βρίσκεται το ελάχιστο στοιχείο του DOUBLE PRECISION X(N), XMIN

XMIN = X(1)
Λύση: IMIN = 1
• Η συνάρτηση θα δέχεται έναν μονοδιάστατο πίνακα DO I = 2, N
καθώς και τον αριθμό των ενεργών στοιχείων του IF(X(I).LT.XMIN)THEN
XMIN = X(I)
• Μέσα στην συνάρτηση βρίσκουμε και το ελάχιστο IMIN = I
στοιχείο αλλά και την θέση στην οποία βρίσκεται END IF
αυτό, και γυρνάμε πίσω την θέση END DO
• Συνάρτηση τύπου INTEGER RETURN
END
35 36
Παράδειγμα #17: ίχνος
Εισαγωγή δισδιάστατου πίνακα
δισδιάστατου πίνακα
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΣΥΝΑΡΤΗΣΕΙΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΣΥΝΑΡΤΗΣΕΙΣ
Γράψτε συνάρτηση που να δέχεται έναν δισδιάστατο
• Εδώ πρέπει να εισάγουμε τουλάχιστον το μέγιστο τετραγωνικό πίνακα και να επιστρέφει το ίχνος του
πλήθος γραμμών του πίνακα
DOUBLE PRECISION FUNCTION TRACE (X, N)
IMPLICIT NONE
• ΔΕΝ μπορούμε να εισάγουμε μόνο το πλήθος των INTEGER N, I
DOUBLE PRECISION X(N, N)
ενεργών στοιχείων όπως κάνουμε με τους
μονοδιάστατους πίνακες TRACE = 0
DO I = 1, N
TRACE = TRACE + X(I, I)
• Στην γενική περίπτωση με πίνακες Μ διαστάσεων, END DO
δηλώνουμε επακριβώς τις πρώτες Μ-1 διαστάσεις
RETURN
END

37
Εδώ το Ν πρέπει αναγκαστικά να είναι η μέγιστη διάσταση 38

Παράδειγμα #18: άθροισμα των Ν Γιατί αυτή η διαφορά μεταξύ


πρώτων στοιχείων της διαγωνίου μονοδιάστατων και πολυδιάστατων;
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΣΥΝΑΡΤΗΣΕΙΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΣΥΝΑΡΤΗΣΕΙΣ
Γράψτε συνάρτηση που να δέχεται έναν δισδιάστατο έστω ένας πίνακας Χ(9), και θέλουμε να
τετραγωνικό πίνακα και να επιστρέφει το άθροισμα επεξεργαστούμε τα 4 πρώτα στοιχεία του
των Ν πρώτων στοιχείων της διαγωνίου του
DOUBLE PRECISION FUNCTION TRACE (X, NMAX, N)
IMPLICIT NONE ο πίνακας Χ(9), όπως είναι στο εαν τον περάσουμε σε
INTEGER NMAX, I κυρίως πρόγραμμα συνάρτηση και καλέσουμε τα 4
DOUBLE PRECISION X(NMAX, N) ⎛1⎞ πρώτα στοιχεία του, θα έχουμε
⎜ ⎟
⎜2⎟
TRACE = 0 ⎜3⎟
DO I = 1, N ⎜ ⎟ ⎛1⎞
⎜4⎟ ⎜ ⎟
TRACE = TRACE + X(I, I) ⎜ 5⎟ ⎜2⎟
END DO ⎜ ⎟ ⎜3⎟
⎜6⎟ ⎜ ⎟
⎜4⎟
⎜ ⎟ ⎝ ⎠
RETURN ⎜7⎟
END ⎜8⎟
⎜⎜ 9 ⎟⎟
Εδώ πρέπει αναγκαστικά να εισάγουμε και τη μέγιστη διάσταση
39 ⎝ ⎠ 40
Γιατί αυτή η διαφορά μεταξύ
μονοδιάστατων και πολυδιάστατων;
έστω τώρα ένας πίνακας Χ(3,3), και θέλουμε να
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΣΥΝΑΡΤΗΣΕΙΣ

επεξεργαστούμε το πρώτο (2,2) τεταρτημόριό του


ο πίνακας Χ, όπως στην συνάρτηση,
ο πίνακας
είναι στη μνήμη εαν τον δηλώσουμε
Χ(3,3), όπως
ως 2Χ2 πίνακα, να
είναι στο κυρίως
⎛ 11 ⎞ τι θα πάρουμε
πρόγραμμα ⎜ ⎟
⎜ 21 ⎟ ⎛ 11 31⎞ λάθος
⎜ 31 ⎟ ⎜⎜ ⎟⎟
⎛ 11 12 13 ⎞ ⎜ ⎟ ⎝ 21 12 ⎠
⎜ ⎟ ⎜ 12 ⎟
⎜ 21 22 23 ⎟ ⎜ 22 ⎟
εαν όμως τον δηλώσουμε
⎜ 31 32 33 ⎟ ⎜ ⎟
⎜ 32 ⎟ ως 3Χ2, θα πάρουμε
⎝ ⎠ ⎜ ⎟
⎜ 13 ⎟ ⎛ 11 12 ⎞
⎜ 23 ⎟ ⎜ ⎟
⎜⎜ ⎟⎟ ⎜ 21 22 ⎟ σωστό!!
⎝ 33 ⎠
⎜ 31 32 ⎟
⎝ ⎠ 41
Τι είναι μια υπορουτίνα;
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΥΠΟΡΟΥΤΙΝΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΥΠΟΡΟΥΤΙΝΕΣ
• Μια ομάδα εντολών, σχεδιασμένη να εκτελεί έναν ή
περισσότερους υπολογισμούς
– Ιδανικές για περιπτώσεις που ο υπολογισμός επαναλαμβάνεται
ΥΠΟΡΟΥΤΙΝΕΣ πολλές φορές μέσα στο πρόγραμμα
– Συντελούν σημαντικά στην καθαρότητα ενός προγράμματος
– Συντελούν σημαντικά στην μεταβατικότητα ενός
προγράμματος

1 2

Ποια η διαφορά συναρτήσεων και


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

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΥΠΟΡΟΥΤΙΝΕΣ
PROGRAM TEST_SQ PROGRAM TEST_SQ
• Είναι και οι δύο υποπρογράμματα IMPLICIT NONE IMPLICIT NONE
DOUBLE PRECISION X, SQ DOUBLE PRECISION X
• Γράφονται και οι δύο μετά το τέλος του προγράμματος WRITE(*,*) ‘ΝΟΥΜΕΡΟ;’ WRITE(*,*) ‘ΝΟΥΜΕΡΟ;’
• Μπορούμε να χρησιμοποιήσουμε όποια από τις δύο READ(*,*) X READ(*,*) X
θέλουμε για οποιαδήποτε πράξη
CALL SQ(X)
WRITE(*,*) SQ(X) WRITE(*,*) X
Συναρτήσεις Υπορουτίνες END END
• είσοδος: λίστα μεταβλητών • είσοδος: λίστα μεταβλητών
• έξοδος: μεταβλητή εξόδου • έξοδος: λίστα μεταβλητών REAL*8 FUNCTION SQ(X) SUBROUTINE SQ(X)
• κλήση: ανάθεση σε μεταβλητή • κλήση: χωρίς ανάθεση (με CALL) IMPLICIT NONE IMPLICIT NONE
• δεν χρειάζεται να δηλώσουμε το DOUBLE PRECISION X DOUBLE PRECISION X
όνομά της SQ = X**2 X = X**2
RETURN RETURN
END END
3 4
Παράδειγμα #1B: η πράξη SQ με Πότε να χρησιμοποιούμε
υπορουτίνα: με ή χωρίς τροποποίηση συνάρτηση και πότε υπορουτίνα;
με τροποποίηση χωρίς τροποποίηση
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΥΠΟΡΟΥΤΙΝΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΥΠΟΡΟΥΤΙΝΕΣ
PROGRAM TEST_SQ PROGRAM TEST_SQ Συνάρτηση Υπορουτίνα
IMPLICIT NONE IMPLICIT NONE • όταν η πράξη είναι απλή με • όταν οι πράξεις είναι πολλές και
DOUBLE PRECISION X DOUBLE PRECISION X, Y μία και μόνο έξοδο οι έξοδοι επίσης πολλές
WRITE(*,*) ‘ΝΟΥΜΕΡΟ;’ WRITE(*,*) ‘ΝΟΥΜΕΡΟ;’ • όταν δεν τροποποιούμε τις • όταν πρέπει να τροποποιήσουμε
READ(*,*) X READ(*,*) X μεταβλητές εισόδου τις μεταβλητές εισόδου

CALL SQ(X) CALL SQ(X,Y)


WRITE(*,*) X WRITE(*,*) Y Καλές προγραμματιστικές συνήθειες:
END END
• Συνάρτηση: μία πράξη, ένα αποτέλεσμα (ένα νούμερο)
SUBROUTINE SQ(X) SUBROUTINE SQ(X, Y) • Υπορουτίνα: γενικευμένο σύνολο πράξεων, πολλά
IMPLICIT NONE IMPLICIT NONE αποτελέσματα (π.χ. τροποποίηση ολόκληρου πίνακα)
DOUBLE PRECISION X DOUBLE PRECISION X, Y
X = X**2 Y = X**2
RETURN RETURN
END END
5 6

Παράδειγμα #2: τροποποίηση πίνακα Παράδειγμα #2B: τροποποίηση πίνακα


Γράψτε πρόγραμμα που να διαβάζει μονοδιάστατο πίνακα και με
την SQN να τροποποιεί το κάθε στοιχείο του στο τετράγωνό του
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΥΠΟΡΟΥΤΙΝΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΥΠΟΡΟΥΤΙΝΕΣ
Γράψτε υπορουτίνα που να δέχεται μονοδιάστατο πίνακα και
PROGRAM TEST_SQN
να τροποποιεί το κάθε στοιχείο του στο τετράγωνό του
IMPLICIT NONE
INTEGER NMAX, N, Ι
SUBROUTINE SQΝ(X, N) PARAMETER(NMAX = 1000)
IMPLICIT NONE DOUBLE PRECISION X(NMAX)
INTEGER N, I
DOUBLE PRECISION X(N) WRITE(*,*) ‘ΠΟΣΑ ΣΗΜΕΙΑ ΘΑ ΕΙΣΑΓΕΤΕ;’
READ(*,*) Ν
DO I = 1, N IF (N .GT. NMAX .OR. N .LE. 0) STOP
X(I) = X(I)**2 READ(*,*) (X(I), I = 1, N)
END DO
CALL SQN(X, N)
RETURN
END WRITE(*,*) ‘ΤΑ ΝΕΑ ΣΤΟΙΧΕΙΑ ΤΟΥ ΠΙΝΑΚΑ’
WRITE(*,*) (Χ(Ι), Ι = 1, Ν)
7
END 8
Παράδειγμα #3: υπορουτίνα για
Παράδειγμα #3: υπορουτίνα SWAP
ταξινόμηση με μέθοδο φυσαλίδας
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΥΠΟΡΟΥΤΙΝΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΥΠΟΡΟΥΤΙΝΕΣ
SUBROUTINE BUBBLE_SORT(X, N)
IMPLICIT NONE
INTEGER N, I, J SUBROUTINE SWAP (X, Y)
DOUBLE PRECISION X(N) DOUBLE PRECISION X, Y, TEMP

C.....ΓΙΑ ΚΑΘΕ ΘΕΣΗ J TEMP = X


DO J = N, 2, -1 X = Y
C...........ΒΡΙΣΚΟΥΜΕ ΤΟ ΑΝΤΙΣΤΟΙΧΟ ΜΕΓΙΣΤΟ Y = TEMP
DO I = 1, J-1
IF(X(I) .GT. X(I+1))THEN RETURN
CALL SWAP( X(I) , X(I+1) ) END
END IF
END DO
END DO

RETURN
END
9 10

Παράδειγμα #4: πολλαπλασιασμός Παράδειγμα #5: απόσταση διανυόμενη


πινάκων από σώμα με μεταβλητή ταχύτητα
Γράψτε υπορουτίνα που δέχεται 3 δισδιάστατους τετραγωνικούς πίνακες (ή με άλλα λόγια:
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΥΠΟΡΟΥΤΙΝΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΥΠΟΡΟΥΤΙΝΕΣ
και τροποποιεί τον τρίτο ώστε να είναι το γινόμενο των δύο πρώτων αριθμητική ολοκλήρωση γραμμικής διαφορικής εξίσωσης)
SUBROUTINE MATRIX_PRODUCT(A, B, C, N)
IMPLICIT NONE
INTEGER N, I, J, K • Έστω ένα σώμα ξεκινάει από την θέση x=0, και η
DOUBLE PRECISION A(N,N), B(N,N), C(N,N) ταχύτητά του δίνεται από την παρακάτω σχέση,
όπου ο χρόνος t μετριέται σε δευτερόλεπτα
DO J = 1, N

0.03t − 0.001t 2
DO I = 1, N

v (t ) =
C(I,J) = 0
DO K = 1, N

END DO
C(I,J) = C(I,J) + A(I,K) * B(K,J)
1 + 0.0001t 3
END DO
END DO
Ποια απόσταση έχει διανύσει μετά από Μ δευτερόλεπτα;
RETURN
END 11 12
Παράδειγμα #5: απόσταση διανυόμενη Παράδειγμα #5: απόσταση διανυόμενη
από σώμα με μεταβλητή ταχύτητα από σώμα με μεταβλητή ταχύτητα (1/2)
Μέθοδος του Euler
Γράψτε πρόγραμμα που υπολογίζει την 0.03t − 0.001t 2
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΥΠΟΡΟΥΤΙΝΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΥΠΟΡΟΥΤΙΝΕΣ
dx (t ) απόσταση σαν συνάρτηση του χρόνου, όταν v (t ) =
• Διαφορική εξίσωση: = v (t ) η ταχύτητα δίνεται από (t σε δευτερόλεπτα): 1 + 0.0001t 3
dt PROGRAM DISTANCE1
IMPLICIT NONE
• Διακριτοποίηση: x (t + Δt ) − x (t ) INTEGER Μ, T
= v (t ) DOUBLE PRECISION X, V, VELOCITY
Δt WRITE(*,*) ‘ΠΟΣΑ ΒΗΜΑΤΑ ΘΕΛΕΤΕ;’
• Ολοκλήρωση στον χρόνο: READ(*,*) M
Χ = 0
DO T = 1, M
x (t + Δt ) = x (t ) + Δt ⋅v (t ) V = VELOCITY(T)
CALL DISTANCE(X, V)
END DO
• ‘Η σε μορφή αλγόριθμου
(για Δt=1sec) x i +1 = x i + v i WRITE(*,*) ‘Η ΑΠΟΣΤΑΣΗ ΕΙΝΑΙ’, Χ
13 END 14

Παράδειγμα #5: απόσταση διανυόμενη Παράδειγμα #6: απόσταση διανυόμενη


από σώμα με μεταβλητή ταχύτητα (2/2) από Ν σώματα με σταθερή ταχύτητα
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΥΠΟΡΟΥΤΙΝΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΥΠΟΡΟΥΤΙΝΕΣ
DOUBLE PRECISION FUNCTION VELOCITY ( T )
• Έστω N σώματα ξεκινάνε από την θέση x=0 με αρχική
IMPLICIT NONE
INTEGER T ταχύτητα (σε m/sec) που δίνεται από την σχέση (i=1, N)

VELOCITY = (0.03*T - 0.001* T**2)/(1 + 0.0001* T**3) v (i ) = 100 cos(100i )


RETURN Εάν η κίνηση είναι με σταθερή ταχύτητα, μετά από M
END δευτερόλεπτα, ποιο είναι μακρύτερα και ποιο κοντύτερα
C--------------------------------------------------------- στην αρχή, και ποιες θα είναι αυτές οι αποστάσεις;
SUBROUTINE DISTANCE (X, V)
IMPLICIT NONE • Τι θα χρειαστούμε;
DOUBLE PRECISION X, V
– Δύο πίνακες για απόσταση και ταχύτητα
X = X + V – Μια συνάρτηση για να δημιουργήσουμε αρχικές ταχύτητες
– Μια υπορουτίνα για να εκτελεί ένα βήμα
RETURN – Μια συνάρτηση που γυρνάει την θέση του μεγίστου ενός πίνακα
END – Μια συνάρτηση που γυρνάει την θέση του ελαχίστου ενός πίνακα
15 16
Παράδειγμα #6: απόσταση διανυόμενη Παράδειγμα #6: απόσταση διανυόμενη
από Ν σώματα με σταθερή ταχύτητα (1/5) από Ν σώματα με σταθερή ταχύτητα (2/5)
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΥΠΟΡΟΥΤΙΝΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΥΠΟΡΟΥΤΙΝΕΣ
• Συνάρτηση για την δημιουργία αρχικών ταχυτήτων • Υπορουτίνα για εκτέλεση ενός βήματος

SUBROUTINE RUN_DISTANCE (X, V, N)


DOUBLE PRECISION FUNCTION VELOCITY ( I ) IMPLICIT NONE
IMPLICIT NONE INTEGER N, I
INTEGER I DOUBLE PRECISION X(N), V(N)

VELOCITY = 100 * ABS ( COS (100 * I) ) ) DO I = 1, N


X(I) = X(I) + V(I)
RETURN END DO
END
RETURN
END

17 18

Παράδειγμα #6: απόσταση διανυόμενη Παράδειγμα #6: απόσταση διανυόμενη


από Ν σώματα με σταθερή ταχύτητα (3/5) από Ν σώματα με σταθερή ταχύτητα (4/5)
• Συνάρτηση για εύρεση θέσης μέγιστου πίνακα
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΥΠΟΡΟΥΤΙΝΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΥΠΟΡΟΥΤΙΝΕΣ
• Συνολικό πρόγραμμα
INTEGER FUNCTION IMAX (X, N) PROGRAM RACE
IMPLICIT NONE IMPLICIT NONE
INTEGER N, I INTEGER NMAX, M, N, I, IMIN, IMAX
DOUBLE PRECISION X(N), XMAX PARAMETER(NMAX=1000)
DOUBLE PRECISION DIST(NMAX), VEL(NMAX), VELOCITY
XMAX = X(1)
IMAX = 1 WRITE(*,*) ‘ΠΟΣΑ ΣΩΜΑΤΑ ΤΡΕΧΟΥΝ ΚΑΙ ΓΙΑ ΠΟΣΑ ΒΗΜΑΤΑ;’
DO I = 2, N READ(*,*) Ν, Μ
IF (X(I).GT.XMAX) THEN
XMAX = X(I) IF (N .GT. NMAX .OR. N .LE. 0) STOP
IMAX = I
END IF DO I = 1, N
END DO DIST(I) = 0
VEL(I) = VELOCITY(I)
RETURN END DO
END
19
ΣΥΝΕΧΙΖΕΤΑΙ...20
Παράδειγμα #6: απόσταση διανυόμενη Παράδειγμα #7: απόσταση διανυόμενη
από Ν σώματα με σταθερή ταχύτητα (5/5) από Ν σώματα, με κανόνες ταχύτητας
• Συνολικό πρόγραμμα
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΥΠΟΡΟΥΤΙΝΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΥΠΟΡΟΥΤΙΝΕΣ
Κίνηση Ν σωμάτων με κανόνες ταχύτητας: σε κάθε βήμα
όποιο σώμα έχει ταχύτητα πάνω από τον μέσο όρο
DO I = 1, Μ ταχυτήτων, πρέπει να την μειώσει κατά 10%, ενώ όποιο
CALL RUN_DISTANCE(X, V, N)
END DO
έχει ταχύτητα κάτω από τον μέσο όρο ταχυτήτων πρέπει
να την αυξήσει κατά 10%.
WRITE(*,*) ‘ΠΡΩΤΟ ΤΟ’ , ΙΜΑΧ(DIST,N)
WRITE(*,*) ‘ΜΕ ΑΠΟΣΤΑΣΗ’, DIST(IMAX(DIST,N))
• Τι θα χρειαστούμε;
WRITE(*,*) ‘KAI TAXYTHTA’, VEL(IMAX(DIST,N))
RETURN – Μια συνάρτηση να υπολογίζει τον μέσο όρο
END – Μια υπορουτίνα που να εφαρμόζει τον κανόνα

21 22

Παράδειγμα #7: απόσταση διανυόμενη Παράδειγμα #7: απόσταση διανυόμενη


από Ν σώματα, με κανόνες ταχύτητας από Ν σώματα, με κανόνες ταχύτητας
(1/2) (2/2)
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΥΠΟΡΟΥΤΙΝΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΥΠΟΡΟΥΤΙΝΕΣ
• Υπορουτίνα για εφαρμογή κανόνα
• Συνάρτηση για μέσο όρο SUBROUTINE SCALE_VELOCITY (V, N)
IMPLICIT NONE
DOUBLE PRECISION FUNCTION AVERAGE (X, N) INTEGER N, I
IMPLICIT NONE DOUBLE PRECISION V(N), AVERAGE, VM
INTEGER N, I
DOUBLE PRECISION X(N) VM = AVERAGE(V, N)
AVERAGE = 0 DO I = 1, N
DO I = 1, N IF (V(I) .GT. VM) THEN
AVERAGE = AVERAGE + X(I) V(I) = V(I) * 0.9
END DO ELSE IF (V(I) .LT. VM) THEN
V(I) = V(I) * 1.1
AVERAGE = AVERAGE / N END IF
END DO
RETURN
END RETURN
23 END 24
Παράδειγμα #8: Γραμμικό Παράδειγμα #8: Γραμμικό
σύστημα μαζών με ελατήρια σύστημα μαζών με ελατήρια
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΥΠΟΡΟΥΤΙΝΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΥΠΟΡΟΥΤΙΝΕΣ
M
k

H
1 2 3 … I … N

• Κάθε σφαίρα I (εκτός πρώτης και τελευταίας), περιγράφεται από:


• Γράψτε πρόγραμμα που να λύνει την χρονική
– Την θέση της
εξέλιξη του γραμμικού συστήματος Ν ελατηρίων
– Την ταχύτητά της
• Συνθήκες: – Την δύναμη πού νοιώθει εξαιτίας των δύο ελατηρίων της
– Αρχικές θέσεις τυχαίες
– Αρχικές ταχύτητες μηδέν
– Πρώτη και τελευταία είναι ακίνητες

25 26

Παράδειγμα #8: Γραμμικό Παράδειγμα #8: Γραμμικό


σύστημα μαζών με ελατήρια σύστημα μαζών με ελατήρια
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΥΠΟΡΟΥΤΙΝΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΥΠΟΡΟΥΤΙΝΕΣ
1 2 3 … I … N 1 2 3 … I … N
• Δύναμη στη σφαίρα Ι
• Αρχικές θέσεις: – Εάν το δεξί της ελατήριο είναι τεντωμένο, η δύναμη είναι πρός
– X(1) = 0 τα δεξιά (θετική): F = K * (X(I+1) – X(I) – H)
– X(N) = H * (N - 1) – Εάν το δεξί της ελατήριο είναι συμπιεσμένο, η δύναμη είναι
– Οι υπόλοιπες δίνονται από τον χρήστη προς τα αριστερά (αρνητική): F = K * (X(I+1) – X(I) – H)
• Αρχικές ταχύτητες – Εάν το αριστερό της ελατήριο είναι τεντωμένο, η δύναμη είναι
προς τα αριστερά (αρνητική): F = K * (X(I-1) – X(I) + H)
– Όλες μηδέν
– Εάν το αριστερό της ελατήριο είναι συμπιεσμένο, η δύναμη
είναι προς τα δεξιά (θετική): F = K * (X(I-1) – X(I) + H)
27 28
Παράδειγμα #8: Γραμμικό Παράδειγμα #8: Γραμμικό
σύστημα μαζών με ελατήρια σύστημα μαζών με ελατήρια
• Ολοκλήρωση
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΥΠΟΡΟΥΤΙΝΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΥΠΟΡΟΥΤΙΝΕΣ
– Ανάπτυγμα Taylor για την απόσταση

1
x (t + Δt ) = x (t ) + v (t )Δt + a (t )( Δt )2
1 2 3 … I … N 2
• Συνολική δύναμη στη σφαίρα Ι
– Ανάπτυγμα για την ταχύτητα
F = K * (X(I+1) – X(I) – H) + K * (X(I-1) – X(I) + H)
F = Κ * (Χ(Ι+1) + Χ(Ι-1) – 2*Χ(Ι)) v (t + Δt ) = v (t ) + a (t )Δt
και η επιτάχυνση
Α = Κ / Μ * (Χ(Ι+1) + Χ(Ι-1) – 2*Χ(Ι)) – ΣΗΜΕΙΩΣΗ: εφαρμόζοντας αυτούς τους τύπους
επιτυγχάνουμε λύση με ακρίβεια πρώτης τάξης, όχι
ικανοποιητική. Με μικρή τροποποίηση μπορούμε να
• H δύναμη στην πρώτη και τελευταία είναι μηδέν επιτύχουμε ακρίβεια δεύτερης τάξης, αλλά δεν είναι επί
29 του παρόντος. 30

Παράδειγμα #8: Γραμμικό Παράδειγμα #8: Γραμμικό


σύστημα μαζών με ελατήρια σύστημα μαζών με ελατήρια
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΥΠΟΡΟΥΤΙΝΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΥΠΟΡΟΥΤΙΝΕΣ
• Υπορουτίνα για υπολογισμό επιτάχυνσης • Υπορουτίνα για υπολογισμό νέας ταχύτητας

SUBROUTINE ACCELERATION (X, A, N, KM) SUBROUTINE VELOCITY (V, A, N, DT)


IMPLICIT NONE IMPLICIT NONE
INTEGER N, I INTEGER N, I
DOUBLE PRECISION X(N), A(N), KM DOUBLE PRECISION V(N), A(N), DT

DO I = 2, N-1 DO I = 2, N-1
A(I) = KM * (X(I+1) + X(I-1) – 2 * X(I)) V(I) = V(I) + A(I) * DT
END DO END DO

RETURN RETURN
END END

31 32
Παράδειγμα #8: Γραμμικό Παράδειγμα #8: Γραμμικό
σύστημα μαζών με ελατήρια σύστημα μαζών με ελατήρια
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΥΠΟΡΟΥΤΙΝΕΣ

ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΥΠΟΡΟΥΤΙΝΕΣ
• Υπορουτίνα για υπολογισμό νέας θέσης • Πρόγραμμα
PROGRAM SPRINGS
SUBROUTINE POSITION (X, V, A, N, DT)
IMPLICIT NONE
IMPLICIT NONE
INTEGER NMAX, N, I, J
INTEGER N, I
PARAMETER(NMAX=1000)
DOUBLE PRECISION Χ(Ν), V(N), A(N), DT
DOUBLE PRECISION X(NMAX), V(NMAX), A(NMAX), KM, DT
DO I = 2, N-1
WRITE(*,*) ‘ΠΟΣΑ ΣΩΜΑΤΑ ΤΡΕΧΟΥΝ ΚΑΙ ΓΙΑ ΠΟΣΑ ΒΗΜΑΤΑ;’
Χ(I) = Χ(Ι) + V(I) * DT + 0.5 * A(I) * DT**2
READ(*,*) Ν, Μ
END DO
IF (N .GT. NMAX .OR. N .LE. 0) STOP
RETURN
WRITE(*,*) ‘ΕΛΑΤΗΡΙΟ/ΜΑΖΑ, ΒΗΜΑ’
END
READ(*,*) KM, DT
ΣΥΝΕΧΙΖΕΤΑΙ...

33 34

Παράδειγμα #8: Γραμμικό


σύστημα μαζών με ελατήρια
• Πρόγραμμα
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΥΠΟΡΟΥΤΙΝΕΣ

WRITE(*,*) ‘ΔΩΣΕ ΑΡΧΙΚΕΣ ΘΕΣΕΙΣ’


READ(*,*) (Χ(Ι), Ι = 1, Ν)
DO I = 1, N
V(I) = 0
END DO

DO J = 1, M
CALL ACCELARATION(X, A, N, KM)
CALL POSITION(X, V, A, N, DT)
CALL VELOCITY(V, A, N, DT)
END DO

WRITE(*,*) ‘ΟΙ ΘΕΣΕΙΣ ΜΕΤΑ ΑΠΟ’, Μ, ‘ΒΗΜΑΤΑ ΕΙΝΑΙ’


WRITE(*,*) (X(I), I = 1, N)

END 35

You might also like