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.