Циклуси

У претходном поглављу већ смо користили наредбе понављања у примерима за цртање линија и геометријских фигура, како бисмо са мање писања постигли да ликови који се крећу са спуштеном оловком нацртају оно што смо желели. На пример, уместо да испишемо 400 наредби којима бисмо нацртали тачкасту линију дужине 400 пиксела, ми смо исписали свега пет: четири које понављају узорак и пету која каже колико пута треба поновити узорак.

У овом поглављу наредбе понављања ћемо повезати са наредбама кретања и изгледа како бисмо направили различите анимације. Направићемо класификацују блокова који представљају наредбе у Скречу, а упознаћемо и функцијске блокове чија је намена да чувају вредности.

Уз то ћемо упознати наредбу која омогућава уношење улазних података и блокове који чувају вредности логичких израза.

Најједноставнији пример наредби понављања је наредба за опис тзв. “бесконачног циклуса”. Наредбе које се понављају чине тело циклуса. Њихово извршавање може се зауставити само прекидањем програма.

_images/ponavljaj1.png

На пример, ако желимо да постигнемо илузију да мачак хода, балерина игра или лептир лети, довољно је да им придружите скрипту у којој се у бесконачном циклусу понављају наредбе sledeci_kostim и cekaj.

Разуме се, лик треба да има бар два костима и чекање треба да буде кратко, на пример 2 десета дела секунде (0.2). Наредба чекања између приказа различитих костима лика неопходна је да бисмо приметили промене у изгледу. Наиме, људско око није у стању да региструје тако брзе промене као оне које компјутер обавља. Зато наредбама чекања “кочимо” приказ следећег изгледа, док наше око не прихвати претходну слику.

У примерима цртања из претходног поглавља користили смо тзв. “бројачке циклусе”. То су понављања код којих се унапред зна колико пута ће се извршити тело циклуса.

_images/ponovi_n.png

Бројачки циклуси коришћени су и у примерима Исцртавање_степеница, Корњача_црта и Цртање_круга.

У Скречу постоји наредба за опис циклуса чији број понављања није унапред познат, већ зависи од тога да ли је испуњен услов за излазак из циклуса.

_images/ponovi_uslov.png

Услов да ли ће се прескочити наредбе тела циклуса (услов за излазак) проверава се на почетку циклуса, па се може десити да се циклус не изврши ни ако је тај услов испуњен при првој провери. Такође се може десити да се циклус извршава бесконачно ако се услов за излазак из циклуса никада не испуни.

prouci Проучи следеће примере пројеката

Пример 1 - Пројекат Шетња

У овом пројекту лику мачка ћемо придружити скрипту која анимира његово кретање бесконачним понављањем промене његових костима.

_images/animacija1.png

Уз промену костима додаћемо и наредбе кретања тако да непрестано иде од једног до другог краја екрана. То можемо постићи уметањем наредбе idi_koraka у блок бесконачног понављања. Када дође до десног краја позорнице мачак треба да се окрене и иде налево. То постижемо наредбом ako_si. Скрипту која описује ово кретање, као и она која омогућава непрестано мењање костима покреће исти догађај - клик на зелену заставицу.

_images/animacija2.png

Покрени пројект кликом на зелену заставицу и провери шта се дешава.

Оно што смета је што приликом кретања улево мачак иде наглавчке. То можемо поправити на два начина:

  • постављањем i_okretanje лево-десно у информацијама о текућем лику,
  • укључивањем наредбе nacin_okretanja у скрипту лика.

Ми ћемо изабрати други начин и поставићемо блок nacin_okretanja непосредно иза блока клик на зелену заставицу, пре наредбе бесконачног понављања.

Остаје још да размотримо да ли је неопходно да имамо две скрипте које се паралелно извршавају када се кликне на зелену заставицу или да све акције поставимо у једну бесконачну петљу.

Ако уместо претходне две скрипте мачку придружимо следећу примећујемо да се мачак спорије креће, што у нашем примеру не смета.

_images/animacija3.png

Пример 2 - Пројекат Остављам свој печат

