To są zadania na pliki.
Oglądaj wskazówki i rozwiązania __SHOWALL__
Ukryj wskazówki i rozwiązania __HIDEALL__
W poniższych zadaniach zakładamy, że eof(f) implikuje eoln(f).
Zadanie 1
Napisz funkcję sprawdzającą, czy dwa pliki tekstowe o podanych nazwach mają tę samą liczbę wierszy.
Wskazówka 1
Najprostsze rozwiązanie polega na policzeniu liczby wierszy w jednym i drugim pliku, a potem porównaniu tych liczb.
Rozwiązanie 1
function LiczWiersze(f:Text):integer;
// f otwarty plik tekstowy
var c:char;
l:integer;
begin
l:=0;
while not eof(f) do begin
while not eoln(f) do
read(f,c);
readln(f);
l:=l+1;
end;
LiczWiersze:=l;
end; // LiczWiersze
function RownoWierszowe(s1,s2:string):Boolean;
var f1,f2:Text;
begin // RownoWierszowe
assign(f1,s1);
assign(f2,s2);
reset(f1);
reset(f2);
RownoLinijne:=LiczWiersze(f1)=LiczWiersze(f2);
close(f1);
close(f2);
end; // RownoWierszowe
Zaletą tego rozwiązania jest możliwość powtórnego wykorzystania funkcji LiczWiersze do innych celów, a wadą konieczność czytania obu plików, nawet gdy jeden jest bardzo mały, a drugi bardzo duży.
Wskazówka 2
Można też wczytywać po jednym wierszu z każdego pliku, aż któryś z nich się nie skończy.
Rozwiązanie 2
function RownoWierszowe2(s1,s2:string):Boolean; //s1,s2, to ścieżki dostępu do plików f1 i f2
var f1,f2:Text;
c:char;
begin
assign(f1,s1);
assign(f2,s2);
reset(f1);
reset(f2);
while not (eof(f1) or eof(f2)) do begin
readln(f1); //korzystamy tu z semantyki Readln, która połyka resztę wiersza i przechodzi do nowego.
readln(f2);
end;
RownoWierszowe2:=eof(f1) and eof(f2);
close(f1);
close(f2);
end; // RownoWierszowe2
Czytamy po jednym wierszu z każdego pliku, aż co najmniej jeden z nich się skończy. Jeśli okazało się, że skończyły się oba naraz - mają tę samą liczbę wierszy. Jeśli skończył się tylko jeden - ten drugi musi być dłuższy.
Zadanie 2
Napisz procedurę, która skopiuje plik tekstowy f na g, modyfikując go w następujący sposób: bezpośrednio po każdym słowie należy wstawić koniec wiersza, a nowy wiersz rozpocząć od nowego słowa (spacje i puste wiersze należy pomijać).
Słowem (w tym zadaniu) nazywamy dowolny maksymalny spójny ciąg znaków niezawierający spacji i znaków końca wiersza. Nie zakładamy niczego o długości słów.
Wskazówka 1
{{{3}}}
Rozwiązanie 1
{{{3}}}
Rozwiązanie 2
{{{3}}}
Zadanie 3 (Usuwanie komentarzy)
Napisz procedurę usuwającą komentarze z pliku tekstowego zawierającego program w Pascalu.
Komentarze oznaczone są przez { ... } lub (* ... *). Należy przy tym uważać, by nie usuwać komentarzy znajdujących się wewnątrz napisów (oznaczonych przez ' ... ')
Wskazówka 1
{{{3}}}
Rozwiązanie 1
{{{3}}}