Czy można zbudować trójkąt? - gra matematyczna w Scratch
Gra będzie się składać z dwóch aplikacji. Zadaniem użytkownika pierwszej z nich jest odpowiedzenie na proste pytanie, czy z trzech odcinków o podanych długościach (wylosowanych przez duszka) można zbudować trójkąt. Duszek powinien sprawdzić odpowiedź i wyświetlić odpowiedni komunikat.
W drugiej aplikacji 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.
Czy z każdych trzech odcinków o podanych długościach można zbudować trójkąt?. Na górze znajdują się przyciski
Taki
Nie.
Czy z każdych trzech odcinków o podanych długościach można zbudować trójkąt?. Na górze znajdują się przyciski
Taki
Nie.

Film dostępny pod adresem /preview/resource/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
.
Aby wykonać to ćwiczenie, ważna jest znajomość podstaw obsługi środowiska Scratch oraz wiadomości z matematykiD18lmDeFHwiadomości z matematyki. Jeśli nie masz doświadczenia z tym językiem, zachęcamy do zapoznania się z materiałem Wprowadzenie do programu ScratchDUVRjOY3CWprowadzenie do programu Scratch.
Przydatna może się okazać również wiedza z materiałów Od problemu do algorytmuD10Ja0fSgOd problemu do algorytmu oraz Od algorytmu do programuD11xliCilOd algorytmu do programu.
W obu aplikacjach wykorzystywane jest jedno proste tło składające się z dwóch części (w różnych kolorach). W górnej części znajdują się duszki – przyciski, w dolnej duszek, który sprawdza i informuje o poprawności odpowiedzi.
Skorzystaj z poniższego notatnika do zapisania swoich uwag.
Przygotuj tło do aplikacji. Może być bardziej rozbudowane graficznie, według twojego pomysłu. Następnie załaduj je do nowego projektu w środowisku Scratch.
Do stworzenia tła możesz wykorzystać jeden z wielu programów graficznych, np. Paint, Paint 3D czy GIMP.
Jeżeli nie masz pomysłu na stworzenie własnego tła, możesz zasugerować się filmikiem powyżej.
Poniżej znajduje się przykładowe tło, które możesz pobrać i wykorzystać w projekcie.
PNG
Porównaj stworzone przez ciebie tło z tym, które znajduje się poniżej. Pamiętaj, że twoje tło może wyglądać inaczej, to zadanie nie ma jednej poprawnej odpowiedzi.

Przygotuj dwa duszki: przycisk Tak oraz przycisk Nie. Następnie załaduj je do wcześniej utworzonego projektu. Domyślnie niech przyciski będą ukryte. Utwórz także trzy zmienne do pamiętania długości odcinków.
Możesz skorzystać z szablonu przycisku z galerii Scratcha i uzupełnić go o odpowiedni napis.
Aby skorzystać z tego sposobu, najpierw dodaj nowego duszka. Duszek wykorzystany w przykładowym projekcie to Button3.
Następnie wejdź w zakładkę kostiumy i dodaj odpowiedni napis. Możesz również zmienić koloru tekstu, jego rozmiar czy położenie.
W celu ukrycia duszka, wybierz go z listy duszków, kliknij na nim prawym przyciskiem myszy i wybierz z menu właściwą opcję.
Takw kolorze zielonym. Ikona przycisku jest w kształcie prostokąta. Napis znajduje się na szarym tle. Na górze ekranu znajduje się pasek nawigacji z następującymi zakładkami: plik, edycja, samouczki, projekt Scratch. Poniżej znajdują się trzy zakładki: skrypt, kostiumy, dźwięki. Przycisk jest tworzony w zakładce kostiumy, w której widoczne są różne funkcje budowania takiego elementu. Po prawej stronie ekranu znajduje się okno, w którym jest widoczny stworzony element na niebieskim tle.

Takw edytorze
Postępuj w ten sam sposób w celu utworzenia drugiego przycisku.
W zakładce „Skrypt” utwórz trzy zmienne i nazwij je odpowiednio np. odcinek_1, odcinek_2 i odcinek_3.
Przykładowy efekt końcowy. Pamiętaj, by przyciski umieścić w górnej części tła.

Przygotowujemy pierwszą aplikację
Określ, jakie działania powinny być wykonane po uruchomieniu aplikacji, czyli kliknięciu w zieloną flagę, do momentu kiedy wymagana będzie akcja użytkownika. Przygotuj właściwy skrypt.
Po kliknięciu w zieloną flagę duszek powinien wylosować liczby i przypisać je do utworzonych zmiennych. Możesz to zrealizować przy pomocy bloku ustaw ... na .... (znajduje się on w zakładce Zmienne) oraz bloku losuj liczbę od ... do ... (blok znajduje się w zakładce Wyrażenia). Następnie duszek powinien zadać pytanie „Czy z odcinków o podanych długościach można zbudować trójkąt?”. Zrealizujesz to za pomocą bloku powiedz, który znajdziesz w zakładce Wygląd.
Przykładowy skrypt startowy przygotowany dla duszka zadającego pytanie:
kiedy klikniętooraz ikoną zielonej flagi, poniżej pomarańczowe bloki z napisami
ustaw odcinkek_1, odcinek_2, odcinek_3 naoraz znajdujące się wewnątrz pomarańczowych elementów zielone bloki z napisami
losuj liczbę z zakresu od jednego do pięciu. Do poprzedniego elementu dołączony jest fioletowy blok z napisem
powiedz, wewnątrz niego jest białe pole z napisem
Czy z 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.

Należy zadbać o komunikację pomiędzy duszkami. Duszek odpowiedzialny za sprawdzenie odpowiedzi musi wiedzieć, w który przycisk kliknął użytkownik. W Scratchu do komunikacji pomiędzy duszkami można wykorzystać komunikaty. Więcej informacji o nadawaniu i odbieraniu komunikatów znajdziesz po kliknięciu w poniższą zakładkę.
Nadawanie i odbieranie komunikatów umożliwia porozumiewanie się pomiędzy duszkami, a także sceną. W ten sposób jeden duszek może uruchomić skrypty innych duszków lub sceny. Trzy bloczki związane z nadawaniem i odbieraniem komunikatów znajdują się w grupie Zdarzenia. Nowy komunikat można zdefiniować i nadać przy pomocy jednego z dwóch bloczków:
nadaj komunikat…z wybraną opcją
wiadomość1z listy rozwijanej.

nadaj komunikat…z kategorii
Zdarzenia
nadaj komunikat… i czekajz wybraną opcją
wiadomość1z listy rozwijanej.

nadaj komunikat… i czekajz kategorii
Zdarzenia
Nazwę nadawanego komunikatu można wybrać z listy rozwijalnej lub zdefiniować nowy komunikat przy pomocy opcji Nowa wiadomość dostępnej po rozwinięciu listy.
nadaj komunikat…z pokazaną listą rozwijalną do wyboru komunikatu.

nadaj komunikat…z kategorii
Zdarzeniaz rozwiniętą listą opcji
Wyświetlone będzie wówczas okno dialogowe, w którym należy podać nazwę nowego komunikatu.
Nowa wiadomośćna górze oraz przyciskiem do zamknięcia okna. Poniżej jest pasek do wpisania wiadomości oraz przyciski
Anuluji
OK.

