Witam. Mam następujący problem. Mam napisać kalkulator ułamków zwykłych. Oto miejsce z którym mam trudność:
long long int* rozszerzenie(long long int *ulamek1, long long int *ulamek2, long long int* wynik)
{
long long int nww;
nww = licz_nww(ulamek1[1], ulamek2[1]);
*(wynik+0) = ulamek1[0] * nww / ulamek1[1];
*(wynik+1) = nww;
return wynik;
}
long long int* dodawanie(long long int* ulamek1, long long int* ulamek2, long long int* wynik)
{
ulamek1 = rozszerzenie(ulamek1, ulamek2, wynik);
ulamek2 = rozszerzenie(ulamek2, ulamek1, wynik);
*(wynik+0) = ulamek1[0] + ulamek2[0];
*(wynik+1) = ulamek1[1];
wynik = skracanie(wynik);
return wynik;
}
long long int* skracanie(long long int* ulamek)
{
long long int nwd;
nwd = licz_nwd(ulamek[0], ulamek[1]);
*(ulamek+0) = ulamek[0]/nwd;
*(ulamek+1) = ulamek[1]/nwd;
return ulamek;
}
Nie wklejam całego kodu, bo chyba to byłoby zbyt zagmatwane. Zmienne ulamek1 i ulamek2 zawierają dwa elementy - licznik i mianownik. Funkcja rozszerzenie ma sprowadzać ułamki do wspólnego mianownika. Analizując przejście programu linia po linii, po pierwszym przypisaniu w funkcji dodawanie ulamek1 przyjmuje odpowiednie wartości. Po przypisaniu wartości funckji rozszerzenie do ulamek2, ulamek1 zmienia swoją wartość tak, że jest równy ulamek2. W rezultacie, gdy program ma wykonać działanie np. 1/2+1/3 w wyniku daje nie 5/6, tylko 2/3... Dlaczego tak się dzieje? Jak tego uniknąć?
Mogę zamieścić cały kod. Z góry dziękuję.
Turambar