Zadanie 6 z laboratorium programowania na Informatyce UW.
Zadanie 6 (termin wysylania rozwiazan: 22 II 2008, godz. 23:59)
(Odwracanie tekstu)
Napisz program, ktory wczyta z wejscia tekst, a nastepnie wypisze go na
wyjscie, odwracajac kolejnosc wierszy.
Np. dla danych:
program czesc;
begin
writeln('Czesc')
end.
program powinien wypisac:
end.
writeln('Czesc')
begin
program czesc;
Wolno zalozyc, ze dlugosci wierszy tekstu na wejsciu nie przekraczaja 65535,
ale nie wolno nakladac ograniczenia na liczbe wierszy.
Wskazowka:
Wczytaj tekst z wejscia i utworz pomocniczy plik binarny, w ktorym po
zawartosci kazdego wiersza znajda sie dwa bajty dlugosci tego wiersza.
Nastepnie przejdz po wierszach zapisanych w tym pliku, w kolejnosci od
ostatniego do pierwszego, i wypisz je na wyjscie.
Pliku pomocniczego nie trzeba usuwac po zakonczeniu pracy programu.
A oto rozwiązanie:
program zad6;
type
//Struktura danych to lista dwuwymiarowa. Wiersze rosna w tyl, dzieki czemu naturalnie sie odwracaja.
//Tutaj beda przechowywane litery
litera=^literka;
literka=record
nastepny:litera;
txt:char;
end;
//A tu cale wiersze
wiersz=^wier;
wier=record
txt:litera;
nastepny:wiersz;
end;
var znak:char;
pierwszy,teraz,tmp:wiersz;
teraz_znak,tmp_znak:litera;
begin
teraz:=nil;
//Wczytujemy kolejne wiersze nowe przystawiajac z przodu. Dzieki temu odwracaja sie naturalnie.
while not EOF do
begin
new(pierwszy);
pierwszy^.nastepny:=teraz;
teraz:=pierwszy;
read(znak);
new(teraz^.txt);
teraz_znak:=teraz^.txt;
teraz_znak^.nastepny:=nil;
teraz_znak^.txt:=znak;
//Wczytujemy litery w wierszach az nie trafimy na koniec
while znakchar(10) do
begin
read(znak);
new(teraz_znak^.nastepny);
teraz_znak:=teraz_znak^.nastepny;
teraz_znak^.nastepny:=nil;
teraz_znak^.txt:=znak;
end
end;
//Wiersze
while teraz nil do
begin
tmp:=teraz;
teraz_znak:=teraz^.txt;
//Wypisujemy litery i caly czas sprzatamy po sobie.
while teraz_znak nil do
begin
write(teraz_znak^.txt);
tmp_znak:=teraz_znak;
teraz_znak:=teraz_znak^.nastepny;
dispose(tmp_znak);
end;
teraz:=teraz^.nastepny;
dispose(tmp);
end
end.