Κυριακή 1 Δεκεμβρίου 2013

Πίνακες σε αλγόριθμο και σε Πρόγραμμα



ΚΕΦΑΛΑΙΟ 3 ΠΙΝΑΚΕΣ

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

Η αναφορά στα στοιχεία του πίνακα γίνεται με το συμβολικό του όνομα, ακολουθούμενο από δείκτες μέσα σε αγκύλες (π.χ. Βαθμοί[10], ή Α[2,5] κλπ)

Ένας πίνακας με μία γραμμή και πολλές στήλες (π.χ. περιέχει τους βαθμούς ενός μόνο μαθητή) λέγεται μονοδιάστατος. Με πολλές γραμμές και στήλες (π.χ. οι βαθμοί όλων των μαθητών ενός τμήματος) είναι δισδιάστατος πίνακας. Αν  καταγράψω τμήματα, μαθητές και βαθμούς κάνω ένα τρισδιάστατο πίνακα (π.χ. Β[2,14,12]) κ.ο.κ.
Παρακάτω δίνεται αλγόριθμος και πρόγραμμα που διαβάζει και βρίσκει το μέσο όρο ενός μονοδιάστατου πίνακα. Έστω ότι θέλουμε να καταχωρίσουμε τους βαθμούς ενός και μόνο μαθητή, που έχει 12 μαθήματα:

Αλγόριθμος Μονοδιάστατος

σ 0
Για ι από 1 μέχρι 12
Διάβασε Β[ι]
σ σ+Β[ι]
τέλος_επανάληψης
μ_ο σ/12
Εμφάνισε «Ο μέσος όρος είναι», μ_ο

Τέλος_επανάληψης

Τέλος Μονοδιάστατος
ΠΡΟΓΡΑΜΜΑ ΜΟΝΟΔΙΑΣΤΑΤΟΣ

ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: Ι
ΠΡΑΓΜΑΤΙΚΕΣ: Σ, Β[12], Μ_Ο

ΑΡΧΗ
Σ 0
ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ 12
ΔΙΑΒΑΣΕ Β[Ι]
Σ Σ+Β[Ι]
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Μ_Ο Σ/12
ΓΡΑΨΕ ‘Ο ΜΕΣΟΣ ΟΡΟΣ ΕΙΝΑΙ ‘, Μ_Ο
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ


Μπορούμε στο παραπάνω πρόγραμμα να δηλώσουμε τον πίνακα να έχει παραπάνω στήλες (π.χ 30 αντι για 12), έτσι ώστε να μπορούμε να δηλώνουμε και περισσότερα από 12 στοιχεία αν και εφόσον αυτό κάποτε είναι απαραίτητο. Αυτό δίνει  μεν μια ευελιξία, όμως δεσμεύει επιπλέον θέσεις μνήμης που εν προκειμένω δεν χρησιμοποιούνται.

Το παρακάτω παράδειγμα διαβάζει ένα δισδιάστατο πίνακα (14 μαθητές – 12 βαθμοί) , υπολογίζει το μέσο όρο κάθε μαθητή (γραμμής) και τον καταχωρεί σε ένα μονοδιάστατο πίνακα:




Αλγόριθμος δισδιάστατος

σ 0
Για i από 1 μέχρι 14
 
Για j από 1 μέχρι 12
   Διάβασε Βαθμοί[i,j]
     σ σ + Βαθμοί [i,j]
  τέλος_επανάληψης

 μ_ο[i σ/12
  σ 0
τέλος_επανάληψης

τέλος δισδιάστατος
ΠΡΟΓΡΑΜΜΑ ΔΙΣΔΙΑΣΤΑΤΟΣ
ΜΕΤΑΒΛΗΤΕΣ
ΑΚΕΡΑΙΕΣ: I,J
ΠΡΑΓΜΑΤΙΚΕΣ: Σ, Β[14,12],Μ_Ο[12]

ΑΡΧΗ
Σ 0
ΓΙΑ Ι ΑΠΟ 1 ΜΕΧΡΙ 14
  ΓΙΑ J ΑΠΟ 1 ΜΕΧΡΙ 12
     ΔΙΑΒΑΣΕ Β[Ι,J]
     Σ Σ+Β[Ι,J]
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Μ_Ο[Ι]  Σ/12
ΓΡΑΨΕ ‘ Ο ΜΕΣΟΣ ΟΡΟΣ ΤΟΥ ΜΑΘΗΤΗ’,Ι,’ ΕΙΝΑΙ: ‘, Μ_Ο[Ι]
Σ 0
ΤΕΛΟΣ ΕΠΑΝΑΛΗΨΗΣ

ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ


Προσέξτε ότι ο μετρητής Σ μηδενίζεται για να υπολογιστεί ο μέσος όρος του επόμενου μαθητή!
Παρατηρείστε ότι αν δε χρησιμοποιούσαμε τον πίνακα μ_ο[14], αλλά χρησιμοποιούσαμε μια μεταβλητή μ_ο, με τον υπολογισμό του επόμενου μέσου όρου η προηγούμενη τιμή που υπολογίσαμε θα είχε αντικατασταθεί και χαθεί οριστικά.
Επομένως, χρησιμοποιούμε πίνακες όταν θέλουμε να διατηρούμε τα δεδομένα για μελλοντική επεξεργασία, αλλά να έχουμε υπόψη μας ότι οι πίνακες δεσμεύουν χώρο μνήμης και γι αυτό δεν πρέπει να χρησιμοποιούνται αλόγιστα! Όπου δε μας ενδιαφέρει να κρατάμε τις τιμές, μπορούμε να χρησιμοποιούμε μεταβλητές, αντί για πίνακες.
Ένας δισδιάστατος πίνακας που έχει τον ίδιο αριθμό γραμμών και στηλών λέγεται τετραγωνικός.
Ένας πίνακας με αρκετά μηδενικά μέσα του (περισσότερα από 80%) του συνόλου λέγεται αραιός. Για οικονομία χώρου μπορούμε να αποθηκεύσουμε σε μονοδιάστατο πίνακα τις μη μηδενικές τιμές, μαζί με τις θέσεις τους στο δισδιάστατο.
Προσοχή για τις ασκήσεις στη σχέση των δεικτών! Προσπαθούμε να βρούμε αν υπάρχει κάποια τέτοια σχέση πριν μπούμε στον εμφωλευμένο βρόχο. Π.χ. Για τα στοιχεία της διαγωνίου ενός τετραγωνικού πίνακα ισχύει i=j (ΑΝ ι=j ,τότε …),  ενώ για τα στοιχεία πάνω και δεξιά της διαγωνίου ισχύει ι > j κ.ο.κ
Οι πίνακες γενικά καταλαμβάνουν αρκετή μνήμη  όσο εκτελείται το πρόγραμμα. Επίσης, δεν είναι ευέλικτοι , αφού το μέγεθός τους είναι πάντα το ίδιο και δεν προσαρμόζεται στις ανάγκες της κάθε περίπτωσης. Γι αυτό πρέπει να χρησιμοποιούνται μόνο όταν υπάρχει λόγος να διατηρούμε ολα τα δεδομένα του προγράμματος οσο αυτό εκτελείται.
Στους πίνακες (αφού έχουν σταθερό μέγεθος) δε γίνεται ούτε εισαγωγή νέου στοιχείου, ούτε διαγραφή παλιού.

Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου

Σημείωση: Μόνο ένα μέλος αυτού του ιστολογίου μπορεί να αναρτήσει σχόλιο.