Wstęp do programowania / Ćwiczenia 5: Różnice pomiędzy wersjami
m Zastępowanie tekstu – „<math> ” na „<math>” |
|||
(Nie pokazano 25 wersji utworzonych przez 2 użytkowników) | |||
Linia 13: | Linia 13: | ||
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"> | |||
<span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie 1</span> | |||
<div class="mw-collapsible-content" style="display:none"> | |||
To zadanie było omawiane na wykładzie. Dla pełności włączamy je tu do zestawu. | To zadanie było omawiane na wykładzie. Dla pełności włączamy je tu do zestawu. | ||
'''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; | ||
Linia 36: | Linia 38: | ||
</div> | </div> | ||
</div> | </div> | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | |||
<span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Ćwiczenie 1</span> | |||
<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)== | ||
Linia 47: | Linia 50: | ||
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"> | |||
<span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka 1</span> | |||
<div class="mw-collapsible-content" style="display:none"> | |||
Funkcja div ciągnie w lewo. Jeśli liczba jest nieparzysta, wówczas obcina wynik w dół. Aby uzyskać symetryczny efekt, powinniśmy się zastanowić, jak zmusić div do zaokrąglania w górę. | Funkcja div ciągnie w lewo. Jeśli liczba jest nieparzysta, wówczas obcina wynik w dół. Aby uzyskać symetryczny efekt, powinniśmy się zastanowić, jak zmusić div do zaokrąglania w górę. | ||
</div> | </div> | ||
</div> | </div> | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | |||
<span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie 1</span> | |||
<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 75: | Linia 81: | ||
</div> | </div> | ||
</div> | </div> | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | |||
<span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Ćwiczenie 1</span> | |||
<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"> | |||
<span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka 1</span> | |||
<div class="mw-collapsible-content" style="display:none"> | |||
Trzeba użyć wyszukiwania binarnego, a nie liniowego. | Trzeba użyć wyszukiwania binarnego, a nie liniowego. | ||
</div> | </div> | ||
</div> | </div> | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | |||
<span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie 1</span> | |||
<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 97: | Linia 108: | ||
l:= ZnajdźPierwsze(N,x,A); | l:= ZnajdźPierwsze(N,x,A); | ||
p:= ZnajdźOstatnie(N,x,A); | p:= ZnajdźOstatnie(N,x,A); | ||
'''if''' l <> 0 '''then''' LiczbaWystąpień:=p-l+1 | '''if''' l<>0 '''then''' LiczbaWystąpień:=p-l+1 | ||
'''else''' LiczbaWystąpień:=0 | |||
'''end'''; | '''end'''; | ||
''Koszt czasowy'': logarytmiczny względem N | ''Koszt czasowy'': logarytmiczny względem N | ||
''Koszt pamięciowy'': stały | ''Koszt pamięciowy'': stały | ||
Wariant rozwiązania, w którym większość kodu ZnajdźPierwsze i ZnajdźOstatnie jest wpisana wprost do treści procedury: | |||
'''function''' LiczbaWystąpień1(N,x:integer; A:array[1..N] of integer):integer; | |||
//Tablica A posortowana niemalejąco; wyznaczamy liczbę wystąpień x w A | |||
'''var''' p,l,p1,l1: integer; | |||
'''begin''' | |||
l1:=1; p1:=n; | |||
'''while''' l1<>p1 '''do''' | |||
'''begin''' | |||
s:=(l1+p1) '''div''' 2; | |||
'''if''' A[s]<x '''then''' l:=s+1 | |||
'''else''' p:=s | |||
'''end'''; | |||
l:=l1; | |||
l1:=1; p1:=n; | |||
'''while''' l1<>p1 '''do''' | |||
'''begin''' | |||
s:=(l1+p1+1) '''div''' 2; | |||
'''if''' A[s]>x '''then''' p:=s-1 | |||
'''else''' l:=s | |||
'''end'''; | |||
p:=l1; | |||
LiczbaWystąpień1:=p-l+1 | |||
'''end'''; | |||
Uwaga: czy kod ten jest poprawny, gdy x'a nie ma w tablicy? | |||
</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"> | |||
Jeśli A[i] < i to też A[i-1] < i-1. I podobnie dla i-2, i-3...1. | <span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka 1</span> | ||
<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"> | |||
<span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie 1</span> | |||
<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 137: | Linia 180: | ||
</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 ≤ 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. | 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. | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | |||
<span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka 1</span> | |||
<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 class="mw-collapsible mw-made=collapsible mw-collapsed"> | |||
<span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie 1</span> | |||
<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 | //Tablica A zawiera ciąg bitoniczny; szukamy indeksu maksymalnej wartości w tym ciągu | ||
'''var''' p,l,s: integer; | '''var''' p,l,s: integer; | ||
'''begin''' | '''begin''' | ||
Linia 172: | Linia 219: | ||
</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 | Napisz program obliczający sufit z pierwiastka z x, dla <math>x \in N ,x>0</math> (oczywiście bez operacji pierwiastek). | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | |||
Najprostsze rozwiązanie jest liniowe. | <span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka 1</span> | ||
<div class="mw-collapsible-content" style="display:none"> | |||
Najprostsze rozwiązanie jest liniowe ze względu na wartość pierwiastka z x. | |||
</div> | </div> | ||
</div> | </div> | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | |||
<span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie 1</span> | |||
<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 191: | Linia 241: | ||
SufitZPierwiastka1 := i; | SufitZPierwiastka1 := i; | ||
'''end'''; | '''end'''; | ||
''Koszt czasowy'': | ''Koszt czasowy'': pierwiastkowy względem x | ||
''Koszt pamięciowy'': stały | ''Koszt pamięciowy'': stały | ||
Linia 198: | Linia 248: | ||
</div> | </div> | ||
</div> | </div> | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | |||
<span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka 2</span> | |||
<div class="mw-collapsible-content" style="display:none">Oczywiście lepiej jest to zrobić binarnie. Szukamy takiej liczby całkowitej i z przedziału [1..x], że (i-1)*(i-1) < x ≤ i*i. | |||
</div> | |||
</div> | </div> | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | |||
<span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie 2</span> | |||
<div class="mw-collapsible-content" style="display:none"> | |||
'''function''' SufitZPierwiastka2(x:integer):integer; | '''function''' SufitZPierwiastka2(x:integer):integer; | ||
//Dla x > 0 wyznaczamy sufit z pierwiastka z x | //Dla x > 0 wyznaczamy sufit z pierwiastka z x | ||
Linia 218: | Linia 272: | ||
SufitZPierwiastka2:=l; | SufitZPierwiastka2:=l; | ||
'''end'''; | '''end'''; | ||
''Koszt czasowy'': logarytmiczny względem | ''Koszt czasowy'': logarytmiczny względem x | ||
''Koszt pamięciowy'': stały | ''Koszt pamięciowy'': stały | ||
Linia 225: | Linia 279: | ||
</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"> | |||
<span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka 3</span> | |||
<div class="mw-collapsible-content" style="display:none"> | |||
Analogicznie jak w Rozwiązaniu 2. | Analogicznie jak w Rozwiązaniu 2. | ||
</div> | </div> | ||
</div> | </div> | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | |||
<span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie 3</span> | |||
<div class="mw-collapsible-content" style="display:none"> | |||
'''function''' PodłogaZPierwiastka(x:integer):integer; | '''function''' PodłogaZPierwiastka(x:integer):integer; | ||
//Dla x > 0 wyznaczamy podłogę z pierwiastka z x | //Dla x > 0 wyznaczamy podłogę z pierwiastka z x | ||
Linia 251: | Linia 309: | ||
Uwaga: porównaj różnice między Rozwiązaniami 2 i 3 oraz funkcjami ZnajdźPierwsze, ZnajdźOstatnie z Zadania 1 i 2. | Uwaga: porównaj różnice między Rozwiązaniami 2 i 3 oraz funkcjami ZnajdźPierwsze, ZnajdźOstatnie z Zadania 1 i 2. | ||
''Koszt czasowy'': logarytmiczny względem | ''Koszt czasowy'': logarytmiczny względem x | ||
''Koszt pamięciowy'': stały | ''Koszt pamięciowy'': stały | ||
Linia 258: | Linia 316: | ||
</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"> | |||
<span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka 1</span> | |||
<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"> | |||
<span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka 2</span> | |||
<div class="mw-collapsible-content" style="display:none"> | |||
Użyj podobnego pomysłu jak przy mnożeniu chłopów rosyjskich. Pamiętaj, że mnożenie ma się tak do dodawania, jak potęgowanie do mnożenia. | Użyj podobnego pomysłu jak przy mnożeniu chłopów rosyjskich. Pamiętaj, że mnożenie ma się tak do dodawania, jak potęgowanie do mnożenia. | ||
</div> | </div> | ||
</div> | </div> | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | |||
<span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie 1</span> | |||
<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 295: | Linia 359: | ||
</div> | </div> | ||
</div> | </div> | ||
O ile istnieją proste algorytmy mnożące w czasie wielomianowym (choćby szkolne słupki), to w przypadku potęgowania nie ma oczywistego szybkiego algorytmu potęgującego. Można spytać, po co usprawniać kod potęgowania, gdy wykładniki w naturze wcale nie sa takie duże. Nic bardziej mylnego! W jednym z najpopularniejszych algorytmów kryptograficznych - kodowaniu RSA - używa się potęgowania o wykładnikach będących bardzo dużymi liczbami (zazwyczaj stukilkudziesięciocyfrowymi!). Poleglibyśmy sromotnie, gdybyśmy próbowali mnożyć odpowiednią liczbę razy przez siebie podstawę potęgowania. | O ile istnieją proste algorytmy mnożące w czasie wielomianowym (choćby szkolne słupki), to w przypadku potęgowania nie ma oczywistego szybkiego algorytmu potęgującego. Można spytać, po co usprawniać kod potęgowania, gdy wykładniki w naturze wcale nie sa takie duże. Nic bardziej mylnego! W jednym z najpopularniejszych algorytmów kryptograficznych - kodowaniu RSA - używa się potęgowania o wykładnikach będących bardzo dużymi liczbami (zazwyczaj stukilkudziesięciocyfrowymi!). Poleglibyśmy sromotnie, gdybyśmy próbowali mnożyć odpowiednią liczbę razy przez siebie podstawę potęgowania. | ||
Linia 301: | Linia 365: | ||
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"> | |||
<span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka 1</span> | |||
<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"> | |||
<span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie 1</span> | |||
<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 349: | Linia 416: | ||
</div> | </div> | ||
</div> | </div> | ||
</div> | <div class="mw-collapsible mw-made=collapsible mw-collapsed"> | ||
<span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Ćwiczenie 1</span> | |||
<div class="mw-collapsible-content" style="display:none">Czy algorytm zachłanny by zadziałał? Zachłanność polegałaby na tym, że przedłużalibyśmy podciąg pod warunkiem, że rozważany element jest niemniejszy od ostatniego elementu dotychczas znalezionego maksymalnego podciągu. | |||
</div> | |||
</div> |
Aktualna wersja na dzień 22:14, 11 wrz 2023
<<< Powrót do modułu Składnia i semantyka instrukcji
To są zadania na wyszukiwanie binarne.
Oglądaj wskazówki i rozwiązania __SHOWALL__
Ukryj wskazówki i rozwiązania __HIDEALL__
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
Ćwiczenie 1
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)
Wskazówka 1
Rozwiązanie 1
Ćwiczenie 1
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.
Wskazówka 1
Rozwiązanie 1
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
Rozwiązanie 1
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
Rozwiązanie 1
Zadanie 6 (Pierwiastek z x)
Napisz program obliczający sufit z pierwiastka z x, dla (oczywiście bez operacji pierwiastek).
Wskazówka 1
Rozwiązanie 1
Wskazówka 2
Rozwiązanie 2
Inna wersja zadania
A jak znaleźć podłogę z pierwiastka z x ?
Wskazówka 3
Rozwiązanie 3
Zadanie 7 (BinPower)
Dla zadanych x,n > 0 wyznacz xn (oczywiscie bez exp i ln).
Wskazówka 1
Wskazówka 2
Rozwiązanie 1
O ile istnieją proste algorytmy mnożące w czasie wielomianowym (choćby szkolne słupki), to w przypadku potęgowania nie ma oczywistego szybkiego algorytmu potęgującego. Można spytać, po co usprawniać kod potęgowania, gdy wykładniki w naturze wcale nie sa takie duże. Nic bardziej mylnego! W jednym z najpopularniejszych algorytmów kryptograficznych - kodowaniu RSA - używa się potęgowania o wykładnikach będących bardzo dużymi liczbami (zazwyczaj stukilkudziesięciocyfrowymi!). Poleglibyśmy sromotnie, gdybyśmy próbowali mnożyć odpowiednią liczbę razy przez siebie podstawę potęgowania.
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
Rozwiązanie 1
Ćwiczenie 1