ŁAŃCUCHY
Łańcuch ma strukturę danych podobna do tablic lecz jego liczba elementów nie musi byś ścisle określona
Struktury
takie będziemy nazywać łańcuchami. Ich
elementy muszą być typu CHAR. Deklaracja typu łańcuchowego jest następująca:
TYPE
nazwa = STRING[długość_łańcucha];
np.
TYPE
nazwisko = STRING[20];
Wyrażenia:
VAR
x, y: STRING [20];
są
deklaracjami zmiennych x, y i stałej A
typu STRING[20]. W
przykładzie nazwisko jest nazwą typu, w którym są łańcuchy znaków
o długości nie większej niż 20. Zatem każde słowo o długości nie większej
niż 20 znaków jest strukturą tego typu. Maksymalna długość łańcucha nie
może być większa niż 255 znaków. W tym ostatnim przypadku nie musimy podawać
w deklaracji wielkości łańcucha, np.
VAR
x,t: STRING;
Dotychczas używaliśmy
łańcuchów w niejawny sposób, przez używanie instrukcji write tekst').
Tak jak dla danych typu CHAR, tak i tu będziemy konkretne łańcuchy wyróżniać
używając apostrofu, np. 'Zawalny’, '='.
Podobnie, jeśli x jest zmienną typu STRING[n]], to możemy użyć
instrukcji przypisania x:='Zawalny' W Pascalu mamy operację łączenia łańcuchów,
oznaczamy ją symbolem +.
Polecenie: x:’Zawalny’+’Stanisław
daje w wyniku ZawalnyStanisław. W celu
przyporządkowania zmiennej x (typu łańcuchowego) pewnej wartości, używamy
instrukcji przypisania lub polecenia Readln(x).). W tym drugim przypadku
słowo będące wartością przyporządkowaną zmiennej x będzie wpisane
z klawiatury.
Dość powszechnie jest
stosowany porządek alfabetyczny. Dla przykładu, nazwiska w książce
telefonicznej są ustawione w porządku alfabetycznym. Zasady tego porządku są
następujące: w pierwszej kolejności porządkujemy nazwiska według ich
pierwszej litery, dalej nazwiska zaczynające się od tej samej litery porządkujemy
według drugiej litery itd. Zakładamy przy tym,
że jeśli nazwisko-1 jest początkiem nazwisko-2,
to nazwisko-l<nazwisko~2.
Opisany tu porządek czasem nosi nazwę porządku leksykograficznego.
Do wyrażenia tego porządku możemy używać symboli <,
<=, >, >=,
= np. ''A'<'B'', ''A'<'ABC'.
Pojęcie łańcucha jest naturalnym uogólnieniem pojęcia danej typu CHAR oraz tablic jednowymiarowych, których elementy mają typ CHAR. Do wykonywania bardziej skomplikowanych operacji na łańcuchach mamy w Turbo Pascalu pewne standardowe procedury i funkcje łańcuchowe. Procedury te są zawarte w module SYSTEM. Oto najważniejsze z nich:
Length(s:
STRING): BYTE
Jest to funkcja podająca długość określonego
łańcucha. Wynik operacji jest liczbą całkowitą.
Jest to procedura
przekształcająca podaną wartość numeryczną i
(rzeczywistą lub całkowitą) w łańcuch znaków i przypisująca go zmiennej użytej
w miejsce parametru wejściowo-wyjściowego s.
Funkcja ta może być używana z parametrem, np. Str(i:n,s)
co powoduje, że z danej liczby tworzy się łańcuch o długości n,
przy czym następuje obcięcie wyrażenia numerycznego lub uzupełnienie go
spacjami. Podobnie działa polecenie Str(i:n:m,s)
zastosowane do danych typu REAL. Uwaga, symbol '.'
jest traktowany jako element łańcucha.
Val(s: STRING; VAR r:: REAL; VAR p:
INTEGER)
Przy tym: s jest
pewnym łańcuchem przedstawiającym wyrażenie numeryczne, parametr r-jest
typu INTEGER lub REAL, parametr p jest typu INTEGER.
Procedura ta przekształca dany łańcuch w odpowiadające mu wyrażenie
numeryczne i przypisuje je zmiennej użytej w miejscu parametru r. Użyta
tu zmienna w miejscu p przyjmuje wartość O, jeśli wykonalna jest
procedura VAL lub n, (n jest numerem
znaku, który uniemożliwił konwersję). W tym ostatnim przypadku wartość
parametru r pozostaje taka sama jak przed wykonaniem procedury.
Tworzy nowy łańcuch będący
fragmentem łańcucha s od miejsca o numerze m i o długości n.
Concat(sl,...,sk:
STRING): STRING
Tworzy łańcuch będący sumą wyszczególnionych łańcuchów.
Otrzymany wynik nie powinien mieć więcej niż 255 znaków.
Pos(sl,s2: STRING): INTEGER
Podaje jako wynik
najmniejszy numer miejsca w łańcuchu s2,
od którego zaczyna się łańcuch identyczny z s
l.
Insert(s:
STRING; VAR d: STRING; n:
INTEGER)
Wstawia do łańcucha d
w miejscu n łańcucha, przy czym będą
wstawione tylko te znaki poczynając od lewej, które nie powodują
przekroczenia zadeklarowanej długości łańcucha o?.
Delete(VAR s:
STRING; n,m:
INTEGER)
Usuwa z podanego łańcucha m znaków poczynając od miejsca o
numerze n włącznie.
PROGRAM
Dlugosc_wyrazow;
USES
Crt;
VAR
Nazwisko : String[25];
Imie
: String[20];
(******************************)
BEGIN
ClrScr;
Writeln;
Writeln('Wyznaczenie dlugosci nazwiska i imienia ');
Writeln;
Write('Pisanie nalezy zakonczyc nacisnieciem');
Writeln('
klawisza Enter
');
Writeln;
Write('Podaj nazwisko : ');
Readln(Nazwisko);
Write('Podaj imie
: ');
Readln(Imie);
Writeln;
Writeln('Imie ',Imie,' zawiera ',Length(Imie),' liter');
Writeln('Nazwisko ',Nazwisko,' zawiera ', Length(Nazwisko),' liter');
REPEAT UNTIL KeyPressed
END.
PROGRAM
Obecnosc_litery_a;
USES
Crt;
VAR
tekst
: STRING;
i
: INTEGER;
ile
: INTEGER;
(*********************)
BEGIN
ClrScr;
Writeln(' Wyznaczenie liczby malych liter ''a'' w tekscie');
Writeln;
Writeln(' Napisz tekst i nacisnij ENTER');
Readln(tekst);
ile:=0;
FOR
i:=1 TO LENGTH(tekst) DO
IF (tekst[i]='a') THEN
ile:=ile+1;
Writeln(' Liczba malych liter ''w'' w tekscie : ',ile);
REPEAT UNTIL KeyPressed
END.
PROGRAM
Przejrzysta_postac_liczb;
USES
Crt;
VAR
Liczba_String : STRING[15];
Liczba
: LONGINT;
Licznik
: SHORTINT;
(*************************************************************)
BEGIN
ClrScr;
WriteLn(' Przejrzystosc
liczb');
WriteLn;
Write(' Podaj liczbe calkowita (do 9 cyfr): ');
ReadLn(Liczba);
STR(Liczba,Liczba_String);
Licznik := LENGTH(Liczba_String) - 2;
WHILE Licznik > 0 DO
BEGIN
Insert (' ',Liczba_String, Licznik);
Licznik := Licznik - 3
END;
WriteLn;
WriteLn(' Przejrzysta postac : ', Liczba_String);
REPEAT UNTIL KeyPressed
END.