Autorské riešenie
[stiahni py]
V
tejto úlohe bolo treba nakresliť parkovacie miesta pre novo postavené
obytné domy. Pričom sa musia brať do úvahy tieto pravidlá:
- parkovacie miesta sa budujú na voľnej ploche po oboch okrajoch cesty,
- pre 1 izbový byt sa počíta 1 parkovacie miesto
- pre 2 izbový byt sa počíta 1,5 parkovacieho miesta,
- pre 3 a viac izbový byt sa počítajú 2 parkovacie miesta,
- parkovacie miesto má rozmery 3 m x 5 m,
- minimálne 4% zparkovacích miest (minimálne jedno)
sú vyhradené pre zdravotne postihnutých, tieto parkovacie miesta
majú rozmery 5 m x 5 m, sú umiestnené čo najbližšie pri vchode a
vyznačené modrou čiarou,
- pri každom dome je vyhradené jedno parkovacie miesto
pre sanitku alebo hasičské auto, jeho rozmery sú 5 m x 5 m a je
umiestnené pri vchodea vyznačené žltou čiarou,
V riešení ste mali používať matematické
funkcie na výpočet počtu parkovacích miest podľa počtu 1, 2 a 3
izbových bytov v jednom bytovom dome. Ako 3 parametre procedúry kresliPlanParkoviska bolo vhodné
dať počty jednotlivých typov bytov. Počet parkovacích miest potom treba
zaokrúhliť smerom nahor. Počet miest pre vozíčkarov vypočítame
ako 4% z počtu parkovacích miest, ale najmenej 1 miesto.
Teda:
n = round(pocet1 + pocet2* 1.5 + pocet3*2)
Počet
miest pre vozíčkarov:
if inv <1: inv = 1 else: inv = round(inv)
Na vykreslenie sme použili 4 procedúry:
- miesto(a,b) - na
vykreslenie parkovacieho miesta s rozmermi a, b
- parkovisko_v() -
na vykreslenie miesta pre vozíčkarov
- hasici() - na
vykreslenie miesta pre hasičov
- parkovisko() - na
vykreslenie parkových miest pre polovicu vozíčkarov a polovicu miest na
jednej strane, na druhej strane pre hasičov a zvyšnú časť miest pre
vozíčkarov a bežných miest.
Hlavná procedúra kresliPlanParkoviska
má 3 parametre - počet 1 izbových, 2 izbových a 3 izbových bytov. V nej
sa vypočítajú počty parkovacích miest a počet miest pre vozíčkarov a
táto potom volá procedúru parkovisko().
def parkovisko(n): # miesta pre invalidov- polovičný počet
parkovisko_v(inv - inv//2) t.pencolor('black')
# bežné miesta na 1 strane parkoviska - polovičný počet for i in range(n // 2): miesto(3, 5) t.fd (3*pomer) t.pu() t.setpos(-(n//4)*pomer*3, 6*pomer) t.pd() hasici() # miesto pre hasičov najbižšie ku domu parkovisko_v(inv//2) # miesta pre invalidov- druhá polovica
# bežné miesta na 1 strane parkoviska - polovičný počet
t.pencolor('black') for i in range (n - n//2): miesto(3,5) t.fd (3*pomer)
Premenná pomer je určená na
prekresľovanie parkovacích miest v pomere 1 meter ku 10 pixelom obrázka.
Vaše zaujímavé riešenia a najčastejšie
chyby
Zaujímavé riešenie bolo, keď si riešiteľ vypočítal dĺžku parkoviska pre dané parkovacie miesta:
dlzka = math.ceil((biele*3+modre*5+zlte*5)/2) # biele - bežné miesto, modré - vozíčkari, žlté - hasiči
|
Časté chyby, ktoré ste robili vo vašich riešeniach:
- používali ste procedúry bez vstupných parametroch
- niektorí z riešiteľov nepoužívali cyklus na vykresľovanie parkoviska
- niektorí nevykresľovali parkovacie miesta, iba vonkajší okraj parkoviska
|