#4 Fenry
To bylo přesně ono, děkuji moc :)
Příspěvky odeslané z IP adresy 80.251.245.–
Honza
Honza
Dobrý den, potřeboval bych radu, v programu, který teď dělám, když zadám druhou volbu, přes příkaz switch, tak ta druhá volba projede, bez toho aniž by vůbec nečetla něco od uživatele a rovnou vypíše, že převedené číslo je rovno nule. Děkuji za radu
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int main()
{
int volba;
int cislo,temp,a,i;
char str[20];
int ary[20];
int kontrola;
int soucet;
printf ("\n |Vitejte v programu pro prevod arabskych cisel na rimske a naopak|\n");
printf (" -----------------------------------------------------------------\n");
printf (" | Pokud chcete prevadet arabske cislice na rimske, zmacknete 1 |\n");
printf (" | Pokud chcete prevadet rimske cislice na arabske, zmacknete 2 |\n");
printf (" -----------------------------------------------------------------\n");
scanf("%d",&volba);
switch(volba)
{
case 1:
printf ( " \nZadejte arabske cislo: " ) ;
scanf ( "%u", &cislo ) ;
temp = cislo ;
while( temp <= 0 || temp >= 5000)
{
printf ( "\n Cislo nemuze byt prevedeno na rimske" ) ;
exit(0) ;
}
printf ( "\n Odpovidajici rimske cislo je : " ) ;
if ( cislo >= 1000 )
{
a = cislo / 1000 ;
for ( i = 0 ; i < a ; i++ )
printf ( "M" ) ;
cislo = cislo - ( a* 1000 ) ;
}
if ( cislo>=500 )
{
if ( cislo>=900 )
{
printf( "CM" ) ;
cislo = cislo -900 ;
}
else
{
printf ("D" ) ;
cislo = cislo - 500 ;
}
}
if ( cislo >= 100 )
{
a = cislo / 100 ;
for ( i = 0 ; i < a ; i++ )
printf ( "C" ) ;
cislo = cislo - ( a* 100 ) ;
}
if ( cislo >= 50 )
{
if ( cislo >= 90 )
{
printf ( "XC" ) ;
cislo = cislo - 90 ;
}
else
{
printf ( "L" ) ;
cislo = cislo - 50 ;
}
}
if ( cislo >= 10 )
{
a = cislo / 10 ;
for ( i = 0 ; i < a ; i++ )
printf ( "X" );
cislo = cislo - (a*10) ;
}
if ( cislo >= 5 )
{
if ( cislo >= 9 )
{
printf ( "IX" ) ;
cislo = cislo - 9 ;
}
else
{
printf ( "V" ) ;
cislo = cislo - 5 ;
}
}
if ( cislo >= 1 )
{
a = cislo / 1 ;
for ( i = 0 ; i < a ; i++ )
printf ( "I" );
cislo = cislo - (a*1) ;
}
break;
case 2:
while (1)
{
soucet = 0;
cislo = 0;
for (i = 0; i < 20; i++)
{
str[i] = NULL;
ary[i] = 0;
}
printf ("Napiste rimske cislo, ktere chcete prevest na arabske (max 20 znaku)\n");
fgets(str, sizeof (str), stdin);
kontrola = strspn(str, "IVXLCDM");
soucet = strlen (str);
if (kontrola != soucet - 1)
{
printf("Nezadali jste rimske cislo.\n");
printf("Rimske cislice vypadaji nasledovne:\n");
printf("I,V,X,L,C,D,M\n");
printf("Zadavejte prosim vzdy velka pismena.\n");
printf("Zkuste to znovu a zadejte spravne rimskou cislici\n\n\n\n");
}
else
{
for (i = 0; i < soucet - 1; i++)
{
if (str[i] == 'I')
ary[i] = 1;
if (str[i] == 'V')
ary[i] = 5;
if (str[i] == 'X')
ary[i] = 10;
if (str[i] == 'L')
ary[i] = 50;
if (str[i] == 'C')
ary[i] = 100;
if (str[i] == 'D')
ary[i] = 500;
if (str[i] == 'M')
ary[i] = 1000;
}
for (i = 0; i < soucet - 1; i++)
{
if (ary[i] >= ary[i + 1])
cislo += ary[i];
if (ary[i] < ary[i + 1])
cislo -= ary[i];
}
printf("Prevedene cislo je %d", cislo);
}
break;
}
}
return 0;
}