Садржај
1. Робот Карел - линијски програми и бројачка петља
2. Робот Карел - условна петља и гранање
3. Робот Карел - задаци за вежбање
4. Корњача графика - линијски програми и петље
5. Корњача графика - гранање, угнежђене петље, функције, торке и листе
6. Корњача графика - задаци за вежбање
9. Израчунавања - коришћење и дефинисање функција
10. Израчунавања - задаци за вежбање
13. Контрола тока - вежбање
17. Програмирање 2Д графике - Увод у Pygame

23.2. Угнежђене петље

Плесни подијум

Плесни подијуми седамдесетих година 20. века су били издељени на квадратне плоче које су могле да светле у различитим бојама. Прикажи један такав подијум (гледан одозго) тако што ћеш поделити прозор на \(n \times n\) квадрата и сваки квадрат обојити у насумичну боју.

../_images/podijum.jpg

Претпоставићемо да на располагању имамо функцију која на насумичан начин одабира боју (њу је веома једноставно испрограмирати коришћењем функције random.randint). Угнежђеним петљама ћемо набрајати све парове \((0, 0)\), \((0, 1)\), …, \((0, n-1)\), \((1, 0)\), …, \((1, n-1)\), …, \((n-1, 0)\), …, \((0, n-1)\). Задатак се онда своди на то да одредимо горње лево теме квадрата који се налази у врсти са редним бројем \(i\) и колони са редним бројем \(j\). Пошто се лево од тог квадрата налази тачно \(j\) квадрата, док се изнад њега налази тачно \(i\) квадрата, координате његовог горњег левог темена су \((j*a, i*a)\). На основу овога лако можеш допунити наредни код.

Сивкасти насумични кружићи

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

Овај задатак је сличан претходном, једино што су нам уместо горњих левих темена сваког поља потребне координате центра сваког поља. За свако поље насумично генеришемо полупречник (цео број из интервала \([2, d]\)), нијансу сиве боје (цео број из интервала \([0, 255]\)) и на основу боје, координата центра и полупречника вршимо цртање круга. Подсетимо се, за насумичан одабир целог броја из интервала \([a, b]\) користимо функцију random.randint(a, b).

Покушај да самостално урадиш овај задатак. Ако ти то не полази за руком, искористи понуђену помоћ, па допуни започети програм.

Зграда

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

Зграда коју треба да нацртамо (без црвене и зелене линије) је приказана на наредној слици.

../_images/zgrada.png

Зеленом бојом су означени међуспратови, укључујући и простор испод првог спрата и изнад последњег спрата, док су црвеном бојом означене међувертикале, укључујући и простор лево од прве и десно од последње вертикале. Видимо да је број међуспратова за један већи од броја спратова, док је број међувертикала за један већи од броја вертикала. Претпоставићемо да је висина сваког прозора иста као висина сваког међуспрата и да је ширина сваког прозора једнака ширини сваке међувертикале. Одавде можемо израчунати висину прозора зграде (тако што укупну висину поделимо са збиром броја спратова и међуспратова) и ширину прозора зграде (тако што укупну ширину поделимо са збиром вертикала и међувертикала). Прозоре можемо цртати од горе ка доле (иако се спратови увек броје од доле ка горе). Координате горњег левог темена прозора у врсти \(i\) и колони \(j\) можемо добити тако што на ширину међувертикале додамо \(j\) пута збир ширине прозора и ширине међувертикале (што је у нашем случају једнако двострукој ширини прозора), тј. тако што на ширину међуспрата додамо \(i\) пута збир висине спрата и висине међуспрата (што је у нашем случају једнако двострукој ширини међуспрата).

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

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

Покушај сада да прилагодиш претходни програм тако да висина међуспрата буде само пола висине спрата.

(Created using Swinx, RunestoneComponents and PetljaDoc)
© 2022 Petlja
A- A+