Metody programowania / Ćwiczenia 2: Różnice pomiędzy wersjami
(8 zadan na listy) |
|||
Linia 3: | Linia 3: | ||
W poniższych zadaniach będziemy używać następujących typów: | W poniższych zadaniach będziemy używać następujących typów: | ||
− | '''type''' el_listy=record | + | '''type''' el_listy = record |
− | + | w: integer; | |
− | + | nast: ^el_listy; | |
− | + | end; | |
− | lista=^el_listy; | + | lista = ^el_listy; |
== Zadanie 1 (Odwracanie listy)== | == Zadanie 1 (Odwracanie listy)== | ||
Linia 31: | Linia 31: | ||
''Koszt pamięciowy'': stały | ''Koszt pamięciowy'': stały | ||
− | |||
− | |||
− | |||
− | |||
− | |||
</div> | </div> | ||
</div>}} | </div>}} | ||
== Zadanie 2 (Scalanie dwóch posortowanych list)== | == Zadanie 2 (Scalanie dwóch posortowanych list)== | ||
− | Napisz funkcję Scal(l1,l2:lista):lista scalającą dwie posortowane niemalejąco listy l1 i l2, tak aby wynikowa lista | + | Napisz funkcję Scal(l1,l2:lista):lista scalającą dwie posortowane niemalejąco listy l1 i l2, tak aby wynikowa lista również była posortowana niemalejąco. |
{{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"> | ||
Linia 51: | Linia 46: | ||
akt:=atrapa; | akt:=atrapa; | ||
'''while''' l1 <> nil and l2 <> nil '''do''' | '''while''' l1 <> nil and l2 <> nil '''do''' | ||
− | '''if''' l1^. | + | '''if''' l1^.w < l2^.w '''then''' '''begin''' //jeśli l1^.w < l2^.w |
akt^.nast:=l1; | akt^.nast:=l1; | ||
akt:=akt^.nast; | akt:=akt^.nast; | ||
Linia 57: | Linia 52: | ||
'''end''' | '''end''' | ||
'''else''' | '''else''' | ||
− | '''if''' l1^. | + | '''if''' l1^.w > l2^.w '''then''' '''begin''' //jeśli l1^.w > l2^.w |
akt^.nast:=l2; | akt^.nast:=l2; | ||
akt:=akt^.nast; | akt:=akt^.nast; | ||
l2:=l2^.nast; | l2:=l2^.nast; | ||
'''end''' | '''end''' | ||
− | '''else''' '''begin''' | + | '''else''' '''begin''' //jeśli l1^.w = l2^.w |
akt^.nast:=l1; | akt^.nast:=l1; | ||
akt:=akt^.nast; | akt:=akt^.nast; | ||
Linia 70: | Linia 65: | ||
l2:=l2^.nast; | l2:=l2^.nast; | ||
'''end'''; | '''end'''; | ||
− | '''while''' l1 <> nil '''do''' '''begin''' | + | '''if''' l1 = nil '''then''' l1:=l2; |
+ | '''while''' l1 <> nil '''do''' '''begin''' //obsługa końcówki listy która nie jest pusta | ||
akt^.nast:=l1; | akt^.nast:=l1; | ||
akt:=akt^.nast; | akt:=akt^.nast; | ||
l1:=l1^.nast; | l1:=l1^.nast; | ||
− | |||
− | |||
− | |||
− | |||
− | |||
'''end'''; | '''end'''; | ||
Scal:=atrapa^.nast; | Scal:=atrapa^.nast; | ||
Linia 99: | Linia 90: | ||
{{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"> | ||
'''procedure''' Usuń(var l1:lista; l2:lista); | '''procedure''' Usuń(var l1:lista; l2:lista); | ||
− | //Usuwamy z listy l1 wszystkie elementy z listy l2; zakładamy, że listy l1 i l2 są | + | //Usuwamy z listy l1 wszystkie elementy z listy l2; zakładamy, że listy l1 i l2 są posortowane niemalejąco |
'''var''' atrapa, poprz: lista; | '''var''' atrapa, poprz: lista; | ||
'''begin''' | '''begin''' | ||
Linia 106: | Linia 97: | ||
poprz:=atrapa; | poprz:=atrapa; | ||
'''while''' l1 <> nil and l2 <> nil '''do''' | '''while''' l1 <> nil and l2 <> nil '''do''' | ||
− | '''if''' l1^. | + | '''if''' l1^.w < l2^.w '''then''' '''begin''' //jeśli l1^.w < l2^.w |
l1:=l1^.nast; | l1:=l1^.nast; | ||
poprz:=poprz^.nast; | poprz:=poprz^.nast; | ||
'''end''' | '''end''' | ||
'''else''' | '''else''' | ||
− | '''if''' l1^. | + | '''if''' l1^.w > l2^.w '''then''' //jeśli l1^.w > l2^.w |
l2:=l2^.nast | l2:=l2^.nast | ||
− | '''else''' '''begin''' | + | '''else''' '''begin''' //jeśli l1^.w = l2^.w |
poprz^.nast:=l1^.nast; | poprz^.nast:=l1^.nast; | ||
dispose(l1); | dispose(l1); | ||
Linia 128: | Linia 119: | ||
{{cwiczenie| 1|pytanko 1|<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | {{cwiczenie| 1|pytanko 1|<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | ||
− | Czy lista l1 musi być przekazywana przez zmienną ? W jakich przypadkach to | + | Czy lista l1 musi być przekazywana przez zmienną ? W jakich przypadkach to jest konieczne ? |
</div> | </div> | ||
</div>}} | </div>}} | ||
Linia 134: | Linia 125: | ||
== Zadanie 4 (Uporządkowanie elementów w liście)== | == Zadanie 4 (Uporządkowanie elementów w liście)== | ||
Napisz procedurę Uporządkuj(var l:lista) która przestawi elementy w liście l tak by najpierw były elementy w których pole w jest ujemne, potem równe zero a potem dodatnie. Dodatkowo względna kolejność elelmentów jednego rodzaju (dodatnich, równych zero i ujemnych) powinna być zachowana. | Napisz procedurę Uporządkuj(var l:lista) która przestawi elementy w liście l tak by najpierw były elementy w których pole w jest ujemne, potem równe zero a potem dodatnie. Dodatkowo względna kolejność elelmentów jednego rodzaju (dodatnich, równych zero i ujemnych) powinna być zachowana. | ||
− | |||
{{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"> | ||
Linia 171: | Linia 161: | ||
</div> | </div> | ||
</div>}} | </div>}} | ||
− | |||
== Zadanie 5 (Problem Józefa Flawiusza)== | == Zadanie 5 (Problem Józefa Flawiusza)== | ||
Napisz procedurę Flawiusz(var l:lista; k:integer), która dla danego | Napisz procedurę Flawiusz(var l:lista; k:integer), która dla danego | ||
k > 0 i niepustej cyklicznej listy l, cyklicznie usuwa co k-ty element listy, tak aby pozostał tylko jeden. Liczenie rozpoczynamy od elemnetu wskazywanego przez l. | k > 0 i niepustej cyklicznej listy l, cyklicznie usuwa co k-ty element listy, tak aby pozostał tylko jeden. Liczenie rozpoczynamy od elemnetu wskazywanego przez l. | ||
− | |||
{{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"> |
Wersja z 16:36, 13 sie 2006
To są zadania na listy.
W poniższych zadaniach będziemy używać następujących typów:
type el_listy = record w: integer; nast: ^el_listy; end; lista = ^el_listy;
Zadanie 1 (Odwracanie listy)
Napisz procedurę Odwróć(var l:lista) odwracającą listę l.
Rozwiązanie 1
Zadanie 2 (Scalanie dwóch posortowanych list)
Napisz funkcję Scal(l1,l2:lista):lista scalającą dwie posortowane niemalejąco listy l1 i l2, tak aby wynikowa lista również była posortowana niemalejąco.
Rozwiązanie 1
Ćwiczenie 1
Zadanie 3 (Usuwanie elementów zadanych listą)
Napisz procedurę Usuń(var l1:lista; l2:lista) która usunie z listy l1 wszystkie elementy z listy l2. Zakładamy, że listy l1 i l2 są posortowanych niemalejąco.
Rozwiązanie 1
Ćwiczenie 1
Zadanie 4 (Uporządkowanie elementów w liście)
Napisz procedurę Uporządkuj(var l:lista) która przestawi elementy w liście l tak by najpierw były elementy w których pole w jest ujemne, potem równe zero a potem dodatnie. Dodatkowo względna kolejność elelmentów jednego rodzaju (dodatnich, równych zero i ujemnych) powinna być zachowana.
Rozwiązanie 1
Zadanie 5 (Problem Józefa Flawiusza)
Napisz procedurę Flawiusz(var l:lista; k:integer), która dla danego k > 0 i niepustej cyklicznej listy l, cyklicznie usuwa co k-ty element listy, tak aby pozostał tylko jeden. Liczenie rozpoczynamy od elemnetu wskazywanego przez l.
Rozwiązanie 1
Zadanie 6 (Listy łączące się)
Dane są dwie listy proste (kończące się nilami). Napisz funkcję stwierdzającą czy te listy mają jakiś wspólny element (nie wartość typu integer, a element typu el_listy).
Wskazówka 1
Rozwiązanie 1
Zadanie 7 (Pierwszy wspólny element list łączących się)
Dane są dwie listy proste (kończące się nilami) i takie że maja one element wspólny (funkcja Wspólny z poprzedniego zadania dałaby wynik true). Napisz funkcję odnajdującą pierwszy element wspólny tych list.
Wskazówka 1
Rozwiązanie 1
Ćwiczenie 1
Zadanie 8 (Listy z cyklem)
Napisz funkcje która sprawdzi czy dana l typu lista jest listą prostą czy też listą z cyklem.
Wskazówka 1
Rozwiązanie 1
Zadanie 8 (Długość cyklu w liście z cyklem)
Napisz funkcje która dla danej listy z cyklem obliczy długość cyklu.
Wskazówka 1
Rozwiązanie 1
Wskazówka 2
Rozwiązanie 2