Po nadaniu komunikatu (wykonaniu bloczka nadaj lub nadaj i czekaj) uruchamiane są automatycznie skrypty zaczynające się od bloczka kiedy otrzymam (nazwa komunikatu).
kiedy otrzymam…z wybraną opcją
wiadomość1z listy rozwijanej.

Kiedy otrzymam…z kategorii
Zdarzenia
Działanie skryptu, który nadał komunikat jest kontynuowane równolegle (blok nadaj) lub wstrzymane do czasu zakończenia działania wszystkich skryptów odbierających ten komunikat (blok nadaj i czekaj).
Przykład:
Kiedy klikniętoi zielona strzałka.
Powiedzz białym polem z napisem
Idę łapać myszy.
Nadaj komunikatz wybraną opcją
łapanie_myszy.
Zatrzymajz wybraną opcją
ten skrypt. Drugi skrypt składa się kolejno z bloków.
Kiedy otrzymamz wybraną opcją
łapanie_myszy.
Powiedzz białym polem z napisem
I tak Ci ucieknę.
Zatrzymajz wybraną opcją
ten skrypt.

Idę łapać mysz!. Mysz znajduje się przed kotem i w jej dymku tekstowym umieszczono napis
I tak ci ucieknę!.

Przygotuj skrypty dla przycisków, które będą nadawały odpowiednie komunikaty.
Każdemu z duszków należy przypisać działanie, które wyśle komunikat informujący duszka - kota jaki przycisk został naciśnięty.
Poniżej znajdują się przykładowe skrypty odpowiadające duszkom, które są przyciskami Tak oraz Nie:
Takoraz
Nie. Składają się z dwóch żółtych bloków oraz jednego jasnopomarańczowego. Pierwszy ma napis
kiedy ten duszek kliknięty, drugi element ma napis
nadaj komunikatoraz odpowiednio obok w zaznaczonym elemencie znajduje się słowo
taklub
nie. Trzeci, końcowy, element ma napis
zatrzymaj ten skrypt.

taki
nie
Przygotuj skrypty dla duszka sprawdzającego odpowiedź, reagujące na otrzymanie komunikatów tak i nie. Zawrzyj w nich komunikat dla duszków - przycisków, informujący o zakończeniu sprawdzania (przyciski należy ukryć).
Aby sprawdzić poprawność udzielonej odpowiedzi, należy skorzystać z twierdzenia o nazwie Nierówność trójkątaD18lmDeFHNierówność trójkąta. Informację, jaką zależność określa to twierdzenie, możesz znaleźć w internecie.
Skrypt dla komunikatu tak nadawanego przez przycisk Tak:
tak. Na górze tworzonego algorytmu znajduje się element z napisem
kiedy otrzymam tak, pod nim jest blok z napisem
jeżeli, to, a dołączone do niego elementy zawierają następujący komunikat:
jeżeli suma odcinków jeden i dwa jest większa od odcinka trzy, i suma odcinków jeden i trzy jest większa od odcinka dwa, i suma odcinków dwa i trzy jest większa od odcinka jeden, to w kolejnym elemencie z napisem
powiedzwyświetla komunikat
Brawo, dobra odpowiedź!. Pod blokiem z napisem
w przeciwnym razieznajduje się element z napisem
powiedzi wyświetla komunikat
Niestety, błędna odpowiedź…. Pod tymi elementami jest klocek z napisem
nadaj komunikat koniec, a poniżej element z napisem
zatrzymaj ten skrypt.

tak
Skrypt dla komunikatu nie nadawanego przez przycisk Nie:
nie. Na górze tworzonego algorytmu znajduje się element z napisem
kiedy otrzymam nie, pod nim jest blok z napisem
jeżeli, to, a dołączone do niego elementy zawierają następujący komunikat:jeżeli suma odcinków jeden i dwa nie jest większa od odcinka trzy, i suma odcinków jeden i trzy nie jest większa od odcinka dwa, i suma odcinków dwa i trzy nie jest większa od odcinka jeden, to w kolejnym elemencie z napisem
powiedzwyświetla komunikat
Brawo, dobra odpowiedź!. Pod blokiem z napisem
w przeciwnym razieznajduje się element z napisem
powiedzi wyświetla komunikat
Niestety, błędna odpowiedź…. Pod tymi elementami znajduje się blok z napisem
nadaj komunikat koniec, a poniżej element z napisem
zatrzymaj ten skrypt.

nie
Przygotuj skrypty pokazujące przyciski na początku głównego programu oraz skrypty ukrywające przyciski po otrzymaniu komunikatu koniec.
Główny skrypt powinien wysyłać komunikat początek na początku programu, aby wyświetlić przyciski Tak i Nie, oraz komunikat koniec, aby je ukryć.
Główny skrypt:
kiedy klikniętoz ikoną zielonej flagi. Poniżej żółty blok z napisem
nadaj komunikat początek. Pod elementem są pomarańczowe bloki z napisem
ustaw odcinkek_1, odcinek_2, odcinek_3 naoraz znajdujące się wewnątrz pomarańczowych elementów zielone bloki z napisem
losuj liczbę z zakresu od 1 do 5. Do poprzedniego elementu dołączony jest fioletowy blok z napisem
powiedz, wewnątrz niego znajduje się białe pole z napisem
czy z 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.

Skrypty pokazujące oraz ukrywające przyciski (skrypty dla duszków - przycisków):
kiedy otrzymam koniec, pod nim znajduje się fioletowy blok z napisem
ukryj, a na końcu jasnopomarańczowy blok z napisem
zatrzymaj ten skrypt. Drugi skrypt składa się z żółtego bloku z napisem
kiedy otrzymam początek, pod nim znajduje się fioletowy blok z napisem
pokaż, a na końcu jasnopomarańczowy blok z napisem
zatrzymaj ten skrypt.

