Gdybyśmy musieli zrealizować tylko jedno z tych dwóch zadań, niepotrzebne byłoby pamiętanie nazwisk, operację można by przeprowadzić „w locie”, podczas wczytywania danych. Ale ponieważ mamy dwa zadania, musimy użyć tablicy.
program cw4_05;
{ Program wczytuje do tablicy 5 nazwisk i wypisuje }
{ te, które nie zaczynaja sie od liter od A do K, a }
{ następnie wszystkie dluzsze, niz 5-cio znakowe. }
{ Katalog r4_01 : 4_05.pas }
var
Nazwiska : array Cl.- 5] of String;
I : Byte;
Znaleziono : Boolean; begin
for I :■ 1 to 5 do begin
Write ('Podaj nazwisko nr I, '); Readln (NazwiskaCI]); end;
Znaleziono False;
Writeln ('Nazwiska rozpoczynające sie od liter późniejszych niz K:‘); for I :- 1 to 5 do
if (Upcase(Nazwiska[I][l])>'K') then begin
Znaleziono True;
Write (NazwiskaCI], ' '); end;
if not Znaleziono then
Write ('Nie znaleziono takich nazwisk.');
Writeln; Writeln;
Znaleziono False;
Writeln ('Nazwiska dlusze, niz 5-cio znakowe:'); for I :• 1 to 5 do
if (Length(Nazwiska[I])>5) then begin
Znaleziono True;
Write (NazwiskaCI], ' '); end;
if not Znaleziono then
Write ('Nie znaleziono takich nazwisk.');
Writeln;
Readln; end.
Wygląda to mało skomplikowanie, poza jednym wyrażeniem:
Nazwiska[I][l]
NazwiskaCI] to zapamiętana w I-tej komórce tablicy zmienna łańcuchowa. A co oznacza indeks [1]? Tajemnica tkwi w tym, że w pewnym sensie do zmiennej łańcuchowej można odwoływać się tak, jak do tablicy znaków. I i-ty element tej tablicy jest dokładnie I-tym znakiem łańcucha. Dzięki temu łatwo możemy skorzystać z funkcji Upcase, która jako parametru wymaga znaku, a nie łańcucha. Powyższe wyrażenie to po prostu znak będący pierwszą literą odpowiedniego nazwiska.