Προγραμματισμός PASCAL Μονοδιάστατοι Πίνακες (Arrays) Ανδρέας Σάββα
Πίνακες (Arrays) Βαγόνι: [1] [2] [3] [4] [5] [6] ανθρώπους 14 6 10 8 3 Βαγόνι: [1] [2] [3] [4] [5] [6] Βαγόνι[1] = 2, Βαγόνι[2] = 14, Βαγόνι[5] = 8
Πως θα μου στείλετε επιστολή; Τι θα γράψετε στο φάκελο; Οδός Μεγάλου Αλεξάνδρου Eleftherias[1] Eleftherias[2] Eleftherias[3] Eleftherias[7] Andreas Savva Eleftherias 4 Nicosia 1 2 3 4 5 6 7 8 Το σπίτι μου Οδός Ελευθερίας
Πολυκατοικία ΑΚΡΟΠΟΛΗ 1ος Όροφος 2ος Όροφος 3ος Όροφος 4ος Όροφος 5ος Όροφος Ισόγειο ή Όροφος 0 Akropoli[0] Akropoli[1] Akropoli[2] Akropoli[3] Akropoli[4] Akropoli[5] 5 4 3 2 1 -1 Ασανσέρ Υπόγειο ή Όροφος -1 Akropoli[-1]
Τι είναι Πίνακας Είναι μια ομάδα διαδοχικών θέσεων μνήμης, η οποία αποθηκεύει τιμές του ίδιου τύπου. Κάθε συγκεκριμένη θέση του πίνακα ονομάζεται στοιχείο και προσδιορίζεται από ένα δείκτη. Όλα τα στοιχεία του πίνακα έχουν κοινό όνομα (το όνομα του πίνακα) αλλά έχουν διαφορετικό δείκτη. Numbers[1] Numbers[2] Numbers[3] Numbers[4] Numbers[5] Numbers 6 3 7 4 Δείκτες 1 2 5
Παράδειγμα Πίνακα Number 6 7 9 [1] [2] [3] [4] [5] Δείκτες Όνομα πίνακα Τιμές Number 6 7 9 Δείκτες [1] [2] [3] [4] [5] Number[1] 6 Number[2] 7 Number[3] 9 Number[4] 0 Number[5] 7
Πίνακες VAR <όνομα πίνακα> : ARRAY [<διάσταση>] OF <τύπος τιμών>; Σύνταξη: Παράδειγμα: VAR Numbers : ARRAY [1..10] OF Integer; Numbers 6 3 8 4 7 -32 12 99 Δείκτες 1 2 5 9 10
Παραδείγματα DaysInMonth[5] 31 IdiktitisSpitiou[3] ’Γιώργος’ VAR DaysInMonth : ARRAY [1..12] OF Integer; IdioktitisSpitiou : ARRAY [1..5] OF String; DaysInMonth 31 28 30 Δείκτες 1 2 3 4 5 6 7 8 9 10 11 12 IdioktitisSpitiou ’Σάββας’ ’Κώστας’ ’Γιωργος’ ’Παύλος’ ’Μάριος’ Δείκτες 1 2 3 4 5 DaysInMonth[5] 31 IdiktitisSpitiou[3] ’Γιώργος’
Προσοχή λάθος Το πιο κάτω είναι λάθος. Γιατί; VAR DaysInMonth : ARRAY [12..1] OF Integer; Ελάχιστη Τιμή Μέγιστη Τιμή
Πίνακες ορισμένοι από τον Χρήστη TYPE <όνομα τύπου> = ARRAY [<διάσταση>] OF <τύπος τιμών>; Σύνταξη: Παράδειγμα: TYPE List = ARRAY [1..5] OF Integer; VAR Ν1, N2 : List; Begin N1[3] := 4; N1[1] := N1[3]; N2[5] := N1[1]; End. N1 1 2 3 4 5 4 4 N2 1 2 3 4 5 4
Δήλωση Πίνακα είναι το ίδιο με: TYPE MyArray = Array [1 .. 12] of integer; Παράδειγμα: είναι το ίδιο με: TYPE Month = 1 .. 12; MyArray = Array [Month] of integer;
Παραδείγματα Ορισμού Πινάκων VAR A : Array [1..100] of boolean; B : Array [-3..5] of integer; C : Array [100..1000] of -5..7; D : Array [’A’..’F’] of real; E : Array [1..10] of ’a’..’z’; A True False … 1 2 3 4 5 100 B -5 87 2 -12 123 7 9 -3 -2 -1 1 3 4 5 C -2 7 -1 -3 2 … 100 101 102 103 104 105 1000 D 1.2 0.02 231.0 66.12 78.01 -2.4 ’A’ ’B’ ’C’ ’D’ ’E’ ’F’ E ’c’ ’r’ ’a’ ’v’ ’d’ ’f’ ’p’ 1 2 3 4 5 6 7 8 9 10
Παραδείγματα Ορισμού Πινάκων TYPE Season = (Winter, Spring, Summer, Autumn) Day = (Mon, Tue, Wed, Thu, Fri, Sat, Sun); Color = (Red, Green, Blue); VAR A : Array [1..5] of Day; B : Array [’D’..’K’] of Color; C : Array [Tue..Fri] of Season; D : Array [Color] of Color; Παραδείγματα Ορισμού Πινάκων A Fri Mon Tue Wed 1 2 3 4 5 B Red Green Blue ’D’ ’E’ ’F’ ’G’ ’H’ ’I’ ’J’ ’K’ C Summer Winter Spring Tue Wed Thu Fri D Green Blue Red
Παράδειγμα Program DisplayMonths; uses wincrt; CONST Max = 10; TYPE MyArray = Array[1..Max] of integer; VAR A : MyArray; i : integer; Begin (* main *) for i := 1 to Max do A[i] := i + 10; for i := 1 to Max DIV 2 do A[i] := A[i+5] – A[i]; writeln(A[i]) End. 5 16 17 18 19 20 Output: A 5 16 17 18 19 20 1 2 3 4 6 7 8 9 10 A 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10 A 1 2 3 4 5 6 7 8 9 10
Πίνακες σαν Τυπικές Παράμετροι Πίνακες σαν Τυπικές Παράμετροι TYPE Salary = Real; MonthSalary = Array[1..12] of Salary; Procedure Display (m : Array[1..12] of Salary); Procedure Display (m : MonthSalary);
Σημαντικές Εφαρμογές Πινάκων A := B; ή FOR i := 1 to Max DO A[i] := B[i]; ή ανάποδη αντιγραφή FOR i := 1 TO 10 DO A[Max-i+1] := B[i]; Αντιγραφή Πίνακα: For i := 1 to Max do A[i] := 0; ή Word[i] := ’ ’; Τοποθέτηση αρχικών τιμών: Εισαγωγή τιμών: For i := 1 to Max do Read(A[i]); Τύπωμα τιμών: For i := 1 to Max do Write(A[i]);
Σημαντικές Εφαρμογές Πινάκων Sum := 0; FOR i := 1 to Max DO Sum := Sum + A[i]; Writeln(’The sum is ’, Sum); Άθροισμα τιμών του πίνακα: i := 1; Found := False; While NOT Found and (i <= Max) do Begin Found := A[i] = SearchingKey; i := i + 1 End; If Found then Writeln(SearchingKey, ’ is found’) Else Writeln(SearchingKey, ’ is not found’); Αναζήτηση:
String – Πίνακας από χαρακτήρες Συνάρτηση Length – Επιστρέφει το μέγεθος του string Length(String) integer Π.χ. Length(’I like school’) 13 Length(’123456789:?@’) 12 Παράδειγμα που τυπώνει πόσα ’A’ έχει το string Name: Var i, Count : integer; Name : String; . . . Count := 0; For i := 1 to Length(Name) do If Name[i] = ’A’ then Count := Count + 1; Writeln(’Character -A- found ’, Count, ’ times’)
Άσκηση 1