Professional Documents
Culture Documents
Ε. Λοιδωρίκης, Δ. Παπαγεωργίου
Πανεπιστήμιο Ιωαννίνων
Τα επιμέρους τμήματα
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ
1 2
ΑΝΑΠΑΡΑΣΤΑΣΗ
ΜΕΤΡΟΥΜΕΝΟ
ΣΤΟΝ Π.Χ. ΘΕΡΜΟΜΕΤΡΟ ΥΔΡΑΡΓΥΡΟΥ
ΜΕΓΕΘΟΣ
ΥΠΟΛΟΓΙΣΤΗ
Μπορούμε να διακρίνουμε θερμοκρασίες
25.1, 25.2, … κλπ
ή
25.12, 25.14, … κλπ
ανάλογα με τη διακριτική ικανότητα του
ΑΝΑΛΟΓΙΚΗ ΨΗΦΙΑΚΗ οργάνου και την ικανότητα του παρατηρητή
3 4
Ψηφιακή αναπαράσταση Οι σύγχρονοι ΗΥ είναι ψηφιακοί
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ
Μπορούμε να διακρίνουμε
θερμοκρασίες
23, 24, 25, … κλπ.
Μπορούν να απεικονιστούν το πολύ
100 θερμοκρασίες (ή 199 αν υπάρχει
πρόσημο).
5 6
7 8
Μετατροπή δυαδικού σε δεκαδικό Άλλα συστήματα αρίθμησης
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ
Πχ: 1100111
D = 1x26 + 1x25 + 0x24 + 0x23 + 1x22 + 1x21 + 1x20
= 103
9 10
11 12
Κεντρική μνήμη - Ένα απλό μοντέλο Πόσο μεγάλος χώρος είναι το 1 byte ;
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ
13 14
ΟΜΩΣ ΠΡΟΣΟΧΗ
1 Km= 1000 m
1 Kgr= 1000 gr
15 16
Τύποι μνήμης - Κατηγοριοποίηση Τύποι μνήμης - Κατηγοριοποίηση
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ
ΡΕΥΜΑΤΟΣ ;
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
19 20
Τύποι μνήμης Τύποι δεδομένων
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ
25 26
29 30
ΠΡΟΣΘΕΣΕ
31 32
Η διαδικασία αναλυτικά Ρεπερτόριο Εντολών ΚΜΕ
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ
37 38
1 2
Παράδειγμα: Παράδειγμα:
C Α υ τ ό ε ί ν α ι σ χ ό λ ι ο
Παράδειγμα:
1 2 0 W R I T E ( * , * ) ' O K '
5 6
A2 Σωστό.
Συμβολικά ονόματα χρησιμοποιούνται σε πολλά άλλα
σημεία ενός προγράμματος. 2ND Λάθος. Ξεκινάει με ψηφίο.
Η επιλογή πρέπει να είναι τέτοια ώστε να μας Μπορούμε να εμφανίσουμε και δεύτερο μήνυμα με
την ίδια εντολή WRITE χωρίζοντάς τα με κόμμα:
διευκολύνει να καταλάβουμε τη σημασία του σε
WRITE (*,*) 'HELLO ', 'WORLD'
σχέση με το πρόβλημα που προσπαθούμε να
επιλύσουμε.
Θα εμφανιστεί:
Πχ. Το πρώτο μας πρόγραμμα το ονομάσαμε FIRST. HELLO WORLD
Θα ήταν παράδοξο να δίναμε ένα όνομα της μορφής:
PROGRAM X2WT6 Κάθε εντολή WRITE εμφανίζει μία γραμμή στην οθόνη
11 12
Η εντολή WRITE Παράδειγμα
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ
Παράδειγμα
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΔΟΜΗ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ
PROGRAM ΜΥNAME
C Το πρόγραμμα αυτό εμφανίζει στην οθόνη
C τα στοιχεία μου.
WRITE (*,*) '+-------------------+'
WRITE (*,*) '| ΑΠΟΣΤΟΛΟΣ |'
WRITE (*,*) '| ΑΠΟΣΤΟΛΟΠΟΥΛΟΣ |'
WRITE (*,*) '| ΑΜ: 932 |'
WRITE (*,*) '+-------------------+'
END
15
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΠΡΑΞΕΙΣ
Τύποι δεδομένων
1 2
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΠΡΑΞΕΙΣ
3 4
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΠΡΑΞΕΙΣ
Η διαίρεση δύο ακεραίων αριθμών δίνει ως Για να υπολογιστούν πιο σύνθετες αριθμητικές
αποτέλεσμα επίσης ένα ακέραιο αριθμό. παραστάσεις όπως πχ.
c) (4/(7-4)*2+1)**(2/3*4+1)
11 12
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΠΡΑΞΕΙΣ
Πραγματικοί αριθμοί: Επιστημονική
Παράδειγμα:
Προσοχή: Ως υποδιαστολή χρησιμοποιούμε 3.276Ε1 Ο αριθμός 32.76 σε απλή ακρίβεια.
τελεία και όχι κόμμα.
3.276D1 Ο αριθμός 32.76 σε διπλή ακρίβεια.
13 14
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΠΡΑΞΕΙΣ
Συνάρτηση Όρισμα
3. / 2.5D0 Αποτέλεσμα: 1.2D0
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
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΕΤΑΒΛΗΤΕΣ
Ακολουθούν τους κανόνες για τα συμβολικά ονόματα:
προκαθορισμένο κανόνα, για να προσδιορίζεται
• Αποτελούνται από ένα μέχρι έξι χαρακτήρες. ο τύπος κάθε μεταβλητής:
• Επιτρέπονται μόνο αγγλικά γράμματα και αριθμοί. Οι μεταβλητές που το όνομά τους αρχίζει από
• Ο πρώτος χαρακτήρας πρέπει να είναι γράμμα. 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
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΕΤΑΒΛΗΤΕΣ
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
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΕΤΑΒΛΗΤΕΣ
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
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΕΤΑΒΛΗΤΕΣ
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
21 22
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΕΤΑΒΛΗΤΕΣ
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 Λάθος
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
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΕΤΑΒΛΗΤΕΣ
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
• Μέχρι τώρα είδαμε ότι οι εντολές ενός
προγράμματος εκτελούνται από την αρχή έως
το τέλος διαδοχικά η μία μετά την άλλη.
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
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
εντολή
.. Τμήμα 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
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ 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
σύγκριση1 σύγκριση2 σύγκριση1 .AND. σύγκριση2
παραστάσεις με τη χρήση των λογικών τελεστών
.OR. .AND. .NOT. Α Α Α
Α Ψ Ψ
IF ( σύγκριση1 .AND. σύγκριση2 ) ΤΗΕΝ Ψ Α Ψ
IF ( σύγκριση1 .OR. σύγκριση2 ) ΤΗΕΝ Ψ Ψ Ψ
IF ( .NOT. σύγκριση ) ΤΗΕΝ
Πρακτικός κανόνας:
Το αποτέλεσμα μιας σύνθετης λογικής παράστασης Το τελικό αποτέλεσμα είναι αληθές όταν
είναι είτε αληθές είτε ψευδές και εξαρτάται από τις και οι δύο
επιμέρους συγκρίσεις. συγκρίσεις είναι αληθείς
21 22
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ IF
σύγκριση1 σύγκριση2 σύγκριση1 .OR. σύγκριση2
σύγκριση .NOT. σύγκριση
Α Α Α Α Ψ
Α Ψ A Ψ Α
Ψ Α A
Ψ Ψ Ψ
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ 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
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ 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)
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ 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
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ 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
Όμως και στις δύο πρώτες περιπτώσεις ζητείται
τρεις περιπτώσεις βρίσκομαι ; η απόσταση μεταξύ των δύο σημείων. Μπορώ να
συνδυάσω τους δύο ελέγχους:
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
…Συνέχεια
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΕΝΤΟΛΗ 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
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
Ι - ΕNΤΟΛΗ DO
PROGRAM HELLO
ΥΠΟΛΟΓΙΣΤΕΣ
WRITE (*,*) 'HELLO' WRITE (*,*) 'HELLO' και END DO
WRITE (*,*) 'HELLO' END DO 10 φορές.
WRITE (*,*) 'HELLO'
WRITE (*,*) 'HELLO' END
WRITE (*,*) 'HELLO'
END
Ι - ΕNΤΟΛΗ DO
DO K=1,10
Σε κάθε επανάληψη η
WRITE (*,*) 'HELLO' μεταβλητή έχει
διαφορετική τιμή. Κατασκευάστε
Κατασκευάστε πρόγραμμα
πρόγραμμα το το οποίο
οποίο θα
θα εμφανίζει
εμφανίζει
END DO
στην
στην οθόνη
οθόνη την
την 22 και
η
η και 33 δύναμη
η
η δύναμη των
των ακεραίων
ακεραίων
Στην εντολή DO υπάρχει μια ακέραια μεταβλητή (Κ), μια αρχική από
από 11 έως
•
τιμή (1) και μια τελική τιμή (10).
έως 100.
100.
ΥΠΟΛΟΓΙΣΤΕΣ
ΥΠΟΛΟΓΙΣΤΕΣ
• Μόλις το πρόγραμμα φτάσει στην εντολή DO, από την αρχική και
τελική τιμή υπολογίζεται πόσες επαναλήψεις θα γίνουν (10
επαναλήψεις).
Ι - Ε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
7 8
Συντακτικό της εντολής DO (2/2) Παράδειγμα #2
Ορισμένες παρατηρήσεις για την εντολή DO:
Ι - ΕNΤΟΛΗ DO
Ι - ΕNΤΟΛΗ DO
Πόσες
Πόσες επαναλήψεις
επαναλήψεις θα
θα γίνουν
γίνουν από
από τις
τις παρακάτω
παρακάτω
Η μεταβλητή πρέπει να είναι ακέραια. εντολές
•
εντολές DO ; Ποια είναι η τιμή της μεταβλητής σε
DO ; Ποια είναι η τιμή της μεταβλητής σε
κάθε
κάθε επανάληψη
επανάληψη ;;
• Το βήμα μπορεί να παραληφθεί, οπότε θεωρείται 1.
ΥΠΟΛΟΓΙΣΤΕΣ
• Η μεταβλητή αυξάνεται αυτόματα από την εντολή DO με
το βήμα σε κάθε επανάληψη. Δεν επιτρέπεται η αλλαγή
της μεταβλητής από εμάς (πχ. να γράψουμε Κ=Κ+1).
DO Μ=0,-5,-3 2 επαναλήψεις Μ=0,-3
• Ανάλογα με την αρχική τιμή, τελική τιμή και βήμα μπορεί
να μην γίνουν καθόλου επαναλήψεις.
Παράδειγμα #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
Ι - Ε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)
Ι - Ε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)
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
Ι - Ε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
Ι - ΕNΤΟΛΗ DO
A = 1 Πρώτος όρος
Κατασκευάστε
Κατασκευάστε πρόγραμμα
πρόγραμμα που
που θα
θα υπολογίζει
υπολογίζει το
το DO K=2,N
Ν-οστό
Ν-οστό όρο
όρο της
της ακολουθίας:
ακολουθίας: A = 2+1./Α Επόμενος όρος
WRITE (*,*) A
END DO
με
με πρώτο
πρώτο όρο
όρο αα11=1
=1
ΥΠΟΛΟΓΙΣΤΕΣ
ΥΠΟΛΟΓΙΣΤΕΣ
Ι - ΕNΤΟΛΗ DO
β1, β2, β3, …, βΝ
Ένας
Ένας άνθρωπος
άνθρωπος ξεκινά
ξεκινά να
να περπατά
περπατά μεμε βήμα
βήμα BB
εκατοστά.
εκατοστά. Μετά
Μετά από
από κάθε
κάθε βήμα
βήμα αυξάνει
αυξάνει τοτο βήμα
βήμα Τα βήματα μπορούν να εκφραστούν από την
του κατά Α% σε σχέση με το προηγούμενο
του κατά Α% σε σχέση με το προηγούμενο αναδρομική σχέση:
βήμα.
βήμα. Εάν
Εάν κάνει N βήματα
κάνει N βήματα πόση
πόση απόσταση
απόσταση θα θα
ΥΠΟΛΟΓΙΣΤΕΣ
ΥΠΟΛΟΓΙΣΤΕΣ
έχει
έχει διανύσει
διανύσει συνολικά
συνολικά ;; με γνωστό πρώτο όρο β1
Ι - Ε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
ΥΠΟΛΟΓΙΣΤΕΣ
ΥΠΟΛΟΓΙΣΤΕΣ
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
Ι - Ε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
Ι - ΕNΤΟΛΗ DO
h
Ποιο είναι το μήκος κάθε υποδιαστήματος ;
α b
Το 1o υποδιάστημα ξεκινάει στο: α
Το 2o υποδιάστημα ξεκινάει στο: α+h
ΥΠΟΛΟΓΙΣΤΕΣ
ΥΠΟΛΟΓΙΣΤΕΣ
Το 3o υποδιάστημα ξεκινάει στο: α+2h
Το 4o υποδιάστημα ξεκινάει στο: α+3h
…
Το k υποδιάστημα ξεκινάει στο: α+(k-1)h
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
Ι - Ε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
Ι - ΕNΤΟΛΗ DO
Κ Πράξεις (Κ+2)
1 1+2
2 2+2 Παρατηρείστε ότι ο κάθε όρος του αθροίσματος
3 3+2 μπορεί να γραφεί σε σχέση με τον προηγούμενο.
4 4+2 Παράδειγμα:
ΥΠΟΛΟΓΙΣΤΕΣ
ΥΠΟΛΟΓΙΣΤΕΣ
5 5+2
… …
Ν Ν+2
Ι - Ε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
Ι - Ε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
Γενικά:
ΥΠΟΛΟΓΙΣΤΕΣ
Αναδρομική σχέση με ένα προηγούμενο όρο.
όρος 4ης προηγούμενος όρος 6ης προηγούμενος Προσοχή: δεν ζητούνται οι επιμέρους όροι αλλά το άθροισμά τους.
τάξης όρος τάξης όρος
65 66
Ι - Ε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
Γιατί χρειαζόμαστε πίνακες;
7 8
Παράδειγμα ανάθεσης τιμών #1 Παράδειγμα ανάθεσης τιμών #2
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ
WRITE(*,*) ‘Ο ΜΙΚΡΟΤΕΡΟΣ ΟΡΟΣ ΕΙΝΑΙ:’, ΧΜΙΝ C.... ΕΛΕΓΧΟΥΜΕ ΝΑ ΜΗΝ ΞΕΠΕΡΑΣΤΟΥΝ ΤΑ ΟΡΙΑ ΤΟΥ ΠΙΝΑΚΑ
IF (N .GT. NMAX .OR. N .LE. 0) THEN
END WRITE(*,*) ‘ΛΑΘΟΣ: ΜΕΧΡΙ’, ΝΜΑΧ, ‘ΤΙΜΕΣ’
STOP
21 END IF ΣΥΝΕΧΙΖΕΤΑΙ...22
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
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)
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ
Παράδειγμα #7 Παράδειγμα #8
Εσωτερικό γινόμενο δύο διανυσμάτων
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ
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
Παράδειγμα #9 Παράδειγμα #9
Αναδρομική ακολουθία
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ
X n +1 = X n (1 − X n ) DO I = 2, 100
X(I) = X(I-1) * (1 – X(I-1))
END DO
35 END 36
Παράδειγμα #10 Παράδειγμα #10
Στατιστική ανάλυση (1/2)
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ
END 49
. κοκ 50
x 2 =| R | cos θ 2 y 2 =| R | sin θ 2
53 54
ΣΥΝΕΧΙΖΕΤΑΙ...
61 62
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
Γιατί πολυδιάστατους πίνακες;
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΠΟΛΥΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ
PROGRAM POINTS
IMPLICIT NONE
DOUBLE PRECISION P(2,100)
εντολές…
END
1 2
⎜⎜ ⎟⎟
= 20
Α(2,2)
Α(2,1)
= 40
5 6
⎜⎜ ⎟⎟
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
⎝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
Παράδειγμα συνάρτησης:
Δήλωση συνάρτησης 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
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΣΥΝΑΡΤΗΣΕΙΣ
• Καλείται όπως και οι «εσωτερικές» συναρτήσεις
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
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΣΥΝΑΡΤΗΣΕΙΣ
αλλάζει και στο κυρίως πρόγραμμα. Προσοχή να μην γίνει!!! Μετά την επιστροφή χάνονται, δεν επηρεάζουν το κυρίως πρόγραμμα
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
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΣΥΝΑΡΤΗΣΕΙΣ
της παρακάτω συνάρτησης στο 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
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)
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΣΥΝΑΡΤΗΣΕΙΣ
βρίσκονται μέσα σε οποιαδήποτε απο τις τομές των Μ κύκλων
(δηλαδή πόσα είναι μέσα στις σκούρες γαλάζιες περιοχές)
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
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), ‘ΕΙΝΑΙ’, Μ
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΣΥΝΑΡΤΗΣΕΙΣ
Γράψτε συνάρτηση που να δέχεται έναν μονοδιάστατο πίνακα και τον
αριθμό των ενεργών στοιχείων του και να επιστρέφει το μέτρο του • Η σωστή ερώτηση είναι: όταν εισάγουμε έναν πίνακα σε
μια συνάρτηση, εισάγουμε όλο τον πίνακα (δηλαδή όλα
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)
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
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΣΥΝΑΡΤΗΣΕΙΣ
Γράψτε συνάρτηση που να δέχεται έναν δισδιάστατο έστω ένας πίνακας Χ(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), και θέλουμε να
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΣΥΝΑΡΤΗΣΕΙΣ
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΥΠΟΡΟΥΤΙΝΕΣ
• Μια ομάδα εντολών, σχεδιασμένη να εκτελεί έναν ή
περισσότερους υπολογισμούς
– Ιδανικές για περιπτώσεις που ο υπολογισμός επαναλαμβάνεται
ΥΠΟΡΟΥΤΙΝΕΣ πολλές φορές μέσα στο πρόγραμμα
– Συντελούν σημαντικά στην καθαρότητα ενός προγράμματος
– Συντελούν σημαντικά στην μεταβατικότητα ενός
προγράμματος
1 2
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΥΠΟΡΟΥΤΙΝΕΣ
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 μεταβλητές εισόδου τις μεταβλητές εισόδου
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΥΠΟΡΟΥΤΙΝΕΣ
Γράψτε υπορουτίνα που να δέχεται μονοδιάστατο πίνακα και
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
RETURN
END
9 10
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΥΠΟΡΟΥΤΙΝΕΣ
και τροποποιεί τον τρίτο ώστε να είναι το γινόμενο των δύο πρώτων αριθμητική ολοκλήρωση γραμμικής διαφορικής εξίσωσης)
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
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΥΠΟΡΟΥΤΙΝΕΣ
DOUBLE PRECISION FUNCTION VELOCITY ( T )
• Έστω N σώματα ξεκινάνε από την θέση x=0 με αρχική
IMPLICIT NONE
INTEGER T ταχύτητα (σε m/sec) που δίνεται από την σχέση (i=1, N)
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΥΠΟΡΟΥΤΙΝΕΣ
• Συνάρτηση για την δημιουργία αρχικών ταχυτήτων • Υπορουτίνα για εκτέλεση ενός βήματος
17 18
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΥΠΟΡΟΥΤΙΝΕΣ
• Συνολικό πρόγραμμα
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
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΥΠΟΡΟΥΤΙΝΕΣ
• Υπορουτίνα για εφαρμογή κανόνα
• Συνάρτηση για μέσο όρο 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
25 26
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΥΠΟΡΟΥΤΙΝΕΣ
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
ΥΠΟΛΟΓΙΣΤΕΣ Ι - ΥΠΟΡΟΥΤΙΝΕΣ
• Υπορουτίνα για υπολογισμό επιτάχυνσης • Υπορουτίνα για υπολογισμό νέας ταχύτητας
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
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
END 35