12 (32)
Trochę ciekawostek – na weekend (czego to ludzie nie wymyślą ...
Lekcja
12 - Kurs Visual C++ by SLASH
Na
dzisiejszej lekcji dowiemy siê co to s± tablice zmiennych.
A wiêc
tak - tablica zmiennych jest niczym innym jak zbiorem zmiennych o tym samym
typie. My najczê¶ciej bêdziemy stosowaæ jeden typ tablic - CStingArray -
czyli tablica przechowuj±ca dane tekstowe i ni± w g³ównej mierze siê
zajmiemy. Ale jeszcze do czê¶ciej stosowanych tablic nale¿y CUIntArray -
czyli tablica przechowuj±ca liczby ca³kowite (Tutaj nie pos³u¿yli¶my siê deklaracj±
int tylko Uint !).
Pewnie
zastanawiasz siê po co to stosowaæ - ja sam na pocz±tku ucz±c siê Visual
Basica nie mog³em zrozumieæ po co mam wykorzystywaæ tablice - a jednak s±
niezbêdne. Pomy¶l sobie, ¿e mamy program który bêdzie pamiêta³ imiona i
nazwiska osób. Jak by¶ to zapisywa³ do zmiennych skoro nie wiesz ile tych
nazwisk bêdzie - mo¿esz sobie oczywi¶cie tworzyæ kilkaset zmiennych a potem
to obrabiaæ - np. dajmy na to, ¿e chcemy wszystkie nazwiska zapisaæ do pliku.
Poka¿e schematycznie jak by to wygl±da³o gdyby nie u¿ywaæ tablic:
///
Ustalamy sobie limit 100 imion i nazwisk
Imie1 = odczyt z pliku;
Nazwisko1 = odczyt z pliku;
Imie2 = odczyt z pliku;
Nazwisko2 = odczyt z pliku;
Imie3 = odczyt z pliku;
Nazwisko3 = odczyt z pliku;
Imie4 = odczyt z pliku;
Nazwisko4 = odczyt z pliku;
...
Imie100 = odczyt z pliku:
Nazwisko100 = odczyt z pliku;
/// Do tej pory napisali¶my ju¿ 200 linii !
A za pomoc± tablic mo¿emy to zrobiæ tak:
CStringArray Imie;
CStringArray Nazwisko;
Imie.SetSize(100); //Ustalamy
ile zmiennych mo¿e siê mie¶ciæ w tablicy
Nazwisko.SetSize(100);
for (int x=1; x < 100; x++)
{
Imie[x] = odczyt z pliku;
Nazwisko[x] = odczyt z pliku;
}
// A
teraz mamy zaledwie 9 linii
Jak zauwa¿y³e¶
ka¿da element tablicy ma swój indeks dziêki któremu jest rozró¿niany. I w³a¶nie
dziêki funkcji for ³atwo jest tym manipulowaæ - bo zauwa¿, ¿e na pocz±tku
x = 1 tak wiêc nastêpuje zapi do zmiennej Imie[1] oraz Nazwisko[1]. Po tym
nastêpuje zwiêkszenie x do 2 i znów zapis, ale tym razem do Imie[2] i
Nazwisko[2]. W ten sposób ³atwo i szybko mo¿emy przyporz±dkowywaæ zmiennym
dane.
My¶lê,
¿e ju¿ rozumiesz co to s± tablice i jakie maj± zalety - a oto kilka operacji
na tablicach:
Najwa¿niejsze
jest stworzenie tablicy i nadanie jej rozmiaru - uczynili¶my to ju¿ w przyk³adzie
- ja jednak piszê to jeszcze raz na przyk³adzie:
CStringArray
tablica;
tablica.SetSize(50);
I w ten
oto sposób stworzyli¶my tablicê 50 elementow±. Musisz wiedzieæ, ¿e pierwszym rekordem tablicy jest 0 -
nie wykorzystali¶my go w poprzednim przyk³adzie, bo jako¶ lepiej jest zaczynaæ
od 1 ! Ale pamiêtaj, ¿e w tym przypadu najwy¿szy indeks to 49 ! Nie ma ju¿
indeksu 50 !
Do
tablicy mo¿na dodawaæ dane na kilka sposobów :
1.
tablica[3] = "Rekord 4"
Jest to
najpowszechniej stosowany sposób, gdy¿ mo¿na w nim bez problemów u¿yæ pêtli
for do zapisu tej tablicy. Ale co zrobiæ je¶li mamy ju¿ co¶ takiego:
CStringArray
tablica;
tablica.SetSize(50);
tablica[0] = "To jest 0";
tablica[1] = "To jest 1";
tablica[2] = "To jest 3";
tablica[3] = "To jest 4";
tablica[4] = "To jest 5";
I
widzimy, ¿e co¶ jest nie tak ! Chcemy dopisaæ jako tablica[2] = "To jest
2" - ale z przesuniêciem wszystkich danych o 1 index wy¿ej. Je¶li y¶my
po prostu napisali: tablica[2] = "To jest 2" to nasza tablica by wygl±da³a
tak:
tablica[0]
= "To jest 0";
tablica[1] = "To jest 1";
tablica[2] = "To jest 2";
tablica[3] = "To jest 4";
tablica[4] = "To jest 5";
Musieliby¶my
wszystkie rekordy zmieniaæ co by by³o trochê niewygodne - ale istnieje lepszy
sposób - mo¿emy to napisaæ tak:
tablica.InsertAt(2,
"To jest 2");
I dziêki
temu wszystkie rekordy le¿±ce po 1 przesunê³y siê na wy¿szy indeks.
Podobnie mo¿emy usuwaæ zmienne z tablicy przenosz±c wszystkie inne na ni¿szy
indeks - s³u¿y do tego:
tablica.RemoveAt(3);
A je¶li
chcemy opró¿niæ ca³± tablicê to stosujemy funkcjê:
tablica.RemoveAll(
);
Niekiedy
bêdzie nam potrzebna ilo¶æ elementów tablicy = je¶li zapisywali¶my je
kolejno zaczynaj±c od 0 to mo¿emy to sprawdziæ tak:
int ilosc
= tablica.GetUpperBound() + 1;
A je¶li
zaczynali¶my od 1 to wystarczy samo
int ilosc =
tablica.GetUpperBound();
To by by³o
na tyle je¶li chodzi o tablice - na nastêpnej lekcji poæwiczymy to sobie
trochê na ListBoxie którego tak¿e poznasz.
Pamiêtaj
! Je¶li masz jakikolwiek problem ze zrozumieniem tego kursu to napisz do mnie -
na ka¿dego maila odpisujê chêtnie. Tak¿e wszelkie opinie, za¿alenia itp.
kieruj na mój adres - chcê wiedzieæ czy ten kurs Wam siê podoba czy te¿ nie
Adres -