Download - ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ

Transcript
Page 1: ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ

Διάλεξη 2: Πίνακες και δυναμικά δεδομένα στη FORTRAN 90

Εαρινό εξάμηνο 2009

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/ΥΙ. Σαρρής, [email protected], τηλ. 2421074090

Page 2: ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ

Οργάνωση παρουσίασης

• Θα δούμε την σύνταξη και την χρήση των δυναμικών πινάκων

• Την εισαγωγή των δυναμικών πινάκων στις διαδικασίες

• Τους παράγωγους τύπους δεδομένων

• Τους δείκτες και την χρήση τους

Page 3: ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ

Πίνακες

Πίνακας είναι μια σύνθετη μεταβλητή που καταλαμβάνει παραπάνω από μια θέση στην μνήμη του Η/Υ, έχει ένα συγκεκριμένο όνομα και δέχεται ένα συγκεκριμένο τύπο δεδομένων.

Λόγοι χρήσης των πινάκων είναι οι :•Η χρησιμοποίηση των δεδομένων παραπάνω από μια φορά.

•Η αποθήκευση των δεδομένων πριν τη χρησιμοποίηση τους.

Page 4: ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ

Πίνακες

•Στατικοί πίνακες (static arrays)Ένας πίνακας που καταλαμβάνει έναν συγκεκριμένο χώρο μνήμης σε όλη την εκτέλεση του προγράμματος ονομάζεται στατικός πίνακας. Η διάσταση των στατικών πινάκων ορίζεται στην αρχή του προγράμματος και καταλαμβάνει συγκεκριμένο ποσό μνήμης σε όλη τη διάρκεια του προγράμματος. Αυτό έχει ως αποτέλεσμα τη δέσμευση μεγάλου μέρους της μνήμης του Η/Υ.

•Δυναμικοί πίνακες (dynamic arrays)Οι δυναμικοί πίνακες δηλώνονται όπως και οι στατικοί πίνακες στην αρχή του προγράμματος, αλλά η διάστασή τους ορίζεται στη διάρκεια εκτέλεσης του προγράμματος, οπότε και την συγκεκριμένη στιγμή καταλαμβάνουν κομμάτι της μνήμης του Η/Υ. Στη συνέχεια, αν δεν χρειάζονται, μπορούμε να τους καταργήσουμε αποδεσμεύοντας το συγκεκριμένο κομμάτι της μνήμης του Η/Υ για άλλες λειτουργίες.

Page 5: ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ

Πως δηλώνουμε τους Πίνακες

•Στατικοί πίνακες

Μέχρι και τη Fortran 77, η γενική μορφή της εντολής DΙΜEΝSΙΟΝ είναι:

Dimension "όνομα πίνακα" (Χ : Υ)

Το Χ εκφράζει την κατώτερη τιμή που μπορεί να πάρει ο δείκτης και όταν λείπει εννοείται η μονάδα. Το Υ εκφράζει την ανώτερη τιμή και πρέπει να υπάρχει υποχρεωτικά. Ο τύπος των πινάκων ακολουθεί τους ίδιους κανόνες με μία απλή μεταβλητή.

Π.χDimension Α(15), Β(10, 10), C(-5 : 5), Κ(3, 2, 2)

Για τον πίνακα Α(15) κρατάμε 15 διαδοχικές θέσεις μνήμης.Για τον πίνακα Β(10,10) κρατάμε 10*10 = 100 διαδοχικές θέσεις μνήμης.Για τον πίνακα C(-5:5) κρατάμε συνολικά 11 θέσεις μνήμης.Για τον πίνακα Κ(3, 2, 2) κρατάμε συνολικά 3*2*2 = 12 θέσεις μνήμης.

Page 6: ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ

Πως δηλώνουμε τους Πίνακες

•Στατικοί πίνακες

Με τη Fortran 90/95 η γενική μορφή της εντολής Dimension γίνεται :

