Fortran και Αντικειμενοστραφής προγραμματισμός Διδάσκοντες: www.corelab.ntua.gr/courses/fortran_naval/naval Άρης Παγουρτζής (pagour@cs.ntua.gr) (Επίκουρος Καθηγητής ΣΗΜΜΥ ) Δώρα Σούλιου (dsouliou@mail.ntua.gr) (ΕΕΔΙΠ ΣΗΜΜΥ) Διαφάνειες παρουσιάσεων Αρχικές Διαφάνειες σε Pascal: Σ.Ζάχος, Ν.Παπασπύρου Προσαρμογή σε Fortran: Α.Παγουρτζής, Δ.Σούλιου Εισαγωγή στην πληροφορική Εισαγωγή στον προγραμματισμό με τη γλώσσα Fortran Μεθοδολογία αλγοριθμικής επίλυσης προβλημάτων 14/ 4/03/12 Σχολή Ναυπηγών Μηχανολόγων Μηχανικών (εαρινό 2012) 1
Οργανωτικά Δευτέρα 12:45 14:30 κτίριο δ αίθουσα 209 Τετάρτη 15:45 17:30 κτίριο δ αίθουσα 209 Ώρες γραφείου Τετάρτη 13:00 15:00 Γραφείο 1.1.30 παλαιό κτίριο ΣΗΜΜΥ Τηλέφωνο: 210 7721644 Βαθμολογία (πρωτοετείς φοιτητές) Τελική Εξέταση (9 μονάδες) 6-7 σειρές ασκήσεων (1 μονάδα) Θα υπάρχει προφορική εξέταση Πρόοδος (αν γίνει 1 μονάδα) 2
FORTRAN (FORmulae TRANslator μεταφραστής τύπων) (i) Από τις πρώτες γλώσσες προγραμματισμού υψηλού επιπέδου Δημιουργήθηκε τη δεκαετία του '50 (1956) για τον IBM704 και στη συνέχεια προσαρμόστηκε σε διάφορα υπολογιστικά συστήματα 1958 Fortran II με πολλά υποπρογράμματα Ακολούθησε η Fortran IV η οποία δόθηκε στην επιστημονική κοινότητα Ανάγκη τυποποίησης (πολλές υλοποιήσεις σε διάφορες μηχανές, συμβατότητα μεταξύ των μηχανών) Fortran66 (η πρώτη τυποποιημένη Fortran από το αμερικάνικο ινστιτούτο ANSI) Fortran77 (η πρώτη τυποποιημένη Fortran από τον ISO) International Organization for Standardization 3
FORTRAN (FORmulae TRANslator μεταφραστής τύπων) (ii) Fortran77 συμπλήρωνε τις ελλείψεις της Fortran66 και υιοθετούσε χαρακτηριστικά που είχαν επιτυχώς υλοποιηθεί σε άλλες γλώσσες (Algol, Modula, Pascal) Fortran90 δόθηκε από τον ISO το 1992 με ριζικές αλλαγές Fortran95 δόθηκε από τον ISO το 1997 με δυνατότητα παράλληλης επεξεργασίας Fortran2003 με χαρακτηριστικά αντικειμενοστραφούς προγραμματισμού Nεότερες εκδόσεις Fortran2008,... 2 βασικές διάλεκτοι της γλώσσας Παλαιά (πριν την Fortran90) εκατομμύρια προγράμματα σε αρχεία με επέκταση.for ή.f Νέα (Fortran 90,95,2003) προγράμματασεαρχείαμεεπέκταση.f90,.f95,.f03 4
FORTRAN (FORmulae TRANslator μεταφραστής τύπων) (iii) Πλεονεκτήματα διαφορετικών γλωσσών σε διάφορους τομείς επικοινωνία με τη μηχανή (γλώσσες χαμηλού επιπέδου) δημιουργία γραφικών χειρισμό αρχείων ευκολία χρήσης επικοινωνία με το διαδίκτυο Fortran ταχύτερη σε πολύπλοκους επιστημονικούς και τεχνικούς υπολογισμούς, προβλήματα με πολυδιάστατους πίνακες, πολλές επαναλήψεις, προβλήματα βελτιστοποίησης 5
Ασκήσεις PROGRAM Hello1 WRITE(*,*) 'hello world' (i) PROGRAM Hello2 WRITE(*,*) 'hello ', 'world' PROGRAM Hello3 WRITE(*,*) 'hello ' WRITE(*,*) 'world' 6
Ασκήσεις (C) (i) #include <stdio.h> void main () printf("hello world\n"); #include <stdio.h> void main () printf("hello " "world\n"); #include <stdio.h> void main () printf("hello "); printf("world\n"); 7
Ασκήσεις (ii) PROGRAM Hello4 WRITE(*, "(A)", advance="no")'hello' WRITE(*,*) 'world' 8
Ασκήσεις (C) (ii) #include <stdio.h> void main () printf("hello world"); printf("\n"); 9
Ασκήσεις (iii) PROGRAM Hello5 CALL hello CALL hello CALL hello CALL hello SUBROUTINE hello WRITE(*,*) ' hello world' 10
Ασκήσεις (C) (iii) #include <stdio.h> void hello() printf("hello world\n"); void main() hello(); hello(); hello(); hello(); 11
Ασκήσεις (iv) PROGRAM Hello6 INTEGER:: i DO i=1,20 CALL hello DO SUBROUTINE hello WRITE(*,*) 'hello world' 12
Ασκήσεις (C) (iv) #include <stdio.h> void hello() printf("hello world\n"); void main() int i; for (i=0; i<20; i++) hello(); 13
Ασκήσεις (v) PROGRAM Hello7 INTEGER:: i=1 INTEGER, PARAMETER:: n=21 DO WHILE (i<n) CALL hello(i) i=i+1 DO SUBROUTINE hello(j) INTEGER:: j WRITE(*,*) j, ' hello world' 14
Ασκήσεις (C) (v) #include <stdio.h> const int n=20; int i; void num_hello() printf("%d hello world\n", i); void main() for (i=0; i<n; i++) num_hello(); 15
Ασκήσεις (vi) PROGRAM Hello8 INTEGER:: i,n WRITE(*,*) 'Give number of greetings ', 'then press <enter>:' READ(*,*) n DO i=1,n CALL hello(i) DO SUBROUTINE hello(j) INTEGER:: j WRITE(*,*)j,'hello world' 16
Ασκήσεις (C) (vi) #include <stdio.h> void hello() printf("hello world\n") void main() int i,n; printf("give number of greetings" "then press <enter>:"); scanf("%d\n", n); for (i=0; i<n; i++) hello(); 17
Ασκήσεις (vii) PROGRAM Hello9 INTEGER:: i,n WRITE(*,*) 'Give number of greetings ','then press enter READ(*,*) n DO i=1,n,3 CALL hello(i) DO SUBROUTINE hello(j) INTEGER:: j WRITE(*,*)j,'hello world' 18
Ασκήσεις (C) (vii) #include <stdio.h> void hello() printf("hello world\n") void main() int i,n; printf("give number of greetings" "then press <enter>:"); scanf("%d\n", &n); for (i=0; i<n; i++) hello(); 19
Ασκήσεις (viii) PROGRAM Hello10 INTEGER:: i,n WRITE(*,*) 'Give number of greetings ', 'then press <enter>:' READ(*,*) n IF (n<0) THEN WRITE(*,*) 'O n είναι αρνητικός' ELSE DO i = 1,n,1 CALL hello DO IF SUBROUTINE hello WRITE(*,*)'hello world' 20
Ασκήσεις (C) (viii) #include <stdio.h> void hello() printf("hello world\n"); void main() int i,n; printf("give number of greetings" "then press <enter>"); scanf("%d\n",&n); if (n<0) printf("#is negative\n"); else for (i=0;i<n;i++) hello(); 21