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