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.
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.
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.
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.
R78T3CLwaa5XF
Pole będące notatnikiem, który służy do zapisania swoich uwag
Notatnik
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
1
Ćwiczenie 1
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.
R1O361eB0AEau
Załącznik zawiera tło w kształcie prostokąta, podzielonego na dwie części w różnych kolorach: szarym i popielato‑niebieskim. Szara część znajduje się na górze i jest mniejsza od niebieskiej części znajdującej się na dole.
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
Plik PNG o rozmiarze 10.04 KB w języku polskim
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.
R1YEhk53A5IUx
Grafika pokazuje prostokąt podzielony na dwie części w różnych kolorach: szarym i popielato‑niebieskim. Szara część znajduje się na samej górze i jest mniejsza od niebieskiej części znajdującej się na dole.
Przykładowe tło, które możesz wykorzystać w swoim programie
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
R5veDfBleKYdD1
Ćwiczenie 1
Jak wczytać tło do projektu w programie Scratch? Zaznacz prawidłową odpowiedź.
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
1
Ćwiczenie 2
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 programu Scratch 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 go prawym przyciskiem myszy i wybierz z menu właściwą opcję.
R12zX3VRPiovi
Na zrzucie ekranu widoczny jest program Scratch, w którym znajduje się przycisk z dużym napisem Tak w 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.
Tworzenie przycisku Tak w edytorze
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
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.
RyB9EWlCfeh7s
Zrzut ekranu przedstawia okno programu Scratch z gotowym projektem. 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. Z lewej strony widoczne są opcje sekwencji skryptu, a po prawej pokazane jest okno z efektem końcowym. Po lewej stronie są lista zmiennych oraz funkcje skryptu: ustaw, zmień, pokaż zmienną i ukryj zmienną. Po prawej stronie na szaro‑popielatym tle widoczny jest duszek‑kot. Nad animacją zwierzęcia znajdują się trzy prostokąty z napisami: odcinek_1, odcinek_2, odcinek_3.
Okno programu po wprowadzeniu zmian
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
RxzNWW9H9z7jO1
Ćwiczenie 2
Możliwe odpowiedzi: 1. Należy przeciągnąć przygotowaną grafikę i upuścić nad otwartym oknem programu Scratch., 2. W prawym dolnym rogu należy wybrać opcję "Wczytaj tło", następnie wybrać plik z przygotowaną grafiką., 3. W lewym dolnym rogu należy wybrać opcję "Wczytaj tło", następnie wybrać plik z przygotowaną grafiką.
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
Przygotowujemy pierwszą aplikację
2
Ćwiczenie 3
Określ, jakie działania powinny być wykonane po uruchomieniu aplikacji, czyli kliknięciu zielonej flagi, do momentu, kiedy wymagana będzie akcja użytkownika. Przygotuj właściwy skrypt.
Po kliknięciu zielonej flagi 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:
RrPRsTJA4UpgU
Skrypt realizujący losowanie długości trzech odcinków. Kolejno od góry skrypt wykonuje polecenia: żółty element z napisem kiedy kliknięto oraz ikoną zielonej flagi, poniżej pomarańczowe bloki z napisami ustaw odcinkek_1, odcinek_2, odcinek_3 na oraz 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.
Przykładowy skrypt do losowania długości dla trzech odcinków
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
RzrLMNWjxpUjF2
Ćwiczenie 3
Zadaniem duszka jest wylosowanie trzech długości boków trójkąta, a następnie zadanie użytkownikowi pytania, czy można zbudować z tych odcinków trójkąt. Ustaw w odpowiedniej kolejności polecenia takiego skryptu.
Zadaniem duszka jest wylosowanie trzech długości boków trójkąta, a następnie zadanie użytkownikowi pytania, czy można zbudować z tych odcinków trójkąt. Ustaw w odpowiedniej kolejności polecenia takiego skryptu.
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
Należy zadbać o komunikację pomiędzy duszkami. Duszek odpowiedzialny za sprawdzenie odpowiedzi musi wiedzieć, który przycisk kliknął użytkownik. W programie Scratch do komunikacji pomiędzy duszkami można wykorzystać komunikaty. Więcej informacji o nadawaniu i odbieraniu komunikatów znajdziesz po kliknięciu poniższej zakładki.
1
Nadawanie i odbieranie komunikatów
Nadawanie i odbieranie komunikatów
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 bloki 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 bloków.
R1QDTC1siqf0a
Zrzut ekranu pokazuje blok nadaj komunikat… z wybraną opcją wiadomość1 z listy rozwijanej.
Blok nadaj komunikat… z kategorii Zdarzenia
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
RnvVA7jThXljC
Zrzut ekranu pokazuje blok nadaj komunikat… i czekaj z wybraną opcją wiadomość1 z listy rozwijanej.
Blok nadaj komunikat… i czekaj z kategorii Zdarzenia
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
Nazwę nadawanego komunikatu można wybrać z listy rozwijalnej lub zdefiniować nowy komunikat przy pomocy opcji Nowa wiadomość dostępnej po rozwinięciu listy.
RkGimheCcEnbx
Zrzut ekranu pokazuje blok nadaj komunikat… z pokazaną listą rozwijalną do wyboru komunikatu.
Blok nadaj komunikat… z kategorii Zdarzenia z rozwiniętą listą opcji
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
Wyświetlone będzie wówczas okno dialogowe, w którym należy podać nazwę nowego komunikatu.
R1AyakowBzaq4
Zrzut ekranu przedstawia okno dialogowe w programie Scratch, w którym należy wpisać nazwę komunikatu. Prostokątne okno z paskiem z nazwą Nowa wiadomość na górze oraz przyciskiem do zamknięcia okna. Poniżej jest pasek do wpisania wiadomości oraz przyciski Anuluj i OK.
Okno dialogowe w programie Scratch do tworzenia nowej wiadomości
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
Po nadaniu komunikatu (wykonaniu bloczka nadaj lub nadaj i czekaj) uruchamiane są automatycznie skrypty zaczynające się od bloczka kiedy otrzymam(nazwa komunikatu).
RUaJwRiriyACV
Zrzut ekranu pokazuje blok kiedy otrzymam… z wybraną opcją wiadomość1 z listy rozwijanej.
Blok Kiedy otrzymam… z kategorii Zdarzenia
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
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:
Rf9K11qXukSUV
Zrzut ekranu przedstawia przykładowe skrypty: skrypt kota i skrypt myszy. Pierwszy skrypt składa się kolejno z bloków. Kiedy kliknięto i zielona strzałka. Powiedz z białym polem z napisem Idę łapać myszy. Nadaj komunikat z wybraną opcją łapanie_myszy. Zatrzymaj z wybraną opcją ten skrypt. Drugi skrypt składa się kolejno z bloków. Kiedy otrzymam z wybraną opcją łapanie_myszy. Powiedz z białym polem z napisem I tak Ci ucieknę. Zatrzymaj z wybraną opcją ten skrypt.
Przykładowe skrypty z nadawaniem i odbieraniem komunikatu
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
R1FJ8Lrao1C5L
Zrzut ekranu przedstawia dwa duszki: kota i mysz. Kot znajduje się za myszą i w jego dymku tekstowym umieszczono napis Idę łapać mysz!. Mysz znajduje się przed kotem i w jej dymku tekstowym umieszczono napis I tak ci ucieknę!.
Działanie skryptu łapania myszy
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
1
Ćwiczenie 4
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.
RJ0alF91juBL2
Zrzut ekranu przedstawia dwa przykładowe skrypty dla przycisków Tak oraz 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 komunikat oraz odpowiednio obok w zaznaczonym elemencie znajduje się słowo tak lub nie. Trzeci, końcowy, element ma napis zatrzymaj ten skrypt.
Skrypty do nadawania komunikatów tak i nie
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
RjGWgewqpfZle1
Ćwiczenie 4
Zadaniem użytkownika jest przygotowanie skryptu dla przycisku, który będzie nadawał komunikat Tak albo Nie. Ustaw w odpowiedniej kolejności polecenia takiego skryptu.
Zadaniem użytkownika jest przygotowanie skryptu dla przycisku, który będzie nadawał komunikat Tak albo Nie. Ustaw w odpowiedniej kolejności polecenia takiego skryptu.
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
2
Ćwiczenie 5
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 poprzez przycisk Tak
RXW3pCzjHoQGC
Zrzut ekranu przedstawia skrypt realizujący instrukcję warunkową dla komunikatu 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 powiedz wyświetla komunikat Brawo, dobra odpowiedź!. Pod blokiem z napisem w przeciwnym razie znajduje się element z napisem powiedz i 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.
Przykładowy skrypt realizujący instrukcję warunkową dla komunikatu tak
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
Skrypt dla komunikatu nie nadawanego poprzez przycisk Nie
RxAZmhhsjEQl9
Zrzut ekranu przedstawia skrypt realizujący instrukcję warunkową dla komunikatu 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 powiedz wyświetla komunikat Brawo, dobra odpowiedź!. Pod blokiem z napisem w przeciwnym razie znajduje się element z napisem powiedz i 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.
Przykładowy skrypt realizujący instrukcję warunkową dla komunikatu nie
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
RHtnus49UIixQ2
Ćwiczenie 5
Użytkownik ma za zadanie napisać skrypt dla duszka sprawdzającego odpowiedź, reagujący na otrzymanie komunikatu tak. Zawarto w nim komunikat dla duszka – przycisku, informujący o zakończeniu sprawdzania (przycisk został ukryty). Wstaw w tekst poprawne uzupełnienia kodu.
Użytkownik ma za zadanie napisać skrypt dla duszka sprawdzającego odpowiedź, reagujący na otrzymanie komunikatu tak. Zawarto w nim komunikat dla duszka – przycisku, informujący o zakończeniu sprawdzania (przycisk został ukryty). Wstaw w tekst poprawne uzupełnienia kodu.
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
2
Ćwiczenie 6
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:
RPlWjIHNivico
Zrzut ekranu przedstawia przykładowy skrypt losowania długości dla odcinków z nadawaniem komunikatu. Kolejno od góry skrypt wykonuje polecenia. Żółty element z napisem kiedy kliknięto z 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 na oraz 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.
Przykładowy skrypt losowania długości dla odcinków z nadawaniem komunikatu
Źródło: GroMar Sp z o.o., licencja: CC BY-SA 3.0.
Skrypty pokazujące oraz ukrywające przyciski (skrypty dla duszków – przycisków):
RtSGWP0PP76Yu
Zrzut ekranu przedstawia dwa skrypty służące do ukrywania i pokazywania przycisków w zależności od otrzymanych komunikatów.
Pierwszy skrypt rozpoczyna się od żółtego bloku z napisem 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.
Skrypty do ukrywania i pokazywania przycisków w zależności od otrzymanych komunikatów
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
RvMNXC1fkYPr32
Ćwiczenie 6
Użytkownik ma za zadanie przygotować skrypt pokazujący przyciski na początku głównego programu. Skrypt ten powinien wysyłać komunikat początek na początku programu, żeby wyświetlić przyciski Tak i Nie. Ustaw w odpowiedniej kolejności polecenia takiego skryptu.
Użytkownik ma za zadanie przygotować skrypt pokazujący przyciski na początku głównego programu. Skrypt ten powinien wysyłać komunikat początek na początku programu, żeby wyświetlić przyciski Tak i Nie. Ustaw w odpowiedniej kolejności polecenia takiego skryptu.
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
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
Listy
Listy
Czę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 środowisku Scratch służą do tego listy.
Przykład
Przykład
Rzucamy 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ąć 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ę 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.
Po utworzeniu listy w kategorii Dane pojawią się nowe bloki 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 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 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.
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 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 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 Sp. z o.o., licencja: CC BY-SA 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 jedenaście 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.
Obiekt Lista w środowisku Scratch
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 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 listy Wyniki, dodaj losową liczbę od jednego do dziesięciu do listy Wyniki, zatrzymaj ten skrypt.
Przykładowy skrypt na dodanie losowej liczby z przedziału <1, 10> do listy
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 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 listy Wyniki, zapytaj, jaką liczbę chcesz wprowadzić do listy? i czekaj, dodaj odpowiedź do listy Wyniki, zatrzymaj ten skrypt.
Przykładowy skrypt na dodanie podanej przez użytkownika liczby do listy
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
Istnieje wiele sposobów, aby dodać liczbę do listy w środowisku 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 listy Wyniki, 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ówi Rzucił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 Sp. z o.o., licencja: CC BY-SA 3.0.
R1KZMf8H9obaX
Zrzut ekranu przedstawia przykładowy wynik działania skryptu zliczającego wyniki po stu rzutach kostką. Z lewej strony pokazana jest tabela Wyniki z wynikami dla poszczególnych losowań, a z prawej widoczny jest duszek z dymkiem z tekstem Rzucił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 Sp. z o.o., licencja: CC BY-SA 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ę przycisk Stwórz listę, a pod nim znajdują się utworzone listy. Jedną z nich jest lista Wyniki 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 Sp. z o.o., licencja: CC BY-SA 3.0.
lub programowo, przy pomocy bloków.
R1cZh2ixb0KZq
Zrzut ekranu pokazuje blok pokaż listę… z wybraną opcją Wyniki służący do wyświetlenia wybranej listy z dostępnych opcji.
Blok pokaż listę… z kategorii Zmienne
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
R1YxDi98fW6D2
Zrzut ekranu pokazuje blok ukryj listę… z wybraną opcją Wyniki służący do ukrywania wybranej listy z dostępnych opcji.
Blok ukryj listę… z kategorii Zmienne
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
1
⠀⠀ 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.
1
Tworzenie bloków w Scratch
Tworzenie bloków w Scratch
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.
Przykład 1
Duszek ma narysować kilka obróconych kwadratów. Wygodnie będzie zdefiniować własny blok rysujący pojedynczy kwadrat.
R7OSvOAq0YO1P
Zrzut ekranu przedstawia skrypt realizujący powtarzanie zdefiniowanego własnego bloku. Po lewej stornie znajduje się pierwszy skrypt składający się z pięciu elementów. Na górze znajduje się różowy blok z napisem definiuj kwadrat, pod nim widoczny jest żółty blok z napisem powtórz cztery razy, do niego przyłączone są dwa niebieskie bloki z napisami przesuń o sto kroków oraz obróć w prawo o dziewięćdziesiąt stopni. Na końcu zbudowanego skryptu jest żółty blok z napisem zatrzymaj ten skrypt.
Drugi skrypt składa się z ośmiu elementów. Na górze znajduje się żółty blok z napisem kiedy kliknięto oraz zieloną ikoną flagi, poniżej dwa zielone bloki z napisem wyczyść wszystko oraz przyłóż pisak. Do poprzednich elementów dodano niebieski blok z napisem zapytaj, ile kwadratów mam narysować, i czekaj, do niego przyłączono żółty blok połączony z niebieskim blokiem z napisem powtórz odpowiedź razy, poniżej jest różowy blok z napisem kwadrat oraz niebieski blok połączony z zielonym elementem z napisem obróć w prawo o trzysta sześćdziesiąt ukośnik odpowiedź stopni. Na końcu zbudowanego skryptu jest żółty blok z napisem zatrzymaj ten skrypt. Po prawej stornie ekranu znajdują się figury geometryczne oraz linie, które reprezentują wskazane czynności w stworzonych algorytmach i są zobrazowaniem wykonanych poleceń.
Przykładowy skrypt realizujący powtarzanie zdefiniowanego własnego bloku w języku Scratch
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
Na poniższym filmie możesz obejrzeć, jak utworzyć i wykorzystać własny blok.
R3CPUgu511yAY
Film przedstawia tworzenie i wykorzystanie własnego bloku.
Film przedstawia tworzenie i wykorzystanie własnego bloku.
Tworzenie i wykorzystanie własnego bloku
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
Film przedstawia tworzenie i wykorzystanie własnego bloku.
Własne bloki mogą mieć też parametry, analogicznie jak w przypadku wielu standardowych bloków (np. w bloku Przesuń podajesz, o ile kroków duszek ma się przemieścić).
Przykład 2
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ąć go 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 bloku rozpoczynającego definicję nowego bloku do instrukcji, w której chcemy go użyć.
RFTiyFZZ2bwk4
Zrzut ekranu przedstawia skrypt realizujący instrukcję z wykorzystaniem parametru. Po lewej stronie znajduje się skrypt rysujący kwadrat. Na górze jest różowy blok z napisem 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ów oraz 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ęto oraz zielona ikona flagi, poniżej dwa zielone bloki z napisem wyczyść wszystko oraz 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 bok oraz 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.
Przykładowy skrypt realizujący instrukcję z wykorzystaniem parametru w języku Scratch
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
Na poniższym filmie możesz obejrzeć, jak utworzyć i wykorzystać własny blok z parametrem.
R1J8LK1HWSP21
Film przedstawia tworzenie i wykorzystanie własnego bloku z parametrem.
Film przedstawia tworzenie i wykorzystanie własnego bloku z parametrem.
Tworzenie i wykorzystanie własnego bloku z parametrem
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
Tworzenie i wykorzystanie własnego bloku z parametrem
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
Film przedstawia tworzenie i wykorzystanie własnego bloku z parametrem.
min_max
⠀⠀ 3. Znajdowanie najmniejszego i największego elementu (np. listy).
Więcej informacji na ten temat znajdziesz w ćwiczeniu dodatkowym po rozwinięciu listy.
1
Ćwiczenie dodatkowe
Ćwiczenie dodatkowe
2
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: – liczba elementów listy (długość listy), – losowa lista liczb.
Wynik: – wartość najmniejszej liczby w liście.
Ustaw wartość zmiennej na pierwszy element listy .
Ustaw wartość zmiennej na .
Powtórz : 3.1. Jeżeli element o numerze z listy , to: ⠀ 3.1.1. Ustaw wartość zmiennej na wartość elementu o numerze z . 3.2. Powiększ zmienną o .
Zatrzymaj ten skrypt.
Poniżej znajduje się skrypt znajdujący najmniejszą liczbę na liście zgodnie z powyższym algorytmem.
R6IwtSGsyDppz
Zrzut ekranu przedstawia skrypt realizujący wyszukanie najmniejszej liczby na liście. Blok rozpoczyna się od różowego bloku z napisem 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 razy oraz 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.
Przykładowy skrypt realizujący wyszukanie najmniejszej liczby na liście
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
Możesz go wykorzystać we wspomnianej aplikacji, gdzie losowane jest 10 liczb z przedziału od do , a duszek wyświetla w dymku najmniejszą z nich.
R1JJRyiuUFX9A
Zrzut ekranu przedstawia skrypt wyświetlający w dymku najmniejszą liczbę na liście. Skrypt rozpoczyna się od żółtego bloku kiedy kliknięto z 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.
Przykładowy skrypt wyświetlający w dymku najmniejszą liczbę na liście
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
⠀⠀ 4. Zamiana elementów listy.
Więcej informacji na ten temat znajdziesz w ćwiczeniu dodatkowym po rozwinięciu listy.
1
Ćwiczenie dodatkowe
Ćwiczenie dodatkowe
2
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.
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.
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.
Zamiana wartości zmiennych
Ź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.
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: – liczba elementów listy (długość listy), – losowa lista liczb.
Wynik: z przestawionymi elementami, tak że pierwszy element w liście jest najmniejszą liczbą na liście.
Ustaw wartość zmiennej na (indeks pierwszego elementu listy).
Ustaw na .
Powtórz razy: 2.1. Jeżeli element na pozycji z listy element na pozycji z listy , to: ⠀ 2.1.1. Ustaw na . 2.2. Zwiększ o .
Ustaw na wartość pierwszego elementu z listy .
Pierwszy element na liście ustaw na wartość z listy pod numerem .
Na pozycji wpisz zawartość zmiennej – liczbę z pierwszego elementu listy, przed nadpisaniem.
Zatrzymaj skrypt.
R8dQxTdhw3mZ6
Zrzut ekranu przedstawia skrypt realizujący ustawienie najmniejszej liczby na pierwszym miejscu listy. Na górze znajduje się blok z napisem definiuj ustaw_min. Pod nim są dwa bloki z napisami: ustaw min na jeden oraz ustaw i na dwa. Pod zmienną min oraz i jest 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, to oraz 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 Lista oraz 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.
Przykładowa definicja bloku szukaj_min
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
⠀ 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ść.
sortowanie_przez_wybieranie
1
Algorytm sortowania przez wybieranie
Algorytm sortowania przez wybieranie
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).
Przykład 1
Przykład 1
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.
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.
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.
Sortowanie przez wybieranie
Ź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.
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: – liczba elementów listy, – lista liczb.
Wynik: – uporządkowana niemalejąco lista liczb.
Powtarzaj dla kolejnych wartości zmiennej od do : 1.1. Ustaw wartość zmiennej na . 1.2. Powtarzaj dla kolejnych wartości zmiennej od do : ⠀1.2.1. Jeżeli element na pozycji w element na pozycji w to ustaw wartość zmiennej na . 1.3. Zamień element na pozycji w z elementem na pozycji w .
⠀
1
Ćwiczenie 7
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.
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 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.
R2cIKTlTTqzjH1
Ćwiczenie 7
Uporządkuj etapy tworzenia listy.
Uporządkuj etapy tworzenia listy.
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
Skrypty dla przycisków będą analogiczne jak w poprzedniej aplikacji. Zmienią się dla duszka sprawdzającego odpowiedź, ponieważ inne będą algorytm sprawdzenia odpowiedzi użytkownika oraz zastosowane struktury danych (zamiast trzech pojedynczych zmiennych lista).
2
Ćwiczenie 8
Przygotuj skrypt, uruchamiany po kliknięciu zielonej flagi, 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:
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.
R1QTMqJYQzPda2
Ćwiczenie 8
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.
2
Ćwiczenie 9
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ą.
Poniżej zapiszemy rozwiązanie problemu z wykorzystaniem dwóch ostatnich algorytmów.
2
Ćwiczenie 10
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.
– zmienna pomocnicza do przechowywania wartości mniejszego odcinka,
– licznik iteracji dla pierwszej pętli,
– licznik iteracji dla zagnieżdżonej pętli.
R1LrAUX6oyyeR
Zrzut ekranu przedstawia skrypt sortujący listę odcinków. Zaczyna się on od elementu z napisem definiuj sortowanie, następnie znajduje się blok, który odpowiada za ustawienie zmiennej i jako wartość jeden. Poniżej jest element, który jest odpowiedzialny za powtarzanie pierwszej pętli dopóki i jest większe od długości listy odcinków. Wewnątrz tej pętli najpierw zmienna sortowanie jest ustawiana na wartość zmiennej i oraz zmienna j jest ustawiana na wartość zmiennej i. Następnie powtarzana jest pętla, dopóki zmienna j jest 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 j jest zwiększana o jeden. Po wykonaniu tej pętli zmienna pom ustawiana jest na element i z listy odcinków. Element i z 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 i zwiększana jest o jeden i pierwsza pętla jest powtarzana. Na dole jest blok z napisem zatrzymaj ten skrypt, który kończy skrypt.
Przykładowa definicja bloku sortowanie
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
R1XQovnmyksWq2
Ćwiczenie 10
Użytkownik ma za zadanie utworzyć skrypt sortujący listę odcinków zgodnie z algorytmem przez wybieranie. Wstaw w tekst poprawne uzupełnienia kodu.
Użytkownik ma za zadanie utworzyć skrypt sortujący listę odcinków zgodnie z algorytmem przez wybieranie. Wstaw w tekst poprawne uzupełnienia kodu.
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
3
Ćwiczenie 11
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 jednego 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.
R17J5RnORTtRR
Zrzut ekranu przedstawia skrypt skrypt losowania liczby odcinków i nadawania im losowej długości, uzupełniony o sortowanie odcinków. Na górze jest żółty blok z napisem kiedy kliknięto oraz zieloną ikoną flagi, poniżej blok, który ustawia zmienną n na losową liczbę z zakresu od czterech do siedmiu i usuwa wszystko z listy odcinków. Następnie jest element, który powtarza pętlę n razy, w której do listy odcinków dodaje losową liczbę z zakresu od dwóch do pięciu. Następnie uruchamiany jest skrypt sortowanie. Do tego elementu dołączono blok z napisem powiedz, a w białym polu jest pytanie: czy z każdych trzech odcinków o podanych długościach można zbudować trójkąt?. Następnie zostaje dołączony blok z napisem nadaj komunikat początek. Na dole jest element z napisem zatrzymaj ten skrypt, który kończy skrypt.
Przykładowy skrypt losowania liczby odcinków i nadawania im losowej długości, uzupełniony o sortowanie odcinków
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
Skrypt wywoływany jako reakcja na otrzymanie komunikatu tak.
R1KZkce0Ij0Tf
Zrzut ekranu przedstawia przykładowy skrypt sprawdzania poprawności odpowiedzi po otrzymaniu komunikatu tak. Rozpoczyna się od elementu z napisem kiedy otrzymam tak, poniżej jest element, który uruchamia funkcję, która sumuje pierwszy i drugi elementy z listy odcinków i sprawdza, czy suma ta jest większa od długości elementu ostatniego listy odcinków. Jeżeli to prawda, to pojawia się komunikat Brawo, dobra odpowiedź!, w przeciwnym razie występuje komunikat Niestety, błędna odpowiedź. Na dole są dwa elementy kończące skrypt, jeden z nich ma napis nadaj komunikat koniec, a drugi zatrzymaj ten skrypt.
Przykładowy skrypt sprawdzania poprawności odpowiedzi po otrzymaniu komunikatu tak
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
Skrypt wywoływany jako reakcja na otrzymanie komunikatu nie.
R1GjWyCYuod9s
Zrzut ekranu przedstawia przykładowy skrypt sprawdzania poprawności odpowiedzi po otrzymaniu komunikatu nie. Rozpoczyna się od elementu z napisem kiedy otrzymam nie, poniżej jest element, który uruchamia funkcję, która sumuje pierwszy i drugi elementy z listy odcinków i sprawdza, czy suma ta jest większa od długości elementu ostatniego listy odcinków. Jeżeli to prawda, to pojawia się komunikat Brawo, dobra odpowiedź!, w przeciwnym razie występuje komunikat Niestety, błędna odpowiedź. Na dole są dwa elementy kończące skrypt, jeden z nich ma napis nadaj komunikat koniec, a drugi zatrzymaj ten skrypt.
Przykładowy skrypt sprawdzania poprawności odpowiedzi po otrzymaniu komunikatu nie
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
R1NNxYUCtdkQt3
Ćwiczenie 11
Użytkownik ma za zadanie zmodyfikować skrypt początkowy. Duszek zadający pytanie powinien najpierw posortować wylosowane odcinki. Uporządkuj elementy tego skryptu.
Użytkownik ma za zadanie zmodyfikować skrypt początkowy. Duszek zadający pytanie powinien najpierw posortować wylosowane odcinki. Uporządkuj elementy tego skryptu.
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
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.
1
Ćwiczenie 12
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.
2
Ćwiczenie 13
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.
RrBXZapHraTw92
Ćwiczenie 13
Użytkownik ma za zadanie nadać wartości początkowe zmiennym min1, min2 i max. Wstaw w tekst uzupełnienia kodu.
Użytkownik ma za zadanie nadać 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.
2
Ćwiczenie 14
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ł 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: – 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 .
2
Ćwiczenie 15
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.
RUc5hlYKLFRNV2
Ćwiczenie 15
Użytkownik ma za zadanie utworzyć skrypt znajdujący dwie wartości najmniejsze i największą. Uporządkuj elementy kodu.
Użytkownik ma za zadanie utworzyć skrypt znajdujący dwie wartości najmniejsze i największą. Uporządkuj elementy kodu.
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
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
3
Ćwiczenie 16
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
R1KuPQH61KctG
Zrzut ekranu przedstawia przykładowy skrypt losowania liczb i sprawdzania, czy podana liczba się w nich znajduje. Rozpoczyna się on od elementu z napisem kiedy kliknięto oraz 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 czekaj oraz pytaniem: podaj liczbę, a ja sprawdzę, czy występuje na liście. Do tych elementów dołączono blok jeżeli z 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ście przez dwie sekundy. Na dole jest element z napisem zatrzymaj wszystko, który kończy skrypt.
Przykładowy skrypt losowania liczb i sprawdzania, czy podana liczba się w nich znajduje
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
Za pomocą własnej funkcji
R8zZA0hniK1zZ
Zrzut ekranu przedstawia przykładowy skrypt losowania liczb i sprawdzania, czy podana liczba się w nich znajduje. Rozpoczyna się od elementu z napisem kiedy kliknięto z 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 czekaj oraz prośbą: Podaj liczbę, a ja sprawdzę, czy występuje na liście. Do tych elementów dołączono blok z napisem czy_wystepuje odpowiedź. Na dole jest element z napisem zatrzymaj ten skrypt, który kończy skrypt.
Przykładowy skrypt losowania liczb i sprawdzania, czy podana liczba się w nich znajduje
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
RD64Z9STh4GlO
Zrzut ekranu przedstawia przykładową definicję bloku czy_występuje. Skrypt rozpoczyna się od klocka z napisem definiuj czy_wystepuje liczba. W kolejnym elemencie ustawiana jest zmienna i na wartość jeden. Następny blok jest odpowiedzialny za powtarzanie pętli, aż zmienna i będzie większa od długości listy odcinków. W pętli: jeżeli element i z listy odcinków jest równy liczbie przekazanej do skryptu, to przez dwie sekundy wyświetlany jest komunikat Tak, podana liczba znajduje się na liście. Do tego elementu dołączony jest blok z napisem zatrzymaj ten skrypt. Do poprzedniego bloku dodano element, który zawiera komendę: w przeciwnym razie zmień zmienną i o jeden. Po skończeniu pętli, przez dwie sekundy, wyświetla 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.
Przykładowa definicja bloku czy_wystepuje
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
RZBqnDLs7QXn03
Ćwiczenie 16
Użytkownik ma za zadanie przygotować aplikację, w której losowana jest lista liczb. Następnie duszek prosi o podanie liczby i sprawdza, czy występuje ona na liście. Wstaw w tekst uzupełnienia kodu.
Użytkownik ma za zadanie przygotować aplikację, w której losowana jest lista liczb. Następnie duszek prosi o podanie liczby i sprawdza, czy występuje ona na liście. Wstaw w tekst uzupełnienia kodu.
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
3
Ćwiczenie 17
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.
RpuhjReNf8S2v
Interaktywna aplikacja, w której duszek zgaduje liczbę pomyślaną przez Ciebie
Interaktywna aplikacja, w której duszek zgaduje liczbę pomyślaną przez Ciebie
Aplikacja zgadująca liczbę pomyślaną przez użytkownika
Źródło: Janusz Wierzbicki, Maciej Borowiecki, licencja: CC BY-SA 3.0.
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
R1cWOLttOn6ql
Zrzut ekranu przedstawia przykładowy skrypt losowania liczb i sprawdzania, czy podana liczba się w nich znajduje, z wykorzystaniem bloku dziel_zwyciezaj. Skrypt rozpoczyna się od elementu z napisem kiedy kliknięto z 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 czekaj oraz 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.
Przykładowy skrypt losowania liczb i sprawdzania, czy podana liczba się w nich znajduje, z wykorzystaniem bloku dziel_zwyciezaj
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
RuBZm3wyjVAMV
Zrzut ekranu przedstawia przykładową definicję bloku sortowanie. Zaczyna się on od elementu z napisem definiuj sortowanie, następnie znajduje się blok, który odpowiada za ustawienie zmiennej i jako wartość jeden. Poniżej jest element, który jest odpowiedzialny za powtarzanie pierwszej pętli, dopóki i jest większe od długości listy odcinków. Wewnątrz tej pętli zmienna j jest ustawiana na wartość zmiennej i. Następnie powtarzana jest pętla, dopóki zmienna j jest 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 i z listy odcinków, to zmienna pom ustawiana jest na element i z Odcinki. Element i z listy odcinków zamieniany jest na element j z listy odcinków, a element j z listy odcinków zamieniany jest na zmienną pom. Następnie zmienna j zwiększa się o jeden. Dalej zmienna i zwiększa się o jeden. Na dole jest blok z napisem zatrzymaj ten skrypt, który kończy skrypt.
Przykładowa definicja bloku sortowanie
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
RRbqQiYmsfPcT
Zrzut ekranu przedstawiający przykładową definicję bloku 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 liczba jest równa elementowi środek z 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 liczba jest mniejsza od elementu środek z 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.
Przykładowa definicja bloku dziel_zwyciezaj
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
R1Pv6AbGDCiZh3
Ćwiczenie 17
Użytkownik ma za zadanie utworzyć skrypt losowania liczb i sprawdzania, czy podana liczba się w nich znajduje, z wykorzystaniem bloku dziel_zwyciezaj. Uporządkuj elementy kodu.
Użytkownik ma za zadanie utworzyć skrypt losowania liczb i sprawdzania, czy podana liczba się w nich znajduje, z wykorzystaniem bloku dziel_zwyciezaj. Uporządkuj elementy kodu.
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.
zlozonosc_obliczeniowa
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.