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.