Program zamienia liczby arabskie z przedziału od 0 do 3999 na liczby rzymskie
Treść zadania:
Napisać program zamieniajÄ…cy liczby arabskie z przedziaÅ‚u od 0 do 3999 na liczby rzymskie. Użyć zainicjowanej tablicy struktur struct RZYM {char *s; int w; };, gdzie s wskazuje na tekst (np. "CM"), a w zawiera wartość z tym tekstem zwiÄ…zanÄ… (np. 900). Do konwersji napisać funkcjÄ™, która otrzyma w parametrach liczbÄ™, a w wyniku zwróci wskazanie na tekst postaci rzymskiej. ZapÄ™tlić program tak dÅ‚ugo, jak dÅ‚ugo podawana do konwersji liczba mieÅ›ci siÄ™ w zadanym przedziale.
Listing
#include <stdio.h>
#include <string.h>
struct Rzym_t
{
char *s;
int w;
};
static const Rzym_t Rzym[]=
{
{"M", 1000},
{"CM", 900},
{"D", 500},
{"CD", 400},
{"C", 100},
{"XC", 90},
{"L", 50},
{"XL", 40},
{"X", 10},
{"IX", 9},
{"V", 5},
{"IV", 4},
{"I", 1},
};
const char *dectorom( int liczba )
{
int i;
static char Rliczba[20];
Rliczba[0] = '\0';
for (i=0; liczba && i<sizeof(Rzym)/sizeof(Rzym[0]); i++)
{
while ( Rzym[i].w <= liczba )
{
strcat( Rliczba, Rzym[i].s );
liczba -= Rzym[i].w;
}
}
return Rliczba;
}
int main()
{
int liczba;
printf("\n");
printf("1539\n");
printf("grupa C\n\n");
printf("\tProgram przeksztalca liczby arabskie na rzymskie.\n\n");
for(;;)
{
printf("Podaj liczbe arabska: ");
scanf("%d", &liczba);
if(liczba<1 || liczba>3999)
return 0;
printf("\nLiczba Rzymska: %s\n\n", dectorom(liczba));
}
scanf("%d", &liczba);
}
Ranga: Administrator serwisu Punktów: 28716

