Metody programowania / Ćwiczenia 2: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
(8 zadan na listy)
Linia 3: Linia 3:
 
W poniższych zadaniach będziemy używać następujących typów:
 
W poniższych zadaniach będziemy używać następujących typów:
  
  '''type''' el_listy=record  
+
  '''type''' el_listy = record  
        w: integer;
+
                  w: integer;
        nast: ^el_listy;
+
                  nast: ^el_listy;
      end;
+
                end;
       lista=^el_listy;
+
       lista = ^el_listy;
  
 
== Zadanie 1 (Odwracanie listy)==
 
== Zadanie 1 (Odwracanie listy)==
Linia 31: Linia 31:
  
 
''Koszt pamięciowy'': stały
 
''Koszt pamięciowy'': stały
</div>
 
</div>}}
 
 
{{cwiczenie| 1|pytanko 1|<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none">
 
Jaka będzie wartość A[l] w przypadku gdy x nie ma w tablicy A ?
 
 
</div>
 
</div>
 
</div>}}
 
</div>}}
  
 
== Zadanie 2 (Scalanie dwóch posortowanych list)==
 
== Zadanie 2 (Scalanie dwóch posortowanych list)==
Napisz funkcję Scal(l1,l2:lista):lista scalającą dwie posortowane niemalejąco listy l1 i l2, tak aby wynikowa lista równiez była posortowana niemalejąco.
+
Napisz funkcję Scal(l1,l2:lista):lista scalającą dwie posortowane niemalejąco listy l1 i l2, tak aby wynikowa lista również była posortowana niemalejąco.
  
 
{{rozwiazanie| 1||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none">
 
{{rozwiazanie| 1||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none">
Linia 51: Linia 46:
 
   akt:=atrapa;
 
   akt:=atrapa;
 
   '''while''' l1 <> nil and l2 <> nil '''do'''
 
   '''while''' l1 <> nil and l2 <> nil '''do'''
     '''if''' l1^.nast < l2^.nast '''then''' '''begin'''
+
     '''if''' l1^.w < l2^.w '''then''' '''begin'''           //jeśli l1^.w < l2^.w
 
       akt^.nast:=l1;
 
       akt^.nast:=l1;
 
       akt:=akt^.nast;
 
       akt:=akt^.nast;
Linia 57: Linia 52:
 
     '''end'''
 
     '''end'''
 
     '''else'''  
 
     '''else'''  
       '''if''' l1^.nast > l2^.nast '''then''' '''begin'''
+
       '''if''' l1^.w > l2^.w '''then''' '''begin'''         //jeśli l1^.w > l2^.w
 
         akt^.nast:=l2;
 
         akt^.nast:=l2;
 
         akt:=akt^.nast;
 
         akt:=akt^.nast;
 
         l2:=l2^.nast;
 
         l2:=l2^.nast;
 
       '''end'''
 
       '''end'''
       '''else''' '''begin'''
+
       '''else''' '''begin'''                         //jeśli l1^.w = l2^.w
 
         akt^.nast:=l1;
 
         akt^.nast:=l1;
 
         akt:=akt^.nast;
 
         akt:=akt^.nast;
Linia 70: Linia 65:
 
         l2:=l2^.nast;
 
         l2:=l2^.nast;
 
       '''end''';
 
       '''end''';
   '''while''' l1 <> nil '''do''' '''begin'''
+
  '''if''' l1 = nil '''then''' l1:=l2;
 +
   '''while''' l1 <> nil '''do''' '''begin'''               //obsługa końcówki listy która nie jest pusta
 
     akt^.nast:=l1;
 
     akt^.nast:=l1;
 
     akt:=akt^.nast;
 
     akt:=akt^.nast;
 
     l1:=l1^.nast;
 
     l1:=l1^.nast;
  '''end''';
 
  '''while''' l2 <> nil '''do''' '''begin'''
 
    akt^.nast:=l2;
 
    akt:=akt^.nast;
 
    l2:=l2^.nast;
 
 
   '''end''';
 
   '''end''';
 
   Scal:=atrapa^.nast;
 
   Scal:=atrapa^.nast;
Linia 99: Linia 90:
 
{{rozwiazanie| 1||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none">
 
{{rozwiazanie| 1||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none">
 
  '''procedure''' Usuń(var l1:lista; l2:lista);
 
  '''procedure''' Usuń(var l1:lista; l2:lista);
  //Usuwamy z listy l1 wszystkie elementy z listy l2; zakładamy, że listy l1 i l2 są posortowanych niemalejąco
+
  //Usuwamy z listy l1 wszystkie elementy z listy l2; zakładamy, że listy l1 i l2 są posortowane niemalejąco
 
  '''var''' atrapa, poprz: lista;
 
  '''var''' atrapa, poprz: lista;
 
  '''begin'''
 
  '''begin'''
Linia 106: Linia 97:
 
   poprz:=atrapa;
 
   poprz:=atrapa;
 
   '''while''' l1 <> nil and l2 <> nil '''do'''
 
   '''while''' l1 <> nil and l2 <> nil '''do'''
     '''if''' l1^.nast < l2^.nast '''then''' '''begin'''
+
     '''if''' l1^.w < l2^.w '''then''' '''begin'''       //jeśli l1^.w < l2^.w
 
       l1:=l1^.nast;
 
       l1:=l1^.nast;
 
       poprz:=poprz^.nast;
 
       poprz:=poprz^.nast;
 
     '''end'''
 
     '''end'''
 
     '''else'''  
 
     '''else'''  
       '''if''' l1^.nast > l2^.nast '''then'''  
+
       '''if''' l1^.w > l2^.w '''then'''           //jeśli l1^.w > l2^.w
 
         l2:=l2^.nast
 
         l2:=l2^.nast
       '''else''' '''begin'''
+
       '''else''' '''begin'''                       //jeśli l1^.w = l2^.w
 
         poprz^.nast:=l1^.nast;
 
         poprz^.nast:=l1^.nast;
 
         dispose(l1);
 
         dispose(l1);
Linia 128: Linia 119:
  
 
{{cwiczenie| 1|pytanko 1|<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none">
 
{{cwiczenie| 1|pytanko 1|<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none">
Czy lista l1 musi być przekazywana przez zmienną ? W jakich przypadkach to się przydaje ?
+
Czy lista l1 musi być przekazywana przez zmienną ? W jakich przypadkach to jest konieczne ?
 
</div>
 
</div>
 
</div>}}
 
</div>}}
Linia 134: Linia 125:
 
== Zadanie 4 (Uporządkowanie elementów w liście)==
 
== Zadanie 4 (Uporządkowanie elementów w liście)==
 
Napisz procedurę Uporządkuj(var l:lista) która  przestawi elementy w liście l tak by najpierw były elementy w których pole w jest ujemne, potem równe zero a potem dodatnie. Dodatkowo względna kolejność elelmentów jednego rodzaju (dodatnich, równych zero i ujemnych) powinna być zachowana.
 
Napisz procedurę Uporządkuj(var l:lista) która  przestawi elementy w liście l tak by najpierw były elementy w których pole w jest ujemne, potem równe zero a potem dodatnie. Dodatkowo względna kolejność elelmentów jednego rodzaju (dodatnich, równych zero i ujemnych) powinna być zachowana.
 
  
 
{{rozwiazanie| 1||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none">
 
{{rozwiazanie| 1||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none">
Linia 171: Linia 161:
 
</div>
 
</div>
 
</div>}}
 
</div>}}
 
  
 
== Zadanie 5 (Problem Józefa Flawiusza)==
 
== Zadanie 5 (Problem Józefa Flawiusza)==
 
Napisz procedurę Flawiusz(var l:lista; k:integer), która dla danego  
 
Napisz procedurę Flawiusz(var l:lista; k:integer), która dla danego  
 
k > 0 i niepustej cyklicznej listy l, cyklicznie usuwa co k-ty element listy, tak aby pozostał tylko jeden. Liczenie rozpoczynamy od elemnetu wskazywanego przez l.
 
k > 0 i niepustej cyklicznej listy l, cyklicznie usuwa co k-ty element listy, tak aby pozostał tylko jeden. Liczenie rozpoczynamy od elemnetu wskazywanego przez l.
 
  
 
{{rozwiazanie| 1||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none">
 
{{rozwiazanie| 1||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none">

Wersja z 16:36, 13 sie 2006

To są zadania na listy.

W poniższych zadaniach będziemy używać następujących typów:

type el_listy = record 
                  w: integer;
                  nast: ^el_listy;
                end;
     lista = ^el_listy;

Zadanie 1 (Odwracanie listy)

Napisz procedurę Odwróć(var l:lista) odwracającą listę l.

Rozwiązanie 1

{{{3}}}

Zadanie 2 (Scalanie dwóch posortowanych list)

Napisz funkcję Scal(l1,l2:lista):lista scalającą dwie posortowane niemalejąco listy l1 i l2, tak aby wynikowa lista również była posortowana niemalejąco.

Rozwiązanie 1

{{{3}}}

Ćwiczenie 1

{{{3}}}

Zadanie 3 (Usuwanie elementów zadanych listą)

Napisz procedurę Usuń(var l1:lista; l2:lista) która usunie z listy l1 wszystkie elementy z listy l2. Zakładamy, że listy l1 i l2 są posortowanych niemalejąco.

Rozwiązanie 1

{{{3}}}

Ćwiczenie 1

{{{3}}}

Zadanie 4 (Uporządkowanie elementów w liście)

Napisz procedurę Uporządkuj(var l:lista) która przestawi elementy w liście l tak by najpierw były elementy w których pole w jest ujemne, potem równe zero a potem dodatnie. Dodatkowo względna kolejność elelmentów jednego rodzaju (dodatnich, równych zero i ujemnych) powinna być zachowana.

Rozwiązanie 1

{{{3}}}

Zadanie 5 (Problem Józefa Flawiusza)

Napisz procedurę Flawiusz(var l:lista; k:integer), która dla danego k > 0 i niepustej cyklicznej listy l, cyklicznie usuwa co k-ty element listy, tak aby pozostał tylko jeden. Liczenie rozpoczynamy od elemnetu wskazywanego przez l.

Rozwiązanie 1

{{{3}}}

Zadanie 6 (Listy łączące się)

Dane są dwie listy proste (kończące się nilami). Napisz funkcję stwierdzającą czy te listy mają jakiś wspólny element (nie wartość typu integer, a element typu el_listy).

Wskazówka 1

{{{3}}}

Rozwiązanie 1

{{{3}}}

Zadanie 7 (Pierwszy wspólny element list łączących się)

Dane są dwie listy proste (kończące się nilami) i takie że maja one element wspólny (funkcja Wspólny z poprzedniego zadania dałaby wynik true). Napisz funkcję odnajdującą pierwszy element wspólny tych list.

Wskazówka 1

{{{3}}}

Rozwiązanie 1

{{{3}}}

Ćwiczenie 1

{{{3}}}

Zadanie 8 (Listy z cyklem)

Napisz funkcje która sprawdzi czy dana l typu lista jest listą prostą czy też listą z cyklem.

Wskazówka 1

{{{3}}}

Rozwiązanie 1

{{{3}}}

Zadanie 8 (Długość cyklu w liście z cyklem)

Napisz funkcje która dla danej listy z cyklem obliczy długość cyklu.

Wskazówka 1

{{{3}}}

Rozwiązanie 1

{{{3}}}

Wskazówka 2

{{{3}}}

Rozwiązanie 2

{{{3}}}