14.2 Угнежђене петље¶
Плесни подијум¶
Плесни подијуми 1970-их су били издељени на квадратне плоче које су могле да светле у различитим бојама. Прикажите један такав подијум (гледан одозго) тако што ћете поделити прозор на \(n \times n\) квадрата и сваки квадрат обојити у насумичну боју.
Претпоставићемо да на располагању имамо функцију која на насумичан
начин одабира боју (њу је веома једноставно испрограмирати коришћењем
функције 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)
.
Покушај да самостално урадиш овај задатак. Ако не успеш, онда искористи понуђену помоћ, па допуни започети програм.
Зграда¶
Напиши програм који исцртава прозоре на згради која има дати број спратова и дати број вертикала.
Зграда коју треба да нацртамо (без црвене и зелене линије) је приказана на наредној слици.
Зеленом бојом су означени међуспратови, укључујући и простор испод првог спрата и изнад последњег спрата, док су црвеном бојом означене међувертикале, укључујући и простор лево од прве и десно од последње вертикале. Видимо да је број међуспратова за један већи од броја спратова, док је број међувертикала за један већи од броја вертикала. Претпоставићемо да је висина сваког прозора иста као висина сваког међуспрата и да је ширина сваког прозора једнака ширини сваке међувертикале. Одавде можемо израчунати висину прозора зграде (тако што укупну висину поделимо са збиром броја спратова и међуспратова) и ширину прозора зграде (тако што укупну ширину поделимо са збиром вертикала и међувертикала). Прозоре можемо цртати од горе на доле (иако се спратови увек броје од доле на горе). Координате горњег левог темена прозора у врсти \(i\) и колони \(j\) можемо добити тако што на ширину међувертикале додамо \(j\) пута збир ширине прозора и ширине међувертикале (што је у нашем случају једнако двострукој ширини прозора) тј. тако што на ширину међуспрата додамо \(i\) пута збир висине спрата и висине међуспрата (што је у нашем случају једнако двострукој ширини међуспрата).
Покушај да на основу претходне дискусије самостално урадиш овај задатак. Ако не успеш, онда искористи понуђену помоћ, па допуни започети програм.
Уместо петљи у којима се редом наводе редни бројеви, могли бисмо употребити и петље са кораком.
Покушај сада да прилагодиш претходни програм тако да висина међуспрата буде само пола висине спрата.