Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Jazyk C (program pro výpočet četnosti znaků vstupního textu)

Zdravím kolegu z FITu :-). Ty znaky není potřeba v paměti seřazovat. Je to i v zadání. Ptal jsem se zde na ten samý problém.

http://pc.poradna.net/q/view/894110-pole-struktur- v-c-vypis-prvku-podle-kriterii

Tehdy jsem ještě nevěděl, jak to vyřešit bez řazení a moje implementace přes strukturu byla zbytečně složitá. Ale ono je to jednoduché. V cyklu opakuješ tyto kroky:

1. Procházej polem a hledej max. hodnotu. Jak to udělat je snad jasné. Současně si však ukládej index toho prvku, kde se nachází to nejvyšší číslo. Já si na to třeba udělal funkci, která ten index vrací.
2. Máš index nejčetnějšího prvku - vypiš ho podle zadání. Index představuje ord. hodnotu (vypiš jako znak) a pole[index] četnost (vypiš jako číslo).
3. Vynuluj četnost toho konkrétního znaku - pole[index] = 0

Tento cyklus opakuj N-krát (N je parametr z příkazové řádky, tedy 1 - 256). Vynulování četnosti způsobí, že při dalším hledání největší hodnoty v poli se tato právě vypsaná hodnota už nezohledňuje - najdeš tak druhou, třetí, čtvrtou, pátou ... největší četnost. Prvky jsou už navíc z principu seřazeny podle ord. hodnoty, takže pokud má několik znaků stejnou četnost, vypíší se automaticky v pořadí podle ord. hodnoty a nemusíš to nijak řešit.

Ještě poznámka k tomu poli. Máme pracovat s 8-bitovou tabulkou - musí to teoreticky rozpoznat 256 znaků, ale ty máš pole pouze na 255 znaků. A datový typ pro práci s četností má být unsigned char, aby max. četnost byla UCHAR_MAX-1, tedy 254 - to je taky ze zadání. Pokud četnost bude vyšší, má to vypsat NNN.

Jinak je trochu pozdě to řešit až teď. Co třeba konzultace na cvičeních, na oficiálním fóru k projektům, nebo na fitušce?

Reakce na odpověď

1 Zadajte svou přezdívku:
2 Napište svou odpověď:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět do poradny