Projektujemy drugą aplikację
Do stworzenia drugiej aplikacji powinieneś posiadać wiedzę z poniższych zagadnień:
Tworzenie i wykorzystywanie (np. zamienianie elementów miejscami) list w środowisku Scratch. Informacje na ten temat możesz znaleźć w rozwijanej liście, która znajduje się poniżej.
1 ListyListyCzęsto zachodzi potrzeba przechowania większej liczby danych. Niewygodne staje się wówczas pamiętanie ich w pojedynczych zmiennych, szczególnie gdy pełnią podobną rolę. Lepiej pamiętać je pod jedną nazwą, a wszystkie dane ponumerować zaczynając od 1. Dostęp do pojedynczego elementu możliwy jest wtedy za pośrednictwem indeksu (numeru elementu). W Scratchu służą do tego listy.
Przykład PrzykładRzucamy wielokrotnie sześcienną kostką do gry. Chcemy policzyć, ile razy wypadły poszczególne liczby oczek. Można utworzyć sześć zmiennych odpowiednio do przechowywania liczby wystąpień jednego oczka, dwóch oczek, itd. Lepiej jednak utworzyć sześcioelementową listę. Liczba oczek będzie w takim przypadku indeksem (numerem elementu). Symbolicznie indeks będziemy podawać w nawiasach kwadratowych:
Stworzymy listę o nazwie: Wyniki. Wtedy oznaczenie np. Wyniki[2] - wskazywać będzie drugi element listy, czyli informację ile razy wypadły dwa oczka.
Listę, podobnie jak pojedynczą zmienną, można utworzyć w kategorii Zmienne. Należy kliknąć w przycisk Stwórz listę, w polu edycyjnym wpisać nazwę nowotworzonej listy (można także wybrać, czy będzie dostępna dla wszystkich duszków, czy tylko jednego) i zatwierdzić przyciskiem OK.
R1cEIGZcmMfPV Zrzut ekranu przedstawia okno tworzenia nowej listy, w którym należy wpisać nazwę listy. Pod zmiennymi znajduje się przyciskStwó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 nazwyNowa nazwa listy
, przyciski do zaznaczenia, czy lista jest dla wszystkich duszków, czy tylko dla tego duszka oraz przyciskiAnuluj
iOK
.
Okno tworzenia nowej listyŹródło: GroMar, licencja: CC BY 3.0.Po utworzeniu listy w kategorii Dane pojawią się nowe bloczki umożliwiające operacje na liście. Dostępne opcje możesz podejrzeć na poniższej ilustracji.
R15eicq2iid8L Wersja alternatywna: Zrzut ekranu przedstawia fragment okna do zarządzania blokami w Scratch. Ekran jest podzielony na dwie główne sekcje: wybór kategorii bloków oraz samą sekcję bloków. Po lewej stronie widoczna jest lista dostępnych kategorii bloków, z których wybrana jest opcjaWersja alternatywna: Zrzut ekranu przedstawia fragment okna do zarządzania blokami w Scratch. Ekran jest podzielony na dwie główne sekcje: wybór kategorii bloków oraz samą sekcję bloków. Po lewej stronie widoczna jest lista dostępnych kategorii bloków, z których wybrana jest opcjaZmienne
. Po prawej stronie umieszczone są dostępne bloki, które zostały stworzone w kontekście listy. W górnej części prawego obszaru znajduje się przyciskStwórz listę
do tworzenia nowych list. Niżej wyróżnione są dostępne listy z polem wyboru ich widoczności na scenie. Poniżej list widoczne są bloki służące do zarządzania listami, gdzie dostępnych jest jedenaście opcji. 1. Nazwa listy Blok reprezentujący listę z podaną nazwą i polem do zaznaczania widoczności listy na scenie., 2. Dodaj () do () Dodaje nowy element na koniec listy., 3. Usuń () z () Usuwa element od podanym indeksie z wybranej listy i zmniejsza indeks kolejnych elementów o 1., 4. Usuń wszystko z () Usuwa wszystkie elementy z listy., 5. Wstaw () na () pozycji z () Dodaje element na wybraną pozycję (indeks) i zwiększa indeks kolejnych elementów na liście., 6. Zamień () z () na () Podmienia element na wybranej liście na inny element., 7. Element () z () Zwraca wartość podanego elementu z wybranej listy., 8. Pozycja () na liście () Zwraca indeks podanego elementu z wybranej listy., 9. Długość () Przechowuje informacje o liczbie elementów w wybranej liście., 10. () zawiera () ? Zwraca wartość prawda lub fałsz w zależności, czy wybrana lista zawiera podany element., 11. Pokaż listę () Wyświetla wybraną listę na scenie aplikacji., 12. Ukryj listę () Ukrywa wybraną listę na scenie aplikacji.Zmienne
. Po prawej stronie umieszczone są dostępne bloki, które zostały stworzone w kontekście listy. W górnej części prawego obszaru znajduje się przyciskStwórz listę
do tworzenia nowych list. Niżej wyróżnione są dostępne listy z polem wyboru ich widoczności na scenie. Poniżej list widoczne są bloki służące do zarządzania listami, gdzie dostępnych jest jedenaście opcji. 1. Nazwa listy Blok reprezentujący listę z podaną nazwą i polem do zaznaczania widoczności listy na scenie., 2. Dodaj () do () Dodaje nowy element na koniec listy., 3. Usuń () z () Usuwa element od podanym indeksie z wybranej listy i zmniejsza indeks kolejnych elementów o 1., 4. Usuń wszystko z () Usuwa wszystkie elementy z listy., 5. Wstaw () na () pozycji z () Dodaje element na wybraną pozycję (indeks) i zwiększa indeks kolejnych elementów na liście., 6. Zamień () z () na () Podmienia element na wybranej liście na inny element., 7. Element () z () Zwraca wartość podanego elementu z wybranej listy., 8. Pozycja () na liście () Zwraca indeks podanego elementu z wybranej listy., 9. Długość () Przechowuje informacje o liczbie elementów w wybranej liście., 10. () zawiera () ? Zwraca wartość prawda lub fałsz w zależności, czy wybrana lista zawiera podany element., 11. Pokaż listę () Wyświetla wybraną listę na scenie aplikacji., 12. Ukryj listę () Ukrywa wybraną listę na scenie aplikacji.Bloki dostępne po utworzeniu listyŹródło: GroMar, licencja: CC BY 3.0.Zrzut ekranu przedstawia fragment okna do zarządzania blokami w Scratch. Ekran jest podzielony na dwie główne sekcje: wybór kategorii bloków oraz samą sekcję bloków. Po lewej stronie widoczna jest lista dostępnych kategorii bloków, z których wybrana jest opcja „Zmienne”. Po prawej stronie umieszczone są dostępne bloki, które zostały stworzone w kontekście listy. W górnej części prawego obszaru znajduje się przycisk „Stwórz listę” do tworzenia nowych list. Niżej wyróżnione są dostępne listy z polem wyboru ich widoczności na scenie. Poniżej list widoczne są bloki służące do zarządzania listami, gdzie dostępnych jest 11 opcji.
Listą możesz także zarządzać z poziomu sceny Scratch. Zapoznaj się z poniższą ilustracją interaktywną, aby zrozumieć działanie poszczególnych funkcji.
R126B2PeQY8RV Wersja alternatywna: Zrzut ekranu przedstawiający tabelę „Wyniki ”. Na pierwszym miejscu znajduje się wartość 1, na drugim wartość 2. Zaznaczone są elementy - nazwa listy „Wyniki” - jest to unikalna etykieta, która identyfikuje i umożliwia operacje na danym zbiorze danych. Dzięki niej możemy manipulować elementami listy w programie. 1. Nazwa listy Jest to unikalna etykieta (nazwa), która identyfikuje i umożliwia operacje na danym zbiorze danych. Dzięki niej możemy manipulować elementami listy w programie., 2. Indeks elementu Numer pozycji, na której znajduje się dany element w liście. Indeksy w środowisku Scratch zaczynają się od 1, więc pierwszy element listy ma indeks 1, drugi element ma indeks 2 i tak dalej. Dzięki indeksom możemy jednoznacznie zidentyfikować i manipulować poszczególnymi elementami w liście., 3. Element listy Wartość lub dane, które są przechowywane wewnątrz listy. Może to być liczba, tekst lub inny typ danych, a każdy element ma przypisaną swoją pozycję w liście, zwaną indeksem., 4. Przycisk X Po jego kliknięciu wskazany element na liście zostanie usunięty i indeksy pozostałych elementów zostaną dostosowane do nowej długości listy., 5. Przycisk + Umożliwia wstawienie nowego elementu na końcu listy., 6. Długość tablicy Oznacza liczbę elementów znajdujących się w danej liście., 7. Znak = Po najechaniu na niego kursorem myszy zmieni się ikona kursora i możliwe będzie dostosowanie wielkości okna listy na scenie w Scratch.Wersja alternatywna: Zrzut ekranu przedstawiający tabelę „Wyniki ”. Na pierwszym miejscu znajduje się wartość 1, na drugim wartość 2. Zaznaczone są elementy - nazwa listy „Wyniki” - jest to unikalna etykieta, która identyfikuje i umożliwia operacje na danym zbiorze danych. Dzięki niej możemy manipulować elementami listy w programie. 1. Nazwa listy Jest to unikalna etykieta (nazwa), która identyfikuje i umożliwia operacje na danym zbiorze danych. Dzięki niej możemy manipulować elementami listy w programie., 2. Indeks elementu Numer pozycji, na której znajduje się dany element w liście. Indeksy w środowisku Scratch zaczynają się od 1, więc pierwszy element listy ma indeks 1, drugi element ma indeks 2 i tak dalej. Dzięki indeksom możemy jednoznacznie zidentyfikować i manipulować poszczególnymi elementami w liście., 3. Element listy Wartość lub dane, które są przechowywane wewnątrz listy. Może to być liczba, tekst lub inny typ danych, a każdy element ma przypisaną swoją pozycję w liście, zwaną indeksem., 4. Przycisk X Po jego kliknięciu wskazany element na liście zostanie usunięty i indeksy pozostałych elementów zostaną dostosowane do nowej długości listy., 5. Przycisk + Umożliwia wstawienie nowego elementu na końcu listy., 6. Długość tablicy Oznacza liczbę elementów znajdujących się w danej liście., 7. Znak = Po najechaniu na niego kursorem myszy zmieni się ikona kursora i możliwe będzie dostosowanie wielkości okna listy na scenie w Scratch.ObiektLista
w środowisku ScratchŹródło: GroMar, licencja: CC BY 3.0.Zrzut ekranu przedstawiający tabelę Wyniki. Na pierwszym miejscu znajduje się wartość 1, na drugim wartość 2. Zaznaczone są elementy - Nazwa listy „Wyniki” - Jest to unikalna etykieta, która identyfikuje i umożliwia operacje na danym zbiorze danych. Dzięki niej możemy manipulować elementami listy w programie.
Jeżeli elementami listy mają być liczby, możesz wprowadzić je do listy na różne sposoby. Jednym z nich jest wylosowanie liczby z określonego zakresu za pomocą bloku losuj liczbę od ... do ..., a następnie dodanie wylosowanej liczby do listy.
R1NhMF3UIBtP0 Zrzut ekranu przedstawia skrypt wprowadzania liczb do listy. Kolejno są to bloki: kiedy kliknięto zieloną flagę, usuń wszystko z listyWyniki
, dodaj losową liczbę od jednego do dziesięciu do listyWyniki
, zatrzymaj ten skrypt.
Przykładowy skrypt na dodanie losowej liczby z przedziału <1, 10> do listyŹródło: GroMar, licencja: CC BY 3.0.Innym sposobem jest zapytanie użytkownika skryptu, jaką liczbę chce wprowadzić do listy, a następnie dodanie podanej odpowiedzi do listy.
RzNn2uALSgeyP Zrzut ekranu przedstawia skrypt dodania podanej przez użytkownika liczby do listy. Kolejno są to klocki: kiedy kliknięto zieloną flagę, usuń wszystko z listyWyniki
, zapytaj,jaką liczbę chcesz wprowadzić do listy?
i czekaj, dodajodpowiedź
do listyWyniki
, zatrzymaj ten skrypt.
Przykładowy skrypt na dodanie podanej przez użytkownika liczby do listyŹródło: GroMar, licencja: CC BY 3.0.Istnieje wiele sposobów, aby dodać liczbę do listy w Scratch, a te przedstawione są tylko częścią z nich. Wybierz ten, który najlepiej odpowiada twoim potrzebom.
Ważne!Dobrą praktyką jest usuwanie wszystkich elementów listy na początku skryptu. Unikniesz wtedy pozostałości po poprzednich uruchomieniach skryptu, które mogłyby wywołać niepożądane efekty.
RE44C4ZSgw49g Zrzut ekranu przedstawia skrypt symulujący sto rzutów sześcienną kostką do gry i zliczający wyniki. Usuwa on wszystko z listyWyniki
, następnie zapełnia ją sześcioma zerami, powtarza sto razy losowanie od jednego do sześciu i zamienia wylosowaną liczbę na inny element, potem mówiRzuciłem 100 razy kostką do gry! Wyniki obok!
i zatrzymuje skrypt.
Przykładowy skrypt symulujący 100 rzutów sześcienną kostką do gry i zliczający wynikiŹródło: GroMar, licencja: CC BY 3.0.R1KZMf8H9obaX Zrzut ekranu przedstawia przykładowy wynik działania skryptu zliczającego wyniki po stu rzutach kostką. Z lewej strony pokazana jest tabelaWyniki
z wynikami dla poszczególnych losowań, a z prawej widoczny jest duszek z dymkiem z tekstemRzuciłem sto razy kostką do gry! Wyniki obok!
.
Przykładowy wynik działania skryptu zliczającego wyniki po 100 rzutach kostkąŹródło: GroMar, licencja: CC BY 3.0.Lista może być widoczna na scenie lub ukryta. Widoczność można zmieniać edycyjnie zaznaczając/odznaczając znacznik przy liście
R8Ieq14gGnK9V Zrzut ekranu pokazuje obszar do zmiany widoczności listy na scenie aplikacji Scratch. Widoczne są zmienne oraz kilka bloków skryptu. Poniżej nich znajduje się przyciskStwórz listę
, a pod nim znajdują się utworzone listy. Jedną z nich jest listaWyniki
wyróżniona czerwoną ramką. Po lewej stronie listy znajduje się pole wyboru umożliwiające pokazanie lub ukrycie wizualnej reprezentacji listy na scenie programu.
Obszar do zmiany widoczności listy na scenie aplikacji ScratchŹródło: GroMar, licencja: CC BY 3.0.lub programowo, przy pomocy bloczków:
R1cZh2ixb0KZq Zrzut ekranu pokazuje blokpokaż listę…
z wybraną opcjąWyniki
służący do wyświetlenia wybranej listy z dostępnych opcji.
Blokpokaż listę…
z kategoriiZmienne
Źródło: GroMar, licencja: CC BY 3.0.R1YxDi98fW6D2 Zrzut ekranu pokazuje blokukryj listę…
z wybraną opcjąWyniki
służący do ukrywania wybranej listy z dostępnych opcji.
Blokukryj listę…
z kategoriiZmienne
Źródło: GroMar, licencja: CC BY 3.0.
⠀⠀ 2. Definiowanie i wykorzystywanie nowych bloków w środowisku Scratch.
Często bardziej złożony problem warto podzielić na podproblemy i zapisać je w postaci oddzielnych bloków. Więcej informacji na temat tworzenia bloków w Scratch znajdziesz po rozwinięciu poniższej zakładki.
W celu utworzenia nowego bloku należy przejść do kategorii Moje bloki. Następnie kliknąć przycisk Utwórz blok, w polu edycyjnym wpisać jego nazwę i zatwierdzić przyciskiem OK. W obszarze skryptów pojawi się nowy blok, pod który można podczepić inne bloki rozwiązujące podproblem.
Duszek ma narysować kilka obróconych kwadratów. Wygodnie będzie zdefiniować własny blok rysujący pojedynczy kwadrat.

