Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Stránky: 1

Ahoj,
testuj řetězec znak po znaku, ze písmena I, V, X, L, C, D a M nahrazuj čísly v proměnné, čiň tak zleva doprava (cyklus for s počtem průchodů o délce řetězce (počítej s tím, že řetězec je null terminated), takže budeš mít:
char romans[10] = "MMMDCCLIX" // to vychází přesně na 10, nezapomeň mít dostatečně velké pole, do kterého uložíš řetězec římských znaků short decimals; for(int i = 0; i < strlen(romans); i++)
a budeš jednotivá čísla sčítat:
{
if( romans[i] == 'M') decimals += 1000;
if(romas[i] == 'D') decimals += 500;
........
}Pak ještě potřebuješ test, zda předchozí znak nebyl menší než ten, co právě čteš, pokud tomu tak bylo, tak starý znak, který už máš v proměnné decimals odečteš (jako by nebyl), vypočítáš (IFama) hodnotu toho dvojznaku (např VD), těch kombinací není moc, nikdy nebudeš mít DM, LC, VX, a tuto pak k proměnné decimals zase přidáš. Kód je asi jasný.
Můžeš, místo soustavy ifů použít konstrukci switch-case, kde case bude mít ASCII hodnotu daného znaku.
Tím to máš v dekadické soustavě, a z dekadický už snadno uděláš binární (obvykle je na to knihovní funkce, jen nevím, jak se jmenuje, pokdu není, už se dá snadno dopsat podle" klasických pravidel převodu mezi soustavama
EDIT: tady je kód, jak se z decimálu uděláš binár: (já ho nevymýšlel, jen našel již hotovej)
short i;
char b[12];
short num = decimals;
for( i = 11; i >= 0; i--)
{
if( (1 << i) & num)
b[11 - i] = '1';
else
b[11 - i] = '0';
}Offline
Stránky: 1