Διδακτικά Βιβλία του Παιδαγωγικού Ινστιτούτου

Αναζήτηση

Βρες
Εμφάνιση

9.1 Μονοδιάστατοι πίνακες.

Πολλά από τα προβλήματα τα οποία παρουσιάστηκαν στα προηγούμενα κεφάλαια, απλά επεξεργάζονται μία σειρά δεδομένων.

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

Για παράδειγμα ένα πρόγραμμα το οποίο διαβάζει τις θερμοκρασίες διαφόρων ημερών του μήνα, έστω 30, και υπολογίζει τη μέση θερμοκρασία, μπορεί πολύ απλά να γραφεί ως εξής …. Σύνολο ΓΙΑ Ημέρα ΑΠΟ 1 ΜΕΧΡΙ 30 ΔΙΑΒΑΣΕ Θερμοκρασία Σύνολο ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ Μέση

Χρησιμοποιώντας λοιπόν μόνο μία μεταβλητή, τη μεταβλητή Θερμοκρασία, το πρόβλημα λύνεται πολύ απλά και το αντίστοιχο πρόγραμμα είναι σύντομο και κατανοητό.

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

Μία άλλη λύση είναι να καταχωρηθεί κάθε θερμοκρασία σε διαφορετική μεταβλητή, έτσι ώστε κάθε τιμή που εισάγεται να διατηρείται στη μνήμη και να μπορεί να συγκριθεί με τη μέση, αφού αυτή υπολογιστεί. Τότε όμως πρέπει να δημιουργηθούν 30 διαφορετικές μεταβλητές Θερμοκρασία1, Θερμοκρασία2,…, Θερμοκρασία30. Για να γραφεί το πρόγραμμα χρειάζονται τριάντα εντολές ΔΙΑΒΑΣΕ και τριάντα εντολές ΑΝ.

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

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

Το όνομα του πίνακα καθορίζει μία ομάδα διαδοχικών θέσεων στη μνήμη. Κάθε συγκεκριμένη θέση μνήμης καλείται στοιχείο του πίνακα και προσδιορίζεται από την τιμή ενός δείκτη, όπως φαίνεται και στο σχήμα 9.1.

Σχ. 9.1. Ο πίνακας Θερμοκρασία

Οι πίνακες που χρησιμοποιούν ένα μόνο δείκτη για την αναφορά των στοιχείων τους, ονομάζονται μονοδιάστατοι πίνακες.

Το όνομα του πίνακα μπορεί να είναι οποιοδήποτε δεκτό όνομα της ΓΛΩΣΣΑΣ και ο δείκτης είναι μία ακέραια έκφραση, σταθερή ή μεταβλητή που περικλείεται μέσα στα σύμβολα [ και ]. Το στοιχείο Θερμοκρασία[2], εκφράζει τη θερμοκρασία της δεύτερης ημέρας, αναφέρεται στο δεύτερο στοιχείο του πίνακα Θερμοκρασία και έχει την τιμή 27.

Γενικότερα το στοιχείο Θερμοκρασία[i] αναφέρεται στο i-στό στοιχείο του πίνακα.

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

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

Για παράδειγμα

ΜΕΤΑΒΛΗΤΕΣ ΠΡΑΓΜΑΤΙΚΕΣ: Θερμοκρασία [30]

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

Παράδειγμα 1 Χρησιμοποιώντας μεταβλητές με δείκτες για το προηγούμενο παράδειγμα έχουμε το εξής πρόγραμμα

ΠΡΟΓΡΑΜΜΑ Θερμοκρασίες ΜΕΤΑΒΛΗΤΕΣ ΠΡΑΓΜΑΤΙΚΕΣ: Θερμοκρασία[30], Μέση, Σύνολο ΑΚΕΡΑΙΕΣ: i, Ημέρες ΑΡΧΗ Σύνολο ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 30 ΓΡΑΨΕ `Δώσε τη θερμοκρασία' ΔΙΑΒΑΣΕ Θερμοκρασία[i] Σύνολο ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ Μέση Ημέρες ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 30 ΑΝ Θερμοκρασία[i] < Μέση ΤΟΤΕ Ημέρες ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΓΡΑΨΕ `Μέση Θερμοκρασία:', Μέση ΓΡΑΨΕ `Ημέρες με μικρότερη θερμοκρασία', Ημέρες ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

Με τη χρήση του πίνακα, όλα τα δεδομένα καταχωρούνται κάτω από το ίδιο όνομα μεταβλητής, στο παράδειγμα Θερμοκρασία. Η ανάγνωση όλων των δεδομένων απλοποιείται, αφού είναι μόνο μία εντολή, ΔΙΑΒΑΣΕ Θερμοκρασία[i], η οποία βρίσκεται μέσα σε ένα βρόχο και επαναλαμβάνεται όσες φορές απαιτείται όπως και ο υπολογισμός του αθροίσματος, Σύνολο Οι τιμές μετά τον υπολογισμό της μέσης τιμής δεν χάνονται, αφού βρίσκονται στα στοιχεία του πίνακα και ξαναχρησιμοποιούνται για την εύρεση του αριθμού των ημερών, που η θερμοκρασία είναι μικρότερη από τη μέση. Ο υπολογισμός των ημερών είναι μόνο μία εντολή ΑΝ, η οποία βρίσκεται σε ένα βρόχο και επαναλαμβάνεται 30 φορές.

