Ćwiczenia do Modułu 1: Różnice pomiędzy wersjami
Zadanie o fladze polskiej |
Nie podano opisu zmian |
||
Linia 13: | Linia 13: | ||
==Możliwe rozwiązania zadania 1== | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | <div class="mw-collapsible mw-made=collapsible mw-collapsed"> | ||
=== Rozwiązanie 1 === | |||
<div class="mw-collapsible-content" style="display:none"> | <div class="mw-collapsible-content" style="display:none"> | ||
'''program''' FlagaPolska1(N,A); | '''program''' FlagaPolska1(N,A); | ||
'''const''' bialy = 0; | '''const''' bialy = 0; | ||
Linia 32: | Linia 32: | ||
</div> | </div> | ||
Rozwiązanie 1 optymalizuje liczbę sprawdzeń kolorów, ale może niepotrzebnie zamieniać czerwone z czerwonymi. Mozna tego uniknąć wprowadzając dodatkową pętlę po czerwonych od końca tablicy. | Rozwiązanie 1 optymalizuje liczbę sprawdzeń kolorów, ale może niepotrzebnie zamieniać czerwone z czerwonymi. Mozna tego uniknąć wprowadzając dodatkową pętlę po czerwonych od końca tablicy. | ||
</div> | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | |||
=== Rozwiązanie 2 === | |||
<div class="mw-collapsible-content" style="display:none"> | <div class="mw-collapsible-content" style="display:none"> | ||
'''program''' FlagaPolska2(N,A); | '''program''' FlagaPolska2(N,A); | ||
'''const''' bialy = 0; | '''const''' bialy = 0; | ||
Linia 52: | Linia 53: | ||
'''end'''. | '''end'''. | ||
</div> | </div> | ||
W rozwiązaniu 2 są dwie zagnieżdżone pętle while. Trzeba zwrócić uwagę, że gdyby nie warunek b<c to w przypadku tablicy zawierającej same białe żetony doszłoby do wyjścia poza zakres (odwołanie do Kol(0)). Można uniknąć zagnieżdżonych while'i trzeba jednak uważać aby nie sprawdzać kilka razy koloru tego samego żetonu. | W rozwiązaniu 2 są dwie zagnieżdżone pętle while. Trzeba zwrócić uwagę, że gdyby nie warunek b<c to w przypadku tablicy zawierającej same białe żetony doszłoby do wyjścia poza zakres (odwołanie do Kol(0)). Można uniknąć zagnieżdżonych while'i; trzeba jednak uważać aby nie sprawdzać kilka razy koloru tego samego żetonu. | ||
</div> | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | |||
=== Rozwiązanie 3 === | |||
<div class="mw-collapsible-content" style="display:none"> | <div class="mw-collapsible-content" style="display:none"> | ||
'''program''' FlagaPolska3(N,A); | '''program''' FlagaPolska3(N,A); | ||
'''const''' bialy = 0; | '''const''' bialy = 0; | ||
Linia 69: | Linia 70: | ||
kb:=Kol(b); | kb:=Kol(b); | ||
'''end''' | '''end''' | ||
'''else''' '''if''' kc=czerwony '''then''' '''begin''' | '''else''' | ||
'''if''' kc=czerwony '''then''' '''begin''' | |||
c:=c-1; | c:=c-1; | ||
kc:=Kol(c); | kc:=Kol(c); | ||
'''end''' '''else''' '''begin''' | '''end''' | ||
'''else''' '''begin''' | |||
Z(c,b); | |||
b:=b+1; | |||
c:=c-1; | |||
'''if''' b < c '''then''' '''begin''' | |||
kb:=Kol(b); | |||
kc:=Kol(c); | |||
'''end;'''; | |||
'''end;''' | |||
'''end'''. | '''end'''. | ||
</div> | </div> | ||
W rozwiązaniu 3 każdy żeton jest sprawdzany co najwyżej raz, a każda zamiana ustawia na dobrych miejscach 2 żetony (czyli zamian jest co najwyżej N div 2). Alternatywne rozwiązanie, unikające zagnieżdżonych pętli jest poniżej. Jednak dla tablicy złożonej z jednego żetonu czerwonego i potem samych białych będzie potrzeba N-1 zamian. | W rozwiązaniu 3 każdy żeton jest sprawdzany co najwyżej raz, a każda zamiana ustawia na dobrych miejscach 2 żetony (czyli zamian jest co najwyżej N div 2). Alternatywne rozwiązanie, unikające zagnieżdżonych pętli jest poniżej. Jednak dla tablicy złożonej z jednego żetonu czerwonego i potem samych białych będzie potrzeba N-1 zamian. | ||
</div> | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | |||
=== Rozwiązanie 4 === | |||
<div class="mw-collapsible-content" style="display:none"> | <div class="mw-collapsible-content" style="display:none"> | ||
'''program''' FlagaPolska4(N,A); | '''program''' FlagaPolska4(N,A); | ||
'''const''' bialy = 0; | '''const''' bialy = 0; |
Wersja z 12:23, 7 lip 2006
Ta strona będzie zawierać podstawowe zadania na tablice.
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). Należy podać algorytm działania automatu przestawiającego żetony w urnach tak, by najpierw były żetony białe, potem czerwone. 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.
Możliwe rozwiązania zadania 1
Rozwiązanie 1
Rozwiązanie 1 optymalizuje liczbę sprawdzeń kolorów, ale może niepotrzebnie zamieniać czerwone z czerwonymi. Mozna tego uniknąć wprowadzając dodatkową pętlę po czerwonych od końca tablicy.
Rozwiązanie 2
W rozwiązaniu 2 są dwie zagnieżdżone pętle while. Trzeba zwrócić uwagę, że gdyby nie warunek b<c to w przypadku tablicy zawierającej same białe żetony doszłoby do wyjścia poza zakres (odwołanie do Kol(0)). Można uniknąć zagnieżdżonych while'i; trzeba jednak uważać aby nie sprawdzać kilka razy koloru tego samego żetonu.
Rozwiązanie 3
W rozwiązaniu 3 każdy żeton jest sprawdzany co najwyżej raz, a każda zamiana ustawia na dobrych miejscach 2 żetony (czyli zamian jest co najwyżej N div 2). Alternatywne rozwiązanie, unikające zagnieżdżonych pętli jest poniżej. Jednak dla tablicy złożonej z jednego żetonu czerwonego i potem samych białych będzie potrzeba N-1 zamian.