Wstęp do programowania/Pliki/Ćwiczenia: Różnice pomiędzy wersjami
Linia 14: | Linia 14: | ||
{{wskazowka| 1||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | {{wskazowka| 1||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | ||
Najprostsze rozwiązanie polega na policzeniu liczby | Najprostsze rozwiązanie polega na policzeniu liczby wierszy w jednym i drugim pliku, a potem porównaniu tych liczb. | ||
</div> | </div> | ||
</div>}} | </div>}} | ||
{{rozwiazanie| 1||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | {{rozwiazanie| 1||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | ||
'''function''' | '''function''' LiczWiersze(f:Text):integer; | ||
// f otwarty plik tekstowy | // f otwarty plik tekstowy | ||
'''var''' c:character; | '''var''' c:character; | ||
Linia 31: | Linia 31: | ||
l:=l+1; | l:=l+1; | ||
'''end'''; | '''end'''; | ||
LiczWiersze:=l; | |||
'''end'''; // | '''end'''; // LiczWiersze | ||
'''function''' | '''function''' RownoWierszowe(s1,s2:string):Boolean; | ||
'''var''' f1,f2:Text; | '''var''' f1,f2:Text; | ||
'''begin''' // | '''begin''' // RownoWierszowe | ||
assign(f1,s1); | assign(f1,s1); | ||
assign(f2,s2); | assign(f2,s2); | ||
reset(f1); | reset(f1); | ||
reset(f2); | reset(f2); | ||
RownoLinijne:= | RownoLinijne:=LiczWiersze(f1)=LiczWiersze(f2); | ||
close(f1); | close(f1); | ||
close(f2); | close(f2); | ||
'''end'''; // | '''end'''; // RownoWierszowe | ||
Zaletą tego rozwiązania jest możliwość powtórnego wykorzystania funkcji | 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. | ||
</div> | </div> | ||
</div>}} | </div>}} | ||
{{wskazowka| 2||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | {{wskazowka| 2||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | ||
Można też wczytywać po | Można też wczytywać po jednym wierszu z każdego pliku, aż któryś z nich się nie skończy. | ||
</div> | </div> | ||
</div>}} | </div>}} | ||
{{rozwiazanie| 2||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | {{rozwiazanie| 2||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | ||
'''function''' | '''function''' RownoWierszowe2(s1,s2:string):Boolean; //s1,s2, to ścieżki dostępu do plików f1 i f2 | ||
'''var''' f1,f2:Text; | '''var''' f1,f2:Text; | ||
c:character; | c:character; | ||
Linia 65: | Linia 65: | ||
reset(f2); | reset(f2); | ||
'''while''' '''not''' (eof(f1) '''or''' eof(f2)) '''do''' '''begin''' | '''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(f1); | |||
readln(f2); | readln(f2); | ||
'''end'''; | '''end'''; | ||
RownoWierszowe2:=eof(f1) '''and''' eof(f2); | |||
close(f1); | close(f1); | ||
close(f2); | close(f2); | ||
'''end'''; // | '''end'''; // RownoWierszowe2 | ||
Czytamy po | 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. | ||
</div> | </div> | ||
</div>}} | </div>}} |
Wersja z 22:32, 8 sty 2012
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
Rozwiązanie 1
Wskazówka 2
Rozwiązanie 2
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
Rozwiązanie 1
Rozwiązanie 2
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
Rozwiązanie 1