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

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Daria (dyskusja | edycje)
Aneczka (dyskusja | edycje)
Nie podano opisu zmian
Linia 5: Linia 5:
miejsce pierwszego wystąpienia x (lub 0 gdy nie ma żadnego x)
miejsce pierwszego wystąpienia x (lub 0 gdy nie ma żadnego x)


<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''' ZnajdźPierwsze(N,x:integer; A:array[1..N] of integer):integer;
  '''function''' ZnajdźPierwsze(N,x:integer; A:array[1..N] of integer):integer;
  //Tablica A posortowana niemalejąco; szukamy pierwszego wystąpienia x w A
  //Tablica A posortowana niemalejąco; szukamy pierwszego wystąpienia x w A
Linia 26: Linia 24:
''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">
Jaka będzie wartość A[l] w przypadku gdy x nie ma w tablicy A ?
Jaka będzie wartość A[l] w przypadku gdy x nie ma w tablicy A ?
</div>
</div>
</div>
</div>}}
 
== Zadanie 2 (Ostatnie wystąpienie x)==
== Zadanie 2 (Ostatnie wystąpienie x)==
Dana jest posortowana niemalejąco tablica A typu array[1..N] of integer i x typu integer. Znajdź
Dana jest posortowana niemalejąco tablica A typu array[1..N] of integer i x typu integer. Znajdź
miejsce ostatniego wystąpienia x (lub 0 gdy nie ma żadnego x)
miejsce ostatniego wystąpienia x (lub 0 gdy nie ma żadnego x)


<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''' ZnajdźOstatnie(N,x:integer; A:array[1..N] of integer):integer;
  '''function''' ZnajdźOstatnie(N,x:integer; A:array[1..N] of integer):integer;
  //Tablica A posortowana niemalejąco; szukamy ostatniego wystąpienia x w A
  //Tablica A posortowana niemalejąco; szukamy ostatniego wystąpienia x w A
Linia 58: Linia 54:
''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">
Jaka będzie wartość A[l] w przypadku gdy x nie ma w tablicy A ?
Jaka będzie wartość A[l] w przypadku gdy x nie ma w tablicy A ?
</div>
</div>
</div>
</div>}}
 
== Zadanie 3 (Liczba wystąpień x)==
== Zadanie 3 (Liczba wystąpień x)==
Dana jest posortowana niemalejąco tablica A typu array[1..N] of integer i x typu integer. Wyznacz liczbę wystąpień x w tablicy A.
Dana jest posortowana niemalejąco tablica A typu array[1..N] of integer i x typu integer. Wyznacz liczbę wystąpień x w tablicy A.


<div class="mw-collapsible mw-made=collapsible mw-collapsed">
{{wzkazowka| 1||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none">
'''Wskazówka 1''' 
Trzeba użyć wyszukiwania binarnego a nie liniowego.
<div class="mw-collapsible-content" style="display:none">Trzeba użyć wyszukiwania binarnego a nie liniowego.
</div>
</div>
</div>
</div>}}
<div class="mw-collapsible mw-made=collapsible mw-collapsed">
 
'''Rozwiązanie 1''' 
{{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''' LiczbaWystąpień(N,x:integer; A:array[1..N] of integer):integer;
  '''function''' LiczbaWystąpień(N,x:integer; A:array[1..N] of integer):integer;
  //Tablica A posortowana niemalejąco; wyznaczamy liczbę wystąpień x w A
  //Tablica A posortowana niemalejąco; wyznaczamy liczbę wystąpień x w A
Linia 88: Linia 82:
''Koszt pamięciowy'': stały
''Koszt pamięciowy'': stały
</div>
</div>
</div>
</div>}}


== Zadanie 4 (Wartość równa indeksowi)==
== Zadanie 4 (Wartość równa indeksowi)==
Dana jest posortowana rosnąco tablica A typu array[1..N] of integer.  Sprawdź czy występuje w niej element o wartości równej swojemu indeksowi. Jeśli tak to wyznacz ten indeks, jeśli nie to funkcja ma dać wartość 0.
Dana jest posortowana rosnąco tablica A typu array[1..N] of integer.  Sprawdź czy występuje w niej element o wartości równej swojemu indeksowi. Jeśli tak to wyznacz ten indeks, jeśli nie to funkcja ma dać wartość 0.


<div class="mw-collapsible mw-made=collapsible mw-collapsed">
{{wskazowka| 1||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none">
'''Wskazówka 1''' 
Jeśli A[i] < i to też A[i-1] < i-1. I podobnie dla i-2, i-3...1.   
<div class="mw-collapsible-content" style="display:none">Jeśli A[i] < i to też A[i-1] < i-1. I podobnie dla i-2, i-3...1.   
</div>
</div>
</div>
</div>}}
<div class="mw-collapsible mw-made=collapsible mw-collapsed">
 
'''Rozwiązanie 1''' 
{{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''' Równy(N:integer; A:array[1..N] of integer):integer;
  '''function''' Równy(N:integer; A:array[1..N] of integer):integer;
  //Tablica A posortowana rosnąco; szukamy i, takiego że A[i]=i
  //Tablica A posortowana rosnąco; szukamy i, takiego że A[i]=i
Linia 121: Linia 113:
''Koszt pamięciowy'': stały
''Koszt pamięciowy'': stały
</div>
</div>
</div>
</div>}}


