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…

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.


Follow the thread

Start here

Eight essays connecting disciplines, useful progress, and deliberate choices.

Writing archive

Browse the complete archive, including technical, personal, travel, and book writing.

Projects

Tools and experiments where the ideas meet practical work.

Leave a Reply

Discover more from Artur Piszek

Subscribe now to keep reading and get access to the full archive.

Continue reading