Stránka 1 z 1

HELP - Vývojový diagram

Napsal: 25 zář 2011 09:41
od krakrkre
Chtěl bych Vás všechny poprosit o radu jak nakreslit tento vývojový diagram:

Zadaná posloupnost čísel je rozdělena nulami na úseky tvořené nenulovými čísly. Ukončena je dvěma nulami následujícími bezprostředně po sobě. Určete hodnotu největšího čísla v nejdelším úseku. Předpokládejte, že úseky nenulových čísel mají různé délky.

Jsem v tom teprve začátečník, který se moc nevyzná ani v pojmech, takže bych prosil o takzvané řešení "polopatě" :smile:

Je to úkol ze školy, z programování jsem propadl a tenhle úkol mi může pomoct k jedničce, která mi před dalším propadnutím může dost pomoct, takže jsem předem vděčný všem, kteří mi dokáží poradit :idea:

Re: HELP - Vývojový diagram

Napsal: 25 zář 2011 14:10
od CZechBoY
když si propadl tak nechoď na tu školu když tě to nezajmá!
tady nikdo domácí úkoly fakt dělat nebude a už vůbec ne za tebe

Re: HELP - Vývojový diagram

Napsal: 25 zář 2011 14:40
od faraon
Z programování nejde propadnout, to ses na to musel úplně vy[PÍP]at!

Nejdřív si představ, jak by zpracovávaná data mohla vypadat. Každý úsek je ukončený nulou, konec zpracovávaných dat (a tím i konec čtení a čas pro výpis výsledků) je označený dvěma nulami. To znamená že je tam nula jako konec úseku a další nula jako signál "žádná data":

9 8 7 6 0
1 2 3 4 5 0
1 1 1 0
0

Dál bude vhodné vymyslet vhodná jména proměnných, aby ses v nich snadno vyznal:

cislo - právě načtené číslo, podle něj se bude řídit další činnost programu.
delka - délka aktuálně zpracovávaného úseku, tu je potřeba před každým úsekem nastavit na nulu!
minule - minulé načtené číslo, fungující jako flag ukazující jestli se zrovna zpracovává úsek nebo bylo předchozí číslo nula, takže další nula ukončí načítání. Tohle naopak na začátku programu nesmí obsahovat nulu!*
nejvetsi - největší nalezené číslo v každém úseku, opět je ho na začátku každého úseku potřeba nastavit na nulu.
maxdelka - délka nejdelšího úseku, nastaví se na nulu na začátku programu.
maxcislo - největší číslo v nejdelším úseku, opět nula na začátku programu.

Při tvorbě programu začneme tím nejdůležitějším, což je smyčka načítající čísla, která musí poznat správný okamžik kdy se má ukončit. Zároveň si inicializujeme proměnné do stavu vhodného pro běh programu:

01.jpg
01.jpg (6.42 KiB) Zobrazeno 337 x


Když hlavní smyčka funguje tak jak má, můžeme pokračovat dál.
Co bude ta "další činnost"? To se rozhodne podle toho jestli zadané číslo byla nula nebo ne, jsou dvě možnosti:
1) Nenulové číslo se porovná s největším doposud nalezeným v právě zpracovávaném úseku, pokud je větší, tak se uloží do proměnné nejvetsi. Také je potřeba přičíst jedničku k délce úseku, abysme věděli kolik čísel celkem obsahoval.
2) Nula ukončuje úsek, takže se podíváme jestli jeho délka byla větší než délka nejdelšího zatím nalezeného. Pokud ano, uložíme jeho délku do maxdelka a nejvyšší právě nalezené číslo do maxcislo. Potom se vynuluje délka úseku a největší číslo v úseku a hledá se dál:

02.jpg
02.jpg (4.81 KiB) Zobrazeno 337 x


Tak se nad tím zamysli a zkus to nakreslit sám. A jestli chceš s programováním trochu přežít, začni tady: http://karel.oldium.net/


* Nulu nesmí obsahovat kvůli tomu, že kdyby první načtené číslo byla také nula, tak by se program ihned ukončil. V zadání je výslovně řečeno že data ukončují dvě nuly po sobě a je třeba počítat i s chybami ve vstupních datech.