У овом пројекту користићемо бројачки циклус у оквиру кога ће лик ићи 50 корака, окренути се за 30 степени и затим оставити свој печат. У Скречу наиме, поред цртања оловком, постоји још један начин за цртање – остављањем печата. Томе служи наредба pecat.

Тело циклуса ћемо поновити 12 пута, тако да ће лик обићи 12*30=360 степени, односно пун круг.

Започни нови пројекат и за лик који црта изабери лик бубамаре Ladybug 1 из библиотеке ликова. Придружи јој скрипту са следеће слике.

_images/venac.png

Експериментиши са смањивањем лика и повећањем броја печата који оставља, променом лика који оставља печат и променом правца кретања.

У следећем пројекту поред бесконачних и бројачких, користићемо и циклусе чији број
извршавања није унапред познат, већ зависи од тога да ли је услов за излазак из
циклуса испуњен.

Пример 3 - Пројекат Ловац на духове

Сценарио пројекта

У овом пројекту учествују четири лика - једна вештица и три духа. Вештица крстари својом уклетом шумом летећи при тлу лево-десно између рубова позорнице и не дозвољава никоме да туда пролази. То не знају три духа који лебде и окрећу се при врху дрвећа. Када спази неког од њих, вештица полети навише и уништи духа, па наставља своје крстарење све док не уништи сва три духа.

Понашање вештице

После постављања почетних вредности вештица 3 пута понавља следеће:

  • лети лево-десно све док се не притисне дирка размак,
  • затим врисне па полети навише 150 корака тако што 10 пута понови померање навише 15 корака,
  • сачека 0.5 секунди и врати се на почетну позицију.

Понављање кретања лево-десно све док се не притисне дирка размак остварује се следећом наредбом за опис циклуса.

_images/vestica1.png

У овој наредби услов понављања поставља се у поље за услов. Да бисмо разјаснили шта тачно може да се постави у поље за услов наредбе, осврнимо се на типове блокова који се користе у Скречу.

_images/blokovi.png

Командни и управљачки блокови одговарају наредбама програмског језика. Неки од њих имају поља у која се може поставити вредност - константа или променљива.

Функцијски блокови враћају вредности. Они не могу да стоје сами у програму, већ се умећу у поља наредби које примају вредности.

Вредности могу бити различитих типова, на пример бројне, логичке, стринг …

Засад нас интересују логичке вредности које се могу добити као резултати логичких израза које у Скречу репрезентује шестоугаони функцијски блок. Логички изрази могу имати само 2 вредности: тачно (true) и нетачно (false).

_images/sta_gde_ide.png

У поље блока за понављање са условом поставља се логичка вредност. Све док њена вредност није “тачно” понављају се наредбе циклуса. Кад добије вредност тачно остварен је услов за излазак из циклуса и извршава се наредба која следи за наредбом понављања.

У нашем примеру услов за излазак из циклуса је да се притисне дирка размак.

Комплетна скрипта која описује понашање вештице приказана је на следећој слици.

_images/vestica2.png

Понашање духова

Сва три духа понашају се исто. Једино се разликују по месту на коме се налазе и брзини окретања. То је и разумљиво јер смо прво програмирали понашање једног, а онда га умножили.

Напомена. У Скречу је могуће умножити (клонирати) лик и програмским путем. У ту сврху се користи наредба napravi_umnozak.

Њихово понашање описују следеће две скрипте.

_images/duhovi.png

Видимо да се у једној од њих у оквиру бесконачног циклуса појављује и циклус који се понавља све док га не додирне вештица, што је услов да се пређе на наредбе које сакривају лик.


Унапређење пројекта Ловац на духове

Једно унапређење пројекта је да вештици уместо циклуса који се понавља 3 пута и тако омогућава да улови 3 духа поставимо бесконачни циклус, тако да може да лови духове све док то играчу не досади. Међутим, то подразумева да се у игри појављује колико год желимо духова. То можемо постићи тако што духа кога је додирнула вештица и који је нестао поново прикажемо. Ако пре тог још на случајан начин изаберемо позицију на којој ће се дух поново појавити, лов ће постати још изазовнији.

