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.