TME IITh

Forum naszej klasy z pomocnymi informacjami

Ogłoszenie

Witam wszystkich na nowo powstałym forum naszej klasy II Th!

#1 2009-03-13 16:56:06

Kostek

Moderator

Zarejestrowany: 2009-03-04
Posty: 8
Punktów :   

[TP] Tablice

Typy Tablicowe

Przypomnienie:
Zapewne kojarzysz co to jest zmienna, ale przypomnę jakie są jej funkcje. Zmienna podobnie
jak stała przechowuje w pamięci jakąś wartość podczas wykonywania programu. Zmienne różnych typów mogą przechowywać różne wartości np. zmienna typu char może posiadać wartość w  postaci znaku ASCII (1 bajt), a zmienna typu byte może przechowywać wartości liczbowe w zakresie od 0 do 255 itd. Zmienna różni się od stałej tym, że podczas wykonywania programu jej wartość może ulec zmianie, a wartość stałej jest przez cały okres wykonywania programu taka sama.
Deklaracje stałych i zmiennych;
const nazwastalej=wartosc;
var nazwazmiennej    :typ;

Ok. To co wyżej napisałem wystarczy wam do poznania tablic.

Wprowadzenie
Wyobraź sobie, ze piszesz program. Potrzebujesz wprowadzić 15 różnych liczb całkowitych do piętnastu różnych zmiennych. Aby to wykonać musisz zdeklarować 15 zmiennych, a następnie 15 razy użyć funkcji read(zmienna). Zajęło by sporo miejsca, a co dopiero jeśli trzeba było by wprowadzić 150 różnych liczb. Właśnie do tego celu stworzono tablice.
Tablica - jest to zbiór zmiennych (bądź stałych - o tym później) tego samego typu. Każda  taka "zmienna" w tablicy nazywana jest elementem tablicy.   
Wielu podręcznikach lub kursach dotyczących podstaw Pascal’a tablice są deklarowane w sekcji "var". My będziemy najpierw opisywać typ tablicowy (type), a następnie w sekcji „var” będziemy deklarować zmienną wcześniej opisanego typu. W ten sposób zadeklarowana tablica będzie mogła zostać przekazana do funkcji lub procedury jako parametr.

Słowem kluczowym dotyczącym tablic jest słowo "array" co z ang. oznacza tablica.
Przykładowy program zawierający deklarację tablicy:

Kod:

Program definicja_tablicy;
uses Crt;
Const lw = 3;                    
Type T_tablica = array[1..lw] of byte;  {opisujemy typ tablicowy, ktorego ilosc elementow                                             przekazywane jest przez stala lw}

var  Tablica   : T_Tablica;        {deklarujemy zmienna tego typu}

begin
end.

Do tablic i jej elementów odnosimy się prawie tak samo jak do zmiennych, z tym, że po  nazwie tablicy w nawiasach kwadratowych podajemy numer elementu. np:

Kod:

Tablica[1]:=6;       {Elementowi 1 z tablicy przypisz 6};
write(Tablica[3]); {Wypisz wartosc elementu 3 z tablicy}
read(Tablica[2]);  {wprowadz wartosc dla elementu 2 z tablicy}

Wykonaj poniższe ćwiczenia, pamiętaj, aby wyświetlać wartości przejrzyście
np.

Kod:

writeln('Element 1: ',Tablica[numerelementu]);

-- CWICZENIE --
Zadeklaruj tablice 4 elementowa typu byte, a w programie za pomocą instrukcji przypisania  elementowi 1 przypisz dowolna wartość z zakresu od 0 do 255, pozostałym elementom wprowadź wartość z klawiatury (read/readln), a następnie wyświetl wszystkie elementy tablicy.

PAMIETAJ TYP BYTE MOZE "PAMIETAC" WARTOŚCI Z ZAKRESU OD 0 DO 255!
-- koniec ćwiczenia --

-- CWICZENIE 2 --
Zadeklaruj tablice 4 elementową typu char, elementowi 1 przypisz wartość dowolnego znaku z tablicy ASCII, a pozostałym elementom wprowadź wartość z klawiatury. Na końcu wyświetl wszystkie elementy tablicy.
-- koniec ćwiczenia --

Jeśli zrobiłeś te ćwiczenia bez problemu to możesz iść dalej, jeśli nie to pisz: w temacie  albo gg.

Jak widać ćwiczenia były banalne, mam nadzieję, że teraz umiesz zadeklarować tablice  (opisać typ i zadeklarować zmienną tego typu), wprowadzać do jej elementów wartości i  wypisywać wartości elementów.

