Zakręt za zakrętem – Dział III Algorytmy

Na dzisiejszych zajęciach przechodzimy do kolejnego działu algorytmy.
Algorytm – ciąg skończonych jasno zdefiniowanych czynności koniecznych do wykonania pewnego rodzaju zadań, sposób postępowania prowadzący do rozwiązania problemu.
Na dzisiejszych zajęciach dowiemy się w jaki sposób tworzy się skrypty rekurencyjne.
Rysowanie gwiazd
Rysowaliśmy już wielokąty foremne w Scratchu wykorzystując blok powtórz … razy – blok ten umożliwia powtórzenie danego polecenia kilkadziesiąt razy. Jednakże czasami nie wiadomo ile razy dane polecenie należy powtórzyć.
Zadanie czy jesteś w stanie narysować za pomocą Scratcha gwiazdę. według jakiego algorytmu musisz postępować? Jak zaplanować kolejne kroki działania?
Najprostszy plan rysowania gwiazdy to:
- przejście naprzód o długość boku;
- skręt w prawo o wartość kąta;
- powtórzenie tych czynności dostateczną liczbę razy.
Przechodzimy do programu Scratch – przejdź do opcji więcej bloków – utwórz blok – nazwij go wielo – „wejdź” w opcje parametr liczbowy (dwukrotnie wybierz tą opcje) kolejne parametry nazwij bok i kąt.
Co to jest rekurencja?
Rekurencja – odwoływanie się np. funkcji lub definicji do samej siebie.
W logice wnioskowanie rekurencyjne opiera się na założeniu istnienia pewnego stanu początkowego oraz zdania (lub zdań) stanowiącego podstawę wnioskowania (przy czym, aby cały dowód był poprawny, zarówno reguła, jak i stan początkowy muszą być prawdziwe).
źródło: Wikipedia
Jeśli nie zostanie określony warunek końcowy działania rekurencji to ta procedura będzie działała w nieskończoność. W przypadku tańca należy skończyć tańczyć gdy gra muzyka.
Blok, który stożyliśmy wielo nie ma określonego warunku zatrzymania i byłoby nie dobrze gdyby nie czerwony przycisk zatrzymania całego programu – należy unikać takich konstrukcji.
Jak zatrzymać rekurencję?
Należy wstawić warunek zatrzymania. Niech duszek skończy rysowanie gwiazdy po naciśnięciu przycisku myszki. Do bloku należy podpiąć blok jeżeli.
Z rekurencji będziemy korzystać często. Umożliwia on łatwe rozwiązanie trudnych zadań. Pamiętaj, że zawsze należy zatrzymać wykonywanie skryptu.
Zadanie
Narysuj kilka gwiazd z różnymi kątami skrętu. Podaj również kąt 90 stopni – zostanie wówczas narysowany kwadrat – okazuje się, że blok wielo może rysować również wielokąty.
Jak zmienić rekurencję?
Problem?
Jak zmienić wartość parametru w wykonaniu rekurencyjnym bloku wielo niech bok zwiększa się o 10 a kąt maleje o 5 stopni. Co narysuje ten program?
Skoro za pomocą bloku wielo można narysować kwadrat – to można również utworzyć figurę przedstawioną na poniższym rysunku.
Długość rysowanego boku zmienia się- trzeba wprowadzić pewne zmiany w bloku. Utworzysz nowy blok wielospi z parametrami bok i kąt. Blok ten powinien rysować od najkrótszego boku np.: o długości 5. Następny bok narysowany po skręcie będzie o 5 dłuższy od poprzedniego i tak dalej, aż do narysowania najdłuższego boku, który będzie dotykać krawędzi. Są tu trzy charakterystyczne elementy do budowy skryptu rekurencyjnego:
- warunek zakończenia, aż do zetknięcia z krawędzią;
- krok do wykonania, narysowanie boku i wykonanie skrętu o kąt;
- powtarzanie rekurencji „i tak dalej”.
Skąd skrypt będzie wiedział, że ma narysować bok dłuższy od poprzedniego? (Blok rysuje bok, którego wartość podajesz w wywołaniu. Jeśli przy, każdym kolejnym wywołaniu bok ma być dłuższy o 5 od poprzedniego, to należy zwiększyć długość boku w wywołaniu rekurencyjnym.
Zbuduj w Scratchu rekurencyjny blok wielospie z parametrami bok, kąt wybierz na początku parametry wywołania: bok 5, kąt 90. Jeśli chcesz się przyjrzeć ruchom duszka zwolnij jego działanie. (dodaj blok czekaj 0.5 s) To polecenie zatrzyma duszka na 0,5 sekundy.
- Co się stanie jeśli blok czekaj przestawisz na koniec bloku, za wywołanie rekurencyjne? Tym razem duszek rysuje ale ma kłopoty z zakończeniem działania. Czy to możliwe, że blok dodany po wywołaniu rekurencyjnym zostanie zrealizowany.
- Na końcu, za blokiem czekaj, dodaj blok zmień rozmiar o 5. Jak teraz wykonuje się skrypt? Jak powiększył się duszek?
- Wywołuj blok wielospie dla rożnych kątów oglądaj otrzymane rysunki. Często są bardzo ładne.
Przedstaw działanie omawianych skryptów – uruchom opisany program korzystając z opisu na stronie czy w książce.