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

Αναζήτηση

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

9.3. Πολυδιάστατοι πίνακες

Στο προηγούμενο παράδειγμα υπήρχαν 30 τιμές της θερμοκρασίας, μία για κάθε ημέρα του μήνα και για την επίλυση του χρησιμοποιήθηκε ένας πίνακας 30 θέσεων, ο πίνακας Θερμοκρασία. Ο πίνακας αυτός περιέχει τις τιμές της θερμοκρασίας για κάθε ημέρα μίας πόλης και ο δείκτης δείχνει την ημέρα. Έστω ότι οι θερμοκρασίες δίνονται από τον παρακάτω πίνακα.

ΠΟΛΗ ΗΜΕΡΑ1 2 … 10 1 25 21 … 32 2 26 22 … 31 …… …. .. 3027 23 … 30

Ο πίνακας αυτός έχει τις θερμοκρασίες για 30 ημέρες αλλά για δέκα διαφορετικές πόλεις, δηλαδή υπάρχουν συνολικά 300 τιμές θερμοκρασίας. Για να καθοριστεί κάθε στοιχείο δεν αρκεί μόνο ένας δείκτης, αλλά απαιτούνται δύο δείκτες, ο ένας για την ημέρα και ο δεύτερος για την πόλη. Για παράδειγμα η πρώτη πόλη την τριακοστή ημέρα είχε θερμοκρασία 27.

Για την επεξεργασία των θερμοκρασιών μπορεί να χρησιμοποιηθεί ένας δισδιάστατος πίνακας, στον οποίο ο πρώτος δείκτης δείχνει τη γραμμή (στο παράδειγμα την ημέρα) και ο δεύτερος τη στήλη (την πόλη). Το στοιχείο Θερμοκρασία[30,1] έχει την τιμή 27.

Στην γενική περίπτωση κάθε στοιχείο του πίνακα είναι το στοιχείο Θερμοκρασία[i,j] και αναφέρεται στη θερμοκρασία στην i γραμμή και την j στήλη, όπου το i παίρνει τιμή από 1 έως 30 και το j από 1 έως 10. Ο πίνακας Θερμοκρασία είναι ένας δισδιάστατος πίνακας 30Χ10.

Παράδειγμα 3 Να γραφεί πρόγραμμα που να υπολογίζει τη μέση θερμοκρασία κάθε πόλης για τον προηγούμενο πίνακα θερμοκρασιών (δίδονται 30 θερμοκρασίες 10 πόλεων). Επίσης, για κάθε πόλη, να υπολογίζει πόσες η μέρες η θερμοκρασία ήταν κατώτερη από την αντίστοιχη μέση.

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

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

Προγραμματιστικό περιβάλλον Pascal

PROGRAM poleis; VAR temperature: array[1..30,1..10] OF REAL; ave:array [1..10] OF REAL; total:REAL; i,j,days:INTEGER; BEGIN FOR i:=1 TO 30 DO FOR j:=1 TO 10 DO BEGIN write (`Δώσε τη θερμοκρασία :',i,j,' `); readln (temperature[i,j]) END; FOR j:=1 TO 10 DO BEGIN total:=0; FOR i:=1 TO 30 DO total:=total+temperature[i,j]; ave[j]:=total/30 END; FOR j:=1 TO 10 DO BEGIN days:=0; FOR i:=1 TO 30 DO IF temperature[i,j] < ave[j] then days:=days+1; writeln (`Μέση θερμοκρασία `,i,' πόλης `,ave[i]:4:1); writeln (`Ημέρες με μικρότερη θερμοκρασία :', days); END END.

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

Στο προηγούμενο παράδειγμα έστω ότι έχουμε θερμοκρασίες για κάθε μία πόλη, για κάθε ημέρα αλλά και για κάθε έτος. Τότε κάθε στοιχείο χρειάζεται τρεις δείκτες. Έναν που θα δείχνει το έτος, έναν που θα δείχνει την πόλη και έναν που θα δείχνει την ημέρα. Για παράδειγμα η θερμοκρασία της πρώτης ημέρας, της πρώτης πόλης και του πρώτου έτους είναι 25 και είναι το στοιχείο Θερμοκρασία [1,1,1].

