Program wykonaujący dodawanie i mnożyć liczb wymiernych(ułamków)

0

Witam
Mam problem z napisaniem programu,który ma dodawać i mnożyć liczby wymierne(ułamki) i zapisać wynik w postaci ułamka nieskracalnego. Mój problem polega na połączeniu funkcji NWD z częścią odpowiedzialną za wykonywanie głównych poleceń programu(dodawanie i mnożenie). Liczę na pomoc w podłączeniu funkcji nwd to głównego programu. Pozdrawiam

#include <stdio.h>
#include <stdlib.h> 
#include <time.h>
int main()
{
    int a, b, c, d, r, L, M;
    scanf("%d %d %d %d", &a, &b, &c, &d);
    if(b==0 || d==0){
        printf("Niepoprawne dane, nie mozna dzielic przez 0");
    }
    else{
        L=a*d+c*b;
        M=b*d;

      printf("Licznik sumy jest rowny %d, natomiast mianownik %d, a suma %d \n", L, M, L/M);
      printf("Licznik iloczynu jest rowny %d, natomiast mianownik %d, a iloczyn %d \n", a*c, b*d, a*c/b*d);
    }
    getchar();
    return 0;
}

A funkcja licząca NWD

int NWD(int a, int b)
{
    if(a==b)
        return a;
    else
        if(a<b)
        {
            for(int i=a; i>=1; i--)
                if(a%i==0 && b%i==0)
                    return i;
        }
        else
        {
             for(int i=b; i>=1; i--)
                if(a%i==0 && b%i==0)
                    return i;  
        }
}
0

Jesteś na forum.
Sformułuj pytanie.

0

Jak podłączyć pod główny program funkcje NWD i wykorzystać ją do skrócenia ułamków?

0

No, to teraz możemy rozmawiać :)
W jaki sposób zrobiłbyś to na kartce?

0

Oblicz NWD(a,b) i to co ci wyjdzie podziel przez licznik i mianownik.
a - licznik co ci wyjdzie przy dodawaniu
b - mianownik co ci wyjdzie przy dodawaniu

To przy skracaniu ;>

nwd = NWD(licznik,mianownik);
licznik = licznik/nwd;
mianownik = mianownik/bwd;
0

NWD - algorytm Euklidesa

0

Na kartce w sensie po za programem? Oczywiście dodałbym i pomnożył, potem skrócił przez to NWD tych 2 liczb. Nadal nie rozumiem w jaki sposób mogę wyciągnąć liczbę z tej funkcji NWD i wykorzystać ją przy skracaniu.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
    int a, b, c, d, r, L, M;
    scanf("%d %d %d %d", &a, &b, &c, &d);
    if(b==0 || d==0){
        printf("Niepoprawne dane, nie mozna dzielic przez 0");
    }
    else{
        int NWD(int a, int b)
{
    if(a==b)
        return a;
    else
        if(a<b)
        {
            for(int i=a; i>=1; i--)//w tej linijce kompilator pokazuje błąd.
                if(a%i==0 && b%i==0)
                    return i;
        }
        else
        {
             for(int i=b; i>=1; i--)
                if(a%i==0 && b%i==0)
                    return i;
        }
}



        L=a*d+c*b;
        M=b*d;

      printf("Licznik sumy jest rowny %d, natomiast mianownik %d, a suma %d \n",  L/M);
      printf("Licznik iloczynu jest rowny %d, natomiast mianownik %d, a iloczyn %d \n", a*c, b*d, a*c/b*d);
    }
    getchar();
    return 0;
}
0

Naprawdę męczę się z tym programem :). Wydaje mi się, że sam logiczny pomysł napisania tego programu jest dobry, tylko gdzieś występują błędy, których nie potrafię naprawić.

 #include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define L=a*d+c*b;