Разуме се, играчи би волели да имју евиденцију колико је духова уловила њихова вештица, да добијају награде када освоје одређени број поена и слично, али таква унапређења можемо уводити тек када научимо како се користе променљиве.


У примеру 2 претходног поглавља показали смо како се цртају правилне геометријске фигуре.
Изменићемо тај пројекат тако да црта једну од њих коју зада  корисник улазним податком.

Пример 4 - Пројекат Геометријске_фигуре2

У овом пројекту се, као и у пројекту Геометријске фигуре 1, по клику на зелену заставицу постављају праметри цртања. Затим се од корисника тражи да унесе број страница многугла који ђе се цртати.

Наредба за уношење податка pitaj_cekaj налази се у групи Осећаји

_images/osecaji1.png

По извршењу ове наредбе Скреч памти шта је корисник унео у простору који се зове odgovor.

Очекује се да корисник унесе број између 3 и 6 јер црта орнаменте састављене од троуглова, четвороуглова, петоуглова или шестоуглова. Међутим, ако корисник унесе број изван овог опсега, програм неће радити како треба, па то треба спречити.

Један од начина да се контролишу улазни подаци је да се понавља захтев кориснику све док не унесе број из задатог интервала.

_images/ulazna_provera.png

Пошто се добије коректан улазни податак, он се користи за израчунавање броја понављања и угла окретања, тако да сва четири многоугла можемо да цртамо истим наредбама.

_images/geometrijske_figure2.png
И за следећи пројекат користићемо пример 2 из претходног пројекта. У њему ћемо показати
како концентричном композицијом бројачких циклуса (коришћењем циклуса у циклусу) можемо
да цртамо ефектне слике које се добијају понављањем узорка. Узорак можемо понављати после
извесног броја корака - тако добијамо тзв. бордуре - украсне ивице.
Узорке можемо понављати и после заокрета за неки угао или после комбинације оба померања.

Пример 5 - Пројекат Орнаменти

Видели смо да правилан петоугао можемо нацртати следећим низом наредби.

_images/ornament1.png

Ако овај бројачки циклус поновимо више пута, добићемо орнамент - сложенију слику састављену од петоуглова. На пример, ако нацртамо 20 оваквих петоуглова крећући се од левог до десног руба позорнице, добићемо следећу бордуру.

_images/ornament2.png

Ако пак понављамо цртање петоуглова мењајући усмерење лика пред цртање сваког од њих тако да он обрне цео круг, добићемо следећи орнамент.

_images/ornament3.png

Ако између свака два цртања лик и промени угао и иде по 10 корака, добијамо нешто измењен орнамент.

_images/ornament4.png

А ако поновимо други орнамент 4 пута идићи од левог ка десном рубу екрана, добијамо следећу слику.

_images/ornament5.png

Пројекат омогућава да се црта сваки од приказаних орнамената тако што се кликне на једну од дирки 1 - 4 тастатуре. Осим ове 4 скрипте постоји и скрипта коју покреће клик на зелену заставицу и скрипта која се покреће поруком упутство. Поруку упутство разглашава свака скрипта на крају свог рада. Кад лик прими ову поруку приказује се при врху екрана и даје упутство како се покреће цртање орнамената.

pitaj Одговори на следећа питања

Питање 1

    Извршавањем којег од бесконачних циклуса се постиже да лик иде лево-десно и гледа удесно, ако су претходно извршене наредбе idi_na, usmeri и nacin_okretanja? (Изабери све тачне одговоре).

    _images/kretanje1.png
  • (A)
  • Овакво мењање координате х доводи до померања лика лево-десно.
  • (B)
  • Променом координате у постиже се да лик иде горе-доле.
  • (C)
  • Лик стално иде лево-десно.
  • (D)
  • Променом усмерења постиже се да лик гледа лево-десно.

