You are on page 1of 4

Algoritmizace

Ing. Jana Kolaja Ehlerová, Ph.D.


duben 2024
Musı́m umět programovat?
Ne, zkoušı́me jenom schopnost myslet algoritmicky, tedy rozebrat problém na menšı́ problémy
a ty vyřešit.
A ano, je to jednoduššı́, když už programovat umı́te.

Obecný postup
Opakovánı́, cyklus
Je nějaká část úlohy, jejı́ž řešenı́ vyžaduje opakovánı́? A tento cyklus je s pevným počtem
opakovánı́ nebo má skončit, až nastane nějaká podmı́nka? Specifikujte, který cyklus použijete,
jestli potřebujete vědět, kolikáté opakovánı́ cyklu provádı́te.

Podmı́nka
Musı́te se při řešenı́ rozhodnout, co dělat, když je splněna podmı́nka? Něco se stane, když
jedno čı́slo je většı́ než druhé? Najděte mı́sto, kde se řešenı́ lišı́ v závislosti na nějaké podmı́nce
a rozhodněte, co je potřeba udělat.

Proměnné
Potřebujete si uložit nějaké čı́slo, součet, mezivýsledek nebo sadu několik čı́sel? Vytvořte si
proměnnou, která udržı́ jejich hodnotu. Nezapomeňte ji přı́hodně pojmenovat.

Otestujte postup
Pokud si nedokážete postup bezchybně otestovat v rámci vlastnı́ představivosti, doporučuju
algoritmus otestovat na vámi vybraných datech.

Jediné řešenı́ neexistuje


Nikdy nenı́ postup, který by byl jediný správný. Pokud nedokážete dořešit problém pomocı́
navrženého postupu, je dobré zkusit i jiný přı́stup.
Zde řešený přı́klad má uvedeno jedno řešenı́. Je správné, ale nenı́ to jediné správné.

+420 485 353 757 — info@tul.cz 2


Technická univerzita v Liberci — Fakulta mechatroniky, informatiky a mezioborových studiı́
Studentská 1402/2, 461 17 Liberec 1 — www.fm.tul.cz
Přı́klad
Načı́tejte čı́sla, dokud nepřijde čı́slo 0. Najděte v zadaných čı́slech (uspořádaných tak, jak
jste je načı́tali) nejdelšı́ sekvenci po sobě jdoucı́ zvyšujı́cı́ch se čı́sel. Vytiskněte tuto sekvenci.

1. Jak načı́st a co
Načı́tám čı́sla v podmı́něném cyklu. Nově načtené čı́slo ukládám do proměnné čı́slo, načı́tám
dokud čı́slo ̸= 0

2. Chci porovnat předchozı́ čı́slo s nově načteným


Potřebuju vědět, jestli čı́slo je vyššı́ než předchozı́ čı́slo v řadě. Zavedu tedy proměnnou
předchozı́. Na začátku programu ji nastavı́m na nějaké vysoké čı́slo (třeba 1000, ale určitě si
umı́m představit i vyššı́) a po každém načtenı́ ji budu porovnávat s čı́slo.

3. Postupné zı́skávánı́ sekvence


Zavedu proměnnou sekvence. Na začátku programu bude prázdná. Zavedu proměnnou novásekvence.
Na začátku programu bude prázdná. Přidám do nı́ každé čı́slo, které bude většı́ než předchozı́.
Když potkám čı́slo menšı́ než předchozı́, pak porovnám, je-li novásekvence delšı́ než sekvence.
Pokud ano, přepı́šu sekvence na hodnoty novásekvence. Poté, at’ už byla sekvence většı́ nebo
nebyla, proměnnou novásekvence vypráznı́m a zapı́šu do nı́ čı́slo.

Sepsánı́ předchozı́ch úvah do strukturované formy


ˆ sekvence=prázdná

ˆ novásekvence=prázdná

ˆ předchozı́=hodně velké čı́slo

ˆ opakuj dokud čı́slo ̸= 0

– načti čı́slo
– pokud je čı́slo > předchozı́
* připiš čı́slo do novásekvence
– pokud je čı́slo <= předchozı́
* pokud je novásekvence delšı́ než sekvence
· přepiš sekvence na hodnotu novásekvence
* novásekvence=prázdná a zapiš do nı́ čı́slo
– přepiš předchozı́ na hodnotu čı́slo

ˆ vytiskni sekvence

+420 485 353 757 — info@tul.cz 3


Technická univerzita v Liberci — Fakulta mechatroniky, informatiky a mezioborových studiı́
Studentská 1402/2, 461 17 Liberec 1 — www.fm.tul.cz
Poznámky k řešenı́ předchozı́ho kódu
Neřešila jsem vůbec typy proměnných, ač tušı́te, že šlo o čı́sla a řetězce. Předpokládám, že
automaticky docházı́ ke konverzı́ch proměnných a tyto detaily neřešı́m. Tyto detaily jsou totiž
programovánı́ a já ukazuji jen algoritmizaci.
V řešenı́ se vyhýbám polı́m, abych je zde nemusela vysvětlovat. Pokud je umı́te, jistě najdete
i hezké řešenı́, které je využı́vá. Na druhou stranu tušı́te, že proměnná sekvence může klidně být
pole, ač jsem to nespecifikovala.
V řádku pokud je čı́slo <= předchozı́“ definuju, že pokud čı́slo jdoucı́ po dalšı́m je stejné,

pak to nepovažuju za definici stoupavé sekvence. Protože ze zadánı́ si nejsem jistá, rozhodla
jsem se to použı́t takto, maximálně bych mohla tuto podmı́nku v popisu okomentovat.

+420 485 353 757 — info@tul.cz 4


Technická univerzita v Liberci — Fakulta mechatroniky, informatiky a mezioborových studiı́
Studentská 1402/2, 461 17 Liberec 1 — www.fm.tul.cz

You might also like