Εισαγωγή στους Η/Υ Πίνακες
ΕΙΣΑΓΩΓΗ Οι πίνακες είναι συλλογές δεδομένων που μοιράζονται τα ίδια χαρακτηριστικά Τα στοιχεία ενός πίνακα βρίσκονται σε προκαθορισμένες αριθμημένες θέσεις (indexed) Ο Η/Υ αντιλαμβάνεται τους πίνακες σαν απλές μορφές διαδοχικής καταχώρησης δεδομένων στη μνήμη του Είδη Στατικοί πίνακες: το μέγεθος δηλώνεται ρητά πριν το compilation στην περιοχή των δηλώσεων και δεν αλλάζει στην έκταση του προγράμματος Δυναμικοί πίνακες: στην περιοχή των δηλώσεων δηλώνονται ρητά οι διαστάσεις, ενώ το μέγεθος μπορεί να αλλάζει στην έκταση του προγράμματος και κατά την εκτέλεσή του. Οι πίνακες δηλώνονται ΥΠΟΧΡΕΩΤΙΚΑ !
Στη FORTRAN ένας πίνακας (array) έχει τις παρακάτω ιδιότητες Τύπο δεδομένων: (data type) integer, real, character, logical, complex Όλα τα στοιχεία ενός πίνακα έχουν τον ίδιο τύπο και τις ίδιες παραμέτρους Τάξη (rank): αριθμός διαστάσεων Μέχρι 7 διαστάσεις Συνήθως χρησιμοποιούμε τους όρους τάξη 1 Διάνυσμα (vector) τάξη 2 Πίνακας (matrix) Όρια (bounds): Το κάτω και το πάνω όριο των δεικτών σε κάθε διάσταση Οι τιμές που μπορεί να πάρει ο κάθε δείκτης (index) Μέγεθος (size): το συνολικό πλήθος των στοιχείων του πίνακα (το γινόμενο των εκτάσεων των διαστάσεων) Η έκταση (extent) σε κάθε διάσταση είναι: (πάνω όριο - κάτω όριο +1) Μορφή (shape): Ο τρόπος διάταξης των στοιχείων του πίνακα Δύο πίνακες με ίδιο σχήμα λέγονται συμμορφούμενοι (conformable)
ΔΗΛΩΣΗ ΣΤΑΤΙΚΩΝ ΠΙΝΑΚΩΝ ΤΥΠΟΣ ΟΝΟΜΑ (έκταση) ΣΥΝΤΑΞΗ: 2-διαστάσεις 3-διαστάσεις Όρια σε κάθε διάσταση
Στοιχεία πίνακα (array elements) ΣΥΝΤΑΞΗ: Στοιχεία ενός πίνακα είναι τα βαθμωτά δεδομένα που απαρτίζουν τον πίνακα Για να αναφερθούμε σε ένα στοιχείο ενός πίνακα χρειάζεται να δηλώσουμε Το όνομα του πίνακα Τη θέση του στοιχείου (όπως στα μαθηματικά!) Κάθε στοιχείο του πίνακα κληρονομεί τον τύπο, το είδος και τις παραμέτρους του πατρικού πίνακα ΟΝΟΜΑ ΠΙΝΑΚΑ (ακέραιου τύπου έκφραση )
Αποθήκευση στη μνήμη Οι τιμές των στοιχείων του πίνακα καταχωρούνται στη μνήμη στη σειρά αλλάζοντας πρώτα τον 1ο δείκτη, μετά τον 2ο κ.ο.κ.
Πρόσβαση στα στοιχεία του πίνακα Απαιτείται το όνομα του πίνακα και η θέση του στοιχείου στον πίνακα Η θέση (δείκτες) καθορίζεται Με ρητή δήλωση Με αριθμητικές εκφράσεις Με συναρτήσεις Με στοιχεία ενός άλλου πίνακα Συνδυασμό των παραπάνω
Ανάθεση τιμών στα στοιχεία του πίνακα Απ’ ευθείας Με DO Με Read Το στοιχείο στη 1η γραμμή και 2η στήλη του πίνακα Α λαμβάνει την τιμή 1.0 Τα στοιχεία σε κάθε γραμμή του πίνακα Α λαμβάνουν την τιμή της θέσης τους Καταχωρούνται από το πληκτρολόγιο τόσες τιμές όσες και το μέγεθος του πίνακα Α. Εκτυπώνονται όλα τα στοιχεία του πίνακα Α.
Ανάθεση τιμών στα στοιχεία του πίνακα Με κατασκευαστή πίνακα (μονοδιάστατοι πίνακες) Με διανυσματικούς δείκτες Με τριάδες [όνομα_πίνακα(όριο1:όριο2:βήμα)] Τα στοιχεία του πίνακα C λαμβάνουν την τιμή 999. Στις θέσεις των στοιχείων του C που προκύπτουν από όλους τους συνδυασμούς των τιμών των στοιχείων των Α, Β (3x3=9) εκχωρείται η τιμή 2. (πρδγ.)
Τριάδες Α(3 , : ) Α(3,1:6) Α(3:4,3:4) (το βήμα υπονοείται) Α( : : 2, : : 3) Α(1:6:2,1:6:3) (το πάνω και κάτω όριο υπονοείται) Α( : , : : 2)
Πράξεις με πίνακες Οι πράξεις με πίνακες ακολουθούν ό,τι ισχύει και για τους διάφορους τύπους δεδομένων Οι πράξεις με πίνακες γίνονται με τρεις τρόπους Πράξεις με στοιχεία του πίνακα Κάθε στοιχείο του πίνακα χρησιμοποιείται σαν μεταβλητή Πράξεις με ολόκληρους πίνακες Χρησιμοποιούνται όλα τα στοιχεία του πίνακα Πράξεις με εγγενείς συναρτήσεις Ανάλογα με το πως ορίζεται η συνάρτηση παράδειγμα
Εγγενείς Συναρτήσεις για Πίνακες LBOUND UBOUND SIZE SHAPE ALLOCATED MINVAL MAXVAL MINLOC MAXLOC COUNT SUM PRODUCT CSHIFT EOSHIFT TRANSPOSE ANY ALL MATMUL DOT_PRODUCT MERGE RESHAPE SPREAD PACK UNPACK
Υπονοούμενη επανάληψη Η υπονοούμενη επανάληψη χρησιμοποιείται Για τον καθορισμό επανάληψης σε ένα μέρος μιας λίστας εισόδου/εξόδου Για την μεταφορά μέρους ενός πίνακα Για την μεταφορά αντικειμένων ενός πίνακα με διαφορετική σειρά από αυτή που καταχωρούνται στη μνήμη. Παραδείγματα:
Παράλληλες δομές Όπως η δομή IF Where (συνθήκη) έκφραση Where … Elsewhere … End Where Όπως η δομή DO Forall (τριάδα[,τριάδα]...); έκφραση; end forall Όπως η δομή DO WHILE Forall (τριάδα[,τριάδα]..., συνθήκη); έκφραση; end forall Ισοδύναμο του forall (…); where(…) έκφραση; end forall
ΔΟΜΗ WHERE Επηρεάζει τα στοιχεία στις θέσεις των δεικτών των πινάκων, για τις οποίες ισχύει η αντίστοιχη συνθήκη Where (συνθήκη) έκφραση Where (συνθήκη) εκφράσεις 1 Elsewhere (συνθήκη) εκφράσεις 2 Elsewhere εκφράσεις 3 End Where
ΔΟΜΗ FORALL Επηρεάζει τα στοιχεία στις θέσεις των δεικτών των πινάκων, οι οποίες προσπελαύνονται από την τριάδα της δομής Απλή μορφή (Μονοδιάστατος πίνακας) FORALL(τριάδα) έκφραση Σύνθετη μορφή (Πολυδιάστατοι πίνακες) FORALL(τριάδα1, τριάδα2, …) εκφράσεις END FORALL
ΔΟΜΗ FORALL με Συνθήκη Επηρεάζει τα στοιχεία στις θέσεις των δεικτών των πινάκων, οι οποίες προσπελαύνονται από την τριάδα της δομής ΚΑΙ για τα οποία ισχύει η αντίστοιχη συνθήκη Απλή μορφή (Μονοδιάστατος πίνακας) FORALL(τριάδα, συνθήκη) έκφραση Σύνθετη μορφή (Πολυδιάστατοι πίνακες) FORALL(τριάδα1, τριάδα2,…, συνθήκη1.ΛΤ. συνθήκη2.ΛΤ. …) έκφρασεις END FORALL (όπου .ΛΤ. : Λογικός Τελεστής)
παράρτημα
ΑΣΚΗΣΗ Μετατρέψτε τον κώδικα της πλάγιας βολής ASK2OM1.f90 Ώστε να δέχεται δεδομένα για 5 συνδυασμούς Τα δεδομένα θα εισάγονται σε πίνακες και όλοι οι υπολογισμοί που ζητούνται θα γίνονται με εγγενείς συναρτήσεις πινάκων Τα αποτελέσματα να αποθηκεύονται σε πίνακα 5 x n και να εκτυπώνονται στην οθόνη Ακολούθως δημιουργείστε ένα πίνακα με n+2 στήλες και 6 γραμμές. Η μορφή του νέου πίνακα θα έχει ως εξής 1η στήλη : αριθμός γραμμής Στήλες 2 ως n-1 : αποτελέσματα υπολογισμών Γραμμή 6 : αναγράψετε για τους συνδυασμούς όπου εντοπίζονται τα μέγιστα τον αριθμό της στήλης του μέγιστου.