1

Тема: Дроби (помилка при обчисленні)

Усім привіт!
Працюю над калькулятором для дробів.
Писав функцію під множення 2х дробів і наче все добре, тільки значення виводить дивовижні (дивіться скіншот).
Код додаю, перегляньте. Можливо, ви скажете де помилка.

//Сама структура, яка моделюватиме дріб.
typedef struct RationalNumber{ 
    int num; //numerator 
    int den; //denominator 
}frac;
frac multiplication(frac x,frac y,frac c); //прототип функції (x , y - 2 дроби,які вводить користувач а c - результат)
//безпосередньо сама функція
frac multiplication(frac x, frac y,frac c)
{
    c.num = x.num*y.num;
    c.den = x.den*y.den;
    return c;
        
}

void main(void)
{frac x5, y5, c5;
        printf("Please,input 1st fraction\n");
        scanf("%d %d", &x5.num, &x5.den);
        printf("Please,input 2nd fraction\n");
        scanf("%d %d",&y5.num,&y5.den);
        multiplication(x5,y5,c5);
        printf("Result is : \n %d \n %d\n",c5.num,c5.den);
system("pause");
} 
Post's attachments

Untitled1.png 2.1 kb, 271 downloads since 2015-05-13 

2

Re: Дроби (помилка при обчисленні)

Ви не змінюєте значення c5. В функцію передається не змінна, а її значення - вам це не пояснювали? Якщо пишете на pure C, то треба передавати в функцію посилання (як ви робите в scanf), ну або просто приймати те, що ви повертаєте з функції:

c5 = multiplication(x5,y5,c5);

І тоді останній параметр жодного разу тут не потрібен.

Подякували: #Sparta2

3

Re: Дроби (помилка при обчисленні)

Щойно дійшов того самого всновку :)
Туплю.
Ось виправлений код :

typedef struct RationalNumber{
    int num; //numerator
    int den; //denominator 
}frac;
void multiplication(frac x,frac y,frac *c);
void multiplication(frac x, frac y,frac *c)
{
    c->num = x.num*y.num;
    c->den = x.den*y.den;
            
}
frac x5, y5, c5;
        printf("Please,input 1st fraction\n");
        scanf("%d %d", &x5.num, &x5.den);
        printf("Please,input 2nd fraction\n");
        scanf("%d %d",&y5.num,&y5.den);
        multiplication(x5,y5,&c5);
        printf("Result is : \n %d \n %d\n",c5.num,c5.den);