• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z dodawaniem ulamkow

VPS Starter Arubacloud
0 głosów
422 wizyt
pytanie zadane 28 września 2015 w C i C++ przez Iras Obywatel (1,800 p.)
otwarte ponownie 29 września 2015 przez event15
#include <iostream>

using namespace std;

class Irrational
{
        int numerator; //licznik
        int denominator; //mianownik

public:
    Irrational(int,int); //liczba niewymierna
    void show(); //funkcja pokazujaca ulamek
    int NWD(int a,int b); // funkcja zwracająca najwiekszy wspolny dzielnik dwoch liczb
    void foreshorten(int &n,int &d); //funkcja skracajaca
    int NWW(int a,int b); //funkcja znajdujaca najwieksza wskpolna wielokrotnosc
    void widdening(int &n,int &d);//
    void additionIrrational();


};

int main()
{
    Irrational l(4,8),k(3,9);

    return 0;
}

void Irrational::show()
{
    cout<<numerator<<"/"<<denominator;
    cout<<endl;
}

void Irrational::foreshorten(int &n,int &d)
{
    int s=NWD(n,d);

    n=n/s;
    d=d/s;

    return;

}
int Irrational::NWD(int a,int b)
{
    while(a!=b)
    {
        if(a>b) {a-=b;}
        else {b-=a;}
    }
    return a;
}

Irrational::Irrational(int n,int d)
{
    numerator=n;
    denominator=d;
    if(denominator==0)
    {
        cerr<<"Blad...Nie dzielimy przez zero Losiu"<<endl;
        throw "Blad";
    }
    else
    {
        foreshorten(numerator,denominator);
        show();
        return;
    }

}

int Irrational::NWW(int a,int b)
{
    return a/NWD(a,b)*b;

}

void Irrational::widdening(int &n,int &d)
{
 // tutaj chcialem zrobic rozszerzenie ulamka
}

void Irrational::additionIrrational()
{
// tutaj chcialem dodac ulamki

}

 

Czesc, potrzebuje dodac dwa ulamki ale niewiem jak dostac sie do drugiego ulamka. Prosze o pomoc. Z gory dzieki

5 odpowiedzi

+1 głos
odpowiedź 28 września 2015 przez Rogargol Pasjonat (16,600 p.)
wybrane 29 września 2015 przez Iras
 
Najlepsza
Poczytaj o przeładowywaniu operatorów i przeładuj sobie operator +

Jakbys mial poblemy to dawaj znac, ale mysle ze to ogarniesz jak zglebisz ten temat.
komentarz 28 września 2015 przez Rogargol Pasjonat (16,600 p.)
komentarz 29 września 2015 przez Iras Obywatel (1,800 p.)
#include <iostream>

using namespace std;

class Irrational
{
        int numerator; //licznik
        int denominator; //mianownik

public:
    Irrational(int=0,int=0); //liczba niewymierna
    void show(); //funkcja pokazujaca ulamek
    int NWD(int a,int b); // funkcja zwracaj¹ca najwiekszy wspolny dzielnik dwoch liczb
    void foreshorten(int &n,int &d); //funkcja skracajaca
    int NWW(int a,int b); //funkcja znajdujaca najwieksza wskpolna wielokrotnosc
    friend ostream &operator >> (ostream &Exit,Irrational const &A);
    friend istream &operator << (istream &Door,Irrational &A);
    Irrational operator+(Irrational const &A);
    Irrational operator=(Irrational const &A);
};

int main()
{
    Irrational l(2,4);
    cout<<l; //tu wywala
    return 0;
}

void Irrational::show()
{
    cout<<numerator<<"/"<<denominator;
    cout<<endl;


}

void Irrational::foreshorten(int &n,int &d)
{
    int s=NWD(n,d);

    n=n/s;
    d=d/s;

    return;

}
int Irrational::NWD(int a,int b)
{
    while(a!=b)
    {
        if(a>b) {a-=b;}
        else {b-=a;}
    }
    return a;
}

Irrational::Irrational(int n,int d)
{
    numerator=n;
    denominator=d;
    if(denominator==0)
    {
        cerr<<"Blad...Nie dzielimy przez zero Losiu"<<endl;
        throw "Blad";
    }
    else
    {
        foreshorten(numerator,denominator);
        show();
        return;
    }

}

int Irrational::NWW(int a,int b)
{
    return a/NWD(a,b)*b;

}

ostream &operator >> (ostream &Exit,Irrational const &A)
{
    Exit<<A.numerator<<A.denominator;
    return Exit;
}

istream &operator << (istream &Door,Irrational &A)
{
    Door>>A.numerator>>A.denominator;
    return Door;
}

Irrational Irrational::operator + (Irrational const &A)
{
    return Irrational(numerator+A.numerator,denominator+A.denominator);
}

Irrational Irrational::operator = (Irrational const &A)
{
    return numerator=A.numerator;
    return denominator=A.denominator;

}


