Повторение

Вече споменахме, че повтарянето на една или повече команди (блокове) е важна концепция в програмирането. Когато някои от командите действат няколко пъти в програма, казваме, че програмата съдържа цикъл. Използвали сме тази концепция вече няколко пъти.

В Скрач имаме 3 вида блокове, които повтарят команди:

Ще вкараме блоковете, които трябва да повторим, в един от тези блокове.

Блокът, който повтаря команди конкретен брой пъти

_images/Repeat101.png

Използвахме блока, който повтаря команди конкретен брой пъти, в проекта Ферма (можеш да намериш повече информация в урока Външен вид).

Спрайтът пиле в програмата симулираше движението кълване чрез сменянето на костюми а, б и в 10 пъти. След тази симулация пилето увеличи размера си с 10. Нашата цел беше да увеличим размера на спрайта пиле с 50, така че повторихме част от кода, който увеличи размера на спрайта 5 пъти. За да постигнем желаното поведение, използвахме блоковете Repeat10a и Repeat5.

Във фигурата отдолу свихме частта от текста, свързан с повторението на командите, и направихме същата програма, но този път без да използваме блоковете за повторение. Текстът, който имахме, беше наистина дълъг, така че за яснота трябваше да го разделим на 5 колони.

_images/PileBezRepeat.png

Uradi Създай проекта Ферма без да използваш блоковете за повторение. Сравни твоя код с нашия. Вярваме, че можеш да видиш, че натрупването на идентични групи от блокове прави програмата по-дълга, по-трудна за разбиране и подобряване.

Блокът, който повтаря команди безкраен брой пъти

_images/RepeatF.png

Този блок за повтаряне на команди действа безкраен брой пъти. Действието на този блок никога не спира от само себе си. Трябва да го спрем чрез кликване на бутон, който спира програмата (червеният бутон до зеления флаг), или чрез използването на един от следните блокове StopAll / StopTS / StopOS, от категория Control.

Използвахме блока, който повтаря команди безкраен брой пъти, в проекта Котката гони мишката (можеш да намериш повече информация в урока Движение.

    Q-8: Анализирай външния вид на блоковете за повтаряне на команди. Можеш да видиш, че блокът, който повтаря команди безкраен брой пъти, няма опцията да се свързва с други блокове, тоест не можеш да добавиш други блокове към него. Защо?

  • Новите блокове могат да бъдат вмъкнати в самия блок, така че няма нужда да продължавате скрипта.
  • Опцията за вмъкване на нови блокове в блока |RepeatF| не предоставя възможност за подреждане на скриптове, които никога няма да бъдат повторени, просто добавя команди, които ще се повтарят безкрайно много пъти.
  • Това е грешка в Scratch. Блокът за безкрайно повторение трябва да има опция за продължаване на скрипта.
  • Колко вероятно е един от най-често използваните блокове в Scratch да не е конструиран правилно? Предлагаме ви да помислите отново върху въпроса и да дадете нов отговор.
  • Добавянето на блоковете е безсмислено, защото те никога не биха се изпълнявали.
  • Браво, добра работа!

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

_images/RepeatU.png

Този блок за повторение на команди действа, докато определено състояние не е изпълнено. Текстовете в този блок се изпълняват на основата на тест, който определя дали състоянието, поставено в блока е вярно или не. Използваме този блок, когато не знаем колко пъти трябва да повторим команди в блока за повторение и, следователно, искаме те да действат, докато дадено състояние не е изпълнено.

    Q-9: Искаш да създадеш програма, където спрайтът (оръдие с град) изстрелва ракети по носещи градушката облаци, докато неговото ниво на енергия спадне под определена стойност. Кой блок за повтарящи се команди ще използваш?

  • Блокът, който повтаря команди, определен брой пъти.
  • Ако изберете този блок, изстрелването на ракети няма нищо общо с енергийното ниво на вашия спрайт, нали?
  • Блокът, който повтаря команди безкрайно много пъти.
  • Ако изберете този блок, изстрелването на ракети няма нищо общо с енергийното ниво на вашия спрайт, нали?
  • Блокът, който повтаря команди, докато не бъде изпълнено конкретно условие.
  • Браво! Броят на повторенията зависи от изпълнението на условията. В момента, в който енергийното ниво на вашия спрайт падне под определена стойност, изстрелването на ракети ще спре.

Ще демонстрираме как блок, който повтаря команди, докато определено състояние не е изпълнено работи – ще създадем програма, която функционира като таймер, тоест, отброява секундите от въведената стойност до нула.

За тази програма ще създадем променливата VSec, която ще съхранява стойността на оставащите секунди, докато таймерът отброява. Ще поискаме от потребителя да въведе определен брой секунди. Тогава ще започнем отброяването. След като въведеното време измине, ще чуем звуков сигнал.

Фигурата отдолу съдържа нашето предложение за кода на програмата с коментари, които служат за обяснение. Програмистите смятат за полезно оставянето на коментари по текстовете, с които обясняват какво правят дадени блокове. Коментирането прави по-лесно други програмисти да разберат и да подобрят програмите, които създаваме. Можем да добавим коментар чрез кликване с десния бутон на текста и чрез избиране на опцията Добави коментар.

_images/Tajmer.png

Uradi Програмата Таймер може да бъде намерена на линка https://scratch.mit.edu/projects/326420353. Подобри я, като добавиш звук на тиктакане на часовник, който ще се чува, докато таймерът отброява.