Άσκηση 1 Α. Υπολογίστε χωρίς να εκτελέσετε κώδικα FORTRAN τα παρακάτω: Ποιά είναι η τελική τιμή του J στα παρακάτω κομμάτια κώδικα FORTRAN: INTEGER J J = 5 J = J + 1 J = J + 1 INTEGER X, Y, J X = 2 Y = 1 J = Y/X Απάντηση:[ 7 ] Απάντηση:[ 0 ] Ποιά είναι η τελική τιμή του Z στα παρακάτω κομμάτια κώδικα FORTRAN: REAL X, Y, Z X = 2. Y = 3. Z = 4/X*Y REAL X, Y, Z X = 2. Y = 1. X = X-2*Y Z = SQRT(X) Απάντηση:[ 6. ] Απάντηση:[ 0. ] Β. Γράψτε και εκτελέστε τον αντίστοιχο κώδικα FORTRAN για να ελέγξετε τις απαντήσεις σας. program exercise1 integer j j = 5 j = j + 1 j = j + 1 print *, j
program exercise1 integer x, y, j x = 2 y = 1 j = y/x print *, j program exercise1 real x, y, z x = 2. y = 3. z = 4/x*y print *, z program exercise1 real x, y, z x = 2. y = 1. x = x-2*y z = SQRT(x) print *, z Άσκηση 2 Α. Γράψτε τις αντίστοιχες εντολές FORTRAN για τον υπολογισμό της τιμής του y σύμφωνα με τη σχέσεις: 2 5x x y= x 1 2 x 1 y= 1+ 2 x 1 3 4 4 1 y= 1+x x+1 y=x +5x+ +2 x 1
y = (5*x**2 - sqrt(x))/(x - 1) y = x**2/2-1 + sqrt(1.)/(x - 1) y = sqrt(1 + x**3)*4/(x + 1) y = x**(-4) + 5*x + 1/(x -1) + 2 Β. Να γραφεί κώδικας FORTRAN που θα δέχεται από το χρήστη μια πραγματική τιμή x. Στη συνέχεια θα τυπώνει τις τιμές του y για κάθε μια από τις παραπάνω σχέσεις. program exercise2 real x, y print *, 'Give a real value' y = (5*x**2 - sqrt(x))/(x - 1) y = x**2/2-1 + sqrt(1.)/(x - 1) y = sqrt(1 + x**3)*4/(x + 1) y = x**(-4) + 5*x + 1/(x -1) + 2 Άσκηση 3 Να γραφεί κώδικας FORTRAN που θα δέχεται από το χρήστη μια πραγματική τιμή x. Στη συνέχεια θα τυπώνει την τιμή του y σύμφωνα με τις σχέσεις: 5 y = για x 1 x+2 y = x 1 για x < 1
ΣΗΜΕΙΩΣΗ: Είναι απαραίτητη η χρήση δομής IF. Να γράψετε και τις τρείς παραλλαγές του παραπάνω κώδικα που θα χρησιμοποιούν αντίστοιχα τη ομή 1, τη ομή 2 και τη ομή 3. ΟΜΗ 1 program exercise3 real x,y print *, 'Give a real value' if(x>=1.) then y=5./(x+2.) if if(x<1.) then y=sqrt(abs(x)+1.) if ΟΜΗ 2 program exercise3 real x,y print *, 'Give a real value' if(x>=1.) then y=5./(x+2.) else y=sqrt(abs(x)+1.) if
ΟΜΗ 3 program exercise3 real x,y print *, 'Give a real value' if(x>=1.) y=5./(x+2.) if(x<1.) y=sqrt(abs(x)+1.) Άσκηση 4 Να γραφεί κώδικας FORTRAN που θα δέχεται από το χρήστη μια πραγματική τιμή x. Στη συνέχεια θα τυπώνει την τιμή της συνάρτησης f(x): 5 x 3 f(x) = + x-2 5 Ο κώδικας θα πρέπει να τυπώνει μήνυμα σφάλματος, αν ο χρήστης δώσει τιμή του x στην οποία δεν ορίζεται η παραπάνω συνάρτηση. program exercise4 real x,y print *, 'Give a real value' if((x<0.).or.(x==2)) then print *, 'Error' else y=5*sqrt(x)/(x-2)+3./5 if
Άσκηση 5 Γράψτε ένα πρόγραμμα σε FORTRAN που να διαβάζει από τον χρήστη την τρέχουσα και την επιθυμητή θερμοκρασία (temp, desiredtemp - σε βαθμούς κελσίου) και να επιστρέφει την κατάσταση του θερμοστάτη: Heat αν η θερμοκρασία είναι χαμηλότερη από την επιθυμητή μείον 3 βαθμούς, Cool αν η θερμοκρασία είναι υψηλότερη από την επιθυμητή συν 3 βαθμούς, και off αλλιώς. program main real tolerance, temp, desiredtemp real heatthreshold, coolthreshold character*4 thermostatstate tolerance = 3. read *, temp, desiredtemp heatthreshold = desiredtemp - tolerance coolthreshold = desiredtemp + tolerance thermostatstate = 'Off' if(temp<heatthreshold) thermostatstate = 'Heat' if(temp>coolthreshold) thermostatstate = 'Cool' print *, 'Thermostat state:', thermostatstate Άσκηση 6 Γράψτε ένα πρόγραμμα σε FORTRAN που να διαβάζει έναν αριθμό από τον χρήστη, να ελέγχει εάν είναι αρνητικός και να υπολογίζει την τετραγωνική του ρίζα. Σε περίπτωση αρνητικού αριθμού να χρησιμοποιεί την απόλυτη τιμή του αριθμού που δόθηκε. program main real x, y if(x<0) x = abs(x) y = sqrt(x)
Άσκηση 7 Να γραφτεί πρόγραμμα σε FORTRAN που να τυπώνει τους n πρώτους φυσικούς αριθμούς για τους οποίους το άθροισμα των τετραγώνων τους δεν ξεπερνά το 200. Να γράψετε δυο εκδοχές: α) με συνδυασμένη χρήση do με μετρητή και if program main integer i, s s=0 do i=1,1000 s=s+i**2 if(s>200) exit print *, i do β) με χρήση αέναης επανάληψης (do χωρίς μετρητή). program main integer i, s i=0 s=0 do i=i+1 s=s+i**2 if(s>200) exit print *, i do Άσκηση 8 Να υπολογιστεί το παραγοντικό ενός θετικού ακέραιου αριθμού. Το παραγοντικό ενός θετικού ακέραιου αριθμού Ν 0 συμβολίζεται Ν! και ορίζεται ως το γινόμενο των αριθμών 1, 2, 3,..., (Ν-1), Ν. Αν Ν=0 τότε Ν! = 1. Παράδειγμα: 5! = 1 2 3 4 5 = 120 Ελέγξτε τα αποτελέσματα του κώδικά σας σύμφωνα με τον παρακάτω πίνακα (Πηγή: http://en.wikipedia.org/wiki/factorial)
Να γράψετε δυο εκδοχές: α) Με χρήση integer μεταβλητών program factorial_of_n integer N,i integer factorial Ν Ν! 0 1 1 1 2 2 3 6 4 24 5 120 6 720 7 5 040 8 40 320 9 362 880 10 3 628 800 15 1 307 674 368 000 20 2 432 902 008 176 640 000 print *, 'This program computes the factorial of & & a positive integer number N' print *, 'Give the N' read *, N factorial=1 do i = 1, N factorial = factorial*i do print *, 'The factorial of N is' print *, factorial β) Με χρήση real μεταβλητών program factorial_of_n integer N,i real factorial print *, 'This program computes the factorial of & & a positive integer number N' print *, 'Give the N' read *, N
factorial=1. do i = 1, N factorial = factorial*i do print *, 'The factorial of N is' print *, factorial ίνεται η σειρά: 1 1 1 1 = + + +... i i=1 2 2 4 8 Άσκηση 9 Προεπιλέγοντας τον αριθμό των όρων υπολογίστε την τιμή της σειράς. Ελέγξτε τα αποτελέσματά σας σύμφωνα με τον παρακάτω πίνακα: 1 Ν i i=1 2 1 0.5 2 0.75 3 0.875 4 0.9375 5 0.96875 10 0.9990234375 Υπάρχει κάποιο άνω όριο στις τιμές της σειράς αυτής; Συγκρίνετε τα αποτελέσματά ως προς τη χρήση single και double precision για την μεταβλητή της τιμής της σειράς. program series integer N,i real s print *, 'Give the number of terms' read *, N s=0. do i = 1, N s = s + 1./2.**i do
print *, 'The result is' print *, s Άσκηση 10 α) Υπολογίστε την τετραγωνική ρίζα ενός θετικού πραγματικού αριθμού x σύμφωνα με την παρακάτω διαδικασία. Βήμα 1: Επιλογή των τιμών των: x, Ν, error Βήμα 2: Επιλογή μιας αρχικής τιμής του y = x/2 Βήμα 3: Για i = 1, 2,..., N Do Βήμα 4: y_old = y Βήμα 5: Υπολόγισε το y = (x / y + y) / 2 Βήμα 6: Αν y y_old < error πήγαινε στο Βήμα 8 Βήμα 7: EndDo Βήμα 8: Τύπωσε το y Βήμα 9: End Η παραπάνω διαδικασία ονομάζεται αλγόριθμος για την εύρεση της τετραγωνικής ρίζας ενός πραγματικού αριθμού. Ο παραπάνω αλγόριθμος τερματίζεται σε δύο περιπτώσεις: αν τα βήματα 4, 5, 6 γίνουν Ν φορές (βλ. Βήμα 3) ή αν δύο διαδοχικές προσεγγίσεις διαφέρουν (κατ' απόλυτη τιμή βλ. Βήμα 6) λιγότερο από την επιθυμητή ακρίβεια error (accuracy) - http://mathworld.wolfram.com/accuracy.html β) Συγκρίνετε τα αποτελέσματά σας με την εσωτερική συνάρτηση (intrinsic function) της FORTRAN sqrt γ) Υπολογίστε την τετραγωνική ρίζα του 2 χρησιμοποιώντας Ν=10 και error=1.e-6. ίνεται 2 1.41421 35623 73095... program square_root real x, error, y, y_old integer N, i print *, 'This program computes the square root of & &a positive real number' print *, 'Give the positive real number' print *, 'Give the number of iterations'
read *, N print *, 'Give the accuracy' read *, error y=x/2 do i=1, N y_old=y y=(x/y+y)/2 if(abs(y-y_old)<error) exit do print *, 'The square root is' print *, y print *, 'sqrt intrinsic function of FORTRAN computes' print *, sqrt(x)