Poczytałem troche na temat tego przeładowania i zrobić zrobiłem ale nie bardzo wiem na czym to polega i gdzies mi wywala bład jak chce wypisac ułamek.

 

komentarz 29 września 2015 przez Iras Obywatel (1,800 p.)
Juz zrozumialem na czym polega te przeładowanie ale dalej nie wiem gdzie mam bład w kodzie ze nie odczytuje mi ulamka
+1 głos
odpowiedź 29 września 2015 przez Rogargol Pasjonat (16,600 p.)
Wywala Ci, bo nie mozesz zrobic po prostu

cout<<l;

Bo strumien cout nie wie jak wspolpracowac z Twoim typem danych. Sam musisz opisac co ma sie wyswietlic, np tworzac metode ktora zwroci jakas wartosc nadajaca sie do wspolpracy z cout, albo po prostu metode ktora to wyswietli.
komentarz 29 września 2015 przez Iras Obywatel (1,800 p.)
wyszystko było zrobione zrobiłem błąd przy wypisywaniu wejscia wyjścia zapisałem odwrotnie << znaki :). Ale dzięki za pomoc
0 głosów
odpowiedź 28 września 2015 przez Iras Obywatel (1,800 p.)
Niewiem czy dobrze mysle ale moze trzeba utworzyc funkcje na zewnatrz klasy? tylko chyba nie bede mogl dostac sie do zmiennych
komentarz 29 września 2015 przez niezalogowany
Przyjaźń między klasą a funkcją
0 głosów
odpowiedź 30 września 2015 przez Iras Obywatel (1,800 p.)
#include <iostream>

using namespace std;

class Irrational
{
        int numerator; //licznik
        int denominator; //mianownik

public:
    Irrational(int,int); //liczba niewymierna
    void show(); //funkcja pokazujaca ulamek
    int NWD(int a,int b); // funkcja zwracaj¹ca najwiekszy wspolny dzielnik dwoch liczb
    void foreshorten(int &n,int &d); //funkcja skracajaca
    int NWW(int a,int b); //funkcja znajdujaca najwieksza wskpolna wielokrotnosc
    friend ostream &operator << (ostream &Exit,Irrational const &A);//funkcja pokazujaca ulamek(przeciazenie)
    Irrational operator+(const Irrational  &A);//funkcja dodajaca ulamek(przeciazenie)
    void extension(int n,int d);//funkcja rozszezajaca ulamek
};

int main()
{
     Irrational l(2,4),k(3,5);
     Irrational w=l+k;
     cout<<w;
    return 0;
}

void Irrational::show()
{
    cout<<numerator<<"/"<<denominator;
    cout<<endl;


}

void Irrational::foreshorten(int &n,int &d)
{
    int s=NWD(n,d);

    n=n/s;
    d=d/s;

    return;

}
int Irrational::NWD(int a,int b)
{
    while(a!=b)
    {
        if(a>b) {a-=b;}
        else {b-=a;}
    }
    return a;
}

Irrational::Irrational(int n,int d)
{

    numerator=n;
    denominator=d;
    if(denominator==0)
    {
        cerr<<"Blad...Nie dzielimy przez zero Losiu"<<endl;
        throw "Blad";
    }
    else
    {
        extension(numerator,denominator);
        foreshorten(numerator,denominator);

        show();

        return;
    }

}

int Irrational::NWW(int a,int b)
{
    return a/NWD(a,b)*b;

}

ostream &operator << (ostream &Exit,Irrational const &A)
{
    Exit<<A.numerator<<"/"<<A.denominator;
    return Exit;
}

Irrational Irrational::operator + ( Irrational const &A)
{
    return Irrational(numerator+A.numerator,denominator+A.denominator);
}

void Irrational::extension(int n,int d)
{

    int m = NWW(denominator,denominator);//tutaj zeby obliczalo NWW z dwoch mianownikow
    int e = m/d;
    numerator=e*n;
    denominator=e*d;

    return ;
}

zrobiłem czesc kodu do momentu ze niby zlicza dwa ulamki ale chcialbym zeby sprowadzalo do wspolnego mianownika nie wiem jak odniesc sie do dwoch mianownikow . Prosze o pomoc

 

0 głosów
odpowiedź 1 października 2015 przez Iras Obywatel (1,800 p.)
Czy ktoś mógłby mi pomoc jak wywołać funkcje NWW z dwoma mianownikami? Z góry dziękuje

Podobne pytania

0 głosów
4 odpowiedzi 4,419 wizyt
pytanie zadane 18 listopada 2015 w C i C++ przez Memories Obywatel (1,410 p.)
0 głosów
1 odpowiedź 184 wizyt
pytanie zadane 12 sierpnia 2016 w C i C++ przez mmr0429 Bywalec (2,010 p.)
0 głosów
1 odpowiedź 432 wizyt

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...