Działania na ułamkach(NWD,NWW)

0

Mam problem z programem który ma wykonywać działania na ułamkach przy tym dokładnie je skracając i nie wiem jakiej funkcji użyć żeby obliczyć nwd i nww

#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,l3,m1,m2,m3,Polecenie=0,kreska,NWW,NWD,pom;
    int licznik, mianownik;
    int pomocnicza=licznik=mianownik/m1*l1+mianownik/m2*l2;
do
{
        cout<< "[1] Dodawanie"
        << endl << "[2] Odejmowanie"
        << endl << "[3] Mnozenie"
        << endl << "[4] Dzielenie"
        << endl << "[5] Rezygnuj"
        << endl << "Twoje polecenie:";
       
        cin >> Polecenie;
       
        switch( Polecenie ) 
        {
case 1:
           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<<"Podaj trzeci ułamek w formacie licznik/mianownik: ";
           cin>>l3>>kreska>>m3;                
   mianownik = NWW(m1, m2, m3);
   
   licznik /= NWD(pom,mianownik);
   mianownik /= NWD(pom,mianownik);
   cout<<l1<<"/"<<m1<<" + "<<l2<<"/"<<m2<<" = "<<licznik<<"/"<<mianownik;
           break;
           
case 2:
           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<<"Podaj trzeci ułamek w formacie licznik/mianownik: ";
           cin>>l3>>kreska>>m3;  
   mianownik = NWW(m1, m2, m3);

   licznik /= NWD(pom,mianownik);
   mianownik /= NWD(pom,mianownik);
           
            break;
           
        case 3:
           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<<"Podaj trzeci ułamek w formacie licznik/mianownik: ";
           cin>>l3>>kreska>>m3;  
   mianownik = NWW(m1, m2, m3);
   
   licznik /= NWD(pom,mianownik);
   mianownik /= NWD(pom,mianownik);
            break;
           
        case 4:
           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<<"Podaj trzeci ułamek w formacie licznik/mianownik: ";
           cin>>l3>>kreska>>m3;  
   mianownik = NWW(m1, m2, m3);
  
   licznik /= NWD(pom,mianownik);
   mianownik /= NWD(pom,mianownik);
           
            break;
           
        case 5:
            break;
           
        default:
            cout << "Nieprawidlowe polecenie." <<endl;
        }
}
while( Polecenie != 5 );
system("pause");
}


1

Po deklaracji: int l1,l2,l3,m1,m2,m3,Polecenie=0,kreska,NWW,NWD,pom;
"Program" "nie widzi" wcześniej zdefiniowanych funkcji int NWD(int a, int b) i int NWW(int a, int b)

0

To gdzie mam go umieścić żeby działo ?

0

Zmienić nazwy zmiennych tak aby nie było kolizji nazw.

0

A co muszę zrobić żeby dał mi nww i nwd z 3 elementów ?

0

Napisać takie funkcje.

0

Ale wyskakuje błąd przy

NWW(m1, m2, m3)

że jest za dużo elementów

0

Owszem, bo twoje NWD i NWW przyjmują dwa parametry.

0

A potrzebuje dla trzech elementów po muszę dodać trzy ułamki.

1

Zataczamy kolo, trzeba http://4programmers.net/Forum/1086538

0
int NWD(int a, int b)
{
  int pom;
 
    while(b!=0)
  {
      pom = b;
      b = a%b;
      a = pom;  
    }
    return a;
}
 
int main()
{
	long long a, b, c;		cin >> a >> b >> c;
	long long NWWbc; 			NWWbc = (b*c)/NWD(b,c);
	long long NWWabc; 	NWWabc = (a*NWWbc)/NWD(a,NWWbc); 
	//cout << NWWbc << " " <<NWWabc;
         cout << NWWabc;
}

 

jak robic NWD 3 liczby nie wiem tu masz NWW na a,b,c :)

0

NWD(a1, a2, a3, a4, ...) = NWD(a1, NWD(a2, NWD(a3, ...)))
NWW(a1, a2, a3, a4, ...) = NWW(a1, NWW(a2, NWW(a3, ...)))

0

Dobra mam coś takiego po długiej walce i teraz gdy chcę wpisać ułamki wywala program i znowu nie wiem w czym problem

#include<iostream>
#include <winsock.h>
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,l3,m1,m2,m3,Polecenie=0,kreska,pom;
    int licznik, mianownik;
    int pomocnicza=licznik=mianownik/m1*l1+mianownik/m2*l2;
do
{
        cout<< "[1] Dodawanie"
        << endl << "[2] Odejmowanie"
        << endl << "[3] Mnozenie"
        << endl << "[4] Dzielenie"
        << endl << "[5] Rezygnuj"
        << endl << "Twoje polecenie:";
       
        cin >> Polecenie;
       
        switch( Polecenie ) 
        {
case 1:
           cout<<"Podaj pierwszy ulamek w formacie licznik/mianownik: ";
           cin>>l1>>kreska>>m1;
           cout<<"Podaj drugi ulamek w formacie licznik/mianownik: ";
           cin>>l2>>kreska>>m2;
           cout<<"Podaj trzeci ulamek w formacie licznik/mianownik: ";
           cin>>l3>>kreska>>m3;    
                     
   mianownik=NWD(NWD(l1,l2),l3);
   
   licznik /= NWD(pom,mianownik);
   mianownik /= NWD(pom,mianownik);
   cout<<l1<<"/"<<m1<<" + "<<l2<<"/"<<m2<<" = "<<licznik<<"/"<<mianownik;
           break;
           
case 2:
           cout<<"Podaj pierwszy ulamek w formacie licznik/mianownik: ";
           cin>>l1>>kreska>>m1;
           cout<<"Podaj drugi ulamek w formacie licznik/mianownik: ";
           cin>>l2>>kreska>>m2;
           cout<<"Podaj trzeci ulamek w formacie licznik/mianownik: ";
           cin>>l3>>kreska>>m3;  
   ;          
   mianownik=NWD(NWD(l1,l2),l3);

   licznik /= NWD(pom,mianownik);
   mianownik /= NWD(pom,mianownik);
           
            break;
           
        case 3:
           cout<<"Podaj pierwszy ulamek w formacie licznik/mianownik: ";
           cin>>l1>>kreska>>m1;
           cout<<"Podaj drugi ulamek w formacie licznik/mianownik: ";
           cin>>l2>>kreska>>m2;
           cout<<"Podaj trzeci ulamek w formacie licznik/mianownik: ";
           cin>>l3>>kreska>>m3;  
  mianownik=NWD(NWD(l1,l2),l3);
   
   licznik /= NWD(pom,mianownik);
   mianownik /= NWD(pom,mianownik);
            break;
           
        case 4:
           cout<<"Podaj pierwszy ulamek w formacie licznik/mianownik: ";
           cin>>l1>>kreska>>m1;
           cout<<"Podaj drugi ulamek w formacie licznik/mianownik: ";
           cin>>l2>>kreska>>m2;
           cout<<"Podaj trzeci ulamek w formacie licznik/mianownik: ";
           cin>>l3>>kreska>>m3;  
   mianownik=NWD(NWD(l1,l2),l3);
  
   licznik /= NWD(pom,mianownik);
   mianownik /= NWD(pom,mianownik);
           
            break;
           
        case 5:
            break;
           
        default:
            cout << "Nieprawidlowe polecenie." <<endl;
        }
}
while( Polecenie != 5 );
system("pause");
}


0

Jaka jest wartość: pom podczas wywołania:
licznik /= NWD(pom,mianownik);

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