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ę czterdzieści cztery kwadraty. Narysowane w czterech rzędach, w każdym rzędzie po jedenaście 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 - dwadzieścia dwa, mianownik - czterdzieści cztery. 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 jeden, a mianownika - cyfra dwa. 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ę czterdzieści cztery kwadraty. Narysowane w czterech rzędach, w każdym rzędzie po jedenaście 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 - dwadzieścia dwa, mianownik - czterdzieści cztery. 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 jeden, a mianownika - cyfra dwa. 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ę czterdzieści cztery kwadraty. Narysowane w czterech rzędach, w każdym rzędzie po jedenaście 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 - dwadzieścia dwa, mianownik - czterdzieści cztery. 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 jeden, a mianownika - cyfra dwa. 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
Miejsce na wpisanie tekstu
Notatnik
Ź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
Miejsce na zapisanie odpowiedzi
Notatnik
Ź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 przedstawia dwa duszki – kwadraty. Widoczne są również kwadrat zamalowany na czerwono, duszek Tera koloru biało‑niebieskiego oraz kwadrat przyłożony do układu współrzędnych.
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 zieloną flagę z dołączonym blokiem ukryj. 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 dwóch do czterdziestu czterech i ustaw licznik na losuj liczbę od jednego do mianownik odjąć jeden. Kolejny blok jest z kategorii wygląd i jest nim zmień kostium na pełny_kwadrat. Następnie dołączono blok idź do X: minus dwieście dwadzieścia, Y: sto sześćdziesiąt i blok kontroli powtórz licznik razy. Blok powtórz składa się z trzech zagnieżdżonych bloków. Są nimi odpowiednio: Stempluj, zmień X o czterdzieści i jeżeli pozycja X równa się dwieście dwadzieścia, to. Ostatni z zagnieżdżonych bloków z kolei ma w sobie dwa podrzędne ustaw X na minus dwieście dwadzieścia i zmień Y o minus czterdzieści. Na koniec bloku powtórz dołączono akcję zmień kostium na pusty_kwadrat. Następnym blokiem w skrypcie jest blok kontroli powtórz mianownik odjąć licznik razy. Ma on w sobie trzy podbloki: Stempluj, zmień X o czterdzieści i jeżeli pozycja X równa się dwieście dwadzieścia, to z zagnieżdżonymi blokami ustaw X na minus dwieście dwadzieścia i zmień Y o minus czterdzieści. 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
Miejsce na zapisanie odpowiedzi
Notatnik
Ź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 przedstawia przykładową wylosowaną figurę. Na ekranie znajdują się czterdzieści cztery kwadraty, narysowane w czterech rzędach, w każdym rzędzie po jedenaście 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
Miejsce do zapisania odpowiedzi
Notatnik
Ź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.
RZ0mWx2AcDEzL
Zrzut ekranu przedstawia blok z kategorii Wyrażenia do porównywania wartości. Licznik przez mianownik równa się licznik_odp przez mianownik_odp.
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
Miejsce do zapisania odpowiedzi
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
Skrypt języka Scratch zbudowany z ośmiu głównych bloków. Pierwszym z nich jest kiedy kliknięto zieloną flagę. Kolejny to powiedz, jaka część figury jest zamalowana, przez trzy sekundy. Następnie dołączono blok Zapytaj Licznik: i czekaj z następującym po nim blokiem 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 przez mianownik równa się licznik_odp przez 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 ustaw nwd_b na b. Czwartym z kolei blokiem jest blok pętli powtarzaj, aż nwd_a równa się nwd_b. W tym zamieszczono blok z pętlą jeżeli nwd_a jest większe od nwd_b, toustaw nwd_a na nwd_a odjąć nwd_b. W przeciwnym razie ustaw nwd_a na nwd_b odjąć nwd_a. Poza pętlami umieszczono blok ustaw wynik na nwd_a, dalej powiedz wynik. Na końcu skryptu znajduje się blok zatrzymaj ten skrypt.
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 rozpoczyna się blokiem definiuj NWD a b. Następnie dołączono blok ustaw nwd_a na a, po którym dodano blok ustaw nwd_b na b. Dalej znajduje się blok ustaw reszta na zero. Kolejnym blokiem jest blok pętli powtarzaj, aż nwd_b równa się zero. W tym zamieszczono bloki: ustaw reszta na reszta z dzielenia nwd_a przez nwd_b, ustaw nwd_a na nwd_b, ustaw nwd_b na reszta. Poza pętlą umieszczono blok powiedz nwd_a. Na końcu skryptu znajduje się blok zatrzymaj ten skrypt.
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
Zrzut ekranu przedstawia 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
Przedstawiono skrypt sprawdzający parzystość liczb. Składa się on z bloków: kiedy kliknięto zieloną flagę; zapytaj, podaj liczbę całkowitą, i czekaj; jeżeli reszta z dzielenia odpowiedź przez dwa równa się zero, to; powiedz Podałeś liczbę parzystą; w przeciwnym raziepowiedz Podałeś liczbę nieparzystą; 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
Przedstawiono zielony blok w języku Scratch. Zawiera on dwa pola do porównania, oddzielone znakiem =. Po lewej stronie równania jest wartość będąca wynikiem działania <licznik przez mianownik>, a po prawej wynik z <licznik_odp przez mianownik_odp>.
Blok 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
Miejsce do zapisania rozwiązania
Notatnik
Ź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 z przykładowym rozwiązaniem w języku Scratch. Pierwszy blok to kiedy kliknięto zieloną flagę. Drugi jest blokiem z kategorii Wygląd z wartością Powiedz, jaka część figury jest zamalowana, przez trzy sekundy. Następnie dołączono blok zapytaj Licznik i czekaj z następującym po nim blokiem ustaw licznik_odp na odpowiedź. Bloki piąty i szósty działają 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 blok jest blokiem 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. Blok ma wartość jeżeli <licznik przez mianownik równa się licznik_odp przez 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 przez nwd_a równa się licznik_odp> i <mianownik przez nwd_a równa się 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 bloku sprawdzania warunku, czyli głównego, w przypadku alternatywnym znajduje się blok powiedz Niestety, nie podałeś dobrej odpowiedzi. Skrypt zakończony jest blokiem 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 ekranu przedstawia prostokąt wypełniony kwadratami. Zawiera trzy rzędy po pięć kwadratów.
Prostokąt o wymiarach
Ź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 przedstawia przykładowe rozwiązanie zadania w języku Scratch. Zaczyna się od bloku kiedy kliknięto zieloną flagę z dołączonym blokiem zapytaj Podaj szerokość prostokąta i czekaj. Następnie dołączono blok ustaw S na odpowiedź. Następnym blokiem 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 przez nwd_a i występujący po nim ustaw ile_kwadratów_wysokość na W przez nwd_a. Przedostatnim blokiem jest akcja powiedz połącz Minimalna liczba kwadratów wynosi i połącz ile_kwadratów_szerokość razy ile_kwadratów_wysokość i połącz długość boku kwadratu wynosi i nwd_a, natomiast ostatni blok 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