Fortran και Αντικειμενοστραφής προγραμματισμός Διδάσκοντες: www.corelab.ntua.gr/courses/fortran_naval/naval Άρης Παγουρτζής (pagour@cs.ntua.gr) (Επίκουρος Καθηγητής ΣΗΜΜΥ ) Δώρα Σούλιου (dsouliou@mail.ntua.gr) (ΕΕΔΙΠ ΣΗΜΜΥ) Διαφάνειες παρουσιάσεων Αρχικές Διαφάνειες σε Pascal: Ε.Ζάχος, Ν.Παπασπύρου Προσαρμογή σε Fortran: Α.Παγουρτζής, Δ.Σούλιου Εισαγωγή στην πληροφορική Εισαγωγή στον προγραμματισμό με τη γλώσσα Fortran Μεθοδολογία αλγοριθμικής επίλυσης προβλημάτων 25/02 02/13 Σχολή Ναυπηγών Μηχανολόγων Μηχανικών (εαρινό 2012)
Οργανωτικά Δευτέρα 12:45 14:30 κτίριο δ αίθουσα 209 Τετάρτη 15:45 17:30 κτίριο δ αίθουσα 209 Ώρες γραφείου Τετάρτη 13:00 15:00 Γραφείο 1.1.30 παλαιό κτίριο ΣΗΜΜΥ Τηλέφωνο: 210 7721644 Βαθμολογία (πρωτοετείς φοιτητές) Τελική Εξέταση (9 μονάδες) Σειρές ασκήσεων (1 μονάδα) με προφορική εξέταση Πρόοδος (αν γίνει 1 μονάδα)
FORTRAN (FORmulae TRANslator) (i) Από τις πρώτες γλώσσες προγραμματισμού υψηλού επιπέδου Δημιουργήθηκε τη δεκαετία του '50 (1956) για τον IBM704 και στη συνέχεια προσαρμόστηκε σε διάφορα υπολογιστικά συστήματα 1958: Fortran II με πολλά υποπρογράμματα Ακολούθησε η Fortran IV η οποία δόθηκε στην επιστημονική κοινότητα Ανάγκη τυποποίησης (πολλές υλοποιήσεις σε διάφορες μηχανές, συμβατότητα μεταξύ των μηχανών) Fortran66: η πρώτη τυποποιημένη Fortran από το αμερικάνικο ινστιτούτο ANSI Fortran77: η πρώτη τυποποιημένη Fortran από τον ISO
FORTRAN (FORmulae TRANslator) (ii) Fortran77: συμπλήρωνε τις ελλείψεις της Fortran66 και υιοθετούσε χαρακτηριστικά που είχαν επιτυχώς υλοποιηθεί σε άλλες γλώσσες (Algol, Modula, Pascal) Fortran90: δόθηκε από τον ISO το 1992 με ριζικές αλλαγές Fortran95: δόθηκε από τον ISO το 1997 με δυνατότητα παράλληλης επεξεργασίας Fortran2003: με χαρακτηριστικά αντικειμενοστρεφούς προγραμματισμού Αναμένονται νεώτερες εκδόσεις (Fortran2008)... 2 βασικές διάλεκτοι της γλώσσας Παλαιά (πριν την Fortran90) εκατομμύρια προγράμματα σε αρχεία με επέκταση.for ή.f Νέα (Fortran 90,95,2003) προγράμματα σε αρχεία με επέκταση.f90,.f95,.f03
FORTRAN (FORmulae TRANslator) (iii) Πλεονεκτήματα άλλων γλωσσών επικοινωνία με τη μηχανή (γλώσσες χαμηλού επιπέδου) δημιουργία γραφικών χειρισμό αρχείων ευκολία χρήσης επικοινωνία με το διαδίκτυο Πλεονεκτήματα Fortran ταχύτερη σε πολύπλοκους επιστημονικούς και τεχνικούς υπολογισμούς, προβλήματα με πολυδιάστατους πίνακες, πολλές επαναλήψεις, προβλήματα βελτιστοποίησης
Παραδείγματα (i) PROGRAM Hello1 WRITE(*,*) 'hello world' PROGRAM Hello2 WRITE(*,*) 'hello ', 'world' PROGRAM Hello3 WRITE(*,*) 'hello ' WRITE(*,*) 'world'
Παραδείγματα (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");
Παραδείγματα (ii) PROGRAM Hello4 WRITE(*, "(A)", advance="no")'hello' WRITE(*,*) 'world'
Παραδείγματα (C) (ii) #include <stdio.h> void main () printf("hello world"); printf("\n");
Παραδείγματα (iii) PROGRAM Hello5 CALL hello CALL hello CALL hello CALL hello SUBROUTINE hello WRITE(*,*) ' hello world' 1
Παραδείγματα (C) (iii) #include <stdio.h> void hello() printf("hello world\n"); void main() hello(); hello(); hello(); hello(); 1
Παραδείγματα (iv) PROGRAM Hello6 INTEGER:: i DO i=1,20 DO CALL hello SUBROUTINE hello WRITE(*,*) 'hello world' 1
Παραδείγματα (C) (iv) #include <stdio.h> void hello() printf("hello world\n"); void main() int i; for (i=0; i<20; i++) hello(); 1
Παραδείγματα (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' 1
Παραδείγματα (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(); 1
Παραδείγματα (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' 1
Παραδείγματα (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(); 1
Παραδείγματα (vii) PROGRAM Hello9 INTEGER:: i,n WRITE(*,*) 'Give number of greetings ',& 'then press <enter>:' READ(*,*) n DO i=1,n,2 CALL hello(i) DO SUBROUTINE hello(j) INTEGER:: j WRITE(*,*)j,'hello world' 1
Παραδείγματα (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(); 1
Παραδείγματα (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' 2
Παραδείγματα (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(); 2