Programowanie i algorytmy

KONKURS FRAKTAL

fraktal

VII edycja konkursu programistycznego

FRAKTAL

8-9 kwietnia 2017

czytaj więcej

Operacje na ułamkach

powrót

Przy omawianiu algorytmów operujących na ułamkach wykorzystamy algorytm Euklidesa opisany w tym miejscu oraz algorytm NWW - najmniejsza wspólna wielokrotność

Dodawanie (odejmowanie) ułamków

Załóżmy, że chcemy dodać (odjąć) do siebie dwa ułamki zwykłe przedstawione w postaci bez całości. Pamiętamy ze szkoły podstawowej, że należy sprowadzić je do wspólnego mianownika wyznaczając najmniejszą wspólną wielokrotność, następnie rozszerzamy każdy z ułamków o brakujący czynnik. Na końcu dodajemy (odejmujemy) liczniki a mianowniki spisujemy.

Przykład:

{tex}\frac{3}{7}+\frac{6}{5}=\cdots{/tex}

Teraz rozszerzamy ułamki wyznaczając {tex}NWW(7,5)=35{/tex} a następnie rozszerzamy pierwszy ułamek o  {tex}NWW(7,5)/7 = 5{/tex} a drugi o  {tex}NWW(7,5)/5 = 7{/tex}

{tex}=\frac{3\cdot 5}{7\cdot 5}+\frac{6\cdot 7}{5\cdot 7}=\frac{57}{35}{/tex}

W ostatnim kroku skracamy ułamek dzieląc licznik i mianownik przez {tex}NWD(licznik, mianownik){/tex}. W tym przykładzie {tex}NWD(77,35)=7{/tex}, a więc:

{tex}\frac{77/NWD(77,35)}{35/NWD(77,35)}=\frac{11}{7}{/tex}

Rozwiązanie w C++:

 

#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;    
}
 
 

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ć {tex}n=NWD(licznik,mianownik0{/tex} i skrócić przez liczbę {tex}n{/tex} powstały w wyniku mnożenia licznik i mianownik.