23.1. Гранање¶

Напиши програм који садржи логичку променљиву која се зове kvadrat постављену на True или False. У зависности од њене вредности у центру екрана се црта квадрат (за вредност True) а за вредност False у центру екрана се црта круг.
Комбиновање гранања и петље
Наизменично смењивање боја и облика (комбиновање гранања и петље)¶
У многим ситуацијама су цртежи такви да се наизменично смењују два правила на основу којих се црта. На пример, ако желимо да нацртамо „црта-тачка“ линију, тада у непарним корацима цртамо црте, а у парним тачке. Размотрићемо неколико примера цртежа у којима се јавља овај облик правилности и приказаћемо неке од могућности да се такви цртежи нацртају.
Жуто-зелени квадрати¶

Напиши програм који ширину прозора попуњава помоћу 10 квадратића, пет жутих и пет зелених, који се наизменично ређају почевши од жутог.
Пошто знамо укупан број квадрата и ширину целог прозора дуж којег су
они распоређени, ширину једног квадрата можемо једноставно израчунати
дељењем укупне ширине бројем квадрата. Квадрате цртамо у петљи. Ако
вредност бројачке променљиве почиње од 0, тада се координата \(x\) левог
горњег темена i-тог квадрата може добити множењем ширине квадрата
бројем \(i\) (заиста, ако је ширина квадрата \(a\), тада квадрати
редом почињу на координатама \(0, a, 2 a, \ldots, (n-1)\cdot
a\). Координата \(y\) горњег левог темена сваког квадрата се добија
одузимањем половине висине квадрата од половине висине прозора. На тај начин се
центри квадрата налазе на средини висине прозора. На крају, боју квадрата
можемо одредити у зависности од парности редног броја квадрата који се
црта. Када је бројач у петљи i
паран (када му је вредност 0, 2, 4,
6 или 8, што можемо израчунати поређењем остатка при дељењу i % 2
са нулом) тада квадрат бојимо у жуто, а када је непаран (када му је
вредност 1, 3, 5, 7 или 9), тада квадрат бојимо у зелено.
Још један начин да се наизменично мењају боје јесте да се уведе логичка
променљива којом се означава да ли цртамо жути квадрат. У почетку је
постављамо на вредност тачно, у сваком кораку петље јој мењамо
истинитосну вредност (тако што је негирамо оператором not
), а у
телу петље боју одређујемо на основу те вредности, гранањем.
Приметићете да смо наредбом гранања (наредби if-else) само поставили боју, а да смо сам квадрат цртали независно, након гранања. Наиме, да смо у наредби гранања цртали квадрат, непотребно бисмо понављали кôд и тиме начинили програм тежим за одржавање.
Могуће је још једно, суштински другачије решење овог задатка, које се
не заснива на гранању, већ на листи у којој се памте боје које се
циклично смењују. Редни број квадрата је одређен бројачком променљивом
i
, која редом узима вредности 0, 1, 2, 3, 4 … Са друге стране
позиција боје у листи редом треба да узима вредности 0, 1, 0, 1, 0
… Можемо приметити да се та позиција може добити од вредности i
тако што се израчуна остатак при дељењу са 2. Ово се лако може
уопштити и на више од две боје. Када би се наизменично смењивале три
боје, тада би позиције требало да узимају вредности 0, 1, 2, 0, 1, 2
… и добијале би се израчунавањем остатка при дељењу са 3. У општем
случају, потребно је израчунати остатак при дељењу дужином листе. На
основу ове дискусије покушај да допуниш наредни код.
Патент затварач¶

Напиши програм који исцртава шару која подсећа на патент-затварач (рајсфершлус, цибзар).
Покушај и овај задатак да решиш коришћењем листе, без гранања (овај пут ћеш у листу сместити две позиције почетка линије).