#define M=b*d;
#define LA=a*c;
#define MA==M;
int main(){
 int a, b, c, d, r, NWD, NWDa, LicznikS, MianownikS,LicznikI,MianownikI, x,y;
    scanf("%d %d %d %d", &a, &b, &c, &d);
x=int NWD(int L, int M)


{
    if(L==M)
        return L;
    else
        if(L<M)
        {
            for(int i=L; i>=1; i--)
                if(L%i==0 && M%i==0)
                    return i;
        }
        else
        {
             for(int i=L; i>=1; i--)
                if(L%i==0 && M%i==0)
                    return i;
        }
}

y=int NWDA(int LA, int LM)
    if(LA==MA)
        return LA;
    else
        if(LA<MA)
        {
            for(int i=LA; i>=1; i--)
                if(LA%i==0 && MA%i==0)
                    return i;
        }
        else
        {
             for(int i=LA; i>=1; i--)
                if(La%i==0 && MA%i==0)
                    return i;
        }
{

    if(b==0 || d==0){
        printf("Niepoprawne dane, nie mozna dzielic przez 0");
    }
    else{
        LicznikS=L/x;
        MianownikS=M/x;
        LicznikI=LA/y;
        MianownikI=MA/y;


      printf("Suma ułamkow jest=%d \n", LicznikS/MianownikS);
      printf("Iloczyn ułamków jest=%d \n", LicznikI/MianownikI);
    }
    getchar();
    return 0;
}
0

Przepraszam, że dodaje jeszcze raz, ale nie mogę coś edytować Naprawdę męczę się z tym programem :). Wydaje mi się, że sam logiczny pomysł napisania tego programu jest dobry, tylko gdzieś występują błędy, których nie potrafię naprawić.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define L=a*d+c*b;
#define M=b*d;
#define LA=a*c;
#define MA==M;
int main(){
 int a, b, c, d, r, NWD, NWDa, LicznikS, MianownikS,LicznikI,MianownikI, x,y;
    scanf("%d %d %d %d", &a, &b, &c, &d);
x=int NWD(int L, int M)


{
    if(L==M)
        return L;
    else
        if(L<M)
        {
            for(int i=L; i>=1; i--)
                if(L%i==0 && M%i==0)
                    return i;
        }
        else
        {
             for(int i=L; i>=1; i--)
                if(L%i==0 && M%i==0)
                    return i;
        }
}

y=int NWDA(int LA, int LM)
    if(LA==MA)
        return LA;
    else
        if(LA<MA)
        {
            for(int i=LA; i>=1; i--)
                if(LA%i==0 && MA%i==0)
                    return i;
        }
        else
        {
             for(int i=LA; i>=1; i--)
                if(La%i==0 && MA%i==0)
                    return i;
        }
{

    if(b==0 || d==0){
        printf("Niepoprawne dane, nie mozna dzielic przez 0");
    }
    else{
        LicznikS=L/x;
        MianownikS=M/x;
        LicznikI=LA/y;
        MianownikI=MA/y;


      printf("Suma ułamkow jest=%d \n", LicznikS/MianownikS);
      printf("Iloczyn ułamków jest=%d \n", LicznikI/MianownikI);
    }
    getchar();
    return 0;
} 
1

Tobie po prostu brakuje elementarnej wiedzy o składni tego języka.
Przeczytaj kilka poradników na temat funkcji w C, a nie zgaduj.

Po co te #definey tam masz w ogóle?

0

Ponieważ chciałem zadeklarować wartości dla danych liczb na samym początku programu, aby wprowadzić wartości do funkcji nwd. Po prostu nie rozumiem tego:
Mam napisany program, który ma obliczać te ułamki i muszę je tylko skrócić, więc dopisuje funkcje nwd. I nie mam pojęcia jak wprowadzić licznik i mianownik do funkcji nwd, a potem wyciągnąć z tej funkcji to wartość tego nwd.

0

Czyli po prostu nie wiesz, jak wywoływać funkcje. Dlaczego tak bardzo unikasz przeczytania jakichś materiałów o składni C?

0

Okey już chyba mniej więcej wiem jak trzeba wywołać te dane ,tylko nie rozumiem tego, dlaczego codeblocks nie chce mi zkompilować programu liczącego samo NWD, pokazuję błąd w skomentowanym miejscu. A dev zkompilował i funkcja NWD działa.

int NWD(int a, int b)
{
    if(a==b)
        return a;
    else
        if(a<b)
        {
            for(int i=a; i>=1; i--)// tu jest błąd 
                if(a%i==0 && b%i==0)
                    return i;
        }
        else
        {
             for(int i=b; i>=1; i--)
                if(a%i==0 && b%i==0)
                    return i;
        }
}
 
0

Jaaaaaaaaki błąd?
skompilować

0

Po przeczytaniu małego poradnika i trochę pracy udało mi się stworzyć takie, coś tylko znowu gdzieś jest błąd w funkcji void, ale jesteśmy coraz bliżej poprawnego rozwiązania.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
int NWD(int a, int b)
{
    if(a==b)
        return a;
    else
        if(a<b)
        {
            for(int i=a; i>=1; i--)
                if(a%i==0 && b%i==0)
                    return i;
        }
        else
        {
             for(int i=b; i>=1; i--)
                if(a%i==0 && b%i==0)
                    return i;
        }
}

void wypisz_wynik(int calosci, int licznik, int mianownik)
{
    if(calosci == 0 && licznik == 0)
        cout << "0";
    else
        if(calosci==0 && licznik != 0)
            cout << licznik << "/" << mianownik;
        else
            if(calosci!=0 && licznik == 0)
                cout << calosci;
            else
                cout << calosci << "+" << licznik << "/" << mianownik;
}

int main(){
int LA,MA,LB,MB,sumaC, sumaL, sumaM, iloczynC, iloczynL, iloczynM,NWDsuma, NWDiloczyn;
    printf ("Podaj wartość pierwszzego licznika: ");
    scanf("%d", &LA);
    printf ("Podaj wartość pierwszzego mianownika: ");
    scanf("%d",&MA);
    printf ("Podaj wartość drugiego licznika: ");
    scanf("%d",&LB);
    printf ("Podaj wartość drugiego mianownika: ");
    scanf("%d",&MB);
          
          
    
    
  


    if(b==0 || d==0){
        printf("Niepoprawne dane, nie mozna dzielic przez 0");
    }
    else {
sumaL = LA*MB+LB*MA;
sumaM = MA*MB:
NWDsuma = NWD(sumaL,sumaM);
sumaL = sumaL/NWDsuma;
sumaM = sumaM/NWDsuma;
sumaC = sumaL/sumaM;
sumaL = sumaL%sumaM;






iloczynL = LA*LB;
iloczynM = MA*MB;
NWDiloczyn = NWD(iloczynL,iloczynM);
iloczynL = iloczynL/NWDiloczyn;
iloczynM = iloczynM/NWDiloczyn;
iloczynC = iloczynL/iloczynM;
iloczynL = iloczynL%iloczynM;



      printf("Suma ulamkow: ");
      wypisz_wynik(sumaC,sumaL,sumaM);
      printf("/n");
      printf("Iloczyn ulamkow:");
      wypisz_wynik(iloczynC,iloczynL,iloczynM);
      printf("/n")      
  
  
    }
    getchar();
    return 0;
} 
0

No do bra dopisałem bibliotekę od couta,(iostream) nadal nie działa.

Bugi1996 napisał(a):

Po przeczytaniu małego poradnika i trochę pracy udało mi się stworzyć takie, coś tylko znowu gdzieś jest błąd w funkcji void, ale jesteśmy coraz bliżej poprawnego rozwiązania.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
int NWD(int a, int b)
{
    if(a==b)
        return a;
    else
        if(a<b)
        {
            for(int i=a; i>=1; i--)
                if(a%i==0 && b%i==0)
                    return i;
        }
        else
        {
             for(int i=b; i>=1; i--)
                if(a%i==0 && b%i==0)
                    return i;
        }
}

void wypisz_wynik(int calosci, int licznik, int mianownik)
{
    if(calosci == 0 && licznik == 0)
        cout << "0";
    else
        if(calosci==0 && licznik != 0)
            cout << licznik << "/" << mianownik;
        else
            if(calosci!=0 && licznik == 0)
                cout << calosci;
            else
                cout << calosci << "+" << licznik << "/" << mianownik;
}

int main(){
int LA,MA,LB,MB,sumaC, sumaL, sumaM, iloczynC, iloczynL, iloczynM,NWDsuma, NWDiloczyn;
    printf ("Podaj wartość pierwszzego licznika: ");
    scanf("%d", &LA);
    printf ("Podaj wartość pierwszzego mianownika: ");
    scanf("%d",&MA);
    printf ("Podaj wartość drugiego licznika: ");
    scanf("%d",&LB);
    printf ("Podaj wartość drugiego mianownika: ");
    scanf("%d",&MB);
          
          
    
    
  


    if(b==0 || d==0){
        printf("Niepoprawne dane, nie mozna dzielic przez 0");
    }
    else {
sumaL = LA*MB+LB*MA;
sumaM = MA*MB:
NWDsuma = NWD(sumaL,sumaM);
sumaL = sumaL/NWDsuma;
sumaM = sumaM/NWDsuma;
sumaC = sumaL/sumaM;
sumaL = sumaL%sumaM;






iloczynL = LA*LB;
iloczynM = MA*MB;
NWDiloczyn = NWD(iloczynL,iloczynM);
iloczynL = iloczynL/NWDiloczyn;
iloczynM = iloczynM/NWDiloczyn;
iloczynC = iloczynL/iloczynM;
iloczynL = iloczynL%iloczynM;



      printf("Suma ulamkow: ");
      wypisz_wynik(sumaC,sumaL,sumaM);
      printf("/n");
      printf("Iloczyn ulamkow:");
      wypisz_wynik(iloczynC,iloczynL,iloczynM);
      printf("/n")      
  
  
    }
    getchar();
    return 0;
} 
0

Gdy idziesz do lekarza to mówisz mu panie, boli mnie - o co chodzi? czy boli mnie nerka tu i tu, o co może chodzić?

0

Nie chciało mi się porządkować tego kodu ;<

#include <iostream>
using namespace std;

class Utils{
	public:
	static int NWD(int a, int b)
    {
        if(a==b)
            return a;
        else
            if(a<b)
            {
                for(int i=a; i>=1; i--)
                    if(a%i==0 && b%i==0)
                        return i;
            }
            else
            {
                 for(int i=b; i>=1; i--)
                    if(a%i==0 && b%i==0)
                        return i;
            }
    }    	
};
class Ulamek{
    private:
    int licznik;
    int mianownik;
    
    public :
    Ulamek dodaj(Ulamek u){
        Ulamek ul;
        ul.setLicznik(licznik * u.getMianownik() + u.getLicznik() * mianownik);
        ul.setMianownik(mianownik * u.getMianownik());
        ul.skroc();
        return ul;
    }
    Ulamek pomnoz(Ulamek u){
        Ulamek ul;
        ul.setLicznik(licznik * u.getLicznik());
        ul.setMianownik(mianownik * u.getMianownik());
        ul.skroc();
        return ul;
    }
    void skroc(){
        int nwd = Utils::NWD(licznik, mianownik);
        licznik = licznik / nwd;
        mianownik = mianownik / nwd;        
    }
    void setLicznik(int li){
        licznik = li;
    }
    int getLicznik(){
        return licznik;
    }
    void setMianownik(int mi){
        mianownik = mi;
    }
    int getMianownik(){
        return mianownik;
    }    
 
};
 
int main() {
    Ulamek ul1;
    Ulamek ul2;
    int in ;
 
    cout << "Podaj licznik 1 ulamka:" << endl;
    cin >> in;
    ul1.setLicznik(in);
    cout << "Podaj mianownik 1 ulamka" << endl;
    cin >> in;
    ul1.setMianownik(in);
    cout << "Podaj licznik 2 ulamka:" << endl;
    cin >> in;
    ul2.setLicznik(in);
    cout << "Podaj mianownik 2 ulamka" << endl;    
    cin >> in;
    ul2.setMianownik(in);
 
    cout << "Dodawanie:" << endl;
    Ulamek ulDodawanie = ul1.dodaj(ul2);
    cout << "Licznik : " << ulDodawanie.getLicznik() <<endl;
    cout << "Mianownik :" << ulDodawanie.getMianownik() <<endl;
 
    cout << "Mnozenie:" << endl;
    Ulamek ulMnozenie = ul1.pomnoz(ul2);
    cout << "Licznik : " << ulMnozenie.getLicznik()<<endl;
    cout << "Mianownik :" << ulMnozenie.getMianownik()<<endl;    
 
 
    return 0;
}
0

Dobra dzięki bardzo, posiedziałem trochę nad swoim programem i go zmodernizowałem. Wszystko działa jak należy. Dzięki za chęć pomocy, ale następnym razem szybciej uzyskam odpowiedz czytając jakiś poradnik niż próbując uzyskać szybką odpowiedz na forum. Dzięki patryk27

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