Προγραμματισμός FORTRAN > Μαθήματα > Πίνακες | |
|
Οι μεταβλητές που περιέχουν μόνο μια τιμή λέγονται βαθμωτές (scalar) και δεν έχουν διαστάσεις. Όμως, τα πιο σοβαρά προβλήματα που λύνονται με υπολογιστές, κάνουν χρήση της γραμμικής άλγεβρας και των πινάκων και δεν είναι εύκολο να περιγραφούν με βαθμωτές ποσότητες. Για παράδειγμα, οι συντεταγμένες (x, y, z) ενός σημείου στο χώρο, αντί να είναι τρεις χωριστοί αριθμοί (Χ, Υ, Ζ), μπορούν να αναπαρασταθούν σαν ένα μονοδιάστατο μητρώο Α τριών θέσεων, όπου το Α(1) θα είναι η συντεταγμένη Χ, το Α(2) η συντεταγμένη Υ και το Α(3) η συντεταγμένη Ζ.
Τα μητρώα είναι απαραίτητα για επαναλαμβανόμενες ομοειδής πράξεις. Για παράδειγμα, αν έχουμε 300 μεταβλητές, όλες με διαφορετικά ονόματα, θα πρέπει να γράψουμε 300 εκτελέσιμες εντολές, μια για κάθε μεταβλητή. Αν όμως τις έχουμε αποθηκεύσει σαν ένα μητρώο των 300 θέσεων (A), τότε γράφουμε μια μόνο γενικόή εντολή για το A(i), και την επαναλαμβάνουμε 300 φορές με ένα DO αλλάζοντας τον δείκτη i από το 1 έως το 300. Όταν χρησιμοποιούμε πίνακες κάνουμε έντονη χρήση της εντολής DO, και μάλιστα ο μετρητής ή ο δείκτης της DO, έχει άμεση σχέση με τους δείκτες του πίνακα. Για να χρησιμοποιήσουμε ένα μητρώο θα πρέπει πρώτα να Δηλωθούν οι Διαστάσεις του στην αρχή του προγράμματος. Στη συνέχεια, με τη κατάλληλη Χρήση των Δεικτών του μητρώου, θα πρέπει να γίνει Ανάθεση Τιμών στα στοιχεία του. Έτσι, αποθηκεύοντας το μητρώο στη Μνήμη, το έχουμε διαθέσιμο για περαιτέρω επεξεργασία ή εκτύπωση. ΔΗΛΩΣΗ ΤΩΝ ΔΙΑΣΤΑΣΕΩΝ ΕΝΟΣ ΜΗΤΡΩΟΥ Τα μητρώα δηλώνονται στην αρχή του προγράμματος, όπως και οι άλλες μεταβλητές, με τις γνωστές εντολές δηλώσεων (REAL, INTEGER, ...) με τη διαφορά ότι πρέπει πάντοτε να συνοδεύονται από τους αριθμούς που δηλώνουν τις διαστάσεις τους. Σε περιπτώσεις πολλών ίδιων πινάκων χρησιμοποιούμε τη κοινή δήλωση διαστάσεων με τη DIMENSION. Π.χ.:
Σημειώσεις:
ΧΡΗΣΗ ΤΩΝ ΔΕΙΚΤΩΝ ΕΝΟΣ ΜΗΤΡΩΟΥ Για να αναφερθούμε σε ένα μητρώο (ή πίνακα) χρησιμοποιούμε το όνομά του όπως δηλώθηκε στην αρχή του προγράμματος. Αν όμως θέλουμε να χειριστούμε μόνο ένα μέρος του ή ένα στοιχείο του, τότε χρησιμοποιούμε το όνομα του μητρώου ακολουθούμενο από τους δείκτες του σε παρένθεση, όπως και στη γραμμική άλγεβρα.
Οι δείκτες και τα στοιχεία ενός 2-διάστατου μητρώου (πίνακα) μεγέθους (m x n). Στον παραπάνω πίνακα, για να αναφερθούμε στο στοιχείο της γραμμής i και της στήλης j γράφουμε: A(i, j ). Για να αναφερθούμε στη επιλεγμένη περιοχή του πίνακα, γράφουμε τα όρια των δεικτών: A(2:3, 1:2 ). Τέλος, για να αναφερθούμε σε ολόκληρο το πίνακα, γράφουμε απλά A, ενώ για να το δηλώσουμε στην αρχή του προγράμματος γράφουμε: A(1:m, 1:n ). Συνηθίζεται να χρησιμοποιούμε τα γράμματα i, j, k, l, m & n για δείκτες σε μητρώα, χωρίς όμως να είναι δεσμευτικό, διότι συμβαδίζει με τις συνήθειες πολλών θετικών επιστημών. Τα ίδια γράμματα τα συναντάμε και σαν δείκτες σε βρόγχους επανάληψης. Οι μεταβλητές που χρησιμοποιούνται σαν δείκτες σε μητρώα και σε βρόγχους δηλώνονται σαν ακέραιοι (INTEGER). Οι δείκτες είναι το μέσο με το οποίο μπορούμε να εφαρμόσουμε τη ίδια πράξη σε όλα τα στοιχεία ενός μητρώου. Τοποθετούμε λοιπόν τη πράξη μέσα σε ένα βρόγχο και την επαναλαμβάνουμε αλλάζοντας κάθε φορά τις τιμές των δεικτών. Για κάθε διάσταση του μητρώου χρειάζεται και ένας βρόγχος με διαφορετικό δείκτη και όρια ανάλογα με τις διαστάσεις του και τα στοιχεία που συμμετέχουν στη πράξη. Έστω ότι έχουμε τα δύο παραπάνω μητρώα, και υπολογίζουμε το Β από τα στοιχεία του Α.
Το παραπάνω do θα δώσει στο δείκτη i διαδοχικά τις τιμές: 1, 2, 3, 4, 5, και θα εκτελέσει τη πράξη για κάθε μια τιμή, έτσι ώστε τα Α(1), Α(2), Α(3), Α(4) και Α(5) θα αυξηθούν κατά 5.0 και θα αποθηκευτούν στα Β(1), Β(2), Β(3), Β(4) και Β(5) αντίστοιχα. Όταν η πράξη αφορά μια ομάδα γειτονικών στοιχείων μπορούμε να γράψουμε τα όρια των δεικτών κατ’ ευθείαν στη θέση των δεικτών. Π.χ.: Τα στοιχεία Β(2), Β(3) και Β(4) θα γίνουν διπλάσια από τα Α(2), Α(3) και Α(4), αντίστοιχα, με την εντολή:
Αν πάλι η πράξη αφορά όλο το μητρώο τότε γράφουμε μόνο το όνομά του χωρίς δείκτες. Π.χ.: Τα πέντε στοιχεία του μητρώου Β θα γίνουν δεκαπλάσια από τα αντίστοιχα στοιχεία του Α.
ΑΝΑΘΕΣΗ ΤΙΜΩΝ ΣΤΑ ΣΤΟΙΧΕΙΑ ΕΝΟΣ ΜΗΤΡΩΟΥ Για να δώσουμε τιμές σε ένα μητρώο, είτε τις δίνουμε στοιχείο-στοιχείο:
ή, χρησιμοποιούμε τους αντίστοιχους σύντομους τρόπους:
Τη πιο πάνω μορφή DO (3) την λέμε και πλάγιο DO (implied do) και τη συναντάμε κυρίως στις εντολές εισόδου/εξόδου για πίνακες. ΑΠΟΘΗΚΕΥΣΗ ΜΗΤΡΩΟΥ ΣΤΗ ΜΝΗΜΗ Τα μητρώα αποθηκεύονται σε συνεχόμενες θέσεις μνήμης σαν να ήταν μονοδιάστατα ανεξάρτητα από το μορφή τους.
Τα παραπάνω μητρώα έχουν όλα το ίδιο μέγεθος (size), 8, αλλά διαφορετική μορφή (shape). Το Α είναι μονοδιάστατο (rank=1) διάνυσμα (1x8), το b είναι τρισδιάστατο (rank=3) διάνυσμα (2x2x2), και τα C & d είναι δισδιάστατα (2x4) & (4x2) αντίστοιχα. Όλα χρειάζονται χώρο αποθήκευσης 8 θέσεων, και οι στήλες τους τοποθετούνται η μία κάτω από την άλλη.
|
|
©2006 Δρ. Β. Χ. Μούσας, Επικ. Καθ., e-mail | Τ.Ε.Ι. Αθήνας Τμήμα Πολιτικών Έργων Υποδομής |