Rysunek przedstawia ręce człowieka sprawdzającego listę zadań do wykonania.
Rysunek przedstawia ręce człowieka sprawdzającego listę zadań do wykonania.
Operacje na listach w Scratch: tworzenie i sortowanie listy, minimum i maksimum
Źródło: Videoplasty.com, licencja: CC BY-SA 4.0. Creative Commons Uznanie autorstwa-Na tych samych warunkach 4.0.
Czy można zbudować trójkąt - gra matematyczna
W materiale pt. Jeszcze więcej duszków. Klonowanie, stemplowanie i komunikatyP16aveyceJeszcze więcej duszków. Klonowanie, stemplowanie i komunikaty opisano grę, w której zadaniem użytkownika jest odpowiedzenie na pytanie, czy z trzech odcinków o podanych długościach (wylosowanych przez duszka) można zbudować trójkąt. Duszek sprawdzał odpowiedź i wyświetlał odpowiedni komunikat.
W tym materiale zmodyfikujemy tą aplikację. Duszek postawi przed użytkownikiem trudniejsze zadanie. Odcinków będzie więcej, trzeba odpowiedzieć na pytanie, czy z każdych trzech odcinków można zbudować trójkąt. Twoim zadaniem będzie oprogramować działania duszka, który sprawdza odpowiedź użytkownika. Działanie przykładowej aplikacji możesz obejrzeć na poniższym filmie.
RS4TBPErlNR45
Przedstawienie działania przykładowej aplikacji. Pojawiają się długości odcinków, a obok nich pytanie w dymku Czy z każdych trzech odcinków o podanych długościach można zbudować trójkąt?. Na górze znajdują się przyciski Tak i Nie.
Przedstawienie działania przykładowej aplikacji. Pojawiają się długości odcinków, a obok nich pytanie w dymku Czy z każdych trzech odcinków o podanych długościach można zbudować trójkąt?. Na górze znajdują się przyciski Tak i Nie.
Film przedstawiający poprawne działanie skryptu
Źródło: Janusz Wierzbicki, Maciej Borowiecki, licencja: CC BY-SA 3.0.
Źródło: Janusz Wierzbicki, Maciej Borowiecki, licencja: CC BY-SA 3.0.
Przedstawienie działania przykładowej aplikacji. Pojawiają się długości odcinków, a obok nich pytanie w dymku Czy z każdych trzech odcinków o podanych długościach można zbudować trójkąt?. Na górze znajdują się przyciski Tak i Nie.
Polecenie 1
Poszukaj w swoich zasobach gry Czy można zbudować trójkątD11hqKrSTCzy można zbudować trójkąt . Kolejne ćwiczenia pozwolą ci na zmodyfikowanie jej tak, aby działała tak, jak na filmie powyżej. Jeżeli nie masz tej aplikacji, wykonaj poniższe ćwiczenia, a na koniec dopisz własne skrypty, korzystając z materiału Jeszcze więcej duszków. Klonowanie, stemplowanie i komunikatyP16aveyceJeszcze więcej duszków. Klonowanie, stemplowanie i komunikaty
Ćwiczenie 1
Utwórz listę do przechowywania długości odcinków (np. o nazwie Odcinki) oraz zmienną (np. o nazwie ), w której będzie przechowywana liczba losowanych odcinków.
Odpowiedni przycisk znajdziesz w kategorii Zmienne.
R1cEIGZcmMfPV
Zrzut ekranu przedstawia okno tworzenia nowej listy, w którym należy wpisać nazwę listy. Pod zmiennymi znajduje się przycisk Stwórz listę. Obok widoczne jest prostokątne okno z paskiem z nazwą Nowa lista na górze oraz przyciskiem do zamknięcia okna. Poniżej są: pasek do wpisania nazwy Nowa nazwa listy, przyciski do zaznaczenia, czy lista jest dla wszystkich duszków, czy tylko dla tego duszka oraz przyciski Anuluj i OK.
Okno tworzenia nowej listy
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
Naciśnij przycisk Stwórz listę znajdujący się w zakładce Zmienne.
R129DTzuTHtBX
Zrzut ekranu pokazuje przycisk Stwórz listę dostępny w zakładce Zmienne. Na zdjęciu widoczne są trzy zakładki programu: skrypt, kostiumy, dźwięki. Podświetlono trzy opcje: Skrypt, Zmienne i Stwórz listę.
Przycisk Stwórz listę dostępny w zakładce Zmienne
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
Po jego naciśnięciu pojawi się nowe okno dialogowe. Wpisz w polu nazwę listy i wybierz, czy lista ma dotyczyć jedynie duszka, dla którego lista jest tworzona, czy ma być dostępna dla wszystkich duszków. Następnie kliknij przycisk OK.
RW6riqNtZaTxQ
Zrzut ekranu pokazuje okno dialogowe tworzenia listy w Scratch. Na zdjęciu widoczne jest okno dialogowe z napisem na górze Nowa lista oraz opcją zamknięcia okna. Poniżej znajduje się pole do wpisania nazwy listy Nowa nazwa listy. Niżej są do wyboru dwie opcje: Dla wszystkich duszków oraz Tylko dla tego duszka. Na dole znajdują się dwa przyciski: Anuluj i OK.
Okno dialogowe tworzenia listy w Scratch
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
R2cIKTlTTqzjH
Ćwiczenie 1
Uporządkuj etapy tworzenia listy.
Uporządkuj etapy tworzenia listy.
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
Ćwiczenie 2
Przygotuj skrypt, uruchamiany po kliknięciu zielonej flagi, losujący najpierw liczbę odcinków, a potem ich długości. Uwzględnij w skrypcie polecenie, które każe duszkowi zadać pytanie, czy z podanych odcinków da się zbudować trójkąt.
Zakres losowania ilości odcinków dobierz tak, aby były co najmniej cztery odcinki i wszystkie elementy listy były równocześnie pokazane na scenie. Pamiętaj, aby przed losowaniem elementów listy usunąć jej poprzednią zawartość.
Przykładowy skrypt:
R1dK2kxx72r24
Zrzut ekranu przedstawia skrypt realizujący losowanie, najpierw liczby odcinków, a potem ich długości. Na górze skryptu znajduje się żółty blok z napisem kiedy kliknięto oraz ikoną zielonej flagi, poniżej żółty blok z napisem nadaj komunikat początek, pod nim pomarańczowy blok z napisem ustaw n na oraz znajdujący się wewnątrz pomarańczowego bloku zielony blok z napisem losuj liczbę z zakresu od czterech do siedmiu. Do poprzedniego elementu dołączony jest ciemnopomarańczowy blok z napisem usuń wszystko z Odcinki, poniżej znajduje się żółty blok z napisem powtórz n razy, a pod nim ciemnopomarańczowy blok połączony z zielonym z napisem dodaj losuj liczbę od dwóch do pięciu do Odcinki. Do poprzedniego elementu dołączono fioletowy blok z napisem powiedz oraz białym polem z tekstem: czy z każdych trzech odcinków o podanych długościach można zbudować trójkąt?. Na dole zbudowanego skryptu widoczny jest jasnopomarańczowy blok z napisem zatrzymaj ten skrypt.
Przykładowy skrypt losowania liczby odcinków i nadawania im losowej długości
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
R1QTMqJYQzPda
Ćwiczenie 2
Uporządkuj bloki skryptu, który losuje najpierw liczbę odcinków, a potem ich długości.
Uporządkuj bloki skryptu, który losuje najpierw liczbę odcinków, a potem ich długości.
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
Aby z trzech odcinków dało się zbudować trójkąt, musi być spełniona tzw. nierówność trójkąta, która mówi, że w trójkącie suma długości dwóch krótszych boków jest zawsze większa od długości najdłuższego boku.
Ćwiczenie 3
Określ, jak sprawdzić, czy z każdych trzech odcinków można zbudować trójkąt. Spróbuj znaleźć więcej niż jedną propozycję rozwiązania tego problemu.
Pamiętaj, że w tej wersji skryptu będziesz musiał porównać więcej niż 3 odcinki. Przemyśl, jak sprawdzić, czy jest możliwe utworzenie trójkąta spośród wszystkich wylosowanych odcinków.
Algorytm 1 Sprawdzanie wszystkich możliwych trójek liczb. Łatwo zapewne spostrzeżesz, że ich liczba bardzo szybko rośnie wraz ze wzrostem liczby odcinków.
R1LHOK23QwsG4
Zrzut ekranu przedstawia tabelę liczby trójek do sprawdzenia w zależności od liczby odcinków. Dla trzech odcinków jest to jedna trójka. Dla czterech odcinków są cztery. Dla pięciu jest dziesięć. Dla sześciu jest dwadzieścia. Dla siedmiu jest trzydzieści pięć. Dla dziesięciu jest sto dwadzieścia. Dla stu jest sto sześćdziesiąt jeden tysięcy siedemset.
Tabela przedstawiająca liczby trójek do sprawdzenia w zależności od liczby odcinków
Źródło: Janusz Wierzbicki, Maciej Borowiecki, licencja: CC BY-SA 3.0.
Tabela liczby trójek do sprawdzenia w zależności od liczby odcinków
Liczba odcinków
Liczba trójek liczb do sprawdzenia
Algorytm 2 Jeśli liczby na liście zostaną uporządkowane od najmniejszej do największej, to wystarczy sprawdzić jedną trójkę: dwa pierwsze elementy listy i ostatni (suma dwóch pierwszych elementów musi być większa od ostatniego). Jeśli z odcinków o tych długościach można zbudować trójkąt, to także ze wszystkich pozostałych.
Algorytm 3 W poprzednim algorytmie wykorzystujemy tylko dwa pierwsze elementy (dwa najmniejsze) oraz ostatni (największy). Nie trzeba więc porządkować (sortować) listy, wystarczy znaleźć dwie najmniejsze liczby oraz największą.
Żeby stwierdzić, czy z każdej trójki odcinków można zbudować trójkąt wystarczy znaleźć dwa najkrótsze odcinki oraz najdłuższy, czyli dwie liczby najmniejsze i największą, a następnie sprawdzić dla nich nierówność trójkąta. Do znalezienia tych wartości wykorzystaj trzy pomocnicze zmienne.
Polecenie 2
Utwórz trzy pomocnicze zmienne, w których zapamiętasz poszukiwane liczby.
Pamiętaj, żeby nazwy zmiennych były czytelne. Osoba, która pierwszy raz widzi Twoje skrypty, powinna szybko zrozumieć, co przechowuje każda zmienna. Możesz nadać im nazwy, np. min1, min2, max.
Aby utworzyć nową zmienną, naciśnij przycisk Utwórz zmienną znajdujący się w zakładce Zmienne.
RILGimnPGsDAN
Zrzut ekranu przedstawia fragment okna programu Scratch z utworzonymi zmiennymi. Na górze znajduje się przycisk z napisem Utwórz zmienną, a poniżej niego znajduje się lista zmiennych, która składa się z dziewięciu elementów: i, j, max, min1, min2, n, pom, sortowanie_min, środek. Elementy max, min1, min2 są zaznaczone.
Fragment okna programu Scratch z utworzonymi zmiennymi
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
Ćwiczenie 4
Zastanów się, jakie nadać wartości początkowe zmiennym min1, min2 i max. Przygotuj pomocniczy skrypt nadający im wartości początkowe.
Najwygodniej nadać wartości początkowe, wykorzystując liczby występujące na liście. Ponieważ potrzebujesz dwóch wartości najmniejszych, możesz wykorzystać dwa pierwsze elementy listy Odcinki. Pamiętaj, aby był prawdziwy warunek min1min2.
Przykładowy skrypt:
R17PXNNHhhFK7
Zrzut ekranu pokazuje przykładową definicję bloku początkowe_wartości. Na górze znajduje się element z napisem definiuj początkowe_wartości. Poniżej są dwa elementy, które ustawiają zmienną min1 na element pierwszy listy odcinków, a zmienną min2 na element drugi listy odcinków. Następnie wykonywana jest pętla jeżeli zmienna min2 jest mniejsza od zmiennej min1, w której zmienna pom ustawiana jest na zmienną min1, zmienna min1 ustawiana jest na zmienną min2, a zmienna min2 na zmienną pom. Następnie po pętli zmienna max ustawiana jest na zmienną min2. Na dole jest element z napisem zatrzymaj ten skrypt, który kończy skrypt.
Przykładowa definicja bloku początkowe_wartości
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
R1X3w8u9ZjMF2
Ćwiczenie 4
Użytkownik ma za zadanie stworzyć blok, który nadaje wartości początkowe zmiennym min1, min2 i max. Wstaw w tekst uzupełnienia kodu.
Użytkownik ma za zadanie stworzyć blok, który nadaje wartości początkowe zmiennym min1, min2 i max. Wstaw w tekst uzupełnienia kodu.
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
Ćwiczenie 5
Zapisz w postaci listy kroków algorytm znajdowania dwóch wartości najmniejszych i największej.
Do zapisania listy kroków możesz wykorzystać poniższy notatnik.
R1MVrV482jjJJ
Miejsce, w którym można wpisać tekst
Notatnik
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
Możesz wzorować się na algorytmie znajdowania najmniejszej liczby w liście, który omawiany był na poprzedniej stronie.
Dane: – liczba elementów listy (długość listy), – lista odcinków.
Zmienne: – pierwsza najmniejsza liczba w liście odcinków, – druga najmniejsza liczba w liście odcinków, – zmienna pomocnicza do przechowywania elementu przed zamianą, – największa liczba w liście odcinków.
Przykładowy algorytm:
Ustaw wartości początkowe zmiennych , : 1.1. Ustaw na pierwszy element z listy . 1.2. Ustaw na drugi element z listy . 1.3. Jeżeli , to: ⠀ 1.3.1. Ustaw na . ⠀ 1.3.2. Ustaw na . ⠀ 1.3.3. Ustaw na . 1.4. Ustaw na .
Ustaw na .
Powtórz razy: 3.1. Jeżeli element na pozycji w to ustaw na element na pozycji w . 3.2. Jeżeli element na pozycji w to: ⠀ 3.2.1. Ustaw na . ⠀ 3.2.2. Ustaw na element na pozycji w . W przeciwnym razie: ⠀ 3.2.3. Jeżeli element na pozycji w , to: ⠀ ⠀ 3.2.3.1 Ustaw na element o pozycji w .
Ćwiczenie 6
Utwórz nowy blok znajdujący dwie wartości najmniejsze i największą zgodnie z algorytmem z poprzedniego ćwiczenia.
Pamiętaj, aby na początku nowego bloku wykorzystać wcześniej stworzony algorytm, który ustawi początkowe wartości zmiennym min1, min2 oraz max.
Poniżej znajduje się stworzony skrypt:
REq2cxtqGRiLd
Zrzut ekranu przedstawia przykładową definicję bloku znajdź_2min_max. Skrypt rozpoczyna się od elementów z napisem definiuj znajdź_2min_max oraz początkowe_wartości. W kolejnym bloki zmienna i ustawiana jest na wartość trzy. Następnie pętla jest powtarzana ze zmienną n minus dwa razy. W pętli wykonywane są następujące akcje: jeżeli element i z listy odcinków jest większy od zmiennej max, to zmienna max jest ustawiana na element i z listy odcinków. Następnie, jeżeli element i z listy odcinków jest mniejszy od zmiennej min1, to zmienna min2 ustawiana jest na zmienną min1, a zmienna min1 ustawiana jest na element i z listy odcinków, w przeciwnym razie, jeżeli element i z listy odcinków jest mniejszy od zmiennej min2, to zmienna min2 jest ustawiana na element i listy odcinków. Na końcu pętli jest element z napisem zmień i o jeden oraz blok z napisem zatrzymaj ten skrypt, który kończy skrypt.
Przykładowa definicja bloku znajdź_2min_max
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
RvOU8sAiHpEYj
Ćwiczenie 6
Użytkownik ma za zadanie utworzyć blok znajdujący dwie wartości najmniejsze i największą w liście o nazwie Odcinki. W skrypcie powinien też wykorzystać zdefiniowany wcześniej blok początkowe wartości. Uporządkuj elementy kodu.
Użytkownik ma za zadanie utworzyć blok znajdujący dwie wartości najmniejsze i największą w liście o nazwie Odcinki. W skrypcie powinien też wykorzystać zdefiniowany wcześniej blok początkowe wartości. Uporządkuj elementy kodu.
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
Podstawowe trudności związane z tworzeniem bloków do wyszukiwania elementów najmniejszych i największego zostały pokonane. Pozostaje teraz wykorzystać je w pozostałych skryptach.
Polecenie 3
Zmodyfikuj skrypt początkowy tak, aby zawierał bloki utworzone w poprzednich ćwiczeniach. Popraw też, lub napisz na nowo skrypty uruchamiane po otrzymaniu komunikatów tak i nie, tak aby sprawdzały czy suma dwóch najmniejszych odcinków jest większa od największego. Nie zapomnij też o skryptach naddających komunikaty. Jeśli ich nie masz, stwórz je w ten sam sposób, co w pierwotnej grze.
Sprawdź poprawność działania aplikacji, popraw ewentualne błędy.
Wykorzystaj poniższe pole na zapisanie swoich notatek i przemyśleń.
RjqkjgO9biQil
Dzienniczek, w którym możesz zapisać swoje notatki i przemyślenia.
Dzienniczek, w którym możesz zapisać swoje notatki i przemyślenia.