Oppure

Loading
14/02/12 16:31
The Face
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 :D
aaa
14/02/12 16:39
dmr
Hai dimenticato break alla fine di ogni case.
5/6 * 3/4 fa 15/24
aaa
14/02/12 16:57
The Face
Ho sbagliato a scrivere 20 perché ho scritto velocemente e non me ne sono accorto :rofl:
comunque grazie mille :D
aaa