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