Τύπος, Dimension (Χ : Υ) :: "όνομα πίνακα"

Ο Τύπος, είναι ένας από τους γνωστούς και αποδεκτούς τύπους των μεταβλητών. Μπορούμε να δηλώσουμε ταυτόχρονα και περισσότερα ονόματα πινάκων χωρισμένα με υποδιαστολή.

Π.χ. μπορούμε να γράψουμε :

Real, Dimension (15) :: Α, Β, C(-5 : 5), Κ(3, 2, 2)ή

Integer, Dimension (10, 10) :: Α, Β, C

Page 7: ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ

Πως δηλώνουμε τους Πίνακες

Εναλλακτικά, μπορούμε να δηλώσουμε τους πίνακες χωρίς την χρήση της εντολής Dimension, μέσω των, γνωστών από τις μεταβλητές, δηλωτικών εντολών.

Π.χ. μπορούμε να γράψουμε τις ακόλουθες εντολές:

Real X(5, 5), Y(5, 5)Integer Tab(100), Pin(10, 20)

Page 8: ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ

Τοποθέτηση Τιμών σε Πίνακα

α) Από το χρήστη

Μπορούμε να χρησιμοποιήσουμε την εντολή Do – End Do:

Integer ADimension A(5)Write(*, *) "Πληκτρολογείστε πέντε τιμές"Do i =1, 5

Read(*, *) A(i)End Do

Να έχουμε απευθείας ανάγνωση του πίνακα Α

Integer ADimension A(5)Write(*, *) "Πληκτρολογείστε πέντε τιμές"Read(*, *) Α

Page 9: ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ

Τοποθέτηση Τιμών σε Πίνακα

α) Από το χρήστη

Να χρησιμοποιήσουμε την υπονοούμενη (implied) εντολή Do:

Integer A

Dimension A(5)

Write(*, *) "Πληκτρολογείστε πέντε τιμές"

Read(*, *) (A(i), i = 1, 5)

Η γενική μορφή της εντολής για το υπονοούμενο Do είναι:

("μεταβλητή" , "μεταβλητή ελέγχου" = "κατώτερο όριο", "ανώτερο όριο", "βήμα")

Π.χ. Read(*, *) (A(i), i = 1, 10, 2)

Page 10: ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ

Τοποθέτηση Τιμών σε Πίνακα

β) Με εντολές ανάθεσηςInteger, Dimension (5) :: A

Α(1) = 10

Α(2) = 20

Α(3) = 30

Α(4) = 40

Α(5) = 50

γ) Από το πρόγραμμα με τη χρήση της εντολής Data που επιτρέπει τη μαζική απόδοση τιμών σε απλές μεταβλητές και σε πίνακες

Με τη σύνταξη:

Όνομα μεταβλητές ή πίνακας=(/τιμές/)

π.χ.

REAL A(4)

DATA A=(/2.4,4.0,8,5.9/)

Page 11: ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ

Τοποθέτηση Τιμών σε Δυσδιάστατο Πίνακα

Α’ τρόπος. Με Εντολές Εισόδου

Διάβασμα τιμών ενός δυσδιάστατου πίνακα κατά γραμμές:

Integer A

Dimension A(3, 2)

Do i =1, 3

Do j =1, 2

Read(*, *) A(i, j)

End Do

End Do

Page 12: ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ

Τοποθέτηση Τιμών σε Δυσδιάστατο Πίνακα

Α’ τρόπος. Με Εντολές Εισόδου

Διάβασμα τιμών ενός δυσδιάστατου πίνακα κατά στήλες:

Integer A

Dimension A(3, 2)

Do j =1, 2

Do i =1, 3

Read(*, *) A(i, j)

End Do

End Do

Page 13: ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ

Τοποθέτηση Τιμών σε Δυσδιάστατο Πίνακα

Να έχουμε απευθείας ανάγνωση του πίνακα Α