2001 ΠΟΛΗ ΗΜΕΡΑ 12 … 10 125 21 … 32 226 22 18 31 2000 ΠΟΛΗ …. .. …. … ΗΜΕΡΑ1 2…10 30 27 23 18 30 1 25 21 …32 2 26 22 18 31 1999 ΠΟΛΗ …… .. .. … ΗΜΕΡΑ 1 2… 10 3027 23 18 30 125 21 … 32 226 22 … 31 … …… … … 30 27 23 … 30

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

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

Το πρόγραμμα ουσιαστικά αποτελείται από τρία τμήματα: 1. Την ανάγνωση των δεδομένων και την καταχώρηση του στους αντίστοιχους πίνακες, Ονόματα και Εισπράξεις. 2. Τον υπολογισμό του συνόλου των εισπράξεων ανά κινηματογράφο και την εύρεση της μέγιστης συνολικής είσπραξης, δηλαδή του αθροίσματος των γραμμών του πίνακα. 3. Τον υπολογισμό του συνόλου των εισπράξεων ανά ημέρα και την εύρεση της μέγιστης συνολικής είσπραξης, δηλαδή του αθροίσματος των στηλών του πίνακα.

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

ΠΡΟΓΡΑΜΜΑ Κινηματογράφοι ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: Εισπράξεις[10,7], i,j, Άθροισμα, Μέγιστο, Θέση ΧΑΡΑΚΤΗΡΕΣ: Ονόματα[10] ΑΡΧΗ ! Εισαγωγή δεδομένων και εκχώρηση τους σε δύο πίνακες ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 10 ΓΡΑΨΕ `Δώσε το όνομα του `,i,' κινηματογράφου' ΔΙΑΒΑΣΕ Ονόματα[i] ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ 7 ΓΡΑΨΕ `Δώσε την `, j,'-η είσπραξη' ΔΙΑΒΑΣΕ Εισπράξεις[i,j] ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ !Άθροισμα τωνστοιχείων του πίνακα Εισπράξεις ανά γραμμή !και υπολογισμός του μέγιστου αθροίσματος Μέγιστο ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 10 Άθροισμα ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ 7 Άθροισμα ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΓΡΑΨΕ `Συνολ. είσπραξη ',Ονόματα[i], `=', Άθροισμα ΑΝ Μέγιστο < Άθροισμα ΤΟΤΕ Μέγιστο Θέση ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΓΡΑΨΕ `Μέγ. συνολ. είσπραξη `,Μέγιστο,`στον `,Ονόματα[Θέση] ! Άθροισμα των στοιχείων του πίνακα Εισπράξεις ανά στήλη !και υπολογισμός του μέγιστου αθροίσματος Μέγιστο ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ 7 Άθροισμα ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 10 Άθροισμα ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΓΡΑΨΕ `Συνολ. είσπραξη',j,`-ης ημέρας =', Άθροισμα ΑΝ Μέγιστο < Άθροισμα ΤΟΤΕ Μέγιστο Θέση ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ ΓΡΑΨΕ `Μέγ. συν. είσπραξη `,Μέγιστο, `την `,Θέση, `-η ημέρα' ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ

Προγραμματιστικό περιβάλλον Pascal

PROGRAM cinemas; VAR i,j,k,max,sum:INTEGER; tickets:ARRAY[1..10,1..7] OF INTEGER; name:ARRAY [1..10] OF STRING; BEGIN FOR i:=1 TO 10 do BEGIN write (`Δώσε το όνομα : `); readln (name[i]); FOR j:=1 TO 7 DO BEGIN write (`Δώσε την `, j,' η είσπραξη : `); readln(tickets[i,j]); END; END; max:=0; FOR i:=1 TO 10 DO BEGIN sum:=0; FOR j:=1 TO 7 DO sum:=sum+tickets[i,j]; writeln(`Σύνολο `, name[i],' = `, sum); IF max BEGIN max:=sum; k:=i; END; END; writeln (`Μέγιστο `, max, ` στον `, name[k]); max:=0; FOR j:=1 TO 7 DO BEGIN sum:=0; FOR i:=1 TO 10 DO sum:=sum+tickets[i,j]; writeln(`Σύνολο `,j,' ημέρας = `, sum); IF max BEGIN max:=sum; k:=j; END; END; writeln (`Μέγιστο `, max, ` την `, k); END.