== Zadanie 5 (Maksimum w ciągu bitonicznym)==
== Zadanie 5 (Maksimum w ciągu bitonicznym)==
Dana jest tablica A typu array[1..N] of integer, w której wartości ułożone są w ciąg bitoniczny (czyli istnieje 1 &le; i &le; N, takie że dla wszystkich k, takich że 1 &le; k < i zachodzi A[k] < A[k+1] a dla wszystkich k, takich że  i &le; k < N  zachodzi A[k] > A[k+1]). Znajdź maksimum w tym ciągu.
Dana jest tablica A typu array[1..N] of integer, w której wartości ułożone są w ciąg bitoniczny (czyli istnieje 1 &le; i &le; N, takie że dla wszystkich k, takich że 1 &le; k < i zachodzi A[k] < A[k+1] a dla wszystkich k, takich że  i &le; k < N  zachodzi A[k] > A[k+1]). Znajdź maksimum w tym ciągu.


<div class="mw-collapsible mw-made=collapsible mw-collapsed">
{{wskazowka| 1||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none">Szukamy pierwszego elementu dla którego A[i] > A[i+1]. Trzeba uważać na przypadek gdy maksimum jest w A[N].
'''Wskazówka 1''' 
<div class="mw-collapsible-content" style="display:none">Szukamy pierwszego elementu dla którego A[i] > A[i+1]. Trzeba uważać na przypadek gdy maksimum jest w A[N].
</div>
</div>
</div>
</div>}}
<div class="mw-collapsible mw-made=collapsible mw-collapsed">
 
'''Rozwiązanie 1''' 
{{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''' MaksBitoniczny(N:integer; A:array[1..N] of integer):integer;
  '''function''' MaksBitoniczny(N:integer; A:array[1..N] of integer):integer;
  //Tablica A zawiera ciąg bitoniczny; szukamy maksimum w tym ciągu
  //Tablica A zawiera ciąg bitoniczny; szukamy maksimum w tym ciągu
Linia 156: Linia 145:
''Koszt pamięciowy'': stały
''Koszt pamięciowy'': stały
</div>
</div>
</div>
</div>}}


== Zadanie 6 (Pierwiastek z x)==
== Zadanie 6 (Pierwiastek z x)==
Napisz program obliczający sufit z pierwiastka z x, dla x&epsilon;N, x > 0 (oczywiście bez operacji pierwiastek).
Napisz program obliczający sufit z pierwiastka z x, dla x&epsilon;N, x > 0 (oczywiście bez operacji pierwiastek).
<div class="mw-collapsible mw-made=collapsible mw-collapsed">
{{wskazowka| 1||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none">
'''Wskazówka 1''' 
Najprostsze rozwiązanie jest liniowe.
<div class="mw-collapsible-content" style="display:none">Najprostsze rozwiązanie jest liniowe.
</div>
</div>
</div>
</div>}}
<div class="mw-collapsible mw-made=collapsible mw-collapsed">
 
'''Rozwiązanie 1''' 
{{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''' SufitZPierwiastka1(x:integer):integer;
  '''function''' SufitZPierwiastka1(x:integer):integer;
  //Dla x > 0 wyznaczamy sufit z pierwiastka z x
  //Dla x > 0 wyznaczamy sufit z pierwiastka z x
Linia 180: Linia 167:
''Koszt pamięciowy'': stały
''Koszt pamięciowy'': stały
</div>
</div>
</div>}}
{{wskazowka| 2||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none">Oczywiście lepiej jest to zrobic binarnie. Szukamy takiej liczby całkowitej i z przedziału [1..x], że (i-1)*(i-1) < x &le;  i*i.
</div>
</div>
<div class="mw-collapsible mw-made=collapsible mw-collapsed">
</div>}}
'''Wskazówka 2''' 
 
