Analiza Algorytmów - Moduł 2 - Zadania 1 Niezmienniki p ąetli
Transkrypt
Analiza Algorytmów - Moduł 2 - Zadania 1 Niezmienniki p ąetli
Analiza Algorytmów - Moduł 2 - Zadania Aleksandra Orpel 1 Niezmienniki petli ˛ Zadanie 1. (2 p.). Pokaż, że podane warunki sa˛ niezmiennikami petli ˛ while 1 · m do begin m := m + 3; n := n + 5; end. (a) "m + n jest parzyste"; (b) "m + n jest nieparzyste". Zadanie 2. (za każdy podpunkt 2 p.) Rozważmy petl ˛ e˛ while k ¸ 1 do k := 2k. Zbadaj, czy zdanie (a) ”k 2 ´ 1 (mod 3)" jest niezmiennikiem petli. ˛ (b) ”k 2 ´ 1 (mod 4)" jest niezmiennikiem petli. ˛ Zadanie 3. (za każdy podpunkt 2 p.) Niech dana bedzie nastepuj ˛ ˛ aca ˛ petla ˛ while r > 0 do begin a := b; b := r; r := a mod b; end. Sprawdź, które z poniższych zdań sa˛ niezmiennikami petli: ˛ a) ”a jest wielokrotnościa˛ liczby 7”; b) ”a, b i r sa˛ wielokrotnościami liczby 7”; c) ”r < b”. (Wskazówka: m = n ¢ (m div n) + m mod n.) 1 Zadanie 4. (8 p.) Rozważmy ciag ˛ instrukcji s:=4; i:=1; while 1 · i do begin s:=s+2i+1; i:=i+1; wypisz s; end. Zbadaj, czy zdania p1 : p2 : ”s = i2 + 1” ”s = i2 + 3” (1) (2) sa˛ niezmiennikami powyższej petli ˛ while. Podaj 381 liczbe˛ wypisana˛ przez ten algorytm? 2 Badanie poprawności algorytmów Zadanie 5. (6 p.) Sprawdź, czy poniższy algorytm wyznacza n! Silnia_1(n) Dane wejściowe: n 2 N. Dane wyjściowe: liczba naturalna silnia = n!. begin silnia := 1; m := n; while m > 0 do begin silnia := silnia ¢ m; m := m ¡ 1; end; end. (Wskazówka: rozważ zdanie ”silnia ¢ m! = n!”.) Zadanie 6. (8p.) Sprawdź, czy dla dowolnej liczby naturalnej n nastepuj ˛ acy ˛ algorytm wyznacza wartości n!. Silnia_1(n) Dane wejściowe: n 2 N. Dane wyjściowe: liczba naturalna silnia = n!. begin 2 silnia := 1; m := 1; while m · n do begin silnia := silnia ¢ m; m := m + 1; end; end. Zadanie 7. (8 p.) Zadaniem poniższego algorytmu jest rozkład liczby naturalnej n na iloczyn liczby nieparzystej i poteg ˛ e˛ liczby 2: Rozklad(n) Dane wejściowe: liczba naturalna n. Dane wyjściowe: liczby nieujemne m i k takie, że m jest nieparzysta i n = m ¢ 2k . begin m := n; k := 0; while (m jest liczba parzysta) do begin m := m/2; k := k + 1; end; end. Zbadaj poprawność algorytmu Rozklad. Zadanie 8. (12 p.) Rozważmy nastepuj ˛ ac ˛ a˛ procedure: ˛ Lomuto_Partition(A,1,n) x:=A[n]; i:=0; j:=1; while j · n do begin if A[j]·x then begin i:=i+1; zamień A[j] z A[i] end; j:=j+1; end; if i<n then return i; else return i-1. 3 Zadaniem tej procedury jest przestawienie elementów A[1],..., A[n] w taki sposób, aby każdy element w obszarze A[1..i] był mniejszy lub równy x=A[n], a każdy element w drugim obszarze A[i+1..n] był wiekszy niż x. ˛ Sprawdź poprawność procedury. Zadanie 9. (10 p.) Rozważmy nastepuj ˛ acy ˛ algorytm, którego zadaniem jest sprawdzenie, czy dana liczba naturalna n jest liczba˛ pierwsza:˛ prime (n) p:=2; B:=true; while (p< n ^ B) do begin if n mod p=0 then B:=false; p := p + 1; end; if B then wypisz "Dana liczba jest liczba˛ pierwsza" ˛ else wypisz "Dana liczba nie jest liczba˛ pierwsza" ˛ Sprawdź poprawność tej procedury. 4