Autorské riešenie
[stiahni]

  • Počet riešiteľov:6/17 = 35 %

  • Úspešnosť riešenia: 4.67 / 6= 78%

Riešenie tejto úlohy nie je ťažké. Aby sme sa však nepomýli je vhodné sa zamyslieť nad tým, aké rôzne situácie môžu nastať. Predpokladajme takýto záznam filmu s nasledovným pomerom strán:

tv

Vo všeobecnosti môžu nastať nasledovné prípady:

zobraziť celý záznam
(nejaká časť obrazovky ostane nevyužitá)
tv1(1) tv(2)
využiť celú plochu obrazovky
(nejaká časť záznamu sa na
obrazovke nezobrazí)
tv3(3) tv(4)

Niektorí sa možno zamyslia nad tým, či treba uvažovať aj o tom, či sa má záznam zväčšiť ak je príliš malý alebo naopak zmenšiť ak je príliš veľký. A čo v prípade ak rozmer záznamu je zhodný s rozmerom obrazovky televízora?

Odpoveď na prvú otázku: Vždy jeden rozmer záznamu zmeníme tak, aby zodpovedal niektorému rozmeru obrazovky televízora (všimnite si to na obrázku vyššie). To znamená, že ho môžeme zväčšiť alebo aj zmenšiť. Druhý rozmer zmeníme tak, aby vzájomný pomer strán ostal zachovaný. Tým sme ale odpovedali aj na druhú otázku. Ak sa rozmery záznamu a obrazovky televízora budú zhodovať, prispôsobenie jednej strany záznamu veľkosti jednej strany televízora nespôsobí žiadnu zmenu. Rovnako aj druhú stranu potom zmeníme v pomere 1:1 (teda, tiež ostane rovnaká).

Ostáva už len vymyslieť, kedy ktorú stranu záznamu nastaviť na niektorý z rozmerov obrazovky televízora a ako druhú stranu zmeniť tak, aby sa pomer strán záznamu zachoval.

Pozrime sa najskôr na prípad, ak chceme záznam zobraziť celý (1, 2). Ak je pomer šírky a výšky záznamu väčší ako pomer šírky a výšky televízora (1), tak nová šírka záznamu je rovnaká ako šírka obrazovky televízora. Novú výšku dopočítame. V opačnom prípade (2) nastavíme novú výšku záznamu na výšku obrazovky televízora a šírku záznamu dopočítame.

(1)   nová šírka     koeficient zmeny     nová výška  
zaznamSirka
---------------
zaznamVyska
> tvSirka
---------
tvVyska
tvSirka tvSirka
---------------
zaznamSirka
zaznamVyska * tvSirka
---------------
zaznamSirka

 

(2)   nová výška     koeficient zmeny     nová šírka  
zaznamSirka
---------------
zaznamVyska
<= tvSirka
---------
tvVyska
tvVyska tvVyska
---------------
zaznamVyska
zaznamSirka * tvVyska
---------------
zaznamVyska

Len pre istotu, skontroljte ako sa zmenil pomer výšky a šírky záznamu?

Podobne budeme postupovať aj v prípade, ak chceme využiť celú plochu obrazovky televízora.

(3)   nová výška     koeficient zmeny     nová šírka  
zaznamSirka
---------------
zaznamVyska
> tvSirka
---------
tvVyska
tvVyska tvVyska
---------------
zaznamVyska
zaznamSirka * tvVyska
---------------
zaznamVyska

 

(4)   nová šírka     koeficient zmeny     nová výška  
zaznamSirka
---------------
zaznamVyska
<= tvSirka
---------
tvVyska
tvSirka tvSirka
---------------
zaznamSirka
zaznamVyska * tvSirka
---------------
zaznamSirka

Zodpovedajúce procedúry môžu teda vyzerať nasledovne:

viem celyZaznam
  ak2 zaznamSirka/zaznamVyska > tvSirka/tvVyska [
    sirka'nechHodnota tvSirka
    vyska'nechHodnota zaznamVyska * tvSirka / zaznamSirka
  ][
    sirka'nechHodnota zaznamSirka * tvVyska / zaznamVyska
    vyska'nechHodnota tvVyska
  ]
koniec

viem celaObrazovka
  ak2 zaznamSirka/zaznamVyska > tvSirka/tvVyska [
    sirka'nechHodnota zaznamSirka * tvVyska / zaznamVyska
    vyska'nechHodnota tvVyska
  ][
    sirka'nechHodnota tvSirka
    vyska'nechHodnota zaznamVyska * tvSirka / zaznamSirka
  ]
koniec

Niektorí si možno všimli, že aj keď sú prípady (2) a (3) rozdielne, zmenu rozmerov záznamu vykonáme v oboch prípadoch rovnako. Rovnako sú na tom aj prípady (1) a (4). Mohlo by byť teda výhodnejšie tento kód nepísať dva krát ale len raz, napr. v nejakých pomocných procedúrach. Celý program by potom mohol vyzerať nasledovne:

viem celyZaznam
  ak2 zaznamSirka/zaznamVyska > tvSirka/tvVyska [
    prisposobSirku
  ][
    prisposobVysku
  ]
koniec

viem celaObrazovkaviem celaObrazovka
  ak2 zaznamSirka/zaznamVyska > tvSirka/tvVyska [
    prisposobVysku
  ][
    prisposobSirku
  ]
koniec

viem prisposobSirku
  sirka'nechHodnota tvSirka
  vyska'nechHodnota zaznamVyska * tvSirka / zaznamSirka
koniec

viem prisposobVysku
  sirka'nechHodnota zaznamSirka * tvVyska / zaznamVyska
  vyska'nechHodnota tvVyska
koniec

Vaše zaujímavé riešenia a najčastejšie chyby

Vačšina z vás vyriešila túto úlohu správne. Vaše riešenia boli o niečo komplikovanejšie než autorské riešenie.