Τμήμα Φυσικής Πανεπιστημίου Κύπρου Εαρινό Εξάμηνο 2015/2016 Διδάσκoντες: Χαράλαμπος Παναγόπουλος, Μάριος Κώστα Βαθμός: Όνομα: Α.Δ.Τ.:... ΕΝΔΙΑΜΕΣΗ ΕΞΕΤΑΣΗ 24/03/2016 Άσκηση 1 (1 μονάδα) Ποιο είναι το αποτέλεσμα στην κάθε μια από τις πιο κάτω πράξεις σε ένα πρόγραμμα στην FORTRAN; a) 2**1/2 b) 2**(1/2) Άσκηση 2 (1 μονάδα) a) Ποιος είναι ο ακέραιος αριθμός (type: integer*2) που καταχωρείται στον υπολογιστή ως: 0 1010 0000 0010 000; b) Ποιος είναι ο δεκαδικός αριθμός (type: real*4) που καταχωρείται στον υπολογιστή ως: 1 0000 0010 0000 0100 0100 0000 0000 000; 1
Άσκηση 3 (1 μονάδα) Ποιες είναι οι σημαντικότερες διαφορές μεταξύ ενός υποπρογράµµατος τύπου FUNCTION και ενός υποπρογράµµατος τύπου SUBROUTINE στη FORTRAN; Δίνεται το ακόλουθο τμήμα κώδικα: Άσκηση 4 (2 μονάδες) PARAMETER(pi=3.14159) CHARACTER*12 date, text INTEGER year REAL*8 number DATA date, text /"March 24", "Fortran 90"/ DATA number, year /902.d-5, 2016/ Τι θα τυπώσει το πιο πάνω πρόγραμμα για τις ακόλουθες εντολές; a) WRITE(6,10)date 10 FORMAT(1X,A5) b) WRITE(6,20)number,pi 20 FORMAT(2(1X,F10.5)) c) WRITE(6,30)year 30 FORMAT(1X,I7) d) WRITE(6,40)pi,text 40 FORMAT(1X,F5.2,1X,A3) 2
Άσκηση 5 (1 μονάδα) Δίνεται το πιο κάτω πρόγραμμα. Να βρείτε ποιες θα είναι οι τιμές SUM, NUM και i, οι οποίες θα τυπωθούν στην οθόνη. PROGRAM SUMATION INTEGER SUM, NUM, i SUM = 0 NUM = 10 DO i=1,10 IF(NUM.eq.1) GOTO 11 SUM= SUM + 1 NUM = NUM - 3 DO 11 WRITE(6,*) SUM, NUM, i Άσκηση 6 (1 μονάδα) a) Προσθέστε στις παρακάτω γραµµές κώδικα την συνάρτηση ΑdotB(X,Y) και την υπορουτίνα AcrossB(X,Y,C), έτσι ώστε να επιστρέφoυν µια τιµή για το εσωτερικό γινόμενο Α Β και το εξωτερικό γινόμενο Α Β αντίστοιχα. Έστω ότι τα δυο διανύσματα είναι Α = (1,1,0) και Β = (0,1,1). b) Γιατί δεν χρησιμοποιήσαμε FUNCTION για το εξωτερικό γινόμενο; PROGRAM MULTIPLICATION INTEGER A(3),B(3),VECTOR(3),AdotB,SCALAR DATA A,B/1,1,0,0,1,1/ SCALAR=AdotB(A,B) CALL AcrossB(A,B,VECTOR) PRINT*,SCALAR PRINT*,VECTOR INTEGER FUNCTION ΑdotB(X,Y)............... RETURN 3
SUBROUTINE AcrossB(X,Y,C)............... RETURN Άσκηση 7 (3 μονάδες) Βρείτε όλα τα συντακτικά λάθη στο πρόγραμμα που ακολουθεί και εξηγήστε γιατί το καθένα είναι συντακτικό λάθος. PROGRAM FINDIT IMPLICIT NONE INTEGER a, b PARAMETER (a = 10,0, b = 4) WRITE(*,*) 'Type in a number' READ*, x, w REAL*8 x, y, z, w WRITE(*,*) Type in another number READ(5,*) y z = (a+b) * F(x,y) w = z WRITE(6,*) 'The result is', w STOP REAL*8 FUNCTION F(x,y) REAL*8 x,y F=x^y 4
Άσκηση 8 (2 μονάδες) a) Ποια είναι τα λάθη στο ακόλουθο κομμάτι του κώδικα; b) Διορθώσετε τον κώδικα για να λειτουργήσει. c) Πώς θα αποθηκεύσετε τις διορθώσεις σας. d) Έστω ότι ο κώδικας είναι αποθηκευμένος με το όνομα askisi8.f. Πώς θα το κάνετε compile και πώς θα το τρέξετε; e) Τι θα τυπώσει για tmax = 2; PARAMETER(g = 9.80665) REAL g INTEGER t, tmax, y PROGRAM FREEFALL PRINT*, ' ENTER MAXIMUM FREEFALL TIME (IN SEC)' READ *, tmax WRITE(*,*), 'TIME (SECS) DISTANCE (METERS) DO 10 t = 1, tmax y = -0.5 g t **2 PRINT *, t, y DΟ 5
Άσκηση 9 (3 μονάδες) Η ακολουθία των αριθμών Fibonacci αρχίζει με τους ακέραιους αριθμούς: 1, 1, 2, 3, 5, 8, 13, 21, όπου κάθε αριθμός μετά από τον δεύτερο είναι το άθροισμα των δύο προηγούμενων αριθμών. Γράψτε ένα πρόγραμμα που διαβάζει ένα θετικό ακέραιο n και στη συνέχεια εμφανίζει τους πρώτους n όρους της ακολουθίας Fibonacci. 6
Άσκηση 10 (10 μονάδες) Η συμπερίληψη των δυνάμεων τριβής στο πρόβλημα της ελεύθερης πτώσης έχει ως αποτέλεσμα να αλλάξουν οι εξισώσεις κίνησης του σώματος. Συνήθως αυτές οι δυνάμεις αυξάνονται όσο αυξάνεται η ταχύτητα του σώματος. Για μικρές ταχύτητες η δύναμη αντίστασης του αέρα, F a, είναι περίπου ανάλογη προς την ταχύτητα του σώματος: F a = kv. Την χρονική στιγμή της εκκίνησης του σώματος, v = 0, η αντίσταση είναι μηδέν και η αρχική επιτάχυνση είναι g. Θεωρώντας ως θετική κατεύθυνση την κατεύθυνση προς τα κάτω, βρίσκουμε ότι η ολική κατακόρυφη συνιστώσα της δύναμης είναι: mg kv. Ο δεύτερος νόμος του Νεύτωνα δίνει: mg kυ = ma Καθώς αυξάνεται η ταχύτητα του σώματος, αυξάνεται και η αντίσταση ώσπου να επέλθει τελικά εξίσωση των μέτρων της αντίστασης και του βάρους. Τότε mg kυ = 0, η επιτάχυνση γίνεται μηδέν και δεν υπάρχει περαιτέρω αύξηση της ταχύτητας. Η τελική ταχύτητα v l, λέγεται ορική (ή οριακή) ταχύτητα και δίνεται από τη σχέση: mg kv l = 0 v l = mg k Για να βρούμε τη σχέση μεταξύ ταχύτητας και χρόνου όταν η ταχύτητα είναι μικρότερη της ορικής, επανερχόμαστε στον δεύτερο νόμο του Νεύτωνα, τον οποίο γράφουμε ως εξής: m dv = mg kv dt a) Γράψτε ένα πρόγραμμα στην FORTRAN το οποίο χρησιμοποιεί την Μέθοδο Euler για την επίλυση της πιο πάνω διαφορικής εξίσωσης (για ρεαλιστικές τιμές των παραμέτρων m, g, k, π.χ. m = 3 kg, g = 9.81 m/s 2, k = 0.3 kg/s) στο διάστημα t [0,100] s, έτσι ώστε να αποθηκεύετε σε ένα file τις αντίστοιχες τιμές της επιτάχυνσης, a, της ταχύτητας, v, της θέσης, y και του χρόνου, t. b) Γράψτε τις εντολές που πρέπει να δώσετε στην gnuplot έτσι ώστε να δείξετε πώς μεταβάλλονται η επιτάχυνση, η ταχύτητα και η θέση του σώματος συναρτήσει του χρόνου. Στα αντίστοιχα γραφήματα θα πρέπει να παρασταθούν οι αντίστοιχες σχέσεις αν η αντίσταση του αέρα ήταν αμελητέα (a = g, v = g t, y = 1 2 g t2 ). 7
8
... 9