Treści zawarte w tym materiale wykraczają poza podstawę programową dla klas IV - VI szkoły podstawowej. Jeśli jednak chcesz dowiedzieć się więcej i poznać algorytm Euklidesa, który służy do obliczania NWD (największego wspólnego dzielnika) dwóch liczb naturalnych, wraz z przykładami wykorzystania go w języku Scratch, to zachęcamy cię do zapoznania się z tym materiałem.
Do zrozumienia niniejszego materiału potrzebna jest znajomość liczb naturalnych i całkowitych, ułamków zwykłych i dziesiętnych oraz wiedza na temat środowiska języka Scratch. Wszystkie te informacje oraz wiele innych możesz znaleźć w dostępnych materiałach.
Aby zrozumieć poruszane w tym materiale zagadnienia, przypomnij sobie:
W poniższym materiale stworzymy interaktywną grę, która pomaga zrozumieć koncepcję ułamków zwykłych.
Algorytm Euklidesa służy do wyznaczania największego wspólnego dzielnika dwóch liczb naturalnych. W tym materiale pokażemy jego zastosowanie do skracania ułamków zwykłych
ROsptnqm7Hn6G
Film prezentuje działanie aplikacji ułatwiającej zrozumienie pojęcia ułamka zwykłego. Na ekranie znajdują się 44 kwadraty. Narysowane w 4 rzędach, w każdym rzędzie po 11 kwadratów. Dwa górne rzędy są wyróżnione kolorem, dwa dolne są bez koloru. Na dole ekranu znajduje się stworek, który zadaje pytanie "Jaka część figury jest zamalowana?". Wpisane są kolejno wartości: Licznik - 22, Mianownik - 44. Stworek mówi "Dobrze, ale można skrócić ułamek", po czym kliknięta została zielona flaga u góry ekranu, która spowodowała zresetowanie wcześniejszych odpowiedzi. Teraz w miejsce licznika została wpisana cyfra 1, a mianownika - cyfra 2. Po wpisaniu pojawił się dymek z napisem "Brawo!".
Film prezentuje działanie aplikacji ułatwiającej zrozumienie pojęcia ułamka zwykłego. Na ekranie znajdują się 44 kwadraty. Narysowane w 4 rzędach, w każdym rzędzie po 11 kwadratów. Dwa górne rzędy są wyróżnione kolorem, dwa dolne są bez koloru. Na dole ekranu znajduje się stworek, który zadaje pytanie "Jaka część figury jest zamalowana?". Wpisane są kolejno wartości: Licznik - 22, Mianownik - 44. Stworek mówi "Dobrze, ale można skrócić ułamek", po czym kliknięta została zielona flaga u góry ekranu, która spowodowała zresetowanie wcześniejszych odpowiedzi. Teraz w miejsce licznika została wpisana cyfra 1, a mianownika - cyfra 2. Po wpisaniu pojawił się dymek z napisem "Brawo!".
Film poglądowy z działania programu
Źródło: Maciej Borowiecki, Janusz Wierzbicki, licencja: CC BY 3.0.
Źródło: Maciej Borowiecki, Janusz Wierzbicki, licencja: CC BY 3.0.
Film prezentuje działanie aplikacji ułatwiającej zrozumienie pojęcia ułamka zwykłego. Na ekranie znajdują się 44 kwadraty. Narysowane w 4 rzędach, w każdym rzędzie po 11 kwadratów. Dwa górne rzędy są wyróżnione kolorem, dwa dolne są bez koloru. Na dole ekranu znajduje się stworek, który zadaje pytanie "Jaka część figury jest zamalowana?". Wpisane są kolejno wartości: Licznik - 22, Mianownik - 44. Stworek mówi "Dobrze, ale można skrócić ułamek", po czym kliknięta została zielona flaga u góry ekranu, która spowodowała zresetowanie wcześniejszych odpowiedzi. Teraz w miejsce licznika została wpisana cyfra 1, a mianownika - cyfra 2. Po wpisaniu pojawił się dymek z napisem "Brawo!".
Na filmie pokazano aplikację, która służy do graficznego przedstawienia ułamka zwykłego. Najpierw duszek losuje mianownik i licznik ułamka oraz przedstawia go w postaci figury podzielonej na zamalowane i niezamalowane kwadraty (możesz zaproponować własną reprezentację graficzną ułamka, np. w postaci kawałków pizzy). Następnie prosi o podanie licznika i mianownika ułamka, czyli informacji, jaka część figury jest zamalowana. W kolejnym kroku sprawdza poprawność odpowiedzi.
Duszek przedstawia graficznie ułamek
Rozpocznij od rozplanowania sceny. Pamiętaj, że jej rozmiar to na pikseli.
2
Ćwiczenie 1
Zastanów się, jaką przyjąć długość boku pojedynczego kwadratu, ile ich umieścić w jednym wierszu, ile maksymalnie wierszy zmieści się na scenie, aby zostało wolne miejsce dla duszka wyświetlającego komunikaty. Ustal na tej podstawie zakres losowania mianownika i licznika ułamka.
R15JD6qRZiXxs
Wersja alternatywna: (Uzupełnij).
Źródło: GroMar Sp. z o.o., licencja: CC BY 3.0.
Scena w programie Scratch ma 480 pikseli szerokości i 360 pikseli wysokości. Weź pod uwagę jej wymiary podczas planowania długości boku pojedynczego kwadratu i innych niezbędnych komponentów.
Przykładowe rozplanowanie sceny: długość boku kwadratu wynosi pikseli, górną połowę sceny przeznaczamy na reprezentację ułamka, dolną dla duszka zadającego pytanie i podającego informację o poprawności udzielonej odpowiedzi. Pozostawiając odstępy od krawędzi sceny o szerokości pikseli można maksymalnie narysować kwadraty ( rzędy po kwadratów). Duszek może więc losować mianownik w zakresie od do maksymalnej liczby kwadratów (czyli ), a licznik od do wylosowanej wartości mianownika minus .
2
Ćwiczenie 2
Zastanów się, w jaki sposób duszek narysuje kwadraty na scenie. Wymyślone rozwiązanie zapisz w poniższym notesie.
R1IP7ePHXdwxo
Wersja alternatywna: (Uzupełnij).
Notes
Źródło: GroMar Sp. z o.o., licencja: CC BY 3.0.
Jeden z kwadratów może być niezamalowany, natomiast drugi - zamalowany. Narysowanie pierwszego z nich nie powinno sprawić problemu, ponieważ zostało opisane w poprzednich materiałach dotyczących wykorzystania Scratcha. Jak poradzić sobie z zamalowanym kwadratem?
Scratch dostarcza wielu poleceń do efektów graficznych, zatem duszek może rysować kwadraty.
Niezamalowany kwadrat
RYAP0h936SORF
Na ilustracji, po prawej stronie, widoczny jest kot a obok niego kwadrat. Po stronie lewej widoczny jest ciąg bloczków. Pierwszy bloczek z napisem "kiedy klawisz k naciśnięty". Pod nim znajdują się bloczki "wyczyść wszystko" oraz "przyłóż pisak". Niżej bloczek "powtórz 4 razy", który zapętla się do kolejnych bloczków "przesuń o 100 kroków" i "obróć o 90 stopni". Poniżej bloczek "podnieś pisak". Ostatni bloczek to "zatrzymaj ten skrypt".
Przykładowy skrypt na rysowanie kwadratu.
Źródło: GroMar, licencja: CC BY 3.0.
Zamalowany kwadrat
Niestety, nie ma jednak polecenia pozwalającego na zamalowanie figur ani rysowanie zamalowanych figur. Brak tej funkcjonalności można obejść poprzez stworzenie zamalowanego kwadratu z odpowiedniej liczby odcinków, choć jest to rozwiązanie mało wygodne i powolne.
RKQtck1IVstYJ
Na ilustracji, po prawej stronie, widoczny jest kot na zamalowanym na niebiesko kwadracie. Po stronie lewej widoczny jest ciąg bloczków. Pierwszy bloczek z napisem "kiedy klawisz k naciśnięty". Pod nim bloczek z napisem "ustaw bok kwadratu na 100". Poniżej znajdują się bloczki "wyczyść wszystko" oraz "przyłóż pisak". Niżej bloczek "przesuń o bok kwadratu kroków". Dalej bloczek "obróć o 90 stopni". Następny jest bloczek "powtórz bok kwadratu razy", który zapętla się do kolejnych bloczków "powtórz 2 razy", w którym jest następna pętla "przesuń o bok kwadratu kroków" oraz "obróć o 90 stopni". Poniżej ponownie w pierwszej pętli bloczek "zmień bok kwadratu o -1". Ostatni bloczek to "zatrzymaj ten skrypt".
Przykładowy skrypt na rysowanie wypełnionego kwadratu.
Źródło: GroMar, licencja: CC BY 3.0.
2
Ćwiczenie 3
Narysuj w edytorze graficznym dwa kwadraty o długości boku np. , jeden zamalowany, drugi przezroczysty.
RCpruyxTkXIOH
Ilustracja przedstawiająca duszki i kostiumy duszka.
Dwa duszki - kwadraty
Źródło: Maciej Borowiecki, Janusz Wierzbicki, licencja: CC BY 3.0.
Jeśli korzystasz z edytora graficznego Scratcha, dodaj nowego duszka i narysuj jego dwa kostiumy. Jeśli z innego edytora, utwórz nowego duszka i wczytaj dwa kostiumy z plików graficznych. Pamiętaj, żeby sprawdzić punkt zaczepienia. Oba kostiumy powinny mieć go w tym samym miejscu, najlepiej w środku kwadratu lub w jego lewym górnym rogu.
Poniżej znajdują się dwa kwadraty, które można wykorzystać w projekcie.
R2PirXu3OLHAS
Plik zawierający dwie grafiki kwadratów do wykorzystania w aplikacji Scratch. Jeden z kwadratów to pusty kwadrat z czarnym obrysem, natomiast drugi to czerwony kwadrat z czarnym obrysem.
Skompresowany plik zawierający dwie grafiki kwadratów do wykorzystania w aplikacji Scratch.
Źródło: GroMar Sp. z o.o., licencja: CC BY 3.0.
Plik ZIP o rozmiarze 1.51 KB w języku polskim
R10cJeOfnr5sN
Ćwiczenie 3
Jak dodać duszka, którego możesz namalować wykorzystując wbudowane narzędzie graficzne w Scratchu? Możliwe odpowiedzi: 1. asd, 2. das, 3. ad
Źródło: GroMar Sp. z o.o., licencja: CC BY 3.0.
W projekcie będą więc występowały dwa duszki:
Ukryty duszek – kwadrat, którego zadaniem będzie (np. po kliknięciu w zieloną flagę) wylosowanie mianownika i licznika oraz przygotowanie zadania na scenie, czyli przystemplowanie odpowiedniej liczby kwadratów zgodnie z wylosowanymi wartościami.
Kotek (lub inna dowolnie przez ciebie wybrana postać), którego zadaniem będzie poproszenie o podanie odpowiedzi oraz sprawdzenie jej poprawności.
1
Ćwiczenie 4
Ułóż w programie Scratch algorytm dla duszka reprezentowanego przez kwadrat. Skrypt ma wylosować dwie wartości dla zmiennych licznik i mianownik (wykorzystaj obliczenia wykonane w pierwszym ćwiczeniu). Następnie, skrypt powinien narysować tyle pustych kwadratów, ile wynosi różnica zmiennych mianownik - licznik oraz tyle pełnych kwadratów, ile wynosi zmienna licznik.
Wylosowany licznik i mianownik oraz podane wartości jako odpowiedzi musisz zapamiętać. Utwórz więc w projekcie cztery zmienne liczbowe (dostępne dla obu duszków) do przechowywania tych wartości.
Do stworzenia algorytmu możesz wykorzystać zapisane pliki graficzne z poprzedniego ćwiczenia lub posłużyć się metodami zaproponowanymi w ćwiczeniu 2. i narysować kwadraty - zamalowany i niezamalowany.
W naszym rozwiązaniu wykorzystamy obrazy duszków zapisane w plikach graficznych. Aby zaimportować do programu Scratch kostiumy zapisane w plikach należy:
Wejść w ustawienia kostiumów w programie Scratch.
Zaimportować kostiumy z dysku.
Ustawić czytelne nazwy kostiumów tak, aby były łatwe do odróżnienia podczas tworzenia skryptu.
Przykładowy algorytm stworzony w programie Scratch. Zakładamy, że punkt zaczepienia znajduje się w lewym górnym rogu kwadratu, oraz że długość boku kwadratu wynosi .
R7MPwImk136YB
Grafika przedstawia skrypt utworzony w języku Scratch. Rozpoczyna się od bloku "Kiedy kliknięto w zieloną flagę" z dołączonym klockiem "ukryj". Następnie trzecim blokiem jest blok pisaka typu "wyczyść wszystko" z następującymi po sobie dwoma blokami zmiennych ustawionych odpowiednio na "ustaw mianownik na ''losuj liczbę od 2 do 44" i "ustaw licznik na 'losuj liczbę od 1 do mianownik - 1'". Kolejny blok jest z kategorii wygląd i jest nim "zmień kostium na pełny_kwadrat". Następnie dołączono klocek "Idź do x: -220 y: 160" i klocek kontroli "powtórz licznik razy". Blok "powtórz ..." składa się z trzech zagnieżdżonych klocków. Są nimi odpowiednio "Stempluj", "zmień x o 40" i "jeżeli pozycja x = 220 to". Ostatnio z zagnieżdżonych bloków z kolei ma w sobie dwa podrzędne "ustaw x na -220" i "zmień y o -40". Na koniec bloku "powtórz" dołączono akcje "zmień kostium na pusty_kwadrat". Następnym blokiem w skrypcie jest kolejny blok kontroli "powtórz 'mianownik - licznik' razy". Ma on w sobie trzy podbloki - "Stempluj", "zmień x o 40" i "jeżeli pozycja x = 220 to" z zagnieżdżonymi blokami "ustaw x na -220" i "zmień y o -40". Skrypt zakończony jest akcją "zatrzymaj ten skrypt".
Przykładowe rozwiązanie zadania
Źródło: GroMar Sp. z o.o., licencja: CC BY 3.0.
Rl787N8J8fLUo
Ćwiczenie 4
W jakiej kategorii znajdują się bloki umożliwiające edytowanie wartości zmiennych? Możliwe odpowiedzi: 1. Zmienne, 2. Zdarzenia, 3. Wyrażenia
Źródło: GroMar Sp. z o.o., licencja: CC BY 3.0.
Duszek sprawdza odpowiedź
Drugi duszek powinien poprosić o podanie odpowiedzi (licznik i mianownik ułamka określającego, jaka część figury jest zamalowana) oraz sprawdzić jej poprawność. Podane wartości trzeba zapamiętać w zmiennych o czytelnych nazwach, np. licznik_odp, mianownik_odp.
2
Ćwiczenie 5
Jak sprawdzić poprawność odpowiedzi udzielonej przez gracza? Czy porównanie wylosowanych wartości licznika i mianownika ułamka z wczytanymi wartościami wystarczy? Odpowiedź zapisz w poniższym notatniku.
RuS3mExMlsQk0
Źródło: GroMar Sp. z o.o., licencja: CC BY 3.0.
Uwzględnij skracanie ułamków. Te ułamki są sobie równe: , ale to nie znaczy, że wartości ich liczników oraz mianowników są takie same.
Aby sprawdzić poprawność odpowiedzi, nie wystarczy samo porównanie wartości licznika i mianownika ułamka z odpowiedziami użytkownika. Trzeba wziąć pod uwagę, że dany ułamek może być przedstawiony na kilka różnych sposobów, np. ułamki: , , . Rozwiązaniem, może być porównanie wartości ułamków np. ułamek ma wartość 0.5 oraz ułamek również ma wartość 0.5.
Należy przedstawić odpowiedź użytkownika i wylosowany ułamek w ten sam sposób.
RGYgA9SzTqqEw
Ilustracja przedstawiająca przykładową wylosowaną figurę. Na ekranie znajdują się 44 kwadraty. Narysowane w 4 rzędach, w każdym rzędzie po 11 kwadratów. Dwa górne rzędy są wyróżnione kolorem, dwa dolne są bez koloru. Na dole ekranu znajduje się duszek, który zadaje pytanie "Jaka część figury jest zamalowana?".
Duszek zadający pytanie
Źródło: Maciej Borowiecki, Janusz Wierzbicki, licencja: CC BY 3.0.
2
Ćwiczenie 6
Spróbuj sformułować warunek logiczny, który będzie uwzględniać redukcję ułamka (skracanie). Wynikiem będzie prawda, jeżeli wartość wynosi tyle samo co, podany w odpowiedzi licznik podzielony przez podany w odpowiedzi mianownik, w przeciwnym wypadku wynikiem ma być fałsz. Odpowiedź zapisz poniżej.
RdAL8XSHaLG5t
Źródło: GroMar Sp. z o.o., licencja: CC BY 3.0.
Spróbuj skrócić ułamek do wartości . Zastosuj blok z zakładki Wyrażenia z operatorem „=” podczas tworzenia rozwiązania do tego zadania.
Należy podzielić licznik przez mianownik i sprawdzić, czy końcowa wartość wynosi tyle samo co, podany w odpowiedzi licznik podzielony przez podany w odpowiedzi mianownik.
Blok z kategorii "Wyrażenia" do porównywania wartości.
Źródło: GroMar Sp. z o.o., licencja: CC BY 3.0.
R5G9unklbn1Qy
Ćwiczenie 6
Jak nazywa się kategoria w której możesz znaleźć bloki związane z porównywaniem wartości zmiennych? W tej samej kategorii możesz również znaleźć blok związany z losowaniem liczby z określonego zakresu. Możliwe odpowiedzi: 1. Czujniki, 2. Zdarzenia, 3. Wyrażenia
Źródło: GroMar Sp. z o.o., licencja: CC BY 3.0.
1
Ćwiczenie 7
Zapisz w liście kroków algorytm dla duszka sprawdzającego odpowiedź.
ROhhJhjOFy1Vq
Notatnik
Źródło: GroMar Sp. z o.o., licencja: CC BY 3.0.
Ułóż w programie Scratch skrypt dla duszka sprawdzającego odpowiedź zgodnie z listą kroków powyżej. Pamiętaj o warunku logicznym z poprzedniego ćwiczenia.
Dodaj do sceny drugiego duszka, np. kota, który będzie pytał użytkownika o rozwiązanie.
Niech duszek zacznie od zapytania użytkownika, jaka część figury jest zamalowana i zapisze podane odpowiedzi do zmiennych. Następnie w zależności od tego, czy wartość ilorazu podanego licznika i mianownika jest równa z wartością ilorazu licznika i mianownika z odpowiedzi, ma zwrócić odpowiedni komunikat.
Przykładowa lista kroków:
Zapytaj jaka część figury jest zamalowana.
Odpowiedzi zapisz w zmiennych licznik_odp i mianownik_odp.
Jeżeli to: 3.1. Pogratuluj poprawnej odpowiedzi. w przeciwnym przypadku: 3.2. Poinformuj, że podana odpowiedź jest niepoprawna.
Zatrzymaj działanie skryptu.
Przykładowy skrypt w programie Scratch:
RyHpIIAN133qC
Algorytm języka Scratch zbudowany z ośmiu głównych bloków. Pierwszym z nich jest "kiedy kliknięto w zieloną flagę". Kolejny to "powiedz' Jaka część figury jest zamalowana?' przez 3 sekundy". Następnie dołączono blok "Zapytaj 'Licznik:' i czekaj" z następującym po nim klockiem "ustaw licznik_odp na odpowiedź". Analogicznie dla piątego bloku. Jest nim akcja "zapytaj 'Mianownik: i czekaj'" z dołączonym "ustaw mianownik_odp na odpowiedź". Bezpośrednio po ustawieniu jest blok "jeżeli <licznik/mianownik = licznik_odp/mianownik_odp> to ... w przeciwnym razie". Dla pierwszego warunku załączono blok "powiedz 'Brawo, to jest poprawna odpowiedź!'", a dla alternatywnego "powiedz 'Niestety nie podałeś dobrej odpowiedzi'". Całość domknięta jest akcją "zatrzymaj ten skrypt".
Przykładowe rozwiązanie
Źródło: GroMar Sp. z o.o., licencja: CC BY 3.0.
RYECq24q9EL7H
Ćwiczenie 7
Jak nazywa się kategoria w której możesz znaleźć bloki związane z odczytywaniem i reagowaniem na różnego rodzaju informacje z otoczenia, takie jak wartości z innych bloków? Możliwe odpowiedzi: 1. Czujniki, 2. Zdarzenia, 3. Wyrażenia
Źródło: GroMar Sp. z o.o., licencja: CC BY 3.0.
Przetestuj działanie programu. Zastanów się, czy i jak można jeszcze poprawić sprawdzanie odpowiedzi. Czy uzasadnione jest wyświetlanie komunikatu „Brawo, to jest poprawna odpowiedź!”, kiedy grający poda prawidłowo wartość ułamka, ale go nie skróci? Może lepiej w takiej sytuacji wyświetlić komunikat np. „Dobrze, ale ten ułamek można jeszcze skrócić...”. Czy potrafisz sformułować taki warunek i poprawić skrypty?
Algorytm Euklidesa to metoda obliczania największego wspólnego dzielnika (NWD) dwóch liczb naturalnych. Algorytm ten opiera się na właściwościach reszty z dzielenia, czyli na tym, że reszta z dzielenia jednej liczby przez drugą jest mniejsza od drugiej liczby. Istnieją dwie główne wersje algorytmu: wersja z odejmowaniem i wersja z resztą dzielenia (modulo).
Ważne!
Do badania podzielności możesz wykorzystać operację arytmetyczną moduloiuak7gU6CL_d715e232modulo, czyli resztę z dzielenia dwóch liczb całkowitych. Operacja modulo zwraca resztę z dzielenia jednej liczby przez drugą i oznacza jest symbolem lub skrótem stawianym między dwoma liczbami.
Wykorzystanie wersji algorytmu Euklidesa z operacją arytmetyczną modulo znacznie zredukuje liczbę wykonywanych operacji.
Przykłady operacji modulo (obliczania reszty z dzielenia)
Przykład 1:
Wynikiem ( lub ) będzie , ponieważ dzielone przez to , a reszty zostaje .
Aby to sprawdzić, można wykonać operacje , a następnie , co odpowiada również .
Czyli w ostatecznym zapisie .
Przykład 2:
Wynikiem ( lub ) będzie , ponieważ dzielone przez to , a reszty zostaje .
Aby to sprawdzić, można wykonać operacje .
Czyli w ostatecznym zapisie .
2
Ćwiczenie 8
Korzystając z dołączonych materiałów omawiających algorytm Euklidesa, przygotuj krótką prezentacjęPOBu79p1Pprezentację na temat Euklidesa, jego dzieł i omawianego algorytmu.
Euklides - pochodzenie (najczęściej przyjmuje się, że pochodził z Grecji), wiek w jakim żył (IV i III wiek p.n.e., przypuszcza się, że urodził się koło 365 r. p.n.e., a zmarł około 270 r. p.n.e.)
Euklides - ważne wydarzenia z życia (pobierał nauki w Akademii Platońskiej w Atenach; większość życia spędził w Aleksandrii, gdzie nauczał we własnej szkole matematyki; prawdopodobnie był zwierzchnikiem Biblioteki Aleksandryjskiej; napisał wiele prac związanych z matematyką, w tym „Elementy”, jedno z najważniejszych i najczęściej drukowanych dzieł matematycznych w historii)
(opcjonalne) Euklides - ciekawostki
Algorytm wyznaczania NWD - wstęp
Algorytm Euklidesa z odejmowaniem
Algorytm Euklidesa z dzieleniem
Bibliografia i przypisy
Slajd końcowy
Prezentacja powinna zawierać podstawowe informacje o samym matematyku (skąd jest, w jakim wieku żył, najważniejsze wydarzenia w jego życiu), jego dziele (kiedy powstało i co obejmuje swoimi zagadnieniami) oraz algorytmie, który pozwala na wyznaczanie największego wspólnego dzielnika (sposoby implementacji algorytmu oraz jego zastosowania w życiu codziennym).
Ważne!
Planując prezentację pamiętaj o zastosowaniu zasady 5 plus minus 2, która mówi, aby prezentując na stronie jakąkolwiek informację, najlepiej zastosować nie mniej niż 3 i nie więcej niż 7 elementów. Ma to na celu uniknięcie przytłaczania odbiorcy zbyt dużą liczbą opcji.
Mając potrzebną wiedzę łatwo odpowiesz na pytanie, co trzeba zrobić, aby skrócić ułamek. Wystarczy znaleźć największą liczbę naturalną taką, która dzieli bez reszty zarówno licznik jak i mianownik ułamka, następnie podzielić licznik i mianownik przez ten dzielnik. Taką liczbę nazywamy największym wspólnym dzielnikiem i oznaczamy NWD.
Powyżej znajdują się linki do materiałów przedstawiających zasady działania algorytmu. Przykład poniżej pozwoli ci lepiej zrozumieć jego praktyczne zastosowanie.
Przykład obliczenia NWD dla liczb i , algorytmem Euklidesa z zastosowaniem operacji odejmowania.
Tabela z przykładem obliczania NWD dla liczb 76 i 48
a
b
76
48
76 - 48 = 28
48
28
48 - 28 = 20
28 - 20 = 8
20
8
20 - 8 = 12
8
12 - 8 = 4
8 - 4 = 4
4
1
Ćwiczenie 9
Zapisz w postaci listy kroków algorytm Euklidesa znajdowania największego wspólnego dzielnika dwóch liczb całkowitych dodatnich (z wykorzystaniem odejmowania).
RJQvdvNE3CZnR
Źródło: GroMar Sp. z o.o., licencja: CC BY 3.0.
Dokładnie prześledź przykład działania algorytmu znajdujący się nad ćwiczeniem.
Na początku sprawdź, czy podane dwie liczby są sobie równe. Jeśli tak, to ich największym wspólnym dzielnikiem będzie dowolna z tych liczb.
Zauważ, że w algorytmie Euklidesa z zastosowaniem operacji odejmowania, operację tą wykonujemy zawsze w kolumnie po stronie większej liczby. Musimy więc w każdym kroku porównywać wartości dwóch liczb, a większa liczba zostaje zastąpiona wynikiem operacji odejmowania.
Zawsze odejmujemy liczbę mniejszą od większej.
Specyfikacja problemu:
Dane: i – liczby całkowite dodatnie.
Wynik: – największy wspólny dzielnik liczb i .
Powtarzaj aż . 1.1. Jeżeli to: ⠀ 1.1.1. Przypisz wartość różnicy , w przeciwnym przypadku: ⠀ 1.1.2. Przypisz wartość różnicy .
Przypisz wartość .
Zwróć uwagę, że jeżeli jedna liczba jest dużo większa od drugiej, to wielokrotnie będzie następowało odejmowanie od niej tej samej mniejszej liczby. Takie wielokrotne odejmowanie można zastąpić operacją modulo z wykorzystaniem reszty z dzielenia. Na przykład dla i otrzymujemy:
Tabela z obliczeniami NWD dla liczb 256 i 48 z zastosowaniem operacji odejmowania.
a
b
256
48
256 - 48 = 208
48
208 - 48 = 160
48
160 - 48 = 112
48
112 - 48 = 64
48
64 - 48 = 16
48
16
48 - 16 = 32
16
32 - 16 = 16
16
16
Rozwiązanie z wykorzystaniem modulo (wersja z dwoma zmiennymi)
a
b
256
48
256 : 48 = 5 reszta 16
(256 mod 48 = 16)
48
16
48 : 16 = 3 reszta 0
48 mod 16 = 0
Zwróć uwagę, że zastępując odejmowanie operacją reszty z dzielenia zmienia się warunek końca powtarzania: jedna z wartości musi osiągnąć wartość .
Teraz zapoznaj się z innym zapisem:
Rozwiązanie z wykorzystaniem modulo (wersja ze trzema zmiennymi)
a
operator
b
równa się
wynik (reszta)
256
mod
48
=
16
48
mod
16
=
0
Operator mod oznacza operację wyznaczania reszty z dzielenia.
Wróćmy do przykładu obliczenia NWD dla liczb oraz i rozwiążmy go algorytmem Euklidesa z wykorzystaniem reszty z dzielenia (zastosowaniem operacji modulo). Na początek zapiszmy to w dwóch kolumnach, podobnie jak przy odejmowaniu.
Tabela z przykładem obliczania NWD dla liczb 76 i 48 z resztą dzielenia (wersja z dwoma zmiennymi)
a
b
76
48
76 : 48 = 1 reszta 28
(76 mod 48 = 28)
48
28
48 : 28 = 1 reszta 20
(48 mod 28 = 20)
28 : 20 = 1 reszta 8
(28 mod 20 = 8)
20
8
20 : 8 = 2 reszta 4
(20 mod 8 = 4)
8 : 4 = 2 reszta 0
(8 mod 4 = 0)
4
Rozwiązanie z wykorzystaniem modulo (wersja ze trzema zmiennymi)
a
operator
b
równa się
wynik (reszta)
76
mod
48
=
28
48
mod
28
=
20
28
mod
20
=
8
20
mod
8
=
4
8
mod
4
=
0
1
Ćwiczenie 10
Zapisz w postaci listy kroków algorytm Euklidesa znajdowania największego wspólnego dzielnika dwóch liczb całkowitych dodatnich (z wykorzystaniem reszty z dzielenia). Zapisz dwa sposoby:
z dwoma zmiennymi a, b i z instrukcją warunkową podobną, jak w przypadku algorytmu Euklidesa z odejmowaniem ,
wersję ze zmienną pomocniczą reszta.
Odpowiedź możesz umieścić w poniższym notatniku.
ROmBXBss4w38a
(Uzupełnij).
Notatnik
Źródło: GroMar Sp. z o.o., licencja: CC BY 3.0.
Dokładnie prześledź przykłady działania algorytmu znajdujące się nad ćwiczeniem.
Sposób 1 - dwie zmienne:
Warunkiem końca algorytmu jest, że jedna z wartości musi osiągnąć wartość 0.
Najpierw należy porównać dwie liczby, większą z nich należy zastąpić resztą z dzielenia liczby a przez liczbę b. Największym wspólnym dzielnikiem będzie wówczas suma dwóch zmiennych.
Sposób 2 - zmienna pomocnicza:
Warunkiem końca algorytmu jest, że b musi osiągnąć wartość 0.
Pomocniczą zmienną w drugim sposobie jest reszta, której należy przypisać wynik reszty z dzielenia liczby a przez liczbę b. Wówczas większa wartość będzie przyjmować wartość mniejszej, a mniejsza wartość reszty.
Zauważ, że nie trzeba porównywać tutaj obu liczb, gdyż w przypadku podania liczby b, większej od a - wykonamy tylko jedną dodatkową iterację pętli.
Specyfikacja problemu:
Dane: i – liczby całkowite dodatnie.
Wynik: – największy wspólny dzielnik liczb i .
Powtarzaj, aż lub : 1.1. Jeżeli to: ⠀ 1.1.1. Przypisz a wartość . w przeciwnym przypadku: ⠀ 1.1.2. Przypisz wartość .
Przypisz wartość .
Wprowadzając pomocniczą zmienną można zapisać algorytm trochę prościej, bez użycia instrukcji warunkowej.
Powtarzaj aż . 1.1. Przypisz zmiennej wartość . 1.2. Przypisz wartość . 1.3. Przypisz wartość .
Przypisz wartość .
2
Ćwiczenie 11
Znasz już kilka algorytmów znajdowania największego wspólnego dzielnika. Zastanów się i ewentualnie przedyskutuj z kolegami i koleżankami, który z nich wykona mniej powtórzeń.
Prześledź działanie obu algorytmów krok po kroku dla przykładowych liczb i spróbuj wyciągnąć wnioski.
Efektywniejszym algorytmem znajdowania największego wspólnego dzielnika, będzie algorytm wykorzystujący operację reszty z dzielenia. Wykona on mniej operacji, ponieważ wielokrotne odejmowanie tej samej liczby zostanie zastąpione operacją reszty z dzielenia. Dzięki operacji reszty z dzielenia odejmiemy wszystkie wielokrotności mniejszej liczby naraz. Korzystając z operacji obliczania reszty z dzielenia, wielokrotne operacje odejmowania zostaną wykonane w jednej instrukcji.
3
Ćwiczenie 12
Stwórz własny blok z dwoma parametrami liczbowymi, który będzie realizował jeden z algorytmów wyliczania największego wspólnego dzielnika.
Informacje na temat tworzenia własnych bloków znajdziesz w materiale Projektowanie automatu biletowego w programie ScratchDZP9YtLoFProjektowanie automatu biletowego w programie Scratch. Zostało to wyjaśnione w ćwiczeniu 17.
Często bardziej złożony problem warto podzielić na podproblemy i zapisać je w postaci oddzielnych bloków. Poniższa instrukcja pokaże ci, jak stworzyć własny blok w programie Scratch.
W celu utworzenia nowego bloku należy przejść do kategorii Moje bloki.
Następnie naciśnij przycisk Utwórz blok, w polu edycyjnym wpisz jego nazwę. Jeżeli chcesz aby blok miał dodatkowe parametry, zdecyduj czy są one wartościami liczbowymi lub tekstem (dodać je możesz za pomocą przycisku Dodaj dane wejściowe: liczba lub tekst), czy może są one wartościami logicznymi prawda lub fałsz (wtedy wybierz przycisk Dodaj dane wejściowe: Boolean). Po dodaniu odpowiedniej liczby parametrów zatwierdź tworzenie bloku przyciskiem OK.
W obszarze skryptów pojawi się nowy blok, pod który można podczepić inne bloki realizujące rozwiązywany podproblem.
Ważne!
Parametry potrzebne są w przypadku, kiedy chcesz podawać z zewnątrz dane dotyczące, np. długości boku kwadratu, który ma zostać narysowany przy pomocy bloku Kwadrat.
Jeżeli chcesz edytować utworzony blok, dodając np. nowe parametry, kliknij w niego prawym przyciskiem myszy i wybierz z menu kontekstowego przycisk Edytuj.
Poniżej znajduje się algorytm wykorzystujący operację odejmowania.
R1GYEMGDpy6iU
Skrypt rozpoczyna się blokiem "definiuj NWD a b". Następnie dołączony jest blok "ustaw nwd_a na a", po którym dodano "zmień nwd_b o b". Czwartym z kolei klockiem jest blok pętli "powtarzaj aż
Przykładowe rozwiązanie - skrypt Scratch.
Źródło: GroMar Sp. z o.o., licencja: CC BY 3.0.
Poniżej znajduje się algorytm wykorzystujący operację reszty z dzielenia.
RJOawIPc93MPv
Skrypt składa się z czterech głównych bloków. Pierwszym z nich jest "definiuj NWD a b". Drugi to "ustaw nwd_a na a", a trzeci to "ustaw nwd_b na b". Ostatnim z głównych klocków jest "powtarzaj aż
Przykładowy algorytm na obliczanie największego wspólnego dzielnika dwóch liczb.
Źródło: GroMar Sp. z o.o., licencja: CC BY 3.0.
R9KwdJowPRZOP
Ćwiczenie 12
W jakiej kategorii znajduje się opcja, która umożliwia utworzenie nowego bloku? Możliwe odpowiedzi: 1. Czujniki, 2. Zdarzenia, 3. Wyrażenia, 4. Moje bloki
Źródło: GroMar Sp. z o.o., licencja: CC BY 3.0.
iuak7gU6CL_d715e232
RDlp8Mzh7NbQz
Zielony blok do tworzenia skryptów w Scratch z kategorii "Wyrażenia" z komunikatem "reszta z dzielenia ... przez ...".
Klocek języka Scratch realizujący resztę z dzielenia wybranej przez nas liczby przez z inną przez nas zadeklarowaną.
Źródło: GroMar Sp. z o.o., licencja: CC BY 3.0.
Przykład skryptu, który korzysta z bloku reszta z dzielenia.
R1G6P61YPHlbN
Skrypt realizujący instrukcję warunkową. Schemat przedstawia: 1. kiedy kliknięto; 2. zapytaj "Podaj liczbę całkowitą:" i czekaj; 3a. jeżeli reszta z dzielenia odpowiedź przez 2 równa się 0, to; 3.1. powiedz "Podałeś liczbę parzystą!"; 3b. w przeciwnym razie; 3.2. powiedz "Podałeś liczbę nieparzystą!"; 4. zatrzymaj ten skrypt
Skrypt sprawdzający parzystość liczb.
Źródło: GroMar Sp. z o.o., licencja: CC BY 3.0.
Modyfikujemy program
Modyfikacja projektu będzie polegała na tym, aby rozpoznawać trzy stany:
Grający udzielił poprawnej odpowiedzi ze skróconym ułamkiem.
Grający udzielił poprawnej odpowiedzi co do wartości ułamka, ale go nie skrócił.
Grający udzielił błędnej odpowiedzi.
Czy grający udzielił prawidłowej odpowiedzi sprawdzisz używając tego samego warunku, co dotychczas.
R5uiKekjSs30N
Zielony klocek z języka Scratch. Z dwoma polami do porównania oddzielonymi znakiem "=". Po lewej stronie równania jest wartość będąca wynikiem działania <licznik / mianownik>, a po prawej wynik z <licznik_odp / mianownik_odp>.
Klocek z kategorii "Wyrażenia" sprawdzający czy istnieje równość między dwiema stronami równania.
Źródło: GroMar Sp. z o.o., licencja: CC BY 3.0.
Jeśli warunek przyjmuje wartość prawda, należy rozstrzygnąć, korzystając z bloku obliczającego NWD, czy wyświetlić „Brawo, to jest poprawna odpowiedź!!” (stan 1), czy „Dobrze, ale można skrócić ułamek...” (stan 2).
3
Ćwiczenie 13
Sformułuj warunek logiczny sprawdzający, czy grający podał jako odpowiedź skrócony ułamek i popraw skrypt.
RusMAP2wAvfnc
Wersja alternatywna: (Uzupełnij).
Źródło: GroMar Sp. z o.o., licencja: CC BY 3.0.
Należy obliczyć NWD dla wylosowanych wartości licznika i mianownika, a następnie wykorzystać wynik w warunku logicznym do sprawdzenia, czy podane jako odpowiedzi wartości są równe skróconemu ułamkowi.
Poprawiony skrypt:
RAa4Un02WNvKu
Skrypt języka Scratch. Pierwszy blok to "kiedy kliknięto w zieloną flagę". Drugi jest klockiem z kategorii "Wygląd" z wartością "Powiedz 'Jaka część figury jest zamalowana?' przez 3 sekundy". Następnie dołączono blok "zapytaj 'Licznik:' i czekaj" z następującym po nim klocku "ustaw licznik_odp na odpowiedź". Klocek piąty i szósty działa podobnie. Blok "zapytaj 'Mianownik:' i czekaj" dołączony jest do poprzedniego, z kolei blok "ustaw mianownik_odp na odpowiedź" występuje po nim. Następny klocek jest klockiem sprawdzenia warunku. Składa się on z dwóch części - prawdziwej dla spełnionego warunku i fałszywej, jeżeli jest on niespełniony. Klocek ma wartość "jeżeli <licznik / mianownik = licznik_odp / mianownik_odp> to ... w przeciwnym razie". Pierwsza część warunku składa się z dwóch zagnieżdżonych bloków. Pierwszym z nich jest "NWD licznik mianownik", natomiast drugim jest kolejny blok porównania "jeżeli <licznik / nwd_a = licznik_odp> i <mianownik / nwd_a = mianownik_odp> to". W pierwszym miejscu do wprowadzenia warunku dołączono blok "powiedz 'Brawo, to jest poprawna odpowiedź!'", w drugim "powiedz 'Dobrze, ale można skrócić ułamek...'". Do poprzedniego klocka sprawdzania warunku, czyli siódmego głównego, w przypadku alternatywnym znajduje się blok "powiedz 'Niestety nie podałeś dobrej odpowiedzi.'". Skrypt zakończony jest on klockiem "zatrzymaj ten skrypt".
Skrypt z przykładowym rozwiązaniem.
Źródło: GroMar Sp. z o.o., licencja: CC BY 3.0.
R1Py4slZ5I5ld
Ćwiczenie 13
Jak nazywa się kategoria, która służy do kontrolowania pozycji duszków? Możliwe odpowiedzi: 1. Ruch, 2. Zdarzenia, 3. Wyrażenia
Źródło: GroMar Sp. z o.o., licencja: CC BY 3.0.
Zadanie uzupełniające
3
Ćwiczenie 14
Przygotuj skrypt, w którym duszek poprosi o podanie wymiarów prostokąta, tj. szerokości i wysokości. Następnie duszek powinien zwrócić obliczoną minimalną liczbę kwadratów, którymi można wypełnić prostokąt, jak również długość ich boku.
Specyfikacja problemu:
Dane: Prostokąt o szerokości i wysokości .
Wynik: Minimalna liczba takich samych kwadratów, którymi można wypełnić prostokąt oraz długość boku pojedynczego kwadratu
Przykład: prostokąt o długości i . Minimalna liczba kwadratów wynosi (długość boku kwadratu wynosi ).
R1LOfqpvCnhAn
Zrzut prostokąta wypełnionego kwadratami. 3 rzędy po 5 kwadratów.
Prostokąt o wymiarach 3 x 5.
Źródło: GroMar Sp. z o.o., licencja: CC BY 3.0.
Zacznij od zapytania użytkownika o wysokość i szerokość prostokąta, następnie korzystając z algorytmu Euklidesa oblicz NWD otrzymanych wartości. Oblicz ile kwadratów pomieści prostokąt o zadanej wysokości oraz szerokości, wykonując dzielenie iloczynu wartości wysokości oraz szerokości prostokąta przez obliczoną wartość NWD. Następnie korzystając z obliczonych danych zapisz końcową odpowiedź.
Przykładowy skrypt:
R1Vcpc4CpKAhZ
Skrypt języka Scratch zaczynający się od bloku "kiedy kliknięto w zieloną flagę" z dołączoną akcją "zapytaj 'Podaj szerokość prostokąta: ' i czekaj". Następnie dołączono blok "ustaw S na odpowiedź". Następnym klockiem jest "zapytaj 'Podaj wysokość prostokąta:' i czekaj" z następującym po nim blokiem "ustaw W na odpowiedź". Kolejny blok to "NWD S W". Następnie dołączono blok "ustaw 'ile_kwadratów_szerokość' na (S / nwd_a)" i występujący po nim "ustaw 'ile_kwadratów_wysokość' na (W / nwd_a)". Przedostatnim blokiem jest akcja "powiedz połącz 'Minimalna liczba kwadratów wynosi:' i połącz ile_kwadratów_szerokość * ile_kwadratów_wysokość i połącz '. Długość boku kwadratu wynosi:' i nwd_a", natomiast ostatnio klocek to "zatrzymaj ten skrypt".
Przykładowe rozwiązanie zadania
Źródło: GroMar Sp. z o.o., licencja: CC BY 3.0.
RSa7oJqTN6XJq
Skrypt rozpoczyna się blokiem "definiuj NWD a b". Następnie dołączony jest blok "ustaw nwd_a na a", po którym dodano "zmień nwd_b o b". Czwartym z kolei klockiem jest blok pętli "powtarzaj aż
Przykładowy algorytm na obliczanie największego wspólnego dzielnika dwóch liczb.
Źródło: GroMar Sp. z o.o., licencja: CC BY 3.0.
R1Z3iq2ez9Ily
Skrypt składa się z czterech głównych bloków. Pierwszym z nich jest "definiuj NWD a b". Drugi to "ustaw nwd_a na a", a trzeci to "ustaw nwd_b na b". Ostatnim z głównych klocków jest "powtarzaj aż
Przykładowy algorytm na obliczanie największego wspólnego dzielnika dwóch liczb.
Źródło: GroMar Sp. z o.o., licencja: CC BY 3.0.
RGXXryHbvMKWX
Ćwiczenie 14
Jak nazywa się kategoria w której możesz znaleźć bloki związane z kontrolowaniem skryptów pod pewnymi warunkami? Możliwe odpowiedzi: 1. Ruch, 2. Zdarzenia, 3. Wyrażenia, 4. Kontrola