Integer A

Dimension A(3, 2)

Read(*, *) Α

Οι έξι πρώτες τιμές που θα πληκτρολογηθούν, θα τοποθετηθούν στις 6 θέσεις του πίνακα Α.

Επειδή η Fortran αποθηκεύει τις τιμές ενός δυσδιάστατου πίνακα κατά στήλες θα πρέπει να δίνουμε τις τιμές του πίνακα Α κατά στήλες.

Page 14: ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ

Τοποθέτηση Τιμών σε Δυσδιάστατο Πίνακα

Ή να χρησιμοποιήσουμε την υπονοούμενη (implied) εντολή Do. Όπως μπορούμε να χρησιμοποιήσουμε πολλές ανακυκλώσεις τη μία μέσα στην άλλη, σε μια εντολή Do, έτσι και σε μια υπονοούμενη Do μπορούμε να γράφουμε:

Integer A

Dimension A(3, 2)

Read(*, *) ((A(i,j), j = 1, 2), i = 1, 3)

αν θέλουμε να διαβάσουμε τις τιμές του πίνακα κατά γραμμές. Από τους δύο δείκτες i και j, πρώτα μεταβάλλεται εκείνος που είναι εσωτερικά δηλαδή ο j και κατόπιν ο i.

Page 15: ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ

Τοποθέτηση Τιμών σε Δυσδιάστατο Πίνακα

Ανάθεση με την εντολή Data

Αν έχουμε τον πίνακα Α(3, 2) και θέλουμε να δώσουμε τις τιμές

μπορούμε να γράψουμε:

Data A / 1, 2, 3, 2, 4, 6 /

Page 16: ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ

Εκτύπωση μονοδιάστατου πίνακα

Α’ τρόπος. Με χρήση της εντολής Do – End Do

Integer A

Dimension A(5)

Do i =1, 5

Write(*, *) A(i)

End Do

Β’ τρόπος. Με χρήση της υπονοούμενης εντολής Do

Integer A

Dimension A(5)

Write(*, *) (A(i), i = 1, 5)

Γ’ τρόπος. Με απευθείας εκτύπωση

Integer A

Dimension A(5)

Write(*, *) Α

Page 17: ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ

Γενικά για τους πίνακες

Page 18: ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ

Γιατί δυναμικοί πίνακες;

Page 19: ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ

Δυναμικοί πίνακες

Page 20: ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ

Παράδειγμα

Page 21: ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ

Δυναμικοί πίνακες (συνέχεια)

Page 22: ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ

Δυναμικοί πίνακες (συνέχεια)

Επίσης,IF(.NOT.ALLOCATED(B))ALLOCATE(B(-10:10,3))

Page 23: ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ

Παράδειγμα

REAL,ALLOCATABLE::X(:,:)...ALLOCATE(X(10,2),STAT=IERR)IF(IERR).GT.0) CALL HANDLERX=0.0...DEALLOCATE(X)...ALLOCATE(X(-10:10),5),STAT=JERR)

Page 24: ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ

Διαδικασίες και πίνακες

Page 25: ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ

Διαδικασίες και πίνακες (συνέχεια)

Page 26: ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ

Παράδειγμα

PROGRAM automatIMPLICIT NONE

REAL, ALLOCATABLE ::A(:,:)INTEGER ::i,n,m

READ*,n,mALLOCATE(A(n,m),STAT=IERR)IF(IERR).GT.0) CALL HANDLER

A = 1.

CALL auto(A,n,m) DEALLOCATE(A)

CONTAINS

SUBROUTINE auto(c,n,m)INTEGER, INTENT(IN) ::n, mREAL, INTENT(IN) ::c(n,m) !εικονικόςINTEGER ::i,jREAL ::b(n,m) !αυτόματος

FORALL(i=1:n,j=1,m)b(i,j)=c(i,j)*c(i,j)END FORALL

