Wstęp do programowania / Ćwiczenia 2: Różnice pomiędzy wersjami
Nie podano opisu zmian |
Nie podano opisu zmian |
||
Linia 176: | Linia 176: | ||
</div>}} | </div>}} | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | {{rozwiazanie| 1||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | ||
<div class="mw-collapsible-content" style="display:none"> | |||
'''program''' FlagaTrójkolorowa(N:integer; A:array[1..N] of integer); | '''program''' FlagaTrójkolorowa(N:integer; A:array[1..N] of integer); | ||
'''var''' m,r,w,pom : integer; | '''var''' m,r,w,pom : integer; | ||
Linia 200: | Linia 198: | ||
''Koszt pamięciowy'': stały | ''Koszt pamięciowy'': stały | ||
</div> | </div> | ||
</div> | </div>}} | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | |||
{{rozwiazanie| 2||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | |||
<div class="mw-collapsible-content" style="display:none"> | |||
'''program''' FlagaTrójkolorowa(N:integer; A:array[1..N] of integer); | '''program''' FlagaTrójkolorowa(N:integer; A:array[1..N] of integer); | ||
'''var''' m,r,w,pom : integer; | '''var''' m,r,w,pom : integer; | ||
Linia 227: | Linia 224: | ||
''Koszt pamięciowy'': stały | ''Koszt pamięciowy'': stały | ||
</div> | </div> | ||
</div> | </div>}} | ||
== Zadanie 3 (Najdłuższe plateau) == | == Zadanie 3 (Najdłuższe plateau) == | ||
Linia 237: | Linia 234: | ||
</div>}} | </div>}} | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | {{rozwiazanie| 1||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | ||
<div class="mw-collapsible-content" style="display:none"> | |||
'''program''' NajdłuższePlateau1(N:integer; A:array[1..N] of integer); | '''program''' NajdłuższePlateau1(N:integer; A:array[1..N] of integer); | ||
'''var''' l,p,w,maks: integer; | '''var''' l,p,w,maks: integer; | ||
Linia 258: | Linia 253: | ||
''Koszt pamięciowy'': stały | ''Koszt pamięciowy'': stał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"> | ||
Linia 265: | Linia 260: | ||
</div>}} | </div>}} | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | {{rozwiazanie| 2||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | ||
<div class="mw-collapsible-content" style="display:none"> | |||
'''program''' NajdłuższePlateau2(N:integer; A:array[1..N] of integer); | '''program''' NajdłuższePlateau2(N:integer; A:array[1..N] of integer); | ||
'''var''' w,p,dl,maks: integer; | '''var''' w,p,dl,maks: integer; | ||
Linia 285: | Linia 278: | ||
''Koszt pamięciowy'': stały | ''Koszt pamięciowy'': stały | ||
</div> | </div> | ||
</div> | </div>}} | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | |||
{{cwiczenie| 1|pytanko 1|<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | |||
<div class="mw-collapsible-content" style="display:none"> | |||
Czy przedostatnia linia programu w Rozwiązaniu 2 jest potrzebna? Co by było gdyby jej nie było ? | Czy przedostatnia linia programu w Rozwiązaniu 2 jest potrzebna? Co by było gdyby jej nie było ? | ||
</div> | </div> | ||
</div> | </div>}} | ||
===Inna wersja zadania=== | ===Inna wersja zadania=== | ||
A co było gdyby tablica była posortowana ? | A co było gdyby tablica była posortowana ? | ||
Linia 300: | Linia 293: | ||
</div>}} | </div>}} | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | {{rozwiazanie| 3||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | ||
<div class="mw-collapsible-content" style="display:none"> | |||
'''program''' NajdłuższePlateau3(N:integer; A:array[1..N] of integer); | '''program''' NajdłuższePlateau3(N:integer; A:array[1..N] of integer); | ||
'''var''' i,maks: integer; | '''var''' i,maks: integer; | ||
Linia 314: | Linia 305: | ||
''Koszt pamięciowy'': stały | ''Koszt pamięciowy'': stały | ||
</div> | </div> | ||
</div> | </div>}} | ||
== Zadanie 4 (Segment o maksymalnej sumie) == | == Zadanie 4 (Segment o maksymalnej sumie) == | ||
Linia 324: | Linia 315: | ||
</div>}} | </div>}} | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | {{rozwiazanie| 1||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | ||
<div class="mw-collapsible-content" style="display:none"> | |||
'''program''' SegmentOMaksymalnejSumie1(N:integer; A:array[1..N] of integer); | '''program''' SegmentOMaksymalnejSumie1(N:integer; A:array[1..N] of integer); | ||
'''var''' l,p,j,suma,maks: integer; | '''var''' l,p,j,suma,maks: integer; | ||
Linia 343: | Linia 332: | ||
''Koszt pamięciowy'': stały | ''Koszt pamięciowy'': stał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"> | ||
Linia 350: | Linia 339: | ||
</div>}} | </div>}} | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | {{rozwiazanie| 2||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | ||
<div class="mw-collapsible-content" style="display:none"> | |||
'''program''' SegmentOMaksymalnejSumie2(N:integer; A:array[1..N] of integer); | '''program''' SegmentOMaksymalnejSumie2(N:integer; A:array[1..N] of integer); | ||
'''var''' l,p,suma, maks: integer; | '''var''' l,p,suma, maks: integer; | ||
Linia 369: | Linia 356: | ||
''Koszt pamięciowy'': stały | ''Koszt pamięciowy'': stały | ||
</div> | </div> | ||
</div> | </div>}} | ||
{{wskazowka| 3||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | {{wskazowka| 3||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | ||
Linia 376: | Linia 363: | ||
</div>}} | </div>}} | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | {{rozwiazanie| 3||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | ||
<div class="mw-collapsible-content" style="display:none"> | |||
'''program''' SegmentOMaksymalnejSumie3(N:integer; A:array[1..N] of integer); | '''program''' SegmentOMaksymalnejSumie3(N:integer; A:array[1..N] of integer); | ||
'''var''' mini_pref,biez_pref,maks,i: integer; | '''var''' mini_pref,biez_pref,maks,i: integer; | ||
Linia 395: | Linia 380: | ||
''Koszt pamięciowy'': stały | ''Koszt pamięciowy'': stały | ||
</div> | </div> | ||
</div> | </div>}} | ||
{{wskazowka| 4||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | {{wskazowka| 4||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | ||
Linia 402: | Linia 387: | ||
</div>}} | </div>}} | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | {{rozwiazanie| 4||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | ||
<div class="mw-collapsible-content" style="display:none"> | |||
'''program''' SegmentOMaksymalnejSumie4(N:integer; A:array[1..N] of integer); | '''program''' SegmentOMaksymalnejSumie4(N:integer; A:array[1..N] of integer); | ||
'''var''' l,p,i,biez,maks: integer; | '''var''' l,p,i,biez,maks: integer; | ||
Linia 431: | Linia 414: | ||
''Koszt pamięciowy'': stały | ''Koszt pamięciowy'': stały | ||
</div> | </div> | ||
</div> | </div>}} | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | |||
{{rozwiazanie| 5||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | |||
<div class="mw-collapsible-content" style="display:none"> | |||
Poniżej znajduje się inaczej (zwięźlej) zapisane Rozwiązanie 4. W tym rozwiązaniu nie odwołujemy się bezpośrednio do początku i końca aktualnego segmentu, a tylko do jego sumy (biez). | Poniżej znajduje się inaczej (zwięźlej) zapisane Rozwiązanie 4. W tym rozwiązaniu nie odwołujemy się bezpośrednio do początku i końca aktualnego segmentu, a tylko do jego sumy (biez). | ||
'''program''' SegmentOMaksymalnejSumie5(N:integer; A:array[1..N] of integer); | '''program''' SegmentOMaksymalnejSumie5(N:integer; A:array[1..N] of integer); | ||
Linia 450: | Linia 432: | ||
''Koszt pamięciowy'': stały | ''Koszt pamięciowy'': stały | ||
</div> | </div> | ||
</div> | </div>}} | ||
== Zadanie 5 (Część wspólna zbiorów) == | == Zadanie 5 (Część wspólna zbiorów) == | ||
Linia 462: | Linia 444: | ||
</div>}} | </div>}} | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | {{rozwiazanie| 1||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | ||
<div class="mw-collapsible-content" style="display:none"> | |||
'''program''' CzęśćWspólna(N:integer; A,B:array[1..N] of integer); | '''program''' CzęśćWspólna(N:integer; A,B:array[1..N] of integer); | ||
//Tablice A i B są posortowane rosnąco | //Tablice A i B są posortowane rosnąco | ||
Linia 484: | Linia 464: | ||
''Koszt pamięciowy'': stały | ''Koszt pamięciowy'': stały | ||
</div> | </div> | ||
</div> | </div>}} | ||
== Zadanie 6 (Suma zbiorów) == | == Zadanie 6 (Suma zbiorów) == | ||
Linia 496: | Linia 476: | ||
</div>}} | </div>}} | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | {{rozwiazanie| 1||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | ||
<div class="mw-collapsible-content" style="display:none"> | |||
'''program''' Suma(N:integer; A,B:array[1..N] of integer); | '''program''' Suma(N:integer; A,B:array[1..N] of integer); | ||
//Tablice A i B są posortowane rosnąco | //Tablice A i B są posortowane rosnąco | ||
Linia 526: | Linia 504: | ||
''Koszt pamięciowy'': stały | ''Koszt pamięciowy'': stały | ||
</div> | </div> | ||
</div> | </div>}} | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | |||
{{cwiczenie| 1|pytanko 1|<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | |||
<div class="mw-collapsible-content" style="display:none"> | |||
Z dwóch pętli while obsługujących końcówki tablic A i B w Rozwiązaniu 1 wykona się co najwyżej jedna. W jakich sytuacjach nie wykona się żadna z nich ? | Z dwóch pętli while obsługujących końcówki tablic A i B w Rozwiązaniu 1 wykona się co najwyżej jedna. W jakich sytuacjach nie wykona się żadna z nich ? | ||
</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"> | ||
Linia 539: | Linia 516: | ||
</div>}} | </div>}} | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | {{rozwiazanie| 2||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | ||
<div class="mw-collapsible-content" style="display:none"> | |||
'''program''' Suma(N:integer; A,B:array[1..N] of integer); | '''program''' Suma(N:integer; A,B:array[1..N] of integer); | ||
//Tablice A i B są posortowane rosnąco | //Tablice A i B są posortowane rosnąco | ||
Linia 575: | Linia 550: | ||
''Koszt pamięciowy'': stały | ''Koszt pamięciowy'': stały | ||
</div> | </div> | ||
</div> | </div>}} | ||
== Zadanie 7 (Podciąg) == | == Zadanie 7 (Podciąg) == | ||
Linia 585: | Linia 560: | ||
</div>}} | </div>}} | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | {{rozwiazanie| 1||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | ||
<div class="mw-collapsible-content" style="display:none"> | |||
'''program''' Podciąg(N,M:integer; A:array[1..N] of integer; B:array[1..M] of integer); | '''program''' Podciąg(N,M:integer; A:array[1..N] of integer; B:array[1..M] of integer); | ||
'''var''' ia,ib: integer; | '''var''' ia,ib: integer; | ||
Linia 609: | Linia 582: | ||
''Koszt pamięciowy'': stały | ''Koszt pamięciowy'': stały | ||
</div> | </div> | ||
</div> | </div>}} | ||
== Zadanie 8 (Odwracanie tablicy) == | == Zadanie 8 (Odwracanie tablicy) == | ||
Linia 619: | Linia 592: | ||
</div>}} | </div>}} | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | {{rozwiazanie| 1||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | ||
<div class="mw-collapsible-content" style="display:none"> | |||
'''program''' Odwracanie1(N:integer; A:array[0..N-1] of integer); | '''program''' Odwracanie1(N:integer; A:array[0..N-1] of integer); | ||
'''var''' l,pom: integer; | '''var''' l,pom: integer; | ||
Linia 637: | Linia 608: | ||
''Koszt pamięciowy'': stały | ''Koszt pamięciowy'': stał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"> | ||
Linia 644: | Linia 615: | ||
</div>}} | </div>}} | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | {{rozwiazanie| 2||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | ||
<div class="mw-collapsible-content" style="display:none"> | |||
'''program''' Odwracanie2(N:integer; A:array[0..N-1] of integer); | '''program''' Odwracanie2(N:integer; A:array[0..N-1] of integer); | ||
'''var''' l,p,pom: integer; | '''var''' l,p,pom: integer; | ||
Linia 676: | Linia 645: | ||
'''end'''. | '''end'''. | ||
</div> | </div> | ||
</div> | </div>}} | ||
== Zadanie 9 (Przesunięcie cykliczne) == | == Zadanie 9 (Przesunięcie cykliczne) == | ||
Linia 685: | Linia 654: | ||
</div> | </div> | ||
</div>}} | </div>}} | ||
{{rozwiazanie| 1||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | |||
<div class="mw-collapsible-content" style="display:none"> | |||
'''program''' Przesuń1(N,k:integer; A:array[1..N] of integer); | '''program''' Przesuń1(N,k:integer; A:array[1..N] of integer); | ||
'''var''' i: integer; | '''var''' i: integer; | ||
Linia 700: | Linia 666: | ||
''Koszt pamięciowy'': liniowy względem N | ''Koszt pamięciowy'': liniowy względem N | ||
</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"> | ||
Linia 707: | Linia 673: | ||
</div>}} | </div>}} | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | {{rozwiazanie| 2||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | ||
<div class="mw-collapsible-content" style="display:none"> | |||
'''program''' Przesuń2(N,k:integer; A:array[1..N] of integer); | '''program''' Przesuń2(N,k:integer; A:array[1..N] of integer); | ||
// k > 1 | // k > 1 | ||
Linia 731: | Linia 695: | ||
''Koszt pamięciowy'': stały | ''Koszt pamięciowy'': stały | ||
</div> | </div> | ||
</div> | </div>}} | ||
{{wskazowka| 3||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | {{wskazowka| 3||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | ||
Linia 738: | Linia 702: | ||
</div>}} | </div>}} | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | {{rozwiazanie| 3||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | ||
<div class="mw-collapsible-content" style="display:none"> | |||
'''program''' Przesun3(N,k:integer; A:array[1..N] of integer); | '''program''' Przesun3(N,k:integer; A:array[1..N] of integer); | ||
// k > 1 | // k > 1 | ||
Linia 758: | Linia 720: | ||
''Koszt pamięciowy'': stały | ''Koszt pamięciowy'': stały | ||
</div> | </div> | ||
</div> | </div>}} | ||
== Zadanie 10 (Następna permutacja) == | == Zadanie 10 (Następna permutacja) == | ||
Linia 776: | Linia 738: | ||
</div>}} | </div>}} | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | {{rozwiazanie| 1||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | ||
<div class="mw-collapsible-content" style="display:none"> | |||
'''program''' NastępnaPermutacja(N:integer; A:array[1..N] of integer); | '''program''' NastępnaPermutacja(N:integer; A:array[1..N] of integer); | ||
//Permutacja zapisana w A nie jest ostatnia leksykograficznie | //Permutacja zapisana w A nie jest ostatnia leksykograficznie | ||
Linia 802: | Linia 762: | ||
''Koszt pamięciowy'': stały | ''Koszt pamięciowy'': stały | ||
</div> | </div> | ||
</div> | </div>}} | ||
== Zadanie 11 (Segment o danej sumie) == | == Zadanie 11 (Segment o danej sumie) == | ||
Linia 813: | Linia 773: | ||
</div>}} | </div>}} | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | {{rozwiazanie| 1||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | ||
<div class="mw-collapsible-content" style="display:none"> | |||
'''program''' SegmentODanejSumie1(N,W:integer; A:array[1..N] of integer); | '''program''' SegmentODanejSumie1(N,W:integer; A:array[1..N] of integer); | ||
//Tablica A zawiera tylko liczby dodatnie | //Tablica A zawiera tylko liczby dodatnie | ||
Linia 843: | Linia 801: | ||
''Koszt pamięciowy'': stały | ''Koszt pamięciowy'': stał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"> | ||
Linia 850: | Linia 808: | ||
</div>}} | </div>}} | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | {{rozwiazanie| 2||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | ||
<div class="mw-collapsible-content" style="display:none"> | |||
'''program''' SegmentODanejSumie2(N,W:integer; A:array[1..N] of integer); | '''program''' SegmentODanejSumie2(N,W:integer; A:array[1..N] of integer); | ||
//Tablica A zawiera tylko liczby dodatnie | //Tablica A zawiera tylko liczby dodatnie | ||
Linia 886: | Linia 842: | ||
''Koszt pamięciowy'': stały | ''Koszt pamięciowy'': stały | ||
</div> | </div> | ||
</div> | </div>}} | ||
== Zadanie 12 (Głosowanie większościowe) == | == Zadanie 12 (Głosowanie większościowe) == | ||
Linia 896: | Linia 852: | ||
</div>}} | </div>}} | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | {{rozwiazanie| 1||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | ||
<div class="mw-collapsible-content" style="display:none"> | |||
'''program''' Głosowanie1(N:integer; A:array[1..N] of integer); | '''program''' Głosowanie1(N:integer; A:array[1..N] of integer); | ||
'''var''' i,j,ile,indeks_lidera: integer; | '''var''' i,j,ile,indeks_lidera: integer; | ||
Linia 917: | Linia 871: | ||
''Koszt pamięciowy'': stały | ''Koszt pamięciowy'': stał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"> | ||
Linia 924: | Linia 878: | ||
</div>}} | </div>}} | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | {{rozwiazanie| 2||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | ||
<div class="mw-collapsible-content" style="display:none"> | |||
'''program''' Głosowanie2(N,W:integer; A:array[1..N] of integer); | '''program''' Głosowanie2(N,W:integer; A:array[1..N] of integer); | ||
'''var''' ile,i,kand,lider: integer; | '''var''' ile,i,kand,lider: integer; | ||
Linia 955: | Linia 907: | ||
''Koszt pamięciowy'': stały | ''Koszt pamięciowy'': stały | ||
</div> | </div> | ||
</div> | </div>}} | ||
== Zadanie 13 (Arytmetyka liczb wielocyfrowych) == | == Zadanie 13 (Arytmetyka liczb wielocyfrowych) == | ||
Linia 963: | Linia 915: | ||
# iloczyn A i B do C (C powinno być tablicą dwa razy dłuższą niż A i B, żeby móc pomieścić wynik). | # iloczyn A i B do C (C powinno być tablicą dwa razy dłuższą niż A i B, żeby móc pomieścić wynik). | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | {{rozwiazanie| 1||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | ||
<div class="mw-collapsible-content" style="display:none"> | |||
'''const''' N=100; | '''const''' N=100; | ||
b=10; | b=10; | ||
Linia 1029: | Linia 979: | ||
''Koszt pamięciowy'': stały | ''Koszt pamięciowy'': stały | ||
</div> | </div> | ||
</div> | </div>}} | ||
Linia 1041: | Linia 991: | ||
</div>}} | </div>}} | ||
{{rozwiazanie| 1||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | |||
<div class="mw-collapsible-content" style="display:none"> | |||
'''function''' Labirynt(M,N:integer; '''var''' A:'''array'''[1..M,1..N] '''of''' integer; i1,j1,i2,j2:integer):boolean; | '''function''' Labirynt(M,N:integer; '''var''' A:'''array'''[1..M,1..N] '''of''' integer; i1,j1,i2,j2:integer):boolean; | ||
// M,N >= 1 | // M,N >= 1 | ||
Linia 1107: | Linia 1054: | ||
Aby przeprowadzić dowód przez sprzeczność, załóżmy, że funkcja 'szukaj' wywołana w funkcji 'Labirynt' dała wynik false, a ścieżka z (i1,j1) do (i2,j2) istnieje. W takim razie A[i1,j1]=-1 a A[i2,j2]=1. Wynika z tego, że ścieżka z (i1,j1) do (i2,j2) w którymś miejścu ''opuszcza'' zaznaczoną część tablicy, czyli istnieją dwa sąsiednie pola (i,j) i (i',j') na tej ścieżce, takie że A[i,j]=-1, A[i',j']=1. Z tego wynika, że funkcja szukaj została (w czasie działania programu) wywołana z parametrami (i,j), ale nie została wywołana z parametrami (i',j'). Jest to niemożliwe, bo pola te sąsiadują ze sobą i wywołanie dla (i,j) wywołałoby rekurencyjnie 'szukaj' dla (i',j'). | Aby przeprowadzić dowód przez sprzeczność, załóżmy, że funkcja 'szukaj' wywołana w funkcji 'Labirynt' dała wynik false, a ścieżka z (i1,j1) do (i2,j2) istnieje. W takim razie A[i1,j1]=-1 a A[i2,j2]=1. Wynika z tego, że ścieżka z (i1,j1) do (i2,j2) w którymś miejścu ''opuszcza'' zaznaczoną część tablicy, czyli istnieją dwa sąsiednie pola (i,j) i (i',j') na tej ścieżce, takie że A[i,j]=-1, A[i',j']=1. Z tego wynika, że funkcja szukaj została (w czasie działania programu) wywołana z parametrami (i,j), ale nie została wywołana z parametrami (i',j'). Jest to niemożliwe, bo pola te sąsiadują ze sobą i wywołanie dla (i,j) wywołałoby rekurencyjnie 'szukaj' dla (i',j'). | ||
</div> | </div> | ||
</div> | </div>}} | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | {{cwiczenie| 1|pytanko 1|<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | ||
Ile razy maksymalnie może być wywołana funkcja 'szukaj' dla tego samego punktu? | |||
<div class="mw-collapsible-content" style="display:none"> Ile razy maksymalnie może być wywołana funkcja 'szukaj' dla tego samego punktu? | |||
</div> | </div> | ||
</div>}} | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | {{cwiczenie| 2|pytanko 2|<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | ||
Jak przerobić przedstawione rozwiązanie na program wypisujący na ekran ścieżkę pomiędzy punktami (i1,j1) i (i2,j2), o ile taka ścieżka istnieje. Czy wypisana ścieżka będzie najkrótsza z możliwych ? | |||
<div class="mw-collapsible-content" style="display:none"> Jak przerobić przedstawione rozwiązanie na program wypisujący na ekran ścieżkę pomiędzy punktami (i1,j1) i (i2,j2), o ile taka ścieżka istnieje. Czy wypisana ścieżka będzie najkrótsza z możliwych ? | |||
</div> | </div> | ||
</div>}} | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | {{cwiczenie| 3|pytanko 3|<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | ||
<div class="mw-collapsible-content" style="display:none"> | |||
Co by się stało, gdybyśmy usuwali zaznaczenie wychodząc z funkcji 'szukaj'? Czy program dalej by działał? Jeśli tak, to jaką by miał złożoność? | Co by się stało, gdybyśmy usuwali zaznaczenie wychodząc z funkcji 'szukaj'? Czy program dalej by działał? Jeśli tak, to jaką by miał złożoność? | ||
</div> | </div> | ||
</div> | </div>}} | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | |||
{{odpowiedz||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | |||
<div class="mw-collapsible-content" style="display:none"> | |||
Program dalej by działał, ale miałby wykładniczą złożoność czasową zamiast liniowej (złożoność pamięciowa pozostałaby liniowa). W tej wersji program wielokrotnie przeszukiwałby sąsiadów pól, o których już z wcześniejszych obliczeń wiadomo, że nie da się z nich dojść do punktu końcowego. | Program dalej by działał, ale miałby wykładniczą złożoność czasową zamiast liniowej (złożoność pamięciowa pozostałaby liniowa). W tej wersji program wielokrotnie przeszukiwałby sąsiadów pól, o których już z wcześniejszych obliczeń wiadomo, że nie da się z nich dojść do punktu końcowego. | ||
</div> | </div> | ||
</div> | </div>}} | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | <div class="mw-collapsible mw-made=collapsible mw-collapsed"> | ||
'''Dla ciekawskich:''' | '''Dla ciekawskich:''' | ||
Linia 1154: | Linia 1097: | ||
</div>}} | </div>}} | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | {{rozwiazanie| 1||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | ||
<div class="mw-collapsible-content" style="display:none"> | |||
'''function''' Zjazd1(M,N:integer; '''var''' A:'''array'''[1..M,1..N] '''of''' integer; i1,j1,i2,j2:integer):boolean; | '''function''' Zjazd1(M,N:integer; '''var''' A:'''array'''[1..M,1..N] '''of''' integer; i1,j1,i2,j2:integer):boolean; | ||
// M,N >= 1 | // M,N >= 1 | ||
Linia 1206: | Linia 1147: | ||
''Dyskusja:'' Tak jak w rozwiązaniu poprzedniego zadania, istnienie sąsiada na planszy badamy przed wywołaniem rekurencyjnym, a poprawność przejścia na początku wywołania. Służy nam do tego dodatkowy parametr 'h', który oznacza wysokość poprzedniego pola. Dlatego pierwsze wywołanie funkcji 'szukaj' ma pierwszy parametr A[i1,j1]+1 (w wariancie I). '''Uwaga!''' Funkcja ta nie zadziała, jeśli A[i1,j1]=MaxInt (czyli maksymalnej możliwej wartości typu integer). Poniżej przedstawione jest rozwiązanie bez tego mankamentu. | ''Dyskusja:'' Tak jak w rozwiązaniu poprzedniego zadania, istnienie sąsiada na planszy badamy przed wywołaniem rekurencyjnym, a poprawność przejścia na początku wywołania. Służy nam do tego dodatkowy parametr 'h', który oznacza wysokość poprzedniego pola. Dlatego pierwsze wywołanie funkcji 'szukaj' ma pierwszy parametr A[i1,j1]+1 (w wariancie I). '''Uwaga!''' Funkcja ta nie zadziała, jeśli A[i1,j1]=MaxInt (czyli maksymalnej możliwej wartości typu integer). Poniżej przedstawione jest rozwiązanie bez tego mankamentu. | ||
</div> | </div> | ||
</div> | </div>}} | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | {{rozwiazanie| 2||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | ||
<div class="mw-collapsible-content" style="display:none"> | |||
'''function''' Zjazd2(M,N:integer; '''var''' A:'''array'''[1..M,1..N] '''of''' integer; i1,j1,i2,j2:integer):boolean; | '''function''' Zjazd2(M,N:integer; '''var''' A:'''array'''[1..M,1..N] '''of''' integer; i1,j1,i2,j2:integer):boolean; | ||
// M,N >= 1 | // M,N >= 1 | ||
Linia 1264: | Linia 1203: | ||
''Opis:'' Rozwiązanie jest bardzo podobne do poprzedniego. Różnica polega na przeniesieniu kodu z początku funkcji 'szukaj' do osobnej funkcji 'wdol'. Funkcja ta jest używana jako test dopuszczający do rekurencyjnego wywołania funkcji 'szukaj'. | ''Opis:'' Rozwiązanie jest bardzo podobne do poprzedniego. Różnica polega na przeniesieniu kodu z początku funkcji 'szukaj' do osobnej funkcji 'wdol'. Funkcja ta jest używana jako test dopuszczający do rekurencyjnego wywołania funkcji 'szukaj'. | ||
</div> | </div> | ||
</div> | </div>}} | ||
==Zadanie 16 (Wieże Hanoi z ograniczeniami)== | ==Zadanie 16 (Wieże Hanoi z ograniczeniami)== | ||
Linia 1283: | Linia 1222: | ||
end; | end; | ||
--> | --> | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | {{rozwiazanie| 1||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | ||
<div class="mw-collapsible-content" style="display:none"> | |||
'''type''' Paleczki = 1..3; | '''type''' Paleczki = 1..3; | ||
Linia 1332: | Linia 1269: | ||
''Omówienie:'' Zauważ, że dużo łatwiej jest rozwiązać to zadanie sformułowane w sposób ogólny, niż gdy powie się, że zabroniony jest konkretny ruch (np. 1 → 2). | ''Omówienie:'' Zauważ, że dużo łatwiej jest rozwiązać to zadanie sformułowane w sposób ogólny, niż gdy powie się, że zabroniony jest konkretny ruch (np. 1 → 2). | ||
</div> | </div> | ||
</div> | </div>}} | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | {{cwiczenie| 1|pytanko 1|<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | ||
<div class="mw-collapsible-content" style="display:none"> | |||
Jaki przypadek jest najgorszy i ile trzeba wykonać wtedy ruchów? | Jaki przypadek jest najgorszy i ile trzeba wykonać wtedy ruchów? | ||
</div> | </div> | ||
</div> | </div>}} | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | |||
{{odpowiedz||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | |||
<div class="mw-collapsible-content" style="display:none"> | |||
Najgorszy przypadek, to taki, gdy przerwane jest połączenie Skąd-Dokąd w obie strony. Wtedy trzeba wykonać <math>3^{Ile}-1</math> ruchów) | Najgorszy przypadek, to taki, gdy przerwane jest połączenie Skąd-Dokąd w obie strony. Wtedy trzeba wykonać <math>3^{Ile}-1</math> ruchów) | ||
</div> | </div> | ||
</div> | </div>}} | ||
==Zadanie 17 (Ustawianie hetmanów)== | ==Zadanie 17 (Ustawianie hetmanów)== | ||
Linia 1359: | Linia 1293: | ||
</div>}} | </div>}} | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | {{rozwiazanie| 1||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | ||
<div class="mw-collapsible-content" style="display:none"> | |||
'''procedure''' Hetmany(N:integer); | '''procedure''' Hetmany(N:integer); | ||
// N >= 1 | // N >= 1 | ||
Linia 1439: | Linia 1371: | ||
</div> | </div> | ||
</div> | </div>}} | ||
==Zadanie 18 (Mnożenie wielomianów)== | ==Zadanie 18 (Mnożenie wielomianów)== | ||
Linia 1472: | Linia 1404: | ||
</div>}} | </div>}} | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | {{rozwiazanie| 1||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none"> | ||
<div class="mw-collapsible-content" style="display:none"> | |||
'''procedure''' Suma(n:integer); | '''procedure''' Suma(n:integer); | ||
// 1 <= n | // 1 <= n | ||
Linia 1520: | Linia 1450: | ||
Poza wspomnianymi modyfikacjami całą procedurę 'rozkład' można by napisać w sposób ''rosnący'', tzn. zamiast generować coraz mniejsze składniki - generować coraz większe, aż osiągniemy, bądź przekroczymy n. W takim wypadku składniki należałoby wypisywać w odwrotnej kolejności. | Poza wspomnianymi modyfikacjami całą procedurę 'rozkład' można by napisać w sposób ''rosnący'', tzn. zamiast generować coraz mniejsze składniki - generować coraz większe, aż osiągniemy, bądź przekroczymy n. W takim wypadku składniki należałoby wypisywać w odwrotnej kolejności. | ||
</div> | </div> | ||
</div> | </div>}} | ||
<!-- to zadanie tu nie pasuje, wymaga zdecydowanie rekordow z wariantami... | <!-- to zadanie tu nie pasuje, wymaga zdecydowanie rekordow z wariantami... |
Wersja z 09:31, 1 sie 2006
<<< Powrót do głównej strony wykładu
<<< Powrót nieformalnego wprowadzenia do programowania
Ta strona zawiera podstawowe zadania na tablice oraz rekurencję.
Ogladaj wskazówki i rozwiązania __SHOWALL__
Ukryj wskazówki i rozwiązania __HIDEALL__
Zadanie 1 (Flaga polska)
Tablica A typu array[1..N] of integer (N > 0) wypełniona zerami i jedynkami reprezentuje ciąg N urn w których znajdują się żetony białe (0) i czerwone (1). Podaj algorytm działania automatu przestawiającego żetony w urnach tak, by najpierw były żetony czerwone, potem białe. Robot może wykonywać dwa rodzaje operacji:
- Kol(i) - podaje kolor żetonu w i-tej urnie (1 ≤ i ≤ n)
- Z(i,j) - zamienia żetony z i-tej i j-tej urny (1 ≤ i,j ≤ n)
Uwagi:
- Operacja Kol jest bardzo kosztowna, więc zależy nam na tym by kolor każdego żetonu był sprawdzany co najwyżej raz.
- Robot potrafi zapamiętać tylko kilka wartości z przedziału 0..N+1.
- Nie można założyć, że występuje choć jeden żeton w każdym z kolorów.
Wskazówka 1
Rozwiązanie 1
Wskazówka 2
Rozwiązanie 2
Wskazówka 3
Rozwiązanie 3
Wskazówka 4
Rozwiązanie 4
Ćwiczenie 1
Ćwiczenie 2
Zadanie 2 (Flaga trójkolorowa)
Dana jest tablica A typu array[1..N] of integer (N > 0). Należy tak poprzestawiać w niej elementy, żeby najpierw były elementy ujemne, potem równe zero, a na końcu dodatnie.
Wskazówka 1
Rozwiązanie 1
Rozwiązanie 2
Zadanie 3 (Najdłuższe plateau)
Napisz program znajdujący w zadanej tablicy A typu array[1..N] of integer, N > 0, długość najdłuższego stałego segmentu (spójnego fragmentu tablicy).
Wskazówka 1
Rozwiązanie 1
Wskazówka 2
Rozwiązanie 2
Ćwiczenie 1
Inna wersja zadania
A co było gdyby tablica była posortowana ?
Wskazówka 3
Rozwiązanie 3
Zadanie 4 (Segment o maksymalnej sumie)
Napisz program znajdujący w zadanej tablicy A typu array[1..N] of integer, N > 0, maksymalną sumę segmentu (spójnego fragmentu tablicy). Przyjmujemy, że segment pusty ma sumę 0.
Wskazówka 1
Rozwiązanie 1
Wskazówka 2
Rozwiązanie 2
Wskazówka 3
Rozwiązanie 3
Wskazówka 4
Rozwiązanie 4
Rozwiązanie 5
Zadanie 5 (Część wspólna zbiorów)
Dane są dwie tablice A i B typu array[1..N] of integer, N > 0. Obie są posortowane rosnąco. Należy traktując A i B jako reprezentacje dwu zbiorów wypisać (operacją write) cześć wspólną tych zbiorów.
Wskazówka 1
Rozwiązanie 1
Zadanie 6 (Suma zbiorów)
Dane są dwie tablice A i B typu array[1..N] of integer, N > 0. Obie są posortowane rosnąco. Należy traktując A i B jako reprezentacje dwu zbiorów wypisać (operacją write) sumę tych zbiorów.
Wskazówka 1
Rozwiązanie 1
Ćwiczenie 1
Wskazówka 2
Rozwiązanie 2
Zadanie 7 (Podciąg)
Dane są dwie tablice A typu array[1..N] of integer i B typu array[1..M] of integer, N, M > 0. Napisz program sprawdzający, czy A jest podciągiem B (tzn. czy istnieje funkcja f, rosnąca, z 1..N w 1..M, t. ze A[i]=B[f(i)]).
Wskazówka 1
Rozwiązanie 1
Zadanie 8 (Odwracanie tablicy)
Dana tablica A typu array[0..N-1] of integer, N > 1. Napisz program odwracający kolejność elementów w A.
Wskazówka 1
Rozwiązanie 1
Wskazówka 2
Rozwiązanie 2
Zadanie 9 (Przesunięcie cykliczne)
Dana tablica A typu array[0..N-1] of integer, N > 1, i liczba naturalna k > 1. Napisz program realizujący przesunięcie cykliczne w prawo o k pól, czyli przesuwający zawartość pola A[i] na A[(i+k) mod N] dla każdego i < N.
Wskazówka 1
Rozwiązanie 1
Wskazówka 2
Rozwiązanie 2
Wskazówka 3
Rozwiązanie 3
Zadanie 10 (Następna permutacja)
Tablica A typu array[1..N] of integer, N > 0, zawiera pewną permutację liczb 1.. N. Napisz program wpisujący do A następną leksykograficznie permutację. Zakładamy, że permutacja w A nie jest ostatnia leksykograficznie.
Przykład Dla N=3 kolejne permutacje w porządku leksykograficznym wyglądają nastepująco:
1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1
Wskazówka 1
Rozwiązanie 1
Zadanie 11 (Segment o danej sumie)
Tablica A typu array[1..N] of integer, N > 0, zawiera tylko liczby dodatnie. Napisz program który dla danego W typu integer sprawdza czy w A istnieje segment o sumie W (czyli czy istnieją l, p takie, że W).
Wskazówka 1
Rozwiązanie 1
Wskazówka 2
Rozwiązanie 2
Zadanie 12 (Głosowanie większościowe)
Dana jest tablica A typu array[1..N] of integer, N > 0. Sprawdzić czy jest w niej element wystepujący więcej niż N/2 razy i jeśli tak wskaż go.
Wskazówka 1
Rozwiązanie 1
Wskazówka 2
Rozwiązanie 2
Zadanie 13 (Arytmetyka liczb wielocyfrowych)
Liczby wielocyfrowe będą reprezentowane w tablicach typu liczba=array[0..N-1] of integer, N > 1, w taki sposób, że najmniej znacząca cyfra jest pod indeksem 0. Rozpatrujemy liczby przy podstawie b > 1. Napisz procedury obliczające:
- sumę liczb A i B do C. Jeśli wynik nie zmieści się w C to wartość C nie ma znaczenia. Zmienna przepełnienie wskazuje czy do niego doszło czy nie.
- różnicę A i B do C. Jeśli wynik miałby byc liczbą ujemną to wartość C nie ma znaczenia. Zmienna ujemny wskazuje jaki jest znak wyniku.
- iloczyn A i B do C (C powinno być tablicą dwa razy dłuższą niż A i B, żeby móc pomieścić wynik).
Rozwiązanie 1
Zadanie 14 (Labirynt)
Czy istnieje ścieżka miedzy wskazanymi punktami (i1,j1) i (i2,j2) w labiryncie reprezentowanym przez prostokątną tablicę liczb całkowitych o rozmiarze M×N, zawierającą zera (ściana) i jedynki (droga)? Zakładamy, że nie można przechodzić z pola na pole po skosie (np. z (2,5) na (3,6)), a tylko w czterech podstawowych kierunkach (np. z (2,5) na (3,5), (2,4) itd.)
Wskazówka 1
Rozwiązanie 1
Ćwiczenie 1
Ćwiczenie 2
Ćwiczenie 3
Odpowiedź
Dla ciekawskich:
Zadanie 15 (Z górki na pazurki)
W tablicy liczb całkowitych o rozmiarze M×N zapisana jest mapa gór (każdy punkt ma podaną dodatnią wysokość). Sprawdzić, czy da się przejść z punktu startowego (i1,j1) do docelowego (i2,j2) idąc:
- tylko w dół lub po płaskim
- tylko w dół
Tak jak w poprzednim zadaniu poruszać się można tylko w czterech kierunkach podstawowych, nie po przekątnej.
Wskazówka 1
Rozwiązanie 1
Rozwiązanie 2
Zadanie 16 (Wieże Hanoi z ograniczeniami)
Na wykładzie były wieże Hanoi. Ciekawa modyfikacja tego zadania polega na zabronieniu ruchów pomiędzy niektórymi pałeczkami, np. z pierwszej na drugą. Zapisać procedurę realizującą to zadanie przy zabronionych niektórych ruchach.
Wskazówka 1
Rozwiązanie 1
Ćwiczenie 1
Odpowiedź
Zadanie 17 (Ustawianie hetmanów)
Napisz procedurę znajdująca wszystkie takie rozstawienia 8 hetmanów na szachownicy, by żadne dwa hetmany się nie atakowały.
Wskazówka 1
Rozwiązanie 1
Zadanie 18 (Mnożenie wielomianów)
Dane są dwie tablice (array[0..N-1] of real) reprezentujące dwa wielomiany stopnia N-1. Należy obliczyć iloczyn tych wielomianów metodą dziel-i-zwyciężaj. Zakładamy, że N jest potęgą dwójki.
Wskazówka 1
Zadanie 19 (Suma składników)
Napisz procedurę, która wypisze dla zadanej liczby n jej wszystkie rozkłady na sumy nieujemnych liczb naturalnych większych od 1 ustawionych w kolejności nierosnącej. Np. dla n = 3:
3 = 3
3 = 2+1
3 = 1+1+1
Wskazówka 1
Wskazówka 2
Rozwiązanie 1