Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Pole struktur v C - výpis prvků podle kritérií

Zdravím. Prosím někoho zasvěceného, kdo má čas, aby mi poradil s následujícím.

Účelem programu je číst znaky ze standardního vstupu a po ukončení vytisknout na standardní výstup podle četnosti. Znaky se stejnou četností musí být seřazeny podle ord. hodnoty a pokud četnost přeteče (má se pracovat s datovým typem unsigned char), vytisknou se místo četnosti tři písmena. Mám vytvořené pole struktur o 255 prvcích (pro každý znak jeden), do kterého ukládám četnost znaků (proměnná sum) a také stav, zda četnost přetekla (proměnná full typu bool). Např. přečtu znak 'a', tak do pole struktur s indexem 97 přičtu 1 k proměnné sum a pokud je četnost maximální, nastavím proměnnou full na true (stav této proměnné testuji ještě před inkrementací). Tolik k načítání. A teď je potřeba prvky seřadit podle četnosti. Řešil jsem to pomocí selection sort. Ještě bylo nutné přidat do struktury další proměnnou ord, která představovala ordinální hodnotu znaku (pořadí se měnilo, tak už pro určení ord. hodnoty nestačil pouhý index v poli, jestli mi rozumíte). Znaky se tedy seřadily podle četnosti od nejvyšší a drůhým průchodem (tentokrát bubble sort) se řadily jen znaky se stejnou četností podle ord. hodnoty. Nakonec program vypsal strukturu na stdout. To vše funguje správně. Asi se ptáte, co mám teda za problém. Jde o to, že k seřazování struktury (prej) vůbec nemusí dojít a přesto lze znaky vypisovat podle zadání. Prosím o lehké nakopnutí, jak to udělat. Jako příklad stačí i obyčejné pole řekněme o 10 číslech {9,4,6,2,7,1,8,3,15,32}. Jak z něj vypsat čísla seřazená od nejvyššího bez použití nějaké řadící metody? Děkuji.

Předmět Autor Datum
Jako příklad stačí i obyčejné pole řekněme o 10 číslech {9,4,6,2,7,1,8,3,15,32}. Jak z něj vypsat čí…
MaSo 06.10.2012 16:41
MaSo
V zadání projektu je tohle: Ačkoli úloha požaduje tisk histogramu seřazeného podle různých kritérií…
Niko Bellic 06.10.2012 16:48
Niko Bellic
Tím chtějí říct, že data stačí seřadit až ve chvíli, kdy je potřebuješ mít seřazené. Není nutné je ř…
Wikan 06.10.2012 16:49
Wikan
Leda tak...:-)
MaSo 06.10.2012 16:51
MaSo
Mám tedy správný postup, když data nejdřív přečtu, poté je seřadím a nakonec vytisknu? Nebo ve které…
Niko Bellic 06.10.2012 16:58
Niko Bellic
Jistě. Osobně by mě ani nenapadlo to řadit průběžně, pokud by to z principu úlohy nebylo nutné.
Wikan 06.10.2012 17:08
Wikan
Dobře, pak tedy není co řešit. Díky.
Niko Bellic 06.10.2012 17:37
Niko Bellic
to je blbost: Ačkoli úloha požaduje tisk histogramu seřazeného podle různých kritérií, při řešení n…
AZOR 07.10.2012 17:16
AZOR
Jasně že učitel :-) Ale uvítal bych nějakou radu, jak na to. poslední
Niko Bellic 07.10.2012 17:25
Niko Bellic
To fakt netuším. Kdo to psal? :-)
MaSo 06.10.2012 16:50
MaSo
Vracím se ještě k tomuto tématu. Od cvičícího jsem v diskuzi na toto téma dostal tento vzkaz: Napov…
Niko Bellic 07.10.2012 17:09
Niko Bellic

Jako příklad stačí i obyčejné pole řekněme o 10 číslech {9,4,6,2,7,1,8,3,15,32}. Jak z něj vypsat čísla seřazená od nejvyššího bez použití nějaké řadící metody?

Jedině na kvantovém počítači...:-)

Vypisovat ve správném pořadí čísla z pole nejde, bez toho, aniž bys je předtím seřadil. Což nejde v O(n). Umí to jenom Radix sort a to ještě jenom v některých případech.

to je blbost:

Ačkoli úloha požaduje tisk histogramu seřazeného podle různých kritérií, při řešení není nezbytně nutné data řadit. Tisknout data v určitém pořadí a mít je seřazená v paměti nejsou totožné úlohy.

Takže jestli nemam mít seřazené data a zároven je mam tisknout v nějakém pořadí -> O(n*n) složitost, no fakt magoři, to určitě zadal nějak učitel.

Vracím se ještě k tomuto tématu. Od cvičícího jsem v diskuzi na toto téma dostal tento vzkaz:

Napovím vám příkladem ze života -- držíte v ruce několik karet a chcete je vysázet na stůl ve správném pořadí. Musíte je v ruce držet seřazené?

Z čehož plyne, že seřadit pole ještě před výpisem na obrazovku není správně. Zkuste mi prosím poradit, jak z neseřazeného pole vybírat prvky od nejvyššího po nejnižší a hned tisknout. Napadá mě projíždět strukturou, hledat max. číslo a jak ho vypíšu, označím, že už je vypsané a hledám znovu max. číslo ze zbytku.

Zpět do poradny Odpovědět na původní otázku Nahoru