1 b a 6 4 3 2 d c b a

Transkrypt

1 b a 6 4 3 2 d c b a
ALGORYTMY WYZNACZAJĄCE
NAJWIĘKSZY WSPÓLNY DZIELNIK (NWD)
i NAJMNIEJSZĄ WSPÓLNĄ WIELOKROTNOŚĆ (NWW)
1) („Naiwne” wyznaczanie NWD)
Największy wspólny podzielnik dwóch liczb a i b można wyznaczyć według podanego poniżej sposobu:
i
Wyznacz mniejszą z liczb a i b i zapisz jej wartość do zmiennej NWD
ii
Sprawdź, czy a jest podzielne przez NWD (a mod NWD=0) i czy b jest podzielne przez NWD (b
mod NWD=0)
iii
Jeśli tak wypisz wartość zmiennej NWD i zakończ algorytm
iv
Jeśli nie zmniejsz wartość NWD o jeden (NWD:=NWD-1)
v
Przejdź do punktu ii
Opracuj powyższy schemat w programie ELI. Pracę zapisz w pliku euklides1
2) Algorytm Euklidesa służy do wyznaczania największego wspólnego dzielniki dwóch liczb naturalnych
dodatnich – NWD(a,b). Oparty jest on na następującym fakcie:
i
Jeżeli a>b wówczas NWD(a,b)=NWD(a-b,b)
Jeżeli b>a, to NWD(a,b)=NWD(a,b-a)
ii
iii
Jeżeli
a=b
wówczas
NWD
jest
równy
jednej
z
liczb,
np.:
NWD(8,6)=NWD(2,6)=NWD(2,4)=NWD(2,2)=2.
Korzystając z powyższego schematu opracuj algorytm Euklidesa w programie ELI. Pracę zapisz jako
euklides2
3) Oblicz największy wspólny dzielnik trzech liczb naturalnych NWD(a,b,c). Skorzystaj przy tym z algorytmu
Euklidesa i własności NWD(a,b,c)=NWD(NWD(a,b),c), czyli możesz np. obliczyć NWD dwóch liczb a i b,
później zaś NWD liczby c i tego co „wyszło” z NWD(a,b). Pracę zapisz w zbiorze euklides3
4) Napisz algorytm, który podany licznik a i mianownik b pewnego ułamka
a
, doprowadzi do tzw. postaci
b
nieskracalnej.
Np. dla ułamka
4
2
jest to postać: . Być może będziesz musiał wykorzystać dodatkowe zmienne a1 i b1.
6
3
Zapisz algorytm w pliku euklides4
5) Najmniejszą wspólną wielokrotność dwóch liczb naturalnych dodatnich (NWW(a,b)) można obliczyć
korzystając z zależności: a*b=NWW(a,b)*NWD(a,b) (czy potrafiłbyś (potrafiłabyś) ją uzasadnić???).
Korzystając z tej zależności i algorytmu Euklidesa napisz algorytm na wyznaczanie NWW(a,b). Pracę
zapisz w pliku euklides5
6) Opracuj „naiwny” algorytm wyznaczania NWW podobny do tego z zadania 1
7) Najmniejszą wspólną wielokrotność można również wyznaczyć korzystając z poniższego schematu:
i
Wczytaj dwie liczby naturalne a i b
ii
Do zmiennej a1 przypisz wartość zmiennej a (a1:=a), zaś do zmiennej b1 wartość zmiennej b
(b1:=b)
iii
Jeżeli a1=b1 wypisz wartość zmiennej a1 i zakończ algorytm
iv
Jeśli a1>b1 zwiększ wartość zmiennej a1 o a (b1:=b1+b)
v
Jeśli a1<b1 zwiększ wartość zmiennej b1 o b (a1:=a1+a)
vi
Przejdź do punktu iii
Opracuj powyższy schemat w programie ELI. Pracę zapisz w pliku euklides6
8) NWW służyć może np. do dodawania dwóch zwykłych ułamków (szuka się tam najmniejszego wspólnego
mianownika, który jest właśnie najmniejszą wspólną wielokrotnością dwóch liczb). Korzystając z
poprzedniego zadania napisz algorytm dodający dwa ułamki postaci:
a c
+ . Pracę zapisz w pliku
b d
euklides7
9) (*)Dysponujesz dwoma czerpakami o pojemności a litrów i b litrów, pustym pojemnikiem i nieograniczoną
ilością wody. Podaj programem sposób napełnienia pojemnika X litrami wody, przy czym wodę możesz
wlewać do pojemnika lub wylewać z niego tylko pełnymi czerpakami. (Brak rozwiązania powinien być
sygnalizowany).
1
KILKA ZADAŃ DOTYCZĄCYCH LICZB NATURALNYCH.
1. Napisz algorytm, który sprawdza, czy podana liczba jest pierwsza, czy złożona. Skorzystaj z funkcji
reszty z dzielenia mod
2. Napisz algorytm, który wypisuje na ekranie wszystkie podzielniki podanej przez Ciebie liczby
naturalnej, np. dla liczby 24, powinniśmy otrzymać podzielniki: 1, 2, 3, 4, 6, 8, 12, 24
3. Napisz algorytm, który wczytuje liczbę naturalną, a następnie sprawdza, czy jest ona doskonała. Liczbą
doskonałą nazywamy taką liczbę naturalną, której suma wszystkich podzielników mniejszych od niej
samej daje w wyniku tą liczbę. Np. liczbami doskonałymi są:6, 28 bo:
6=1+2+3
28=1+2+4+7+14
4. Napisz algorytm, który dokonuje rozkładu podanej liczby na czynniki pierwsze. Algorytm ma drukować
kolejno na ekranie monitora wszystkie liczby pierwsze, przez które dzieli się dana liczba. Np.: dla liczby
60 powinniśmy otrzymać rozkład:
2, 2, 3, 5.
5. Liczbę nazywamy trójkątną, jeśli jest sumą pewnej ilości kolejnych liczb naturalnych, taką liczbą np.
jest 15, bo: 1+2+3+4+5=15. Napisz algorytm, który wczyta liczbę naturalną, a następnie sprawdzi, czy
jest ona trójkątna.
6. Otwórz teraz ponownie algorytm z zadania 1. Twoim celem będzie poprawienie szybkości działania
algorytmu, czyli znalezienie algorytmu bardziej optymalnego. Zauważ, że nie musisz dzielić
podanej liczby przez wszystkie kolejne liczby naturalne mniejsze od niej samej, gdyż „najgorszym”
przypadkiem liczby złożonej jest liczba mająca dwa takie same dzielniki właściwe (różne od 1 i niej
samej). Skorzystaj z tego faktu, aby przyspieszyć działanie Twojego algorytmu.
7. Wróć teraz do zadania 2, również tutaj zauważ, że można znacznie przyspieszyć obliczenia.
Wykorzystaj fakt, znalezienia przez Ciebie jednego dzielnika, do szybkiego wyznaczenia następnego.
Np.:
dla liczby 24, jeśli znajdziemy dzielnik ,np.: liczbę 2, to automatycznie znaleźliśmy inny dzielnik –
liczbę 12. Przyspiesz również algorytm wykorzystany w zadaniu 3.
8. (*)Zaproponuj sposób przyspieszenia algorytmu wykorzystanego w zadaniu 5.
9. Funkcja random(N) zwraca losową liczbę naturalną z zakresu od 0 do N. Korzystając z tej funkcji
utwórz program, który pozwoli na odgadywanie liczby ukrytej przez komputer (liczby losowej z
przedziału od 1 np. do 100). Zgadywanie liczby powinno opierać się na następujących założeniach:
1. Wczytaj liczbę;
2. jeśli podana liczba jest za mała wypisywany jest na ekranie komunikat: „Liczba, która
podałeś jest za mała”; wróć do punktu nr 1;
3. jeśli podana liczba jest za duża wypisywany jest komunikat: „Liczba, którą podałeś jest za
duża”; wróć do punktu nr 1.
4. jeśli jest to liczbą ukryta (wylosowana) wypisz komunikat: „Brawo, odgadłeś ukrytą liczbę”;
Koniec
10. Zastanów się teraz w jaki sposób wprowadzać liczby w zadaniu 9, tak aby odgadnąć jak najszybciej
ukrytą liczbę.
Ile maksymalnie trzeba wczytywać liczb aby znaleźć właściwą dla liczb losowanych z przedziału
0..100? A ile dla liczb 0...1000? 0...1 000 000??
2