The Face (Normal User)
Rookie
Messaggi: 22
Iscritto: 29/09/2011
|
Salve, sto creando un programma che permette di calcolare le operazioni di somma, sottrazione, moltiplicazione e divisione tra due frazioni
il codice è questo:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{int n1, n2, d1, d2, ok, x, nr, dr;
printf("calcolo aritmetico di frazioni;\b");
do
{
printf("inserisci il numeratore della prima frazione:\n");
scanf("%d", &n1);
printf("Inserisci il denominatore della prima frazione\n");
scanf("%d", &d1);
printf("la frazione e': %d\\%d\n\n", n1, d1);
ok = 0;
if ((n1 == 0) || (d1 == 0))
{printf("il numeratore non puo' essere uguale a zero\n\n");
ok = 1;
}
else
{
printf("Inserisci il numeratore della seconda frazione\n");
scanf("%d", &n2);
printf("Inserisci il denominatore della seconda frazione\n");
scanf("%d", &d2);
printf("la frazione e': %d\\%d\n\n", n2, d2);
if ((n2 == 0) || (d2 == 0))
{printf("il numeratore non puo' essere uguale a zero\n\n");
ok = 1;
}
else
{
printf("premere 1,2,3,4 per scegliere quale operazione si vuole eseguire.\n\n somma = 1\n\n differenza = 2\n\n moltiplicazione = 3\n\n divisione = 4\n\n");
scanf("%d", &x);
switch (x)
{case 1:
nr = (n1 * d2 + n2 * d1);
dr = (d1 * d2);
case 2:
nr = (n1 * d2 - n2 * d1);
dr = (d1 * d2);
case 3:
nr = n1 * n2;
dr = d1 * d2;
case 4:
nr = n1 * d2;
dr = n2 * d1;
}
printf("il risultato e': %d\\%d\n\n", nr, dr);
}
}
}
while (ok == 1);
system("PAUSE");
return 0;
}
Il problema è che se provassi a scrivere
n1=5
d1=6
n2=3
d2=4
e poi premessi 3 per moltiplicare, dovrebbe scrivere come risultato 15/20. Invece appare 20/18, e il bello è che risulta così anche se chiedessi al programma di sommare, sottrarre o dividere (sempre con 5/6 e 3/4)! La stessa cosa succede con altre frazioni: mi da lo stesso risultato, e pure sbagliato, per tutte le operazioni (+, -, x, /). Se riuscite a trovare l'errore vi chiedo di riferirmelo
Un grazie in anticipo
|