Съдържание
Тема 7. КОСТЕНУРКА РИСУВА КОСТЕНУРКА, KOЯТО РИСУВА ...

Евгения Сендова и Цветелин Андреев

Тема 7. КОСТЕНУРКА РИСУВА

КОСТЕНУРКА, КОЯТО РИСУВА

КОСТЕНУРКА, КОЯТО РИСУВА

КОСТЕНУРКА, КОЯТО РИСУВА

КОСТЕНУРКА, КОЯТО РИСУВА

(в която ще видите как кулата, която костенурката нарисува в Тема 6, може да се опише като конструкция, която сдържа „себеподобна кула“, но с по-малък размер. Това ще ви позволи да направите блок, който се обръща към себе си (т.нар. рекурсивен блок). Ще разберете как да спрете изпълнението на даден блок, ако са изпълнени известни условия.)

Задача 1

Изпробвайте командата за рисуване на кула от Тема 6 с входове съответно 80, 40 и 20.

Ако се вгледаме внимателно, ще забележим, че една кула се състои от квадрат и от кула с по-малък размер върху него, която се състои от квадрат и от кула с по-малък размер и т.н. Да използваме това наблюдение.

Задача 2

Променете дефиницията на блока  така, че да рисува квадрат и върху него кула с размер на основата, два пъти по-малък от страната на квадрата.

Да изпълним командата . Наистина се получава кула, каквато очаквахме, но вместо да спре, костенурката се върти на едно място на върха на кулата.

Фиг. 1 Кула от квадрат и по-малка кула, която е квадрат и още-по-малка кула, която е …

Да помислим заедно какво всъщност се случва, когато изпълним горната команда:

1.        извиква  и .

2.        извиква  и .

3.        извиква  и т.н. и т.н., докато на костенурката не ѝ се завърти свят от чертане на все по-малки квадрати с все по-малки кули върху тях.

За да спрем това безкрайно въртене, трябва да прекратим изпълнението при някакво условие. Например можем да определим минимален размер на страната на квадрата.

Задача 3

Редактирайте дефиницията на блока  така, че да спре изпълнението си, ако страната на текущия квадрат е по-малка от 10 стъпки.

Упътване:

Да видим как можем да се преведе условието на блоков език.

За целта ще ви трябва блока за условно изпълнение на команди . Ще го намерите в категорията команди Control:

1.       Поставете го в началото на дефиниция на блока за чертане на кула, непосредствено след шапката.

2.       За вход използвайте блока за сравнение (по-малко)  от категория Operators. С негова помощ определете условието, при което блокът ще спре изпълнението си. Блокове с тази форма са логически операции (предикати), които връщат една от двете стойности – вярно или невярно.

3.       В тялото на скрипта (командите под шапката) поставете спирачка – команда за спиране на изпълнението на блока с име tower: .

Вие сте на ход!

Задача 4

Начертайте следния вариант на кулата по подобие на кулата в Пиза.

Упътване:

Завъртете костенурката на няколко градуса, преди да начертае квадрат.

Задача 5

Редактирайте дефиницията на блока  така, че да спира изпълнението си, след като е начертала определен брой квадрати.

Упътване:

1.       Добавете още един вход (с име например квадрати на английски ), който задава броя на квадратите на кулата.

2.       Спрете изпълнението на командата, ако броят квадрати е равен на 0 .

3.       Изпробвайте новата команда с размер на основата 80 и брой на квадратите 6: .

Развихрете се

Задача 6

Редактирайте дефиницията на блока от Задача 5  така, че страната да следващия квадрат да е с 10 стъпки по-малка (вместо 2 пъти по-малка). Изпробвайте командата за да начертаете кула с основа 85 стъпки и височина 6 квадрата: .

Упътване:

Заменете оператора  с .

Задача 7

Използвайте командата от Задача 6 за да начертаете кула с основа 25 стъпки и височина 6 квадрата: .

Получихте ли това, което очаквахте? Обяснете действието на вашия скрипт.

Въпреки, че в Задача 6 командата изпълни очакваното, се оказва, че не винаги работи така. Затова е добре да проверяваме поведението на командите си в различни случаи. Защото (както гласи една пословица от средите на програмистите) Ако една програма тръгне от първия път, значи в нея със сигурност има грешка.

Задача 8

Начертайте следната фигура:

Упътване:

Ако се вгледаме внимателно, ще забележим, че фигурата прилича на прозорец, в чиито горен ляв квадрат е нарисуван подобен прозорец, но със страна, 2 пъти по-къса от страната на предишния.

1.       Използвайте за пример скрипта за чертане на прозорец от 4 квадрата от Тема 4, за да създадете нов блок (има много начини за чертане на такъв прозорец, но този с ротация около центъра му е най-елегантния).

2.       Кръстете го подходящо. Например  (нов прозорец).

3.       Променете скрипта така, че вместо да начертаете обикновен четвърти квадрат, да начертаете прозорец с рекурсивно обръщение към блока .

4.       Обърнете внимание на положението и посоката на костенурката след начертаването на третия квадрат. Преди да продължите, помислете къде трябва да се намира тя, за да начертае прозорец на мястото на четвъртия квадрат.

Теми за размисъл

Рекурсия

Когато с даден блок описваме структура/дейност, която съдържа себеподобна структура/дейност, естествено е да включим в описанието на този блок обръщение към себе си, т.е. към същия блок, евентуално с други входове. Това явление се нарича рекурсия, a самият блок – рекурсивен. В примерите досега (например при ) рекурсивното обръщение беше на опашката на скрипта, затова понякога този специален тип рекурсия се нарича опашата рекурсия.

Рекурсията е проста за описание, но много мощна програмистка техника. Всъщност най-големият майстор на рекурсията е природата. Потърсете в градината или гората растения в потвърждение на горната мисъл, а след това проучете дали вашите находки вече са сред илюстрираните в интернет рекурсивни обекти в природата.

Упътване:

Потърсете в любимия си браузер например с ключова фраза: рекурсия в природата (recursion in nature)

Рекурсията намира място и в литературата. Следващата приказка използва себе си за свое продължение:

Имало едно време едно мече.

То си имало джобче.

В джобчето му имало писъмце.

В писъмцето пишело:

 „Имало едно време едно мече.

 То си имало джобче.

  В джобчето му имало писъмце.

  В писъмцето пишело:

  „Имало едно време…“

Редактирайте приказката, като смените героя с ученик от вашия клас.