MPDI2 Informatyka – ćw.9
Programowanie Pascal (3)
Typ tablicowy array
Typ tablicowy jest typem strukturalnym (złożonym) stanowiącym skończony zbiór elemen-
tów tego samego typu, o położeniu określanym przez indeksy. Zmienna typu tablicowego od-
powiada tablicy (macierzy) w sensie matematycznym. Tablice posiadają wymiar zależny od
liczby indeksów (1, 2, 3-wymiarowe) oraz rozmiar zależny od zakresu określoności indeksu
w każdym wymiarze (np. rozmiar - 10 kolumn, 15 wierszy).
array [ lista_typów_indeksów ] of typ_składowych
Lista typów indeksów
określa wymiar tablicy i jej rozmiar w każdym wymiarze – najczę-
ś
ciej typu okrojonego całkowitego w postaci n..m. Przykładowo array[1..20, 1..30] of
typ_skladowych to tablica 2-wymiarowa o rozmiarach 20x30..
Typ składowych
jest dowolny
z wyjątkiem plikowego, a więc tablica może zawierać liczby, znaki, napisy, inne tablice, re-
kordy itp.
Przykładowe deklaracje tablic:
var
//wektor liczb całkowitych o rozmiarze 51
tab1: array [0..50] of integer;
//dwie tablice prostok
ą
tne(2-wymiarowe)
//zawieraj
ą
ce liczby rzeczywiste
tab2,tab3: array [1..20, 1..30] of real;
//91-elementowa tablica ła
ń
cuchów (napisów)
tab3: array [-40..50] of string[20];
Wykorzystanie elementu (indeksowanego) zmiennej tablicowej w części wykonawczej pro-
gramu – tak jak zmienna prosta (w zależności od typu):
zmienna_tablicowa
[
indeks(-y)
]
Indeksy mogą być stałymi lub wyrażeniami zgodnymi co do liczby, kolejności i typu jak w
definicji. Oczywiście zawartość elementu zmiennej tablicowej też musi być zgodna co do typu
z definicją. Przykładowo:
tab1[0]:= 100;//przypisanie warto
ś
ci
for k:=1 to 50 do
tab1[k]:=0;
if tab1[8]>0 then
tab2[1,1]:= sin(pi/4));
itd.
Zmienne tablicowe całościowe mogą być wykorzystane jedynie w operacji przypisania
(przy zgodności typów), np.:
var
tab1, tab2: array [1..10, 1..20] of real;
begin
...
tab1 := tab2;// przepisz cał
ą
tablic
ę
tab2 do tab1
...
end;
Tablice – przykładowe operacje
Nadawanie wartości elementom wykonuje się przez proste przypisania, często w "pętli"
for, gdy istnieje jakaś algorytmiczna zależność pomiędzy kolejnymi elementami. Dla tablic
dwuwymiarowych stosuje się wówczas pętle zagnieżdżane.
Deklaracja zmiennych:
//deklaracja zmiennej tablicowej
var
tab1 : array [1..5, 1..5] of real ;
w, k : 1..5 ;
Instrukcje wykonawcze:
//nadanie warto
ś
ci 0.1 elementowi tablicy
tab1[2, 3] := 0.1 ;
//wypełnianie pierwszego wiersza zerami
for k:= 1 to 5 do
tab1[1, k] := 0.0 ;
//wypełnianie drugiego wiersza kolejnymi liczbami parzystymi
for k := 1 to 5 do
tab1[2, k] := 2 * k ;
//wypełnianie trzeciego wiersza kolejnymi liczbami nieparzy-
stymi
for k := 1 to 5 do
tab1[3, k] := 2 * k – 1 ;
//wypełnianie przek
ą
tnej głównej warto
ś
ciami 0.5 1 1.5 itd.
for w := 1 to 5 do
tab1[w, w] := w/2 ;//indeks wiersza i kolumny te same
//wypełnianie całej tablicy, zagnieżdżanie iteracji
for w := 1 to 5 do
for k := 1 to 5 do tab1[w, k] := w+2*k;
{wypełnienie tablicy znakami – uwaga: deklaracja tablicy tab2 musi być inna – dlacze-
go?}
for w := 1 to 5 do
for k := 1 to 5 do
tab2[w, k] := chr(50+5*i+k);
//funkcja chr(kod) znajduje znak o podanym kodzie ASCII
//wyświetlenie tablicy dwuwymiarowej na ekranie konsoli:
for w := 1 to 5 do
begin
for k := 1 to 5 do
write(tab1[w,k]:5);
writeln;//zmiana wiersza
end;
Ć
wiczenie
1.
Wykonać program ilustrujący działania z powyższego przykładu. Wykonać prawidłowe
deklaracje zmiennych tablicowych. W programie po każdej zmianie zawartości tablicy
wpisać instrukcje wyświetlające jej aktualna zawartość.
2.
Wykonać aplikację, która spełni następujące zadania:
a)
wypełni tablicę o rozmiarze 10x10 dowolnymi liczbami rzeczywistymi (wykorzystać
funkcję generatora liczb losowych),
b)
wyświetli na konsoli tylko 3-ci wiersz tablicy.
c)
obliczy sumę wszystkich elementów tablicy i wyświetli ją ekranie w konsoli.
d)
znajdzie sumę wszystkich dodatnich elementów.
3.
Utworzyć aplikację dla dodawania dwóch dowolnych tablic dwuwymiarowych (oczywi-
ś
cie tego samego rozmiaru i typu) z liczbami rzeczywistymi (mogą być generowane lo-
sowo). Zastosować zagnieżdżane iteracje for.