Zdravím, potřeboval bych poradit, jak vytvořit vývojový diagram na toto zadání:
Je dána posloupnost 50 čísel, z nichž některá mohou být stejná. Určete, kolik hodnot se mezi vstupními čísly nachází pouze jednou.
Vůbec nevím, jak na řešení, vývojový diagramy jsou pro mě dost težké.
Fórum › Pascal
úkol do školy
Jenom vývoják? Ne program? Tak o to je to jednodušší, stačí jenom slovní vyjádření algoritmu:
Vstupní posloupnost čísel uložím do pole.
Zapamatuju si, že zatím nic nebylo nalezeno (N=0).
Cyklus:
- Z pole přečtu a odstraním jedno číslo (je jedno které).
- Zapamatuji si, že ho mám zatím jednou.
-- Vnořený cyklus: Projedu zbytek pole a pokud najdu stejné číslo, z pole ho odstraním a zvýším počet výskytů o 1.
- Pokud je počet výskytů rovný jedné, zvýším N.
Cyklus opakuji tak dlouho, dokud není pole prázdné.
Na konci je v N uloženo, kolik čísel se v posloupnosti vyskytuje jen jednou.
Vývojový diagram je už jenom převedení slovního popisu do grafické formy. Začátek a konec jsou takové kulaté rámečky, vstupy a výstupy (načítání posloupnosti, zobrazení výsledku) se píšou do kosodélníků, příkazy typu "udělej něco" do obdélníků, větvení se řeší otázkou zapsanou v kosočtverci, od kterého vedou dvě šipky (jedna pro "ano", druhá pro "ne") (tímhle se řeší i cykly typu while nebo repeat), for cyklus (při procházení pole a hledání dalších výskytů) bych asi vyjádřil nějakým větším rámečkem, ve kterém by bylo "pro každé číslo v posloupnosti:" a následovaly by příkazy a větvení v běžných rámečcích (vše uvnitř toho velkého).
Přeji veselé malování :-).
Moje stránka.
To u vývojového diagramu vůbec nemusíš řešit, tam prostě napíšeš rámeček "odstraň číslo" nebo "je pole prázdné?" a konkrétní implementace tě nezajímá.
V praxi bych si asi udělal pomocné pole booleanů, stejně dlouhé jako to pole čísel. Na začátku by byly všechny true (čísla v poli jsou). Odstranění čísla by se provedlo nastavením booleanu na příslušném indexu na false a kdyby byly false všechny, tak je pole prázdné.
Nebo by se čísla dala opravdu fyzicky mazat, tj. na pozici mazaného čísla zkopírovat následující, na pozici toho následujícího zase jeho následující atd. až do konce pole a zapamatovat si, že máme o jedno číslo míň.
Množina (typ Set) použít nepůjde, protože v té posloupnosti se mohou čísla opakovat a v množině ne.
Moje stránka.
Přesně tak ;-).
Moje stránka.
vyvojovej diagram je neco jako recept v kucharce... pripravime si mouku, 5 vajec (inicializace promennych).... uvarime to to a to do toho pridavame to (vykonani pokynu - prikazy)... solime podle chuti (cyklus) ... nakonec pripravime na talire s kouskem bobkoveho listu... (vypis vysledku) ....
v kucharce je to akorat zapsano slovne... u vyvojovych diagramu na to mas takovy pekny obrazce a podle toho co delas je pouzijes
Přečetl jsem si otázku a docela mě potěšila, že jsem nad tím i chvíli přemýšlel.
Navrhnutý algoritmus má složitost O(N^2).
Jinou možností je čísla nejdříve seřadit a pak vypisovat čísla, která mají různá sousední čísla - O(N*log(N)).
A nejlepší by bylo si čísla ukládat do hash tabulky - O(N).
Tazateli tento příspěvek asi nepomůže, ale školní problém se mi líbí.
Teda, to se mi líbí od záři děláme vývojáky, karla a teď pascal, ale na moc primitinvní úrovni :-(. Teď máme taky úkol, vytvořit program na počítání králiků v kotci.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Úkol do školy C++ — založil Dominik
Ukol do školy — založil Ales
Ukol do skoly — založil sniff
Ukol do skoly:( — založil Martina
C++ ukol do skoly — založil Aleš
Moderátoři diskuze