Wstęp do programowania / Ćwiczenia 2: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Aneczka (dyskusja | edycje)
Nie podano opisu zmian
Aneczka (dyskusja | edycje)
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">
'''Rozwiązanie 1'''
<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">
 
'''Rozwiązanie 2'''
{{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">
'''Rozwiązanie 1'''
<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">
'''Rozwiązanie 2'''
<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">
 
'''Pytanko 1'''
{{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">
'''Rozwiązanie 3'''
<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">
'''Rozwiązanie 1'''
<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">
'''Rozwiązanie 2'''
<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">
'''Rozwiązanie 3'''
<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">
'''Rozwiązanie 4'''
<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">
 
'''Rozwiązanie 5'''
{{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">
'''Rozwiązanie 1'''
<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">
'''Rozwiązanie 1'''
<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">
 
'''Pytanko 1'''
{{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">
'''Rozwiązanie 2'''
<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">
'''Rozwiązanie 1'''
<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">
'''Rozwiązanie 1'''
<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">
'''Rozwiązanie 2'''
<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">
'''Rozwiązanie 1'''
<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">
'''Rozwiązanie 2'''
<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">
'''Rozwiązanie 3'''
<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">
'''Rozwiązanie 1''' 
<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">
'''Rozwiązanie 1'''
<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">
'''Rozwiązanie 2'''
<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">
'''Rozwiązanie 1'''
<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">
'''Rozwiązanie 2'''
<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">
'''Rozwiązanie 1''' 
<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">
'''Rozwiązanie 1'''
<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">
'''Pytanko 1:''' 
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>}}


<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">
'''Pytanko 2:''' 
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>}}


<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">
'''Pytanko 3:''' (trudniejsze)
<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">
 
'''Odpowiedź:'''
{{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">
'''Rozwiązanie 1'''
<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">
'''Rozwiązanie 2'''
<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">
'''Rozwiązanie 1'''
<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">
'''Pytanko 1'''
<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">
 
'''Odpowiedź'''
{{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">
'''Rozwiązanie 1'''
<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">
'''Rozwiązanie 1'''
<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:

  1. Operacja Kol jest bardzo kosztowna, więc zależy nam na tym by kolor każdego żetonu był sprawdzany co najwyżej raz.
  2. Robot potrafi zapamiętać tylko kilka wartości z przedziału 0..N+1.
  3. Nie można założyć, że występuje choć jeden żeton w każdym z kolorów.

Wskazówka 1

{{{3}}}

Rozwiązanie 1

{{{3}}}

Wskazówka 2

{{{3}}}

Rozwiązanie 2

{{{3}}}

Wskazówka 3

{{{3}}}

Rozwiązanie 3

{{{3}}}

Wskazówka 4

{{{3}}}

Rozwiązanie 4

{{{3}}}


Ćwiczenie 1

{{{3}}}

Ćwiczenie 2

{{{3}}}

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

{{{3}}}

Rozwiązanie 1

{{{3}}}

Rozwiązanie 2

{{{3}}}

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

{{{3}}}

Rozwiązanie 1

{{{3}}}

Wskazówka 2

{{{3}}}

Rozwiązanie 2

{{{3}}}

Ćwiczenie 1

{{{3}}}

Inna wersja zadania

A co było gdyby tablica była posortowana ?

Wskazówka 3

{{{3}}}

Rozwiązanie 3

{{{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

{{{3}}}

Rozwiązanie 1

{{{3}}}

Wskazówka 2

{{{3}}}

Rozwiązanie 2

{{{3}}}

Wskazówka 3

{{{3}}}

Rozwiązanie 3

{{{3}}}

Wskazówka 4

{{{3}}}

Rozwiązanie 4

{{{3}}}

Rozwiązanie 5

{{{3}}}

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

{{{3}}}

Rozwiązanie 1

{{{3}}}

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

{{{3}}}

Rozwiązanie 1

{{{3}}}

Ćwiczenie 1

{{{3}}}

Wskazówka 2

{{{3}}}

Rozwiązanie 2

{{{3}}}

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

{{{3}}}

Rozwiązanie 1

{{{3}}}

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

{{{3}}}

Rozwiązanie 1

{{{3}}}

Wskazówka 2

{{{3}}}

Rozwiązanie 2

{{{3}}}

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

{{{3}}}

Rozwiązanie 1

{{{3}}}

Wskazówka 2

{{{3}}}

Rozwiązanie 2

{{{3}}}

Wskazówka 3

{{{3}}}

Rozwiązanie 3

{{{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

{{{3}}}

Rozwiązanie 1

{{{3}}}

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=A[l]+...+A[p1]).

Wskazówka 1

{{{3}}}

Rozwiązanie 1

{{{3}}}

Wskazówka 2

{{{3}}}

Rozwiązanie 2

{{{3}}}

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

{{{3}}}

Rozwiązanie 1

{{{3}}}

Wskazówka 2

{{{3}}}

Rozwiązanie 2

{{{3}}}

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:

  1. 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.
  2. 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.
  3. 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

{{{3}}}


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

{{{3}}}

Rozwiązanie 1

{{{3}}}

Ćwiczenie 1

{{{3}}}

Ćwiczenie 2

{{{3}}}

Ćwiczenie 3

{{{3}}}

Odpowiedź

{{{2}}}

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

{{{3}}}

Rozwiązanie 1

{{{3}}}

Rozwiązanie 2

{{{3}}}

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

{{{3}}}

Rozwiązanie 1

{{{3}}}

Ćwiczenie 1

{{{3}}}

Odpowiedź

{{{2}}}

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

{{{3}}}

Rozwiązanie 1

{{{3}}}

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

{{{3}}}

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

{{{3}}}

Wskazówka 2

{{{3}}}

Rozwiązanie 1

{{{3}}}