END SUBROUTINE auto

END PROGRAM automat

Page 27: ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ

Αυτόματοι πίνακες

Page 28: ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ

Παράδειγμα

INTEGER, ALLOCATABLE, DIMENSION(:)::X

ALLOCATE(X(3),STAT=IERR)IF(IERR).GT.0) CALL HANDLERX=(/1,2,3/); PRINT *, X! Τυπώνει: 1 2 3n = SIZE(X)X=test(x,n); PRINT *, X! Τυπώνει: 1 4 9IF (ALLOCATED(X)) DEALLOCATED (X)

CONTAINS

FUNCTION test(x,n) RESULT(y)INTEGER, INTENT(IN) ::n, x(:) !υποθετικής μορφήςINTEGER, DIMENSION(n) ::y !αυτόματοςy=x*x

END FUNCTION test

END

Page 29: ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ

Πίνακες υποθετικού μεγέθους και μορφής

Page 30: ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ

Παράγωγοι τύποι δεδομένων

Page 31: ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ

Παράγωγοι τύποι δεδομένων (συνέχεια)

Page 32: ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ

Παράγωγοι τύποι δεδομένων

TYPE (Όνομα νέου τύπου δεδομένων)

Τύπος δεδομένων :: Όνομα πεδίου1

Τύπος δεδομένων :: Όνομα πεδίου2

…………………

END TYPE (Όνομα νέου τύπου δεδομένων)

[PROGRAM όνομα προγράμματος] Implicit None Περιοχή σταθερών Τμήμα μεταβλητών Περιοχή τύπων ……..END [PROGRAM [όνομα προγράμματος]]

Page 33: ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ

Παράγωγοι τύποι δεδομένων

Παράδειγμα.TYPE STUDENTSCHARACTER (LEN=20) :: SURNAME ! ΕΠΩΝΥΜΟCHARACTER (LEN=10) :: NAME ! ΟΝΟΜΑINTEGER (KIND=2) :: AEMINTEGER (KIND=1) :: GRADEEND TYPE STUDENTS

TYPE (STUDENTS) :: STUDENT

TYPE (Νέος τύπος δεδομένων) :: Λίστα μεταβλητών

Page 34: ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ

Παράδειγμα.

STUDENT=STUDENTS(‘Αναστασιάδης’, ‘Λάζαρος’,1234,9)

ή

STUDENT.SURNAME=’Αναστασιάδης’

STUDENT.NAME=’Λάζαρος’

STUDENT.AEM=1234

STUDENT.GRADE=9

Παράγωγοι τύποι δεδομένων

Page 35: ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ

Παράγωγοι τύποι δεδομένων (συνέχεια)

Page 36: ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ

Παράγωγοι τύποι δεδομένων (συνέχεια)

Page 37: ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ

Παράδειγμα

IMPLICIT NONETYPE IDEAL REAL ::VOLUME,PRESSURE,T CHARACTER(11) ::HEADEREND TYPE IDEAL

TYPE (IDEAL) :: C(5) ! Ο πίνακας C είναι τύπου IDEALREAL ::CONSTANTINTEGER ::IREAL,PARAMETER ::R=0.0820556

C%HEADER=(/’PRESSURE’,’VOLUME’,’TEMPERATURE’,’’,’’/)C(1)%PRESSURE=15; C%T=298C%VOLUME =(/100,80,60,40,20/)CONTANT = C(1)%PRESSURE*C(1)%VOLUMEC(:)%PRESSURE=CONSTANT/C(:)%VOLUME

! Τυπώνουμε την επικεφαλίδα:WRITE(*,’(X,3A11,)’) (C(I)%HEADER,I=1,3)

! Τυπώνουμε τις τιμές:DO I=1,5WRITE(*,’(F6.2,6X,F5.1,8X,F5.1)’) C(I)%PRESSURE, C(I)%VOLUME, C(I)%TEND DO

END