Питање 2

    Којим од следећих бесконачних циклуса се постиже да лик стално смењује два положаја: ногама надоле и ногама нагоре, ако су претходно извршене наредбе idi_na, usmeri и nacin_okretanja2? (Изабери све тачне одговоре).

    _images/kretanje2.png
  • (A)
  • Лик се окреће у круг.
  • (B)
  • Овакво мењање координате у доводи до померања лика горе-доле.
  • (C)
  • Смењују се положаји ногама налево и ногама надесно.
  • (D)
  • Кад је начин окретања на све стране, извршавање овог блок наредби доводи управо до описаног понашања.

Питање 3

    Шта се постиже извршавањем следећег бесконачног циклуса, ако су претходно извршене наредбе idi_na, usmeri и nacin_okretanja?

    _images/kretanje3.png
  • (A) лик се окреће лево-десно
  • (B) лик иде напред-назад
  • Нема наредбе која мења х координату.
  • (C) лик иде горе-доле
  • Нема наредбе која мења у координату.
  • (D) лик се врти у круг
  • Начин окретања лево-десно то не дозвољава.

Питање 4

    Шта се постиже извршавањем следећег бесконачног циклуса, ако су претходно извршене наредбе idi_na, usmeri и nacin_okretanja2?

    _images/kretanje4.png
  • (A) лик се окреће лево-десно
  • У циклусу је и наредба иди 30 корака.
  • (B) лик иде напред-назад
  • У циклусу је и наредба окрет удесно.
  • (C) лик иде у круг
  • (D) лик се врти у круг
  • У циклусу је и наредба иди 30 корака.

Питање 5

    Којим од бројачких циклуса се постиже да лик направи 80 корака? (Изабери све тачне одговоре).

    _images/for01.png
  • (A)
  • Лик прави 5 * 8 = 40 корака.
  • (B)
  • Лик прави 8 * 10 корака.
  • (C)
  • Лик прави 10 * (5 + 3) корака.
  • (D)
  • Лик прави 5 2 8 корака.

Питање 6

_images/repeat1.png

    Шта ће изговорити лик ако на питање Како се зовеш корисник одговори КРАЈ?
  • (A) Здраво КРАЈ
  • Скреч у провери не разликује велика и мала слова, па је услов за излазак из циклуса испуњен.
  • (B) Како се зовеш
  • То је улазна, а не излазна порука.
  • (C) Довиђења

Питање 7

    Извршењем којег од низова наредби ће лик изговорити Здраво ако корисник унесе вредност 0?

    _images/repeat2.png
  • (A) A
  • Одмах је испуњен услов за излазак из циклуса.
  • (B) B
  • То је услов да се у овом низу наредби уђе у циклус.
  • (C) оба
  • Оно што је услов за излазак из циклуса у (А) је услов за улазак у понављање у (В).
  • (D) ниједног
  • Низ (А) омогућава да лик изговори Здраво под наведеним условима.

    Колико пута ће се извршити тело циклуса (А), ако корисник на питања уноси одговоре следећим редом: 1, 2, 3, 0.
  • (A) ниједном
  • За прва 3 одговора није испуњен услов за излазак из циклуса.
  • (B) 2 пута
  • И за број 3 није испуњен услов за излазак из циклуса.
  • (C) 3 пута
  • (D) 4 пута
  • Када се оствари услов за излазак из циклуса не извршавају се наредбе тела циклуса.

Питање 8

_images/repeat4.png

    Којим словом је обележен део програма који ће извршити исту акцију као yоквирен низ наредби?
  • (A)
  • (B)
  • Услов за излазак из циклуса је супротан услову у уоквиреном низу наредби.
  • (C)
  • На одговоре да и не оба низа наредби реагују исто, али различито за ма који трећи одговор (нпр. можда).

Питање 9

_images/repeat5.png

    Којим словом је обележен услов који ће омогућити да улазна провера податка буде коректна?
  • (A)
  • (B)
  • Нпр. прихватиће 7 као коректан улаз.
  • (C)
  • Нпр. неће прихватити 3 као коректан улаз.
  • (D)
  • Нпр. неће прихватити 3 као коректан улаз.

pokusaj Покушај

Вежба 1

