Ćwiczenia do Modułu 1: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Daria (dyskusja | edycje)
Zadanie o fladze polskiej
Daria (dyskusja | edycje)
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">
Możliwe roziązania
=== Rozwiązanie 1 ===
<div class="mw-collapsible-content" style="display:none">
<div class="mw-collapsible-content" style="display:none">
=== Rozwiązanie 1 ===
  '''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">
=== Rozwiązanie 2 ===
  '''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">
=== Rozwiązanie 3 ===
  '''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'''  
          Z(c,b);
      '''else''' '''begin'''
          b:=b+1;  
        Z(c,b);
          c:=c-1;
        b:=b+1;  
          '''if''' b < c '''then''' '''begin'''
        c:=c-1;
            kb:=Kol(b);
        '''if''' b < c '''then''' '''begin'''
            kc:=Kol(c);
          kb:=Kol(b);
          '''end;''';  
          kc:=Kol(c);
        '''end;'''
        '''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">
=== Rozwiązanie 4 ===
  '''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:

  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.


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.

Rozwiązanie 4