Algorytmy na tekstach

Zmiana wielkości liter

W niektórych programach zachodzi potrzeba zmiany wielkości liter. Np. gdy użytkownik wpisze swoje imię małą literą, może być miło zaskoczony, gdy komputer i tak wyświetli je wielką literą.
Do zmiany wielkości znaku służy funkcja UpCase(ch : char); Zmienia ona jednak wielkość pojedynczego znaku a nie całego napisu. Żeby zmienić wielkość całego napisu musimy to zrobić ręcznie za pomocą pętli.
Jeśli chcemy zmienić pierwszą literę wczytanego napisu, można użyć:
ReadLn(napis);

napis[1] := UpCase(napis[1]);

WriteLn(napis);
A co jeśli chcemy zmienić cały napis na duży? Wystarczy dodać pętlę, a zamiast cyfry 1 w powyższym przykładzie, zmienną, która będzie stopniowo zwiększana.

ReadLn(napis);

for i:=1 to Length(napis) do

napis[i] := UpCase(napis[i]);

WriteLn(apis);

Kopiowanie części napisu

Do kopiowania fragmentów napisu służy funkcja Copy(napis : string; start, dlugosc : Integer; ).
Oznacza to, że gdy ze zmiennej ‘napis’ o wartości ‘Ala ma kota’ chcemy skopiować do innej zmiennej pierwsze 3 litery, używamy:
Zmienna := Copy(napis, 1, 3);
Możemy oczywiście wpisać
WriteLn(Copy(napis, 1, 3));
Najczęściej jednak, musimy najpierw sami wykryć miejsce, od którego zaczniemy kopiowanie, potem długość szukanego słowa a dopiero zacząć kopiować.

Odwrócenie liter

Jednym z często spotykanych problemów jest napisanie programu, odwracającego kolejność liter w napisie.
Wystarczy użyć pętli, która podmieni znak z początku na znak z końca i na odwrót, potem zrobi to ze znakiem następnym i następnym aż do… końca napisu? Nie! Gdyby pętla przeszła dalej niż za połowę napisu, zaczęłaby znowu odwracać znaki, które przecież już zostały odwrócone. Efektem nic by się nie zmieniło, choć program byłby napisany ogólnie poprawnie. Pętla odwracająca musi iść od pierwszego znaku, tylko do połowy napisu.
Inny problem pojawi się z zamianą znaku z końca na początkowy I na odwrót. Jaki to problem? Gdy za znak z początku podstawimy znak z końca, to co wstawimy na koniec? Gdybyśmy wstawili teraz znak z początku, to już nie jest to znak, który był rzeczywiście na początku. Trzeba po prostu najpierw zapamiętać znak, który jest na początku, potem na początek wstawić znak z końca, a na koniec, ten zapamiętany.

t-05

Odwrócenie wyrazów 

Żeby odwrócić kolejność wyrazów w napisie będziemy musieli wyszukiwać spacje od końca napisu. Gdy znajdziemy spację, kopiujemy wyraz, który będzie za nią do miejsca, na którym skończyliśmy ostatnio i wstawiamy skopiowany wyraz na koniec naszej nowej zmiennej. Idziemy tak aż do pierwszego znaku w napisie.

tekst01

Efekt działania programu

tekst02

Author: ZSE

Share This Post On
Skip to content