Wymiary
Aby było fajniej tablice posiadają swoje wymiary. Wszystkie dotychczas tablice były jedno  wymiarowe: czyli Tablica posiadała "lw" wierszy. ("lw" - stała określająca ilość wierszy  (elementów) w tablicy).

Tablice dwuwymiarowe: logicznie ująć - posiadają "lw" wierszy i "lk" kolumn, (lk - stała  określająca ilość kolumn w tablicy). Tablice dwuwymiarowe można sobie wyobrazić jako tabele (otwórz sobie arkusz kalkulacyjny to obrazowo zobaczysz jak to wygląda), a ich deklaracje są prawie tak banalne jak deklaracje tablic jednowymiarowych:

Kod:

Program definicja_tablicy_dwuwymiarowej;
uses Crt;
Const lw = 3;  {liczba wierszy}
      lk = 4;  {liczba kolumn }            {    
Type T_tablica = array[1..lw,1..lk] of byte; 

var  Tablica   : T_Tablica;        {deklarujemy zmienna tego typu}

begin
end.

Jak widać w przykładzie array[1..lw,1..lk] w pierwszej kolejności deklarujemy liczbę
wierszy a w drugiej (po przecinku) deklarujemy liczbę kolumn. Tablica w przykładzie
posiada 4 kolumny po 3 wiersze, czyli łącznie posiada 12 elementów.
Jak odnosimy się do elementów tablic dwuwymiarowych? Prawie tak samo jak do  jednowymiarowych:

Kod:

Tablica[1,2]:=6;       {Elementowi w wierszu 1 kolumnie 2 przypisz 6}
write(Tablica[3,4]);        {Wypisz wartosc elementu w wierszu 3 kolumnie 4}
read(Tablica[2,2]);        {wprowadz wartosc dla elementu w 2 wierszu kolumnie 2}

Trochę z tymi wymiarami namieszałem, ale mam nadzieje, ze ogarniacie

-- CWICZENIE 1 --
Zadeklaruj tablice dwuwymiarowo o wymiarach 2x2 typu integer, a następnie wypełnij ja 
dowolnymi wartościami. Na końcu wypisz wszystkie wartości.
-- koniec ćwiczenia --

Jeśli ogarniasz juz deklaracje tablic jedno, dwuwymiarowych i umiesz odnosić się do ich  elementów to bardzo fajnie, lecz tak na prawdę to jeszcze dużo o nich nie wiesz .

Tablice trójwymiarowe - pewnie myślisz sobie WTF? Juz wyjaśniam! Można deklarować tablice wielowymiarowe (np. 10 wymiarowe), lecz nie znajduje to praktycznego zastosowania. Najczęściej spotyka się tablicę jednowymiarowe, dwuwymiarowe i bardzo rzadko trójwymiarowe.
Jak wyobrazić sobie tablicę trójwymiarową? :
Wyobraź sobie blok (czyli tablica), w bloku są 3 klatki, które zawierają lk pięter, a każde  piętro zawiera lw mieszkań.
Jak zadeklarować taką tablicę?

Kod:

Program 3wymiary;
uses Crt;
Const lw = 3;  {liczba wierszy}
      lk = 4;  {liczba kolumn }            {    
Type T_tablica = array[1..lw,1..lk,1..3] of byte; 
var  Tablica   : T_Tablica;        {deklarujemy zmienna tego typu}
begin
end.

Ogólnie jeśli nie ogarniasz trójwymiarowych tablic to nie masz co się przejmować, ponieważ są one rzadko spotykane.

Stałe tablicowe

Wszystkie dotychczasowe tablice deklarowaliśmy jako zmienne i w programie uzupełnialiśmy ich wartości. Istnieje również możliwość zadeklarowania stałej tablicowej i
wypełnienia jej w stałej. Analogicznie jak zmienne i stałe - tablice deklarowane przez zmienną mogą zmieniać swoją wartość podczas wykonywania programu, tablice deklarowane stałą przez cały program mają stałe wartości, które nie mogą ulec zmianie. Ok przejdźmy do przykładu deklaracji takiej tablicy i wypełnienia jej.


Przykład dla tablicy jednowymiarowej:

Kod:

Program stalatab1w;
uses Crt;
Const lw=4;
Type T_Tablica = array[1..lw] of byte;

Const Tablica:T_Tablica= (             {otworz tablice}    
                              5,1,3,7      {elementowi 1 przypisz 5, itd, uwaga przy 
                                                               ostatnim ementu brak zecinka}    
                        );   {zamknij tablice}

begin
   writeln(Tablica[1]);
   writeln(Tablica[2]);
   writeln(Tablica[3]);
   writeln(Tablica[4]);        
end.

Przyklad dla tablicy dwuwymiarowej:

Kod:

Program stalatab2w;
uses Crt;
Const lw=3; lk=3;
Type T_Tablica = array[1..lw,1..lk] of byte;

Const Tablica:T_Tablica= (
                             (3,7,1), {pierwsza kolumna ma 3 elementy}
                                   (6,3,1), {druga kolumna ma 3 elementy}
                                         (9,2,4)  {trzecia kolumna ma 3 elementy}
                                     );     
                               
Begin
    writeln(Tablica[2,2]);
    writeln(Tablica[1,3]);
    writeln(Tablica[3,2]);
end.

Myślę, że jeśli zrozumiałeś wszystko od początku tego tematu, to nie powinieneś mieć problemu ze zrozumieniem tych dziwnych "stałych".

Ok, czyli umiemy opisywać typ tablicowy, deklarować zmienne i stałe opisanego typu, potrafimy wypełniać wartościami itd. ale co nam z tego skoro jeśli będziemy mieli wprowadzić do tablicy np. 20 różnych wartości? 22-krotne użycie funkcji read zajmie mnóstwo miejsca. I tu przychodzą nam z pomocą pętle, albo jak kto woli "pentle".
Wszystko na przykładzie:

Kod:

Program tabpetl1w;
uses Crt;
Const lw=3;
Type T_Tablica = array[1..lw] of byte;

var Tablica :T_Tablica;
    w        :byte;        
begin
   for w:=1 to lw do
         readln(Tablica[w]);
end.

Już opisuje działanie tej pętli:
1. zmiennej ‘w’ podstaw 1
2. przeczytaj z klawiatury wartość dla elementu ‘w’
3. wróć, zwiększ zmienną ‘w’ o 1, jeśli zmienna w>lw to przerwij działanie pętli.

Tak wygląda wprowadzanie wartości do tablicy jednowymiarowej. Teraz czas na tablice dwuwymiarowe i to jest ciut bardziej skomplikowane. Trzeba skorzystać z tzw. "zagnieżdżenia pętli" czyli pętli w pętli
Przykład:

Kod:

Program tabpetl2w;
uses Crt;
Const lw=3; lk=4;
Type T_Tablica = array[1..lw,1..lk] of byte;

var Tablica :T_Tablica;
    w,k        :byte;

begin
   for w:=1 to lw do
     for k:=1 to lk do
       readln(Tablica[w,k]);

end.

Jak działa ta pętla? PROSTO!:
1. zmiennej ‘w’ podstaw 1,
2. zmiennej ‘k’ podstaw 1,
3. przeczytaj z klawiatury wartość dla elementu na pozycji [w,k]
4. wróć, zwiększ zmienna ‘w’ o 1, jeśli zmienna w>lw to przerwij działanie pętli,
5. zwiększ zmienna ‘k’ o 1, jeśli zmienna k>lk to przerwij działanie pętli.

Myślę, że już wystarczy tych tablic. Komentujcie, pytajcie i zróbcie ćwiczenia


-- CWICZENIE 1 --
Zadeklaruj 2 tablice tego samego typu o wymiarach 3x3. Jedną z tych tablic wypełnij dowolnie wybranymi wartościami w STAŁEJ. Druga tablice wypełnij za pomocą pętli również dowolnie wybranymi wartościami. Korzystając z pętli wyświetl obie tablice. Następnie korzystając z pętli drugiej tablicy przypisz wartości z tablicy wypełnionej w stałej, wyczyść ekran i wyświetl jeszcze raz obie tablice. Jeśli są takie same tzn, ze dobrze wykonałeś to zad.


WSKAZOWKI:
korzystaj z ClrScr aby zachować przejrzystość;
podstawiaj wartości wg wzoru: tablica[element]:=tablica2[element];
najlepiej wyświetlaj to: writeln(Tablica1[element],' - ',Tablica2[element]);

----------

Z góry mówię, że nie stosowałem tutaj „fachowego” języka, więc jak by się uprzeć to znajdzie się kilka „technicznych” błędów. Ten temat miał na celu na „chłopski” rozum wytłumaczyć tablice, ale wydaję mi się, że trochę za mocno namieszałem.

Krytyka mile widziana, i dajcie znać czy ogarniacie coś z tego
Kostek

Offline

 

Stopka forum

RSS
Powered by PunBB
© Copyright 2002–2008 PunBB
Polityka cookies - Wersja Lo-Fi


Darmowe Forum | Ciekawe Fora | Darmowe Fora
www.nyanfriends.pun.pl psycholog dziecięcy łódź forum www.jumpstyle-polska.pun.pl zakład karny malbork www.akshaykumar.pun.pl