Mam napisany program na kalkulator liczb rzymskich, wszystko ładnie hula, tylko jest problem, ponieważ wiadomo, że przez 0 nie dzielimy i w związku z tym przy zamianie z arabskich na rzymskie jest if (b != 0)... i przez to w dodawaniu, odejmowaniu, mnożeniu i dzieleniu, gdy b, czyli ta druga liczba jest równa 0 w ogóle nie wyświetla mi się wynik rzymski, czyli, gdy wpiszę np. 6+0 to wyświetli mi się działanie tylko w arabskich. Czy ktoś może pomóc i powiedzieć co gdzie dopisać, żeby wszystko ładnie chodziło?
0
0
W konwersja
zmień pierwszego ifa, tak żeby nie zwracał nulla gdy liczba == 0
i zrób tak, żeby w takim przypadku (liczba == 0
) zwracało Ci co tam chcesz. Dodatkowo w main
zmień if(b != 0)
na if(!(b == 0 && znak == '/'))
. Wtedy powinno działać.
0
Poprawiłem i bez zmian :(
#include <stdio.h>
#include <stdlib.h>
char *konwersja (char *result,int liczba);
int main()
{
int a, b, wynik;
char znak;
char rzymskie[50];
printf("------ KALKULATOR LICZB RZYSMKICH ------\n\n");
printf("Podaj rownanie: ");
scanf("%d %c %d", &a, &znak, &b);
printf("\n");
printf("W zapisie arabskim: \n");
if(znak == '+')
{
wynik = a + b;
printf("%d + %d = %d", a, b, wynik);
}
if(znak == '-')
{
wynik = a - b;
printf("%d - %d = %d", a, b, wynik);
}
if(znak == '*')
{
wynik = a * b;
printf("%d * %d = %d", a, b, wynik);
}
if(znak == '/')
{
if(b == 0 || a%b != 0)
{
printf("Nie mozna wykonac dzialania !");
}
else
{
wynik = a / b;
printf("%d / %d = %d", a, b, wynik);
}
}
printf("\n\n");
if(!(b == 0 && znak == '/'))
{
printf("W zapisie rzymskim: \n");
printf("%s ", konwersja(rzymskie, a));
printf("%c ", znak);
printf("%s ", konwersja(rzymskie, b));
printf("= ");
printf("%s", konwersja(rzymskie, wynik));
printf("\n\n");
}
getch();
return 0;
}
char *konwersja (char *cyfra, int liczba)
{
#define N 7
int i = 0, j = 0;
unsigned int arabskie[N] = {1000, 500, 100, 50, 10, 5, 1};
char rzymskie[N] = {'M', 'D', 'C', 'L', 'X', 'V', 'I'};
if((liczba > 3999) || (liczba < 0)) return NULL;
if (liczba == 0) return wynik;
while((liczba) && (i < N))
{
if(liczba >= arabskie[i])
{
liczba -= arabskie[i];
cyfra[j++] = rzymskie[i];
}
else if ((i%2 == 0) && (i < N-2) && (liczba >= arabskie[i] - arabskie[i+2])
&& (arabskie[i+2] != arabskie[i] - arabskie[i+2]))
{
liczba -= arabskie[i] - arabskie[i+2];
cyfra[j++] = rzymskie[i+2];
cyfra[j++] = rzymskie[i];
i++;
}
else if ((i%2 == 1) && (i < N-1) && (liczba >= arabskie[i] - arabskie[i+1])
&& (arabskie[i+1] != arabskie[i] - arabskie[i+1]))
{
liczba -= arabskie[i] - arabskie[i+1];
cyfra[j++] = rzymskie[i+1];
cyfra[j++] = rzymskie[i];
i++;
}
else
{
i++;
}
}
cyfra[j++] = 0;
return cyfra;
}
0
Kurczę, prawie wszystko gra, tylko teraz jest tak, że jak np. piszę: 10 + 0, to w rzymskich jest: X + X = X. Tak blisko :)
#include <stdio.h>
#include <stdlib.h>
char *konwersja (char *result,int liczba);
int main()
{
int a, b, wynik;
char znak;
char rzymskie[50];
printf("------ KALKULATOR LICZB RZYSMKICH ------\n\n");
printf("Podaj rownanie: ");
scanf("%d %c %d", &a, &znak, &b);
printf("\n");
printf("W zapisie arabskim: \n");
if(znak == '+')
{
wynik = a + b;
printf("%d + %d = %d", a, b, wynik);
}
if(znak == '-')
{
wynik = a - b;
printf("%d - %d = %d", a, b, wynik);
}
if(znak == '*')
{
wynik = a * b;
printf("%d * %d = %d", a, b, wynik);
}
if(znak == '/')
{
if(b == 0 || a%b != 0)
{
printf("Nie mozna wykonac dzialania !");
}
else
{
wynik = a / b;
printf("%d / %d = %d", a, b, wynik);
}
}
printf("\n\n");
if(!(b != 0 && znak == '/'))
{
printf("W zapisie rzymskim: \n");
printf("%s ", konwersja(rzymskie, a));
printf("%c ", znak);
printf("%s ", konwersja(rzymskie, b));
printf("= ");
printf("%s", konwersja(rzymskie, wynik));
printf("\n\n");
}
getch();
return 0;
}
char *konwersja (char *cyfra, int liczba)
{
#define N 7
int i = 0, j = 0;
unsigned int arabskie[N] = {1000, 500, 100, 50, 10, 5, 1};
char rzymskie[N] = {'M', 'D', 'C', 'L', 'X', 'V', 'I'};
if((liczba > 3999) || (liczba < 0)) return NULL;
if (liczba == 0) return cyfra;
while((liczba) && (i < N))
{
if(liczba >= arabskie[i])
{
liczba -= arabskie[i];
cyfra[j++] = rzymskie[i];
}
else if ((i%2 == 0) && (i < N-2) && (liczba >= arabskie[i] - arabskie[i+2])
&& (arabskie[i+2] != arabskie[i] - arabskie[i+2]))
{
liczba -= arabskie[i] - arabskie[i+2];
cyfra[j++] = rzymskie[i+2];
cyfra[j++] = rzymskie[i];
i++;
}
else if ((i%2 == 1) && (i < N-1) && (liczba >= arabskie[i] - arabskie[i+1])
&& (arabskie[i+1] != arabskie[i] - arabskie[i+1]))
{
liczba -= arabskie[i] - arabskie[i+1];
cyfra[j++] = rzymskie[i+1];
cyfra[j++] = rzymskie[i];
i++;
}
else
{
i++;
}
}
cyfra[j++] = 0;
return cyfra;
}
0
To weź tam zamiast cyfra zwróć 0
(znak).