<div class="mw-collapsible-content" style="display:none">Oczywiście lepiej jest to zrobic binarnie. Szukamy takiej liczby całkowitej i z przedziału [1..x], że (i-1)*(i-1) < x &le;  i*i.
{{rozwiazanie| 2||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none">
</div>
</div>
<div class="mw-collapsible mw-made=collapsible mw-collapsed">
'''Rozwiązanie 2''' 
<div class="mw-collapsible-content" style="display:none">
  '''function''' SufitZPierwiastka2(x:Real):integer;
  '''function''' SufitZPierwiastka2(x:Real):integer;
  //Dla x > 0 wyznaczamy sufit z pierwiastka z x
  //Dla x > 0 wyznaczamy sufit z pierwiastka z x
Linia 206: Linia 191:
''Koszt pamięciowy'': stały
''Koszt pamięciowy'': stały
</div>
</div>
</div>
</div>}}


===Inna wersja zadania===
===Inna wersja zadania===
A jak znaleźć podłogę z pierwiastka z x ?  
A jak znaleźć podłogę z pierwiastka z x ?  


<div class="mw-collapsible mw-made=collapsible mw-collapsed">
{{wskazowka| 3||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none">
'''Wskazówka 3''' 
Analogicznie jak w Rozwiązaniu 2.  
<div class="mw-collapsible-content" style="display:none"> Analogicznie jak w Rozwiązaniu 2.  
</div>
</div>
</div>
</div>}}
<div class="mw-collapsible mw-made=collapsible mw-collapsed">
 
'''Rozwiązanie 3''' 
{{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">
  '''function''' PodłogaZPierwiastka(x:Real):integer;
  '''function''' PodłogaZPierwiastka(x:Real):integer;
  //Dla x > 0 wyznaczamy podłogę z pierwiastka z x
  //Dla x > 0 wyznaczamy podłogę z pierwiastka z x
Linia 238: Linia 221:
''Koszt pamięciowy'': stały
''Koszt pamięciowy'': stały
</div>
</div>
</div>
</div>}}
 
== Zadanie 7 (BinPower)==
== Zadanie 7 (BinPower)==
Dla zadanych x,n > 0 wyznacz x<sup>n</sup> (oczywiscie bez exp i ln).
Dla zadanych x,n > 0 wyznacz x<sup>n</sup> (oczywiscie bez exp i ln).
<div class="mw-collapsible mw-made=collapsible mw-collapsed">
 
'''Wskazówka 1''' 
{{wskazowka| 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">  
Oczywiście nie chodzi o to by pomnożyć x przez siebie n-1 razy.
Oczywiście nie chodzi o to by pomnożyć x przez siebie n-1 razy.
</div>
</div>
</div>
</div>}}
<div class="mw-collapsible mw-made=collapsible mw-collapsed">
 