Отворено подебљавање. Креирај пројекат који црта линију од левог до десног руба позорнице чија дебљина расте од 1 до 240 пиксела.

_images/debljina1.png

Упутство:

Слика се добија кретањем скривеног лика почев од позиције (-240,0). Свака 2 корака треба повећавати дебљину оловке за 1. Обезбеди да се кликом на зелену заставицу обрише претходни цртеж.

Вежба 2

Затворено подебљавање. Креирај пројекат који црта кружну линију чија се дебљина повећава после сваких 5 корака.

_images/debljina2.png

Упутство:

Скривени лик који црта на почетку налази на позицији (-50,50) и усмерен је надесно. Почетна вредност дебљину оловке је 1. У циклусу који се понавља 110 пута лик треба да пређе 5 корака, окрене се 3 степена удесно и повећа дебљину оловке за 1. Обезбеди да се кликом на зелену заставицу обрише претходни цртеж.

Вежба 3

Отворена огрлица. Креирај пројекат који приказује низ кругова различите боје и величине почев од левог краја позорнице.

_images/boja1.png

Упутство:

Слика се добија спуштањем оловке различитих боја, дебљине 80, коју држи сакривен лик који се на почетку налази на позицији (-200,0). У циклусу који се понавља 5 пута лик треба да иде 80 корака са подигнутом оловком, повећава број боје оловке за 30, па је спусти. Почетна вредност за боју је 0. Обезбеди да се кликом на зелену заставицу обрише претходни цртеж.

Вежба 4

Затворена огрлица. Креирај пројекат који црта затворен низ од 12 кругова различите боје дебљине 50.

_images/boja2.png

Упутство:

Слика се добија спуштањем оловке различитих боја, дебљине 50, коју држи сакривен лик који се на почетку налази на позицији (-50,50). У циклусу који се понавља 12 пута лик треба да иде 50 корака са подигнутом оловком, окрене се за 30 степени и повећава број боје оловке за 15, којом затим остави траг. Почетна вредност за боју је 0. Обезбеди да се кликом на зелену заставицу обрише претходни цртеж.

Вежба 5

Низ кругова. Креирај пројекат који приказује низ кругова различите боје и величине почев од левог краја позорнице.

_images/krugovi1.png

Упутство:

Слика се добија спуштањем оловке различитих дебљина и различитих боја коју држи сакривен лик који се на почетку налази на позицији (-200,0). Почетне вредности за боју су 0, а за дебљину 80. У циклусу који се понавља 5 пута треба повећавати број боје оловке за 30 и смањивати њену дебљину за 10. Лик треба да иде по 80 корака удесно, разуме се са подигнутом оловком. У петљи треба да се налази и наредба чекај да боље испратиш шта се дешава. Обезбеди да се кликом на зелену заставицу обрише претходни цртеж.

Вежба 6

Концентрични кругови. Креирај пројекат који приказује низ концентричних кругова различите боје у центру позорнице.

_images/krugovi2.png

Упутство:

Слика се добија спуштањем оловке различитих дебљина и различитих боја коју држи сакривен лик који се налази у центру екрана. У циклусу који се понавља 8 пута треба повећавати број боје оловке за 25 и смањивати њену дебљину за 30. Почетне вредности за боју су 0 (црвена), а за дебљину 240 (најдебља). У петљи треба да се налази и наредба чекај да боље испратиш шта се дешава. После сваке промене вредности атрибута оловке треба је спустити. Обезбеди да се кликом на зелену заставицу обрише претходни цртеж.

bug Исправи грешке

Грешка 1

Питање:Ученик је желео да унапреди пројекат Ловац на духове. Духовима је додао следећу скрипту, али, духови су се поново појавили само једанпут. У чему је грешка?
_images/duhovi2.png

Одговор:

Овај део скрипте треба уметнути у скрипту духа после блока понављај док не додирне вештицу у оквиру бесконачног циклуса. Није неопходно користити наредбу ако онда, јер ће се до ових блокова доћи управо у том случају. Овако постављено поновно појављивање додирнутог духа може се десити само после првог додира духа и вештице.

