Mnożenie i dzielenie ułamków

0

Dzień Dobry,
Potrzebuje pomocy dla córki, mamy już program do dodawania, ale jak go przerobić na dzielenie?

#include<iostream>
using namespace std;
 
int NWD(int a, int b)
{
    int pom;
    while(b!=0)
    {
     pom = b;
     b = a%b;
     a = pom;  
    }
    return a;
}
 
int NWW(int a, int b)
{
    return a/NWD(a,b)*b;
}
 
int main()
{
    int l1, l2, m1, m2; //liczniki i mianowniki
    char kreska;
 
    cout<<"Podaj pierwszy ułamek w formacie licznik/mianownik: ";
    cin>>l1>>kreska>>m1;
 
    cout<<"Podaj drugi ułamek w formacie licznik/mianownik: ";
    cin>>l2>>kreska>>m2;    
 
    int licznik, mianownik; //licznik i mianownik ułamka wynikowego
 
    mianownik = NWW(m1, m2);
    int pom = licznik = mianownik/m1*l1 + mianownik/m2*l2;
 
    licznik /= NWD(pom,mianownik);
    mianownik /= NWD(pom,mianownik);
 
    cout<<l1<<"/"<<m1<<" + "<<l2<<"/"<<m2<<" = "<<licznik<<"/"<<mianownik;
 
    cin.ignore();
    cin.get();
 
    return 0;    
}
1

No przecież tam niżej jest napisane

Mnożenie ułamków

Mnożenie ułamków jest znacznie prostszą operacją, ponieważ wystarczy pomnożyć przez siebie liczniki i mianowniki, a następnie wyznaczyć n=NWD(licznik,mianownik0
i skrócić przez liczbę n powstały w wyniku mnożenia licznik i mianownik.

A dzielenie to jest mnożenie przez odwrotność ułamka

Czyli odwrócić, wymnożyć, i wyżnaczyć największy wspólny dzielnik

1
Lukmaster80 napisał(a):

Dzień Dobry,
Potrzebuje pomocy dla córki,

Chore ...

2

Weź zrób sobie strukturę, jak sobie pościelisz tak się wyspisz:

#include <iostream>
using namespace std;

long long NWD(long long a,long long b)
{
    for(long long r;b!=0;a=b,b=r) r=a%b;
    return a?a:1;
}

struct Fraction { long long num,den; };
Fraction normalize(const Fraction &f)
{
	long long nwd=NWD(f.num,f.den);
	return Fraction{f.num/nwd,f.den/nwd};
}

Fraction add(const Fraction &a,const Fraction &b)
{
	return normalize(Fraction{a.num*b.den+b.num*a.den,a.den*b.den});
}

ostream &prn(ostream &s,const Fraction &f)
{
	return s<<f.num<<'/'<<f.den;
}

int main()
{
	Fraction a{12,15},b{4,6};
	prn(cout,a)<<" * ";
	prn(cout,b)<<" = ";
	prn(cout,add(a,b))<<endl;
	return 0;
}
2
class fraction {
public:
    fraction(int num, int den) : numerator{num}, denominator{den}
    {}
    
    fraction(int x) : fraction{ x, 1 }
    {}

    fraction() : fraction{ 0, 1 }
    {}

    fraction mul(const fraction& other) const
    {
        return { numerator * other.numerator, denominator * other.denominator};
    }

    fraction add(const fraction& other) const
    {
        return { numerator * other.denominator + denominator * other.numerator, denominator * other.denominator};
    }

    fraction reduce() const 
    {
        auto d = std::gcd(numerator, denominator);
        return { numerator / d, denominator / d};
    }
    
private:
    int numerator;
    int denominator;
};

https://godbolt.org/z/jGdnfc34x

0

#include<iostream>
using namespace std;

int NWD(int a, int b)
{
int pom;
while(b!=0)
{
pom = b;
b = a%b;
a = pom;
}
return a;
}
int NWW(int a, int b)
{
return ab/NWD(a, b);
}
int main()
{
int l1, l2, m1, m2;
char kreska;
cout<<"Podaj pierwszy ułamek w formacie licznik/mianownik: ";
cin>>l1>>kreska>>m1;
cout<<"Podaj drugi ułamek w formacie licznik/mianownik: ";
cin>>l2>>kreska>>m2;
cout<<"mnożenie:";
cout<<l1<<"/"<<m1<<"
"<<l2<<"/"<<m2<<'='<<l1l2<<"/"<<m1m2<<'='<<l1l2/NWD(l1l2, m1m2)<<"/"<<m1m2/NWD(l1l2,m1m2)<<endl;
return 0;
}

Dziękuję, udało mi się wymyślić coś takiego na mnożenie, może się komuś przyda do szkoły :)

0

@Lukmaster80:

Dzielenie w liczbach całkowitych może być zaskakujące

1 użytkowników online, w tym zalogowanych: 0, gości: 1