Η ανάγνωση, η επεξεργασία και η εκτύπωση των στοιχείων των πινάκων γίνεται πάντοτε από βρόχους, οι ο ποίοι επαναλαμβάνονται προκαθορισμένο αριθμό φορών, όσα είναι τα στοιχεία του πίνακα και υλοποιούνται καλύτερα στον προγραμματισμό με την εντολή επανάληψης ΓΙΑ.

Παράδειγμα 2 Να γραφεί πρόγραμμα το οποίο να υπολογίζει τα βασικά στατιστικά μεγέθη, τη μέση τιμή, την τυπική απόκλιση και τη διάμεσο τιμή Ν ακεραίων αριθμών, όπου το Ν είναι από 2 μέχρι 100. Τα δεδομένα εισάγονται από το πληκτρολόγιο και καταχωρούνται στον πίνακα Χ.

Η μέση τιμή μ δίνεται από τον τύπο [pic]

Η τυπική απόκλιση σ δίνεται από τον τύπο [pic]

Για να βρεθεί η διάμεσος τιμή πρέπει υποχρεωτικά οι αριθμοί να ταξινομηθούν κατά αύξουσα σειρά. Τότε διάμεσος τιμή, είναι η τιμή για την οποία οι μισοί αριθμοί είναι μικρότεροι και οι άλλοι μισοί μεγαλύτεροι. Στην περίπτωση που το πλήθος των αριθμών είναι περιττό, τότε διάμεσος είναι ο μεσαίος, ενώ στην περίπτωση που είναι άρτιο, τότε διάμεσος είναι το ημιάθροισμα των δύο μεσαίων αριθμών. Η ταξινόμηση των στοιχείων γίνεται με τη μέθοδο ταξινόμησης ευθείας ανταλλαγής, η οποία παρουσιάστηκε στο κεφάλαιο 3.

ΠΡΟΓΡΑΜΜΑ Στατιστική ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ : i, Ν, Χ[100], Διάμεσος, Άθροισμα, Άθροισμα_2, Βοηθητική ΠΡΑΓΜΑΤΙΚΕΣ: ΜΤ, Τυπ_Απόκλιση ΑΡΧΗ ! Εισαγωγή δεδομένων ΓΡΑΨΕ `Δώσε το πλήθος των αριθμών (μέγιστο 100)' ΔΙΑΒΑΣΕ Ν ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ Ν ΓΡΑΨΕ `Δώσε τον `,i,'-το αριθμό' ΔΙΑΒΑΣΕ Χ[i] ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ! Υπολογισμός αθροισμάτων Άθροισμα Άθροισμα_2 Άθροισμα Άθροισμα_2 ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

Στο πρόγραμμα αυτό δεν γίνεται έλεγχος για μηδενική τιμή του Ν

!Υπολογισμός μέσου όρου ΜT ! Υπολογισμός τυπικής απόκλισης Τυπ_Απόκλιση !Ταξινόμηση των στοιχείων του πίνακα ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ N ΓΙΑ j ΑΠΟ N ΜΕΧΡΙ i ΜΕ ΒΗΜΑ -1 ΑΝ X[j-1] > X[j] ΤΟΤΕ ! Αντιμετάθεση τωνστοιχείωνj και j-1 Βοηθητική X[j-1] X[j] ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ !! j ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ !! i !Υπολογισμός διαμέσου ΑΝ Ν MOD 2 =0 TOTE Διάμεσος ΑΛΛΙΩΣ Διάμεσος ΤΕΛΟΣ_ΑΝ ! Εκτύπωση αποτελεσμάτων ΓΡΑΨΕ `ΑΠΟΤΕΛΕΣΜΑΤΑ' ΓΡΑΨΕ `============' ΓΡΑΨΕ `Πλήθος τιμών =', Ν ΓΡΑΨΕ `Μέση τιμή = ', ΜΤ ΓΡΑΨΕ `Τυπική απόκλιση = ', Τυπ_Απόκλιση ΓΡΑΨΕ `Διάμεσος = ', Διάμεσος ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ Στατιστική

Προγραμματιστικό περιβάλλον Basic ` Στατιστική DEFINT A-Z DIM x(100) CLS sum = 0: sum2 = 0 ` Εισαγωγή δεδομένων INPUT "N=", n FOR i = 1 TO n PRINT "Δώσε τον "; i; "-το αριθμό : "; INPUT "", x(i) NEXT i ` Υπολογισμός αθροισμάτων FOR i = 1 TO n sum = sum + x(i) sum2 = sum2 + x(i) 2 NEXT i mt! = sum / n ` Μέση τιμή ta! = SQR(sum2 / n - mt! 2) `Τυπ. Απόκλ. ` Ταξινόμηση πίνακα FOR i = 2 TO n FOR j = n TO i STEP -1 IF x(j - 1) > x(j) THEN SWAP x(j - 1), x(j) NEXT j NEXT i ` Υπολογισμός διαμέσου IF n MOD 2 = 0 THEN median = (x(n / 2) + x(n / 2 + 1)) / 2 ELSE median = x((n + 1) / 2) END IF PRINT "ΑΠΟΤΕΛΕΣΜΑΤΑ" PRINT "=======================" PRINT "Πλήθος τιμών ="; n PRINT "Μέση τιμή ="; mt! PRINT "Τυπική απόκλιση ="; ta! PRINT "Διάμεσος="; median END