Грешка 2

Питање:Ученик је желео да унапреди пројекат Ловац на духове додавањем музике. Изабрао је звук dance slow mo који је поставио у бесконачни циклус. Желео је да се врисак вештице чује у случајним временским тренуцима, па је ова два звука искомбиновао на следећи начин. Али уместо вриска за време музике, прво се чула музика, па онда врисак. У чему је грешка?
_images/greska5_3.png

Одговор:

Требало је направити две скрипте које се извршавају паралелно.

_images/resenje2.png

Грешка 3

Питање:Ученик је желео да се његов лик корача између леве и десне ивице позорнице. Зато је у бесконачан циклус унео стално мењање костима и корачање по 10 корака док не дође до руба, када се окреће. Међутим, није му се свидело што лик ка левој ивици позорнице корача наглавачке. Шта треба да уради да поправи ову грешку?
_images/greska5_1.png

Одговор:

То може да поправити на два начина:

  • постављањем i_okretanje лево-десно у информацијама о текућем лику,
  • укључивањем наредбе nacin_okretanja у скрипту лика.

Грешка 4

Питање:Ученик је желео да његов лик лептир, који има два костима - са подигнутим и спуштеним крилима, стално клизи машући крилима између тачака чије се координате бирају на случајан начин. Али његов програм то није омогућио. Лептир је од једне до друге тачке клизио или са спуштеним или са подигнутим крилима. У чему је грешка?
_images/greska5_4.png

Одговор:

Требало је направити две скрипте које се извршавају паралелно.

_images/resenje5_4.png

Грешка 5

Питање:Ученик је желео да његов лик Cassy Dance игра уз музику dance around која траје око 15 секунди. Зато је промену костима са задршком од 0.3 секунди ставио у циклус који се понавља 50 пута. Међутим, прво се чула музика, а девојка је почела да игра тек пошто се музика завршила. У чему је грешка?
_images/greska5_5.png

Одговор:

Требало је уместо reprodukuj_kraj ставити reprodukuj_zvuk.

knjiga Шта смо научили

Појмови: циклус - бесконачни, бројачки, са условом; тело циклуса, блокови - командни, функцијски, почетни, управљачки; логички израз.

Наредбе: upravljanje - ponavljaj_dok_ne; osecaji - pitaj_cekaj;

olovka - pecat; zvuk - reprodukuj_zvuk, reprodukuj_kraj;

Функцијски блокови: odgovor, dirka_pritisnuta, dodiruje,

manje, jednako, vece, and, or, not.

project Уради неки од следећих пројеката

Пројекат 1 - Гладна ајкула

Направи пројекат сличан примеру Ловац на духове у коме ће главни лик - Ајкула ловити рибе. Све ликове (ајкулу и 3 рибе) и позадину учитај из библиотека ликова и позадина. Ајкула (Shark) има три костима, па њена реакција када је притиском на дирку размак пошаљеш да поједе плен, може да буде ефектнија од реакције вештице (која је само вриштала када би се устремила на духа). Нека се у пројекту бесконачно понавља крстарење ајкуле лево десно, а рибе које су поједене нека се поново појављују после 3-5 секунди. Различито трајање паузе између два појављивања риба и различито место на коме ће се појављивати обезбеди коришћењем операције случајан број.

Пројекат 2 - Троугаони орнаменти

Направи пројекат по узору на пример Орнаменти у коме се притиском на дирке тастатуре цртају различити орнаменти састављени од троуглова.

Пројекат 3 - Ротирајући квадрати

Направи пројекат по узору на пример Орнаменти у коме се притиском на дирке тастатуре цртају различити орнаменти састављени од квадрата.

Пројекат 4 - Шестоугаони орнаменти

Направи пројекат по узору на пример Орнаменти у коме се притиском на дирке тастатуре цртају различити орнаменти састављени од шестоуглова.

Пројекат 5 - Кругови

Направи пројекат по узору на пример Орнаменти у коме се притиском на дирке тастатуре цртају различити орнаменти састављени од кругова различитих величина.