Laboratorium programowania zad 5

Zadanie 5 z laboratorium programowania na Informatyce UW.

Zadanie 5 (termin wysylania rozwiazan: 15 II 2008, godz. 23:59)

(Komentarze)

Komentarze zaczynaja sie od pary znakow / i koncza na koncu wiersza.

Napisz program, ktory skopiuje plik tekstowy, wyrownujac wszystkie
komentarze tak, by zaczynaly sie w tej samej kolumnie. Komentarz,
ktorego poczatek jest najbardziej wysuniety w prawo, ma pozostac w
tym samym miejscu wiersza, a poczatki wszystkich, ktore zaczynaja
sie wczesniej, maja zostac przesuniete poprzez poprzedzenie ich
odpowiednia liczba spacji.

Program bedzie wywolywany z jednym parametrem - nazwa pliku tekstowego,
a wynikowy tekst wypisze na standardowe wyjscie.

Np. dla danych umieszczonych w pliku dane.txt:

wiersz pierwszy // to jest komentarz
drugi// to tez komentarz
tu nie ma komentarza
4 wiersz // ten komentarz zaczal sie od // a konczy tu

program wywolany poleceniem:

./zadanie5 dane.txt

powinien wypisac na wyjscie:

wiersz pierwszy // to jest komentarz
drugi           // to tez komentarz
tu nie ma komentarza
4 wiersz        // ten komentarz zaczal sie od // a konczy tu

Wskazowka:

Program powinien przejsc po pliku tekstowym dwa razy - raz, by poznac
pozycje najbardziej wysunietego komentarza i drugi raz, by stworzyc
kopie.

A oto rozwiązanie:

program zad5;
USES crt;
//Program napisany na zajęcia z Laboratorium Języka Pascal i C. Zadania nr 5.


var
argumentow,dlugosc,i,j,najdluz:integer;
parametr,wiersz:string;
znaleziono:boolean;
plik:text;



begin

	//Przechwutujemy liczbe argumentow
	argumentow:=ParamCount();

	if (argumentow=1) then
	begin
		//Czytamy parametr
		parametr:=ParamStr(1);

		//Otwieramy plik
		assign(plik, parametr);
		reset(plik);
		najdluz:=0;
		while not EOF(plik) do
		begin
			//Wczytujemy po wierszu
			readln(plik,wiersz);
			dlugosc:=length(wiersz);
			i:=1;
			while ((inajdluz) then
						najdluz:=i;
					znaleziono:=true;
				end;
				i:=i+1;
			end;

		end;
		//wczytane. Teraz najdluz to pierwszy najdalej wysuniety / 

		//Przeskakujemy do poczatku.
		reset(plik);
				
		while not EOF(plik) do
		begin
			//Po wierszu
			readln(plik,wiersz);
			dlugosc:=length(wiersz);
			for i:=1 to dlugosc-1 do
			begin
				//Znalezlismy znak komentarza
				if ((wiersz[i]='/') AND (wiersz[i+1]='/')) then
				begin
					//Dodajemy spacje
					for j:=i to najdluz-1 do
					begin
						write(' ');
					end;
				end;
				//Piszemy znak
				write(wiersz[i]);
			end;
			//Piszemy ostatni znak z wiersza
			write(wiersz[i+1]);
			//I znak nowego wiersza.
			writeln();
		end;
		
	end
end.

Leave a Reply