Laboratorium programowania zad 6

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.

Leave a Reply