'''Rozwiązanie 1''' 
{{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''' BinPower(x,n:integer):integer;
  '''function''' BinPower(x,n:integer):integer;
  // Dla x,n > 0 wyznaczamy x do potęgi n  
  // Dla x,n > 0 wyznaczamy x do potęgi n  
Linia 268: Linia 250:
''Koszt pamięciowy'': stały
''Koszt pamięciowy'': stały
</div>
</div>
</div>
</div>}}


== Zadanie 8 (Najdłuższy podciąg niemalejący) ==
== Zadanie 8 (Najdłuższy podciąg niemalejący) ==
Dana jest tablica A typu array[1..N] of integer, N > 1. Należy obliczyć długość najdłuższego podciągu niemalejącego w A.
Dana jest tablica A typu array[1..N] of integer, N > 1. Należy obliczyć długość najdłuższego podciągu niemalejącego w A.
<div class="mw-collapsible mw-made=collapsible mw-collapsed">
 
'''Wskazówka 1''' 
{{wskazowka| 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">Kluczowe jest użycie dodatkowej tablicy B rozmiaru N, w której pod indeksem i przechowuje się minimalną wartość kończącą podciąg niemalejący o długości i w dotychczas przejrzanej części tablicy A,  od 1 do k. Żeby uwzględnić A[k+1] należy w tablicy B odnależć miejsce na A[k+1] (najlepiej binarnie).
Kluczowe jest użycie dodatkowej tablicy B rozmiaru N, w której pod indeksem i przechowuje się minimalną wartość kończącą podciąg niemalejący o długości i w dotychczas przejrzanej części tablicy A,  od 1 do k. Żeby uwzględnić A[k+1] należy w tablicy B odnależć miejsce na A[k+1] (najlepiej binarnie).
</div>
</div>
</div>
</div>}}
<div class="mw-collapsible mw-made=collapsible mw-collapsed">
 
'''Rozwiązanie 1''' 
{{rozwiazanie| 1||<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none">Zacznijmy od pomocniczej funkcji ZnajdźPierwszyWiększy(A:array[1..N] of integer; l,p,x:integer):integer, która w tablicy A, na odcinku od l do p, wyznacza indeks pierwszego elementu o wartości większej od x przy założeniu że A[p] > x.
<div class="mw-collapsible-content" style="display:none">
Zacznijmy od pomocniczej funkcji ZnajdźPierwszyWiększy(A:array[1..N] of integer; l,p,x:integer):integer, która w tablicy A, na odcinku od l do p, wyznacza indeks pierwszego elementu o wartości większej od x przy założeniu że A[p] > x.
  '''function''' ZnajdźPierwszyWiększy(C:array[1..N] of integer; l,p,x:integer):integer;
  '''function''' ZnajdźPierwszyWiększy(C:array[1..N] of integer; l,p,x:integer):integer;
  //Tablica C jest posortowana niemalejąco na odcinku od l do p, zakładamy, że C[p] > x;  
  //Tablica C jest posortowana niemalejąco na odcinku od l do p, zakładamy, że C[p] > x;  
Linia 320: Linia 300:
''Koszt pamięciowy'': liniowy względem N
''Koszt pamięciowy'': liniowy względem N
</div>
</div>
</div>}}
{{cwiczenie| 1|pytanko 1|<div class="mw-collapsible mw-made=collapsible mw-collapsed"><div class="mw-collapsible-content" style="display:none">Czy algorytm zachłanny by zadziałał (przedłużamy podciąg o ile rozpatrywany element jest większy równy od ostatniego elementu dotychczas znalezionego podciągu) ?
</div>
</div>
<div class="mw-collapsible mw-made=collapsible mw-collapsed">
</div>}}
'''Pytanko 1''' 
<div class="mw-collapsible-content" style="display:none">
Czy algorytm zachłanny by zadziałał (przedłużamy podciąg o ile rozpatrywany element jest większy równy od ostatniego elementu dotychczas znalezionego podciągu) ?
</div>
</div>

Wersja z 09:39, 1 sie 2006

To są zadania na wyszukiwanie binarne.

Zadanie 1 (Pierwsze wystąpienie x)

Dana jest posortowana niemalejąco tablica A typu array[1..N] of integer i x typu integer. Znajdź miejsce pierwszego wystąpienia x (lub 0 gdy nie ma żadnego x)

Rozwiązanie 1

{{{3}}}

Ćwiczenie 1

{{{3}}}

Zadanie 2 (Ostatnie wystąpienie x)

Dana jest posortowana niemalejąco tablica A typu array[1..N] of integer i x typu integer. Znajdź miejsce ostatniego wystąpienia x (lub 0 gdy nie ma żadnego x)

Rozwiązanie 1

{{{3}}}

Ćwiczenie 1

{{{3}}}

Zadanie 3 (Liczba wystąpień x)

Dana jest posortowana niemalejąco tablica A typu array[1..N] of integer i x typu integer. Wyznacz liczbę wystąpień x w tablicy A.

Szablon:Wzkazowka

Rozwiązanie 1

{{{3}}}

Zadanie 4 (Wartość równa indeksowi)

Dana jest posortowana rosnąco tablica A typu array[1..N] of integer. Sprawdź czy występuje w niej element o wartości równej swojemu indeksowi. Jeśli tak to wyznacz ten indeks, jeśli nie to funkcja ma dać wartość 0.

Wskazówka 1

{{{3}}}

Rozwiązanie 1

{{{3}}}

Zadanie 5 (Maksimum w ciągu bitonicznym)

Dana jest tablica A typu array[1..N] of integer, w której wartości ułożone są w ciąg bitoniczny (czyli istnieje 1 ≤ i ≤ N, takie że dla wszystkich k, takich że 1 ≤ k < i zachodzi A[k] < A[k+1] a dla wszystkich k, takich że i ≤ k < N zachodzi A[k] > A[k+1]). Znajdź maksimum w tym ciągu.

Wskazówka 1

{{{3}}}

Rozwiązanie 1

{{{3}}}

Zadanie 6 (Pierwiastek z x)

Napisz program obliczający sufit z pierwiastka z x, dla xεN, x > 0 (oczywiście bez operacji pierwiastek). Wskazówka 1

{{{3}}}

Rozwiązanie 1

{{{3}}}

Wskazówka 2

{{{3}}}

Rozwiązanie 2

{{{3}}}

Inna wersja zadania

A jak znaleźć podłogę z pierwiastka z x ?

Wskazówka 3

{{{3}}}

Rozwiązanie 3

{{{3}}}

Zadanie 7 (BinPower)

Dla zadanych x,n > 0 wyznacz xn (oczywiscie bez exp i ln).

Wskazówka 1

{{{3}}}

Rozwiązanie 1

{{{3}}}

Zadanie 8 (Najdłuższy podciąg niemalejący)

Dana jest tablica A typu array[1..N] of integer, N > 1. Należy obliczyć długość najdłuższego podciągu niemalejącego w A.

Wskazówka 1

{{{3}}}

Rozwiązanie 1

{{{3}}}

Ćwiczenie 1

{{{3}}}