Metody programowania / Ćwiczenia 2: Różnice pomiędzy wersjami
8 zadan na listy |
Nie podano opisu zmian |
||
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