[C] Převod římských čísel na arabské
Moderátor: Moderátoři
[C] Převod římských čísel na arabské
a mnoho daších odkazů k poučení na Google, heslo
romanian numbers converter in C
- Panda38
- Příspěvky: 725
- Registrován: 21 lis 2012, 00:00
- Bydliště: Most, Praha, Lanžhot
- Kontaktovat uživatele:
Jestli to chceš dělat tímto způsobem, tak si nejdříve převeď písmena na čísla do pomocné tabulky a ta pak už můžeš takto porovnávat.
Např.:
Kód: Vybrat vše
short cislo2[255];
while(cislo[a] != '\0')
{
switch (cislo[a])
{
case 'i':
case 'I': cislo2[a] = 1; break;
case 'v':
case 'V': cislo2[a] = 5; break;
case 'x':
case 'X': cislo2[a] = 10; break;
case 'l':
case 'L': cislo2[a] = 50; break;
case 'c':
case 'C': cislo2[a] = 100; break;
case 'd':
case 'D': cislo2[a] = 500; break;
case 'm':
case 'M': cislo2[a] = 1000; break;
default:
printf("Zadany text %s neni rimske cislo.\n", cislo);
indikace = 1;
}
if (indikace) break;
a++;
}
cislo2[a] = 0;
if (!indikace)
{
a = 0;
while(cislo2[a] != 0)
{ .... Nebo použít funkci, která převede jeden římský znak na číslo a používat tuto funkci jak ve výpočtu, tak v porovnání 2 znaků.
Kód: Vybrat vše
short RimskeCislo(char znak)
{
switch (znak)
{
case 'i':
case 'I': return 1;
case 'v':
case 'V': return 5;
case 'x':
case 'X': return 10;
case 'l':
case 'L': return 50;
case 'c':
case 'C': return 100;
case 'd':
case 'D': return 500;
case 'm':
case 'M': return 1000;
}
return 0;
}
.....
while(cislo[a] != '\0')
{
if (RimskeCislo(cislo[a]) == 0)
{
indikace = 1;
printf("Zadany text %s neni rimske cislo.\n", cislo);
break;
}
if (RimskeCislo(cislo[a]) < RimskeCislo(cislo[a+1]))
b -= RimskeCislo(cislo[a]);
else
b += RimskeCislo(cislo[a]);
a++;
}
http://www.builder.cz/cz/forum/1277427/obecna-diskuse/
Kód: Vybrat vše
#include <stdio.h>
#include <stdlib.h>
static int hodnotaCislice(char znak)
{
switch( znak )
{
case 'i':
case 'I':
return 1;
case 'v':
case 'V':
return 5;
case 'x':
case 'X':
return 10;
case 'l':
case 'L':
return 50;
case 'c':
case 'C':
return 100;
case 'd':
case 'D':
return 500;
case 'm':
case 'M':
return 1000;
default:
fprintf(stderr, "Znak '%c' neni rimska cislice.\n", znak);
exit(1);
return 0;
}
}
static int hodnotaCisla(const char *text)
{
int aktualni;
int posledni;
int ostatni;
posledni = ostatni = 0;
for ( ; *text; text++ )
{
aktualni = hodnotaCislice(*text);
if ( posledni && posledni < aktualni )
{
ostatni += aktualni - posledni;
posledni = 0;
}
else
{
ostatni += posledni;
posledni = aktualni;
}
}
return ostatni + posledni;
}
int main(int argc, const char **argv)
{
if ( argc != 2 )
{
fprintf(stderr, "Jako parametr zadej rimske cislo.\n");
exit(1);
}
printf("Hodnota: %d\n", hodnotaCisla(argv[1]));
return 0;
}