Kurs maturalny z języka angielskiego!
kurs-maturalny-jezyk-angielski

PROGRAMOWANIE I ALGORYTMY

Zajęcia maturalne z informatyki
Olimpiada Informatyczna Juniorów
    Prowadzący: Marcin Kasprowicz
  • właściciel serwisu algorytm.edu.pl
  • wrzesień 2024 — start zajęć
  • 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:

$$\frac{3}{7}+\frac{6}{5}=\cdots$$

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

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

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

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

Rozwiązanie w C++:

//algorytm.edu.pl
#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;
 
    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ć $$n=NWD(licznik,mianownik0$$ i skrócić przez liczbę $$n$$ powstały w wyniku mnożenia licznik i mianownik.