Zakres kursu
Sekwencje / Tworzenie ciągu instrukcji
Cele operacyjne, uczeń:
- określa kierunki i ustala położenie bohatera w stosunku do własnej osoby, a także w stosunku do innych przedmiotów, rozróżnia stronę lewą i prawą, górę i dół,
- rozumie pojęcia pion i poziom,
- układa sekwencję instrukcji dla wirtualnego robota za pomocą bloczków ze strzałkami kierunkowymi,
- odczytuje sekwencję instrukcji zapisaną za pomocą bloczków ze strzałkami kierunkowymi,
- omija przeszkody w postaci ścian labiryntu.
Tworzenie kodu sekwencyjnego należy do podstawowych technik projektowania algorytmów. Kiedy rozwiązujemy problem, w którym jesteśmy w stanie przewidzieć wszystkie sytuacje, które mogą się wydarzyć oraz rozwiązać zadanie w postaci kolejno następujących po sobie instrukcji programu, wówczas najbardziej podstawową techniką jest zapisanie wszystkich czynności, które muszą po sobie nastąpić. Takie postępowanie nazywa się tworzeniem sekwencji instrukcji kodu, w skrócie tworzeniem sekwencji. Podejście to jest wystarczające dla wielu prostych zadań algorytmicznych, składających się z kilku lub kilkunastu instrukcji do wykonania. Podejście to jest również łatwo przyswajalne dla dzieci w wieku przedszkolnym, ponieważ można je odnieść do sytuacji znanych dziecku z życia codziennego, np. wyjście na spacer, gotowanie zupy itp.
W aplikacji Jedź Lumi! sekwencje instrukcji są konstruowane poprzez układanie w jednej poziomej linii bloczków z instrukcjami nawigującymi robotem - jedź w prawo, jedź w lewo, jedź do góry, jedź do dołu. Uruchomienie poprawnie przygotowanej sekwencji ruchów robota pozwoli na doprowadzenie robota od pola startowego, czyli początkowego położenia bohatera na planszy do pola mety, którym w aplikacji jest otwór, czasami zakryty włazem.
W ramach kursu Jedź Lumi! jest przygotowanych dziesięć ćwiczeń wprowadzających (poziomy 1-10), a łącznie jest sto dziesięć zadań, w których tworzymy sekwencje instrukcji dla robota, stosując różne techniki programowania, których uczymy się podczas tego kursu. Poziom trudności ćwiczeń wzrasta z każdym kolejnym zadaniem.
Przykładowe zadanie o niskim stopniu skomplikowania pokazano na Rysunku: Sekwencje - poziom 2.
W powyższym zadaniu sekwencja składa się z trzech instrukcji, które kolejno wskazują robotowi kierunek jazdy. Zadanie ma jedno poprawne rozwiązanie. Teoretycznie można ułożyć dłuższy ciąg instrukcji, dodając zbędne polecenia jazdy z powrotem, nie byłoby to jednak rozwiązanie optymalne. Pamietajmy, że szukamy tutaj najkrótszego ciągu instrukcji, który doprowadzi bohatera do mety.
Przykładowe zadanie o wyższym stopniu skomplikowania pokazano na Rysunku: Sekwencje - poziom 10.
W powyższym rozwiązaniu sekwencja kodu składa się z jedenastu instrukcji. Zadanie ma więcej niż jedno poprawne rozwiązanie.
Warunki / Instrukcje warunkowe
Cele operacyjne, uczeń:
- stosuje w sekwencji instrukcję warunkową "jeśli jesteś na polu oznaczonym kolorem niebieskim, to zmień kierunek jazdy".
Instrukcje warunkowe (w skrócie Warunki) pozwalają na uruchomienie określonych fragmentów kodu (sekwencji instrukcji) tylko, jeśli wystąpi określona sytuacja, tj. warunek zostanie spełniony. Warunki w językach programowania mają postać dodatkowych instrukcji kodu typu jeżeli, to (ang. If, then)
, które należy umieścić w projektowanym algorytmie. Dla instrukcji warunkowej należy określić warunek, który ta instrukcja będzie sprawdzać. Jeśli warunek będzie spełniony, to zostanie wykonana pewna sekwencja kodu, którą należy zdefiniować w ramach zakresu warunkowego, ograniczonego początkiem i końcem zakresu.
Ze względu na specyfikę ruchu robota w aplikacji Jedź Lumi!, który po otrzymaniu instrukcji jazdy w określonym kierunku, kieruje się zawsze do końca korytarza, zmiana kierunku w innych miejscach (np. w odgałęzieniach w środku korytarza) jest możliwa dzięki użyciu instrukcji warunkowych. W tym celu wprowadzono na planszach pola decyzyjne, tzw. pola warunkowe, na których może być podjęta decyzja o zmianie kierunku jazdy. Instrukcje te mają postać wyrażenia jeśli jesteś na polu oznaczonym kolorem niebieskim, to zmień kierunek jazdy
.
Aby wymóc na użytkowniku konieczność użycia bloczków warunkowych (decyzyjnych), plansze zostały tak zaprojektowane, by nie dało się ich poprawnie rozwiązać bez zastosowania tych bloczków. Jeśli bloczek z warunkowym skrętem nie zostanie użyty, Lumi będzie kontynuował swój kierunek jazdy, aż natknie się na przeszkodę, np. w postaci ściany.
W ramach kursu Jedź Lumi! jest przygotowanych dziesięć zadań wprowadzających w to zagadnienie (plansze 11-20), a łącznie jest siedemdziesiąt ćwiczeń z wykorzystaniem instrukcji warunkowych i innych technik programowania.
Przykładowe zadanie (Plansza 11.) wymagające użycia instrukcji warunkowej dla zmiany kierunku jazdy zaprezentowano poniżej.
W powyższym zadaniu zmiana kierunku jazdy z jedź w prawo
na jedź w dół
jest możliwa dzięki użyciu bloczka warunkowego oznaczonego kolorem niebieskim. Zadanie ma więcej niż jedno poprawne rozwiązanie.
Przykład złożonego zadania (Plansza 20) pokazano na poniższym rysunku. Zadanie to ma przynajmniej dwa poprawne rozwiązania.
Powyższe rozwiązanie wymaga użycia kilku instrukcji warunkowych. Nie ma konieczności skorzystania ze wszystkich niebieskich pól decyzyjnych w sekwencji.
Poniżej pokazano inne rozwiązanie dla tego samego zadania (Plansza 20).
W powyższym rozwiązaniu skorzystano ze wszystkich pól decyzyjnych.
Akcje / Podnieś i upuść
Cele operacyjne, uczeń:
- określa wzajemne położenie przedmiotów na płaszczyźnie,
- stosuje w sekwencji instrukcji akcję
Podnieś
, - stosuje w sekwencji instrukcji akcję
Upuść
.
Akcje w programowaniu mają postać dodatkowych instrukcji - bloków kodu - ze z góry określoną funkcjonalnością. O akcjach można myśleć jak o pewnych ułatwieniach - wbudowanych funkcjach, czyli sekwencjach kodu, które zostały wcześniej przygotowane i zapisane w postaci pojedynczego bloku kodu. Takie podejście bardzo usprawnia programowanie, ponieważ daje programiście na start zbiór “narzędzi”, którymi może się posłużyć do rozwiązania właściwego zadania. Akcje często są udostępniane jako składniki środowiska pracy (tzw. biblioteki funkcji), które są znane w momencie rozpoczęcia rozwiązywania danego zadania.
W kursie Jedź Lumi! zostało założone, że takimi akcjami, które są znane i dostępne do użycia są predefiniowane możliwości robota - podnoszenie przedmiotów i odkładania/upuszczanie ich. W przygotowanych ćwiczeniach założono dostęp do akcji Podnieś
i Upuść
.
By wymusić użycie (przećwiczenie) tych akcji przez ucznia, przygotowano zadania, w których wymagane jest przeniesienie wirtualnego przedmiotu do wskazanych miejsc. Przedmioty znajdują się na końcu korytarzy - ścieżek, gdzie z definicji kończy się ruch robota i czeka on na kolejną instrukcję.
W ramach kursu Jedź Lumi! jest przygotowanych dziesięć zadań wprowadzających w to zagadnienie (plansze 21-30), a łącznie jest pięćdziesiąt ćwiczeń z wykorzystaniem akcji Podnieś
i Upuść
i innych technik programowania.
Przykładowe zadanie wymagające użycia akcji Podnieś
i Upuść
pokazano na poniższym rysunku (Plansza 21.).
W powyższym zadaniu robot ma do przewiezienia jeden przedmiot. Akcje dla robota zostały zdefiniowane w sekwencji dodatkowymi bloczkami: Podnieś
i Upuść
.
Bardziej złożony przykład zadania (Plansza 26) z akcjami Podnieś
i Upuść
, z koniecznością przeniesienia dwóch przedmiotów do miejsc docelowych pokazano poniżej.
W powyższym zadaniu Lumi ma do przewiezienia dwa przedmioty. Dla każdego z przedmiotów użyto zielonych bloczków z instrukcjami Podnieś
i Upuść
.
Pętle iteracyjne / Powtarzanie sekwencji w pętli
Cele operacyjne, uczeń:
- wyodrębnia w długiej sekwencji instrukcji powtarzaną ciągle sekwencję
- układa sekwencję instrukcji, stosując pętlą iteracyjną
Pętla iteracyjna (zwana czasami pętlą licznikową) jest techniką programowania, która pozwala na wielokrotne wykonanie tych samych instrukcji, bez konieczności wypisywania ich wszystkich po kolei. Podejście to jest szczególnie przydatne tam, gdzie w ramach pełnej sekwencji kodu występują obok siebie powtarzalne fragmenty kodu. Dobrą praktyką jest poszukiwanie rytmicznych fragmentów kodu, zidentyfikowanie pojedynczego powtarzanego wzoru w tym fragmencie; wydzielenie go jako osobnego bloku kodu i określenie, ile razy ma się wykonać. Jest to możliwe dzięki instrukcji typu Powtarzaj
(ang. Loop), w której można wskazać, ile razy program ma wykonać dany fragment sekwencji. Stosując instrukcję Powtarzaj
, należy pamiętać o ustawieniu zakresu, czyli początku i końca sekwencji, która ma być wykonana w pętli. W praktyce taki zakres rozpoczyna się zaraz po bloczku Powtarzaj
, a kończy się na specjalnym bloczku oznaczającym koniec pętli (ang. End-Loop).
Ze względu na specyfikę ruchu robota w aplikacji Jedź Lumi!, który po otrzymaniu instrukcji jazdy w określonym kierunku, kieruje się zawsze do końca korytarza, identyfikacja powtarzanych sekwencji ruchu nie zawsze jest oczywista przy pierwszym spojrzeniu na planszę. Okazuje się, że długość korytarza nie ma tutaj znaczenia dla określania sekwencji kierunków ruchu w pętli, ponieważ nie liczymy pojedynczych kroków-pól na trasie przejazdu.
W ramach kursu Jedź Lumi! jest przygotowanych dziesięć zadań wprowadzających w zagadnienie pętli iteracyjnej (poziomy 41-50), a łącznie jest czterdzieści ćwiczeń z użyciem pętli iteracyjnej i innych technik programowania.
Przykład planszy (Plansza 41) wprowadzającej pojęcie pętli iteracyjnej zamieszczono poniżej.
W powyższym rozwiązaniu, zakres pętli oznaczono dwoma czerwonymi bloczkami. Początek pętli zaznaczono bloczkiem Powtarzaj 2 razy, a koniec zakresu pętli bloczkiem z instrukcją Koniec pętli. Ilość powtórzeń, czyli iteracji, wynosi 2 i jest to określone w bloczku z instrukcją początku pętli.
Przykład planszy (Plansza 50) z bardziej złożonym zadaniem z dwiema pętlami iteracyjnymi (plansza 50.) występującymi po sobie zamieszczono poniżej.
W powyższym rozwiązaniu, zakresy pętli także oznaczono dwoma czerwonymi bloczkami. Ilość powtórzeń, czyli iteracji w każdej pętli wynosi 3.
Funkcje / Definiowanie funkcji
Cele operacyjne, uczeń:
- potrafi wyodrębniać z długiej sekwencji największą powtarzalną sekwencję,
- umie zmienić fragment kodu w funkcję,
- układa sekwencję instrukcji z wywołaniem funkcji.
Definiowanie funkcji jest techniką w programowaniu, która pozwala na wydzielenie z kodu tych fragmentów sekwencji, które powtarzają się w różnych miejscach w kodzie, a następnie zapisanie ich w postaci osobnych sekwencji instrukcji (oddzielnego kodu).
Dodatkowa zdefiniowana sekwencja otrzymuje swoją nazwę, dzięki czemu można korzystać ze zdefiniowanej funkcji w innych miejscach w kodzie programu. Wstawiając bloczek z nazwą funkcji w kodzie programu, podobnie jak bloczek akcji, wywołujemy funkcję
.
Dodatkowo, łącząc funkcje z pętlami iteracyjnymi oraz instrukcjami warunkowymi, programista może tworzyć krótki i przejrzysty kod programu, który jest łatwy w dalszej rozbudowie. Stosowanie funkcji ułatwia również wprowadzanie zmian, naprawę błędów w kodzie i współpracę z innymi programistami, ponieważ łatwiej jest analizować mniejsze fragmenty kodu zamknięte w funkcjach, niż jedną długą sekwencję kodu rozwiązującą całe zadanie. Zmiana, którą wprowadzimy w kodzie źródłowym funkcji, jest dostępna i jednakowa dla wszystkich kodów źródłowych programów, które używają tej funkcji.
W ramach kursu Jedź Lumi! jest przygotowanych dziesięć zadań wprowadzających w zagadnienie definiowania funkcji (poziomy 71-80), a łącznie jest czterdzieści ćwiczeń z wykorzystaniem funkcji i innych technik programowania.
Przykład zadania (Plansza 71):
Powyższe zadanie ma więcej niż jedno rozwiązanie. Zastosowanie funkcji skraca sekwencję kodu głównego. W rozwiązaniu można również wykorzystać pętlę iteracyjną, która wywoła nam funkcję F2
trzy razy.