Na poniższym filmie możesz obejrzeć, jak utworzyć i wykorzystać własny blok.

Film dostępny pod adresem /preview/resource/R3CPUgu511yAY
Film przedstawia Tworzenie i wykorzystanie własnego bloku.
Własne bloki mogą mieć też parametry, analogicznie jak w przypadku wielu standardowych bloczków (np. w bloczku przesuń podajesz, o ile kroków duszek ma się przemieścić).
Duszek ma rysować mniejsze i większe kwadraty. Parametrem dla bloku rysującego kwadrat będzie więc długość boku. Jeśli blok jest już zdefiniowany, wystarczy kliknąć w niego prawym przyciskiem myszy i wybrać z menu kontekstowego Edycja, a następnie Dodaj dane wejściowe (liczba lub tekst). Jeśli dopiero tworzymy nowy blok, po podaniu jego nazwy należy od razu zaznaczyć opcję Dodaj dane wejściowe (tekst lub liczba). W kolejny krokach trzeba:
wpisać nazwę parametru,
zatwierdzić przyciskiem OK.
Żeby wykorzystać parametr należy przeciągnąć go z bloczka rozpoczynającego definicję nowego bloku do instrukcji, w której chcemy go użyć.
definiuj kwadrat bok, pod nim widoczny jest żółty blok z napisem
powtórz cztery razy, do niego przyłączone są dwa niebieskie bloki z napisami
przesuń o bok krokóworaz
obróć w prawo o dziewięćdziesiąt stopni. Na końcu zbudowanego skryptu znajduje się żółty blok z napisem
zatrzymaj ten skrypt. Pośrodku znajduje się blok, który realizuje rysowanie kwadratu, aż do osiągnięcia określonej długości boku. Na górze drugiego skryptu znajduje się żółty blok z napisem
kiedy klikniętooraz zielona ikona flagi, poniżej dwa zielone bloki z napisem
wyczyść wszystkooraz
przyłóż pisak. Do poprzednich elementów dodano pomarańczowy blok z napisem
ustaw bok na dwieście, do niego przyłączono żółty blok połączony z zielonym oraz pomarańczowym blokiem z napisem
powtarzaj, aż bok będzie mniejszy niż dwadzieścia, poniżej jest różowy blok z połączonym pomarańczowym blokiem z napisem
kwadrat bokoraz pomarańczowy blok z napisem
zmień bok o minus dwadzieścia. Na końcu zbudowanego skryptu jest żółty blok z napisem
zatrzymaj ten skrypt. Po prawej stronie jest rysunek ukazujący rezultat takiego skryptu. Przypomina on kwadrat z wieloma mniejszymi kwadratami wewnątrz o jednym wspólnym wierzchołku.

Na poniższym filmie możesz obejrzeć, jak utworzyć i wykorzystać własny blok z parametrem.

Film dostępny pod adresem /preview/resource/R1J8LK1HWSP21
Film przedstawia Tworzenie i wykorzystanie własnego bloku z parametrem.
⠀⠀ 3. Znajdowanie najmniejszego i największego elementu (np. listy).
Więcej informacji na ten temat znajdziesz w ćwiczeniu dodatkowym po rozwinięciu listy.
Zapisz w postaci listy kroków algorytm znajdowania najmniejszej liczby na liście. Możesz przygotować także prostą aplikację, w której jest losowana lista dziesięciu liczb, a następnie duszek znajduje najmniejszą liczbę na liście i wyświetla ją w dymku komiksowym.
Niezbędna będzie zmienna, w której przechowywana będzie najmniejsza liczba.
Na początku, najmniejszą liczbą będzie pierwsza liczba z listy. Następnie należy przejrzeć całą listę od drugiego elementu do końca w celu porównywania, czy aktualnie znaleziona najmniejsza liczba jest mniejsza od porównywanej liczby z listy. Jeżeli liczba z listy jest mniejsza, to należy ją zapamiętać w miejsce poprzedniej liczby.
Dane:
n - liczba elementów listy (długość listy),
Lista - losowa lista liczb.
Wynik:
min - wartość najmniejszej liczby w liście.
Ustaw wartość zmiennej min na pierwszy element listy Lista.
Ustaw wartość zmiennej i na 2.
Powtórz n - 1:
3.1. Jeżeli element o numerze i z listy Lista < min to:
⠀ 3.1.1. Ustaw wartość zmiennej min na wartość elementu o numerze i z Lista.
3.2. Powiększ zmienną i o 1.Zatrzymaj ten skrypt.
Poniżej znajduje się skrypt znajdujący najmniejszą liczbę na liście, zgodnie z powyższym algorytmem:
definiuj szukaj_min, pod nim znajduje się jasnopomarańczowy blok z napisem
ustaw min na, a do niego został przypięty ciemniejszy pomarańczowy blok z napisem
element jeden z Lista. Poniżej jest jasnopomarańczowy blok z napisem
ustaw i na dwa. Pod nimi znajdują się dwa żółte elementy połączone z zielonymi oraz ciemnopomarańczowymi blokami z napisami
powtórz długość Lista jeden razyoraz
jeżeli element i z Lista jest mniejszy niż min, to. Do tych bloków jest przyłączony jasnopomarańczowy blok z połączonym ciemniejszym pomarańczowym blokiem z napisem
ustaw min na element i z Lista. Poniżej jest jasnopomarańczowy blok z napisem
zmień i o jeden. Na dole zbudowanego skryptu widoczny jest żółty blok z napisem
zatrzymaj ten skrypt.

Możesz go wykorzystać we wspomnianej aplikacji, gdzie losowane jest 10 liczb z przedziału od 1 do 10, a duszek wyświetla w dymku najmniejszą z nich.
kiedy klikniętoz zieloną flagą. Następnie widoczne są kolejno: czerwony blok
usuń wszystko z Lista, pomarańczowy blok
ustaw i na zero, żółty blok
powtórz dziesięć razy, do którego podczepiono dwa bloki: jeden pomarańczowy
zmień i o jeden, drugi, czerwony
dodaj losuj liczbę od jednego do dziesięciu do Lista. Do tego dołączono bloki: różowy
szukaj_min, fioletowy
powiedz min. Na końcu znajduje się blok
zatrzymaj ten skrypt.

⠀⠀ 4. Zamiana elementów listy.
Więcej informacji na ten temat znajdziesz w ćwiczeniu dodatkowym po rozwinięciu listy.
Popraw tak rozwiązanie poprzedniego ćwiczenia dodatkowego, aby najmniejsza liczba została ustawiona na pierwszym miejscu listy. Nie możesz jednak zgubić żadnego elementu (np. elementu, który pierwotnie był na pierwszym miejscu).
Możesz zamienić miejscami pierwszy element listy oraz element najmniejszy. Aby zamienić wartościami dwie zmienne (dwa elementy listy) należy użyć pomocniczej zmiennej.

Film dostępny pod adresem /preview/resource/R65nl5BzZW4Lw
Animacja prezentuje zamianę wartości zmiennych. Na ekranie znajdują się dwie wartości: wartość jeden (zmiennej A) i wartość dwa (zmiennej B). Żeby zamienić je miejscami, została stworzona obok nich zmienna pomocnicza. Wartość zmiennej B umieszczono w zmiennej pomocniczej. Następnie wartość zmiennej A przeniesiono w miejsce wartości zmiennej B. Na koniec w miejsce wartości zmiennej A umieszczono zawartość zmiennej pomocniczej.
Zwróć uwagę, że należy znaleźć miejsce (numer) najmniejszego elementu w liście.
Dane:
n - liczba elementów listy (długość listy),
Lista - losowa lista liczb.
Wynik:
Lista z przestawionymi elementami, tak że pierwszy element w liście Lista jest najmniejszą liczbą na liście.
Ustaw wartość zmiennej min na 1 (indeks pierwszego elementu listy).
Ustaw i na 2.
Powtórz n - 1 razy:
2.1. Jeżeli element na pozycji i z listy Lista < element na pozycji min z listy Lista to:
⠀ 2.1.1. Ustaw min na i.
2.2. Zwiększ i o 1.Ustaw pom na wartość pierwszego elementu z listy Lista.
Pierwszy element na liście Lista, ustaw na wartość z listy pod numerem min.
Na pozycji min wpisz zawartość zmiennej pom - liczbę z pierwszego elementu listy, przed nadpisaniem.
Zatrzymaj skrypt.
definiuj ustaw_min. Pod nim są dwa bloki z napisami:
ustaw min na jedenoraz
ustaw i na dwa. Pod zmienną
minoraz
ijest blok z napisem
powtórz długość lista minus jeden razy, co powoduje powtarzanie pętli. Poniżej znajdują się bloki z napisem
jeżeli element i z Lista jest mniejszy niż element min z Lista, tooraz
ustaw min na i, co oznacza wyszukanie najmniejszego elementu listy i podstawienie go za zmienną
min, przechodząc przez każdy element listy. Do tych elementów dołączony jest blok z napisem
zmień i o jeden, a niżej znajdują się elementy z napisami:
ustaw pom na element jeden z Lista,
zamień jeden z Lista na element min z Listaoraz
zamień min z Lista na pom, co oznacza, że po pętli zamieniają się miejscami pierwszy i najmniejszy elementy listy. Na dole znajduje się blok z napisem
zatrzymaj ten skrypt, który kończy skrypt.

szukaj_min
⠀ 5. Sortowanie elementów (np. listy). ⠀⠀
Sortowanie to jeden z podstawowych problemów informatycznych. Istnieje wiele algorytmów sortowania, jedne działają szybciej, inne wolniej. W tym podrozdziale poznasz jedną z nich i wykorzystasz w tworzonej aplikacji. W przyszłości, jeśli będziesz kontynuować swoją przygodę z algorytmami, poznasz także inne i porównasz ich efektywność.
Liczby na liście mają być ustawione od najmniejszej do największej, a więc w pierwszym kroku można znaleźć liczbę najmniejszą i zamienić ją z pierwszym elementem listy. W kolejnym kroku postępujemy analogicznie poszukując liczby najmniejszej poczynając od drugiego elementu, następnie od trzeciego, itd. Powtarzamy więc wybieranie i ustawianie liczby najmniejszej razy (jak zostaje jedna liczba, to znajduje się już na właściwym miejscu, ciąg złożony z jednego elementu jest uporządkowany).
W poniższym filmie przedstawiono kolejne kroki porządkowania następującego zestawu liczb: , , , , . Kolorem zielonym zaznaczone są liczby już ustawione, kolorem żółtym kolejne znalezione minimum, a czerwonym miejsce, na którym zostanie ustawione.

Film dostępny pod adresem /preview/resource/REHJjrBB8hYYO
Animacja prezentuje działanie sortowania przez wybieranie. W pierwszym kroku szukana jest najmniejsza liczba, a następnie zamieniana z pierwszym elementem listy. W kolejnym kroku szukana jest najmniejsza wartość, począwszy od drugiego elementu, później od trzeciego i tak aż do posortowania wszystkich liczb.
Zapis algorytmu sortowania przez wybieranie w postaci listy kroków:
Dane:
n – liczba elementów listy,
L – lista liczb.
Wynik:
L – uporządkowana niemalejąco lista liczb.
Powtarzaj dla kolejnych wartości zmiennej i od 1 do n - 1:
1.1. Ustaw wartość zmiennej m na i.
1.2. Powtarzaj dla kolejnych wartości zmiennej j od i + 1 do n:
⠀1.2.1. Jeżeli element na pozycji j w L < element na pozycji m w L to ustaw wartość zmiennej m na j.
1.3. Zamień element na pozycji i w L z elementem na pozycji m w L.
⠀
Utwórz listę do przechowywania długości odcinków (np. o nazwie Odcinki) oraz zmienną (np. o nazwie n), w której będzie przechowywana liczba losowanych odcinków.
W znajdującej się wyżej sekcji Projektujemy drugą aplikację w punkcie pierwszym znajduje się rozwijana zakładka Listy. W niej możesz znaleźć informację na temat list w środowisku Scratch, skorzystaj z niej, jeśli masz problem z utworzeniem listy.
Naciśnij przycisk Stwórz listę znajdujący się w zakładce Zmienne.
R129DTzuTHtBX Zrzut ekranu pokazuje przyciskStwórz listę
dostępny w zakładceZmienne
. Na zdjęciu widoczne są trzy zakładki programu: skrypt, kostiumy, dźwięki. Podświetlono trzy opcje:Skrypt
,Zmienne
iStwórz listę
.
PrzyciskStwórz listę
dostępny w zakładceZmienne
Źródło: GroMar, licencja: CC BY 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órzeNowa lista
oraz opcją zamknięcia okna. Poniżej znajduje się pole do wpisania nazwy listyNowa nazwa listy
. Niżej są do wyboru dwie opcje:Dla wszystkich duszków
orazTylko dla tego duszka
. Na dole znajdują się dwa przyciski:Anuluj
iOK
.
Okno dialogowe tworzenia listy w ScratchŹródło: GroMar, licencja: CC BY 3.0.
Skrypty dla przycisków będą analogiczne jak w poprzedniej aplikacji. Zmienią się dla duszka sprawdzającego odpowiedź, ponieważ inny będzie algorytm sprawdzenia odpowiedzi użytkownika oraz zastosowane struktury danych (zamiast trzech pojedynczych zmiennych lista).
Przygotuj skrypt, uruchamiany po kliknięciu w zieloną flagę, losujący najpierw liczbę odcinków, a potem ich długości.
Zakres losowania liczby odcinków dobierz tak, aby były co najmniej cztery 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:
kiedy klikniętooraz ikoną zielonej flagi, poniżej żółty blok z napisem
nadaj komunikat początek, pod nim pomarańczowy blok z napisem
ustaw n naoraz 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
powiedzoraz 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.

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.
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ą.
Poniżej zapiszemy rozwiązanie problemu z wykorzystaniem dwóch ostatnich algorytmów.
Utwórz skrypt (nowy blok) sortujący listę odcinków zgodnie z algorytmem przez wybieraniesortowanie_przez_wybieraniealgorytmem przez wybieranie. Pamiętaj o utworzeniu wszystkich niezbędnych zmiennych.
Informacje na temat tworzenia własnych bloków znajdują się w materiale Gwiazdozbiór - tworzenie gwiazd i figur w środowisku ScratchPK0DfLn1oGwiazdozbiór - tworzenie gwiazd i figur w środowisku Scratch oraz w sekcji Projektujemy drugą aplikację w podpunkcie 2. Definiowanie i wykorzystywanie nowych bloków w środowisku Scratch1Definiowanie i wykorzystywanie nowych bloków w środowisku Scratch.
Przykładowy skrypt:
Zmienne:
pom - zmienna pomocnicza do przechowywania wartości mniejszego odcinka,
i - licznik iteracji dla pierwszej pętli,
j - licznik iteracji dla zagnieżdżonej pętli.
definiuj sortowanie, następnie znajduje się blok, który odpowiada za ustawienie zmiennej
ijako wartość jeden. Poniżej jest element, który jest odpowiedzialny za powtarzanie pierwszej pętli dopóki
ijest większe od długości listy odcinków. Wewnątrz tej pętli najpierw zmienna sortowanie jest ustawiana na wartość zmiennej
ioraz zmienna
jjest ustawiana na wartość zmiennej
i. Następnie powtarzana jest pętla, dopóki zmienna
jjest większa od długości listy odcinków, w której jest blok z napisem
jeżeli element j z listy odcinków jest mniejszy od elementu sortowanie z listy odcinków, to zmienna sortowanie ustawiana jest na j. Zmienna
jjest zwiększana o jeden. Po wykonaniu tej pętli zmienna
pomustawiana jest na element
iz listy odcinków. Element
iz listy odcinków zamieniany jest na element sortowanie z listy odcinków, a element sortowanie z listy odcinków zamieniany jest na zmienną
pom. Zmienna
izwiększana jest o jeden i pierwsza pętla jest powtarzana. Na dole jest blok z napisem
zatrzymaj ten skrypt, który kończy skrypt.

sortowanie
Zmodyfikuj skrypt początkowy oraz skrypty uruchamiane po otrzymaniu komunikatów tak i nie. Duszek zadający pytanie powinien najpierw posortować wylosowane odcinki.
Należy zmodyfikować skrypt początkowy oraz skrypty uruchamiane jako reakcja na nadanie komunikatów tak i nie (po kliknięciu w jeden z przycisków). Trzeba wywołać blok odpowiedzialny za sortowanie wylosowanych odcinków w skrypcie początkowym. Następnie, w skryptach odpowiedzialnych za przyciski tak i nie należy sprawdzać, czy suma dwóch pierwszych elementów jest większa od ostatniego.
Skrypt początkowy, który rozpoczyna program:

Skrypt wywoływany jako reakcja na otrzymanie komunikatu tak:

Skrypt wywoływany jako reakcja na otrzymanie komunikatu nie:

Znajdujemy dwa najkrótsze odcinki i najdłuższy
Podstawowa wersja gry już działa. W poniższych ćwiczeniach będziemy ją poprawiać, czyli tworzyć inną wersję.
Żeby stwierdzić, czy z każdej trójki odcinków można zbudować trójkąt, nie trzeba porządkować odcinków według ich długości. Wystarczy znaleźć dwa najkrótsze odcinki oraz najdłuższy, czyli dwie liczby najmniejsze i największą. Możesz doprowadzić do sytuacji, że dwie najmniejsze liczby znajdą się na dwóch pierwszych miejscach, a największa na ostatniej. Możesz także znaleźć ich wartości wykorzystując trzy pomocnicze zmienne.
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.
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,
min2są zaznaczone.

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 min1 min2.
Przykładowy skrypt:
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ą
min1na element pierwszy listy odcinków, a zmienną
min2na element drugi listy odcinków. Następnie wykonywana jest pętla
jeżeli zmienna min2 jest mniejsza od zmiennej min1, w której zmienna
pomustawiana jest na zmienną
min1, zmienna
min1ustawiana jest na zmienną
min2, a zmienna
min2na zmienną
pom. Następnie po pętli zmienna
maxustawiana jest na zmienną
min2. Na dole jest element z napisem
zatrzymaj ten skrypt, który kończy skrypt.

początkowe_wartości
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.
Możesz wzorować się na algorytmie znajdowania najmniejszej liczby w liście, który omawiany był w sekcji Projektujemy drugą aplikację w podpunkcie 3. - Znajdowanie najmniejszego i największego elementu (np. listy)min_maxZnajdowanie najmniejszego i największego elementu (np. listy).
Dane:
n - liczba elementów listy (długość listy),
Odcinki - lista odcinków.
Zmienne:
min1 - pierwsza najmniejsza liczba w liście odcinków,
min2 - druga najmniejsza liczba w liście odcinków,
pom - zmienna pomocnicza do przechowywania elementu przed zamianą,
max - największa liczba w liście odcinków.
Przykładowy algorytm:
Ustaw wartości początkowe zmiennych min1, min2:
1.1. Ustaw min1 na pierwszy element z listy Odcinki.
1.2. Ustaw min2 na drugi element z listy Odcinki.
1.3. Jeżeli min2 < min1 to:
⠀ 1.3.1. Ustaw pom na min1.
⠀ 1.3.2. Ustaw min1 na min2.
⠀ 1.3.3. Ustaw min2 na pom.
1.4. ustaw max na min2.Ustaw i na 3.
Powtórz n - 2 razy:
3.1. Jeżeli element na pozycji i w Odcinki > max to ustaw max na element na pozycji i w Odcinki.
3.2. Jeżeli element na pozycji i w Odcinki < min1 to:
⠀ 3.2.1. Ustaw min2 na min1.
⠀ 3.2.2. Ustaw min1 na element na pozycji i w Odcinki.
W przeciwnym razie:
⠀ 3.2.3. Jeżeli element na pozycji i w Odcinki < min2 to:
⠀ ⠀ 3.2.3.1 Ustaw min2 na element o pozycji i w Odcinki.
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:
znajdź_2min_max. Skrypt rozpoczyna się od elementów z napisem
definiuj znajdź_2min_maxoraz
początkowe_wartości. W kolejnym bloki zmienna
iustawiana jest na wartość trzy. Następnie pętla jest powtarzana ze zmienną
n minus dwarazy. W pętli wykonywane są następujące akcje: jeżeli element
iz listy odcinków jest większy od zmiennej
max, to zmienna
maxjest ustawiana na element
iz listy odcinków. Następnie, jeżeli element
iz listy odcinków jest mniejszy od zmiennej
min1, to zmienna
min2ustawiana jest na zmienną
min1, a zmienna
min1ustawiana jest na element
iz listy odcinków, w przeciwnym razie, jeżeli element
iz listy odcinków jest mniejszy od zmiennej
min2, to zmienna
min2jest ustawiana na element
ilisty odcinków. Na końcu pętli jest element z napisem
zmień i o jedenoraz blok z napisem
zatrzymaj ten skrypt, który kończy skrypt.

znajdź_2min_max
Pamiętaj o dostosowaniu skryptów wywoływanych jako reakcja na nadanie komunikatów tak i nie, oraz skryptu początkowego.
Zadania uzupełniające
Przygotuj aplikację, w której losowana jest lista liczb. Następnie niech duszek poprosi o podanie liczby i sprawdzi, czy ona występuje na liście.
Aby sprawdzić, czy liczba znajduje się na liście, wystarczy przejrzeć całą listę i porównać każdy jej element z podaną przez użytkownika liczbą. Jeżeli będą one równe, to skrypt powinien zwracać pozytywną wiadomość zwrotną.
Przykładowe skrypty:
kiedy klikniętooraz ikoną zielonej flagi. Poniżej jest blok z napisem
usuń wszystko z odcinki, co oznacza usunięcie wszystkiego z listy odcinków. Następnie znajduje się element, który wydaje polecenie o powtórzeniu czynności dziesięć razy, do niego dołączono blok, który odpowiada za losowanie liczby z zakresu od jednego do dziesięciu i dodanie jej do listy odcinków. Poniżej jest blok z napisem
zapytaj i czekajoraz pytaniem:
podaj liczbę, a ja sprawdzę, czy występuje na liście. Do tych elementów dołączono blok
jeżeliz warunkiem
Odcinki zawiera odpowiedź?. Jeżeli tak, skrypt odpowiada przez dwie sekundy
Tak, podana liczba znajduje się na liście. W przeciwnym razie
Niestety, ale podana liczba nie znajduje się na liścieprzez dwie sekundy. Na dole jest element z napisem
zatrzymaj wszystko, który kończy skrypt.

Za pomocą własnej funkcji:


Przygotuj podobną aplikację, jak w poprzednim ćwiczeniu, ale po wylosowaniu posortuj listę. Zastanów się, czy wyszukując liczbę w posortowanej liście można zastosować inny algorytm, który wykona mniej operacji.
Uruchom poniższą aplikację, w której duszek zgaduje liczbę pomyślaną przez ciebie. Postaraj się wykorzystać algorytm stosowany przez duszka w rozwiązaniu ćwiczenia.

Zasób interaktywny dostępny pod adresem https://zpe.gov.pl/a/D1DePpYnR
Interaktywna gra, w której duszek zgaduje wybraną przez ciebie liczbę.
Znajdź informację o metodzie dziel i zwyciężaj w Internecie lub innych źródłach. Dzięki niej można szybko sprawdzić, czy poszukiwana liczba znajduje się na posortowanej liście.
Gra interaktywna. Po wybraniu, w lewym górnym rogu, przycisku z napisem: uruchom rozpoczyna się gra. Nad postacią duszka wyświetla się okno dialogowe z napisem: pomyśl liczbę całkowitą od 1 do 100, a ja zgadnę! Naciśnij przycisk, jak będziesz gotowy. W górnym lewym rogu pojawia się niebieski przycisk z napisem: zgaduj. Po naciśnięciu niebieskiego przycisku pojawia się nowe okno dialogowe z napisem: czy Twoja liczba to . Na górze, od lewej strony, znajdują się kolejno trzy niebieskie przyciski: jest mniejsza, tak, jest większa.
W przypadku wybrania przycisku: tak, w oknie dialogowym pojawia się komunikat: zgadłem! Twoja liczba to !. W lewym górnym rogu pojawia się przycisk z napisem: uruchom, grę można rozpocząć od nowa.
W przypadku wybrania przycisku z napisem: jest mniejsza, w oknie dialogowym nad duszkiem pojawia się nowy komunikat: czy Twoja liczba to . W przypadku ponownego wybierania przycisku z napisem: jest mniejsza w oknie dialogowym pojawia się napis z kolejno obniżoną wartością liczbową: czy Twoja liczba to , , , . Po wyświetleniu ostatniego komunikatu w oknie dialogowym pojawia się napis: udzielasz sprzecznych odpowiedzi. Grę można rozpocząć od nowa.
W przypadku wybrania przycisku z napisem: jest większa, w oknie dialogowym nad duszkiem pojawia się nowy komunikat: czy Twoja liczba to . W przypadku ponownego wybierania przycisku z napisem: jest większa, w oknie dialogowym pojawia się napis z kolejno podwyższoną wartością liczbową:. czy Twoja liczba to , , , . Po wyświetleniu ostatniego komunikatu w oknie dialogowym pojawia się napis: wiem! Twoja liczba to . Grę można rozpocząć od nowa.
Przykładowe skrypty:
dziel_zwyciezaj. Skrypt rozpoczyna się od elementu z napisem
kiedy klikniętoz ikoną zielonej flagi. Poniżej jest blok z napisem
usuń wszystko z Odcinki, co oznacza usunięcie wszystkiego z listy odcinków. Następnie znajduje się element, który wydaje polecenie o powtórzeniu czynności dziesięć razy, do niego dołączono blok, który odpowiada za losowanie liczby z zakresu od jednego do dziesięciu i dodanie jej do listy odcinków. Poniżej jest blok z napisem
sortowanie, a do niego przylega element z napisem
zapytaj i czekajoraz pytaniem:
Podaj liczbę, a ja sprawdzę, czy występuje na liście. Do tych elementów dołączono blok z napisem
dziel_zwyciezaj odpowiedź zero długość Odcinki. Na dole jest element z napisem
zatrzymaj ten skrypt, który kończy skrypt.

dziel_zwyciezaj
sortowanie. Zaczyna się on od elementu z napisem
definiuj sortowanie, następnie znajduje się blok, który odpowiada za ustawienie zmiennej
ijako wartość jeden. Poniżej jest element, który jest odpowiedzialny za powtarzanie pierwszej pętli, dopóki
ijest większe od długości listy odcinków. Wewnątrz tej pętli zmienna
jjest ustawiana na wartość zmiennej
i. Następnie powtarzana jest pętla, dopóki zmienna
jjest większa od długości listy odcinków, w której jest blok z napisem: jeżeli element
jz listy odcinków jest mniejszy od elementu
iz listy odcinków, to zmienna
pomustawiana jest na element
iz Odcinki. Element
iz listy odcinków zamieniany jest na element
jz listy odcinków, a element
jz listy odcinków zamieniany jest na zmienną
pom. Następnie zmienna
jzwiększa się o jeden. Dalej zmienna
izwiększa się o jeden. Na dole jest blok z napisem
zatrzymaj ten skrypt, który kończy skrypt.

sortowanie
dziel_zwyciezaj. Skrypt rozpoczyna się od bloku z napisem
definiuj dziel_zwyciezaj, liczba, początek_listy, koniec_listy. W kolejnym elemencie, jeżeli początek listy jest mniejszy od końca listy lub początek listy jest jej równy, to zaokrąglony wynik dzielenia przez dwa sumy początku i końca listy. Następny blok dotyczy równania: jeżeli zmienna
liczbajest równa elementowi
środekz listy odcinków, to występuje komunikat
Tak, podana liczba znajduje się na liście. Do tego elementu dołączony jest blok z napisem
zatrzymaj ten skrypt. Do niego dodano element, który zawiera równanie: jeżeli zmienna
liczbajest mniejsza od elementu
środekz listy odcinków, to uruchom ten skrypt od nowa z nowymi parametrami:
liczba,
zero,
środek minus jeden. W przeciwnym razie uruchom ten skrypt od nowa z nowymi parametrami:
liczba, środek plus jeden,
koniec listy. Jeżeli ta funkcja nie jest spełniona, to występuje komunikat
Niestety, ale podana liczba nie znajduje się na liście. Na dole jest blok z napisem
zatrzymaj ten skrypt, który kończy skrypt.

dziel_zwyciezaj
Złożoność obliczeniowa algorytmu to miara ilości zasobów (np. czasu lub pamięci), które są potrzebne do jego wykonania w zależności od rozmiaru danych wejściowych. Można określić jej rzędem na podstawie tego, jak zmienia się ilość zasobów wraz z rosnącym rozmiarem danych. Na przykład, jeśli czas wykonania algorytmu rośnie liniowo wraz z ilością danych, to mówimy o złożoności liniowej (rzędu 1). Jeśli czas rośnie kwadratowo w zależności od danych, to mówimy o złożoności kwadratowej (rzędu 2), i tak dalej. Rząd złożoności pomaga określić, jak algorytm zachowuje się wobec różnych rozmiarów danych i jakie zasoby będą potrzebne do jego wykonania.