添加两个分数 [英] Add two fraction

查看:122
本文介绍了添加两个分数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  #include< iostream> 
using namespace std;


class Fraction {
private:
int num;
int denom;

public:
Fraction(){
int num = 0;
int denom = 1;
}

Fraction(const Fraction& ref){
num = ref.num;
denom = ref.denom;
}

Fraction(int arg){

num = arg;

denom = 1;
}

Fraction(int arg,int arg2){
num = arg;
if(arg2 == 0)
denom = 1;
else
denom = arg2;
}

〜Fraction(){
}

void setnum(int arg){
num =
return;
}

void setdenom(int arg){
if(arg){
denom = arg;
} else {
denom = 1;
}
return;
}

int getnum()const {
return num;
}

int getdenom()const {
return denom;
}
};

分数加法(Fraction& Fraction&);
Fraction init(void);
void print(Fraction&);
void menu(void);

int main(){

menu();

return 0;
}

void menu(){
int option;
Fraction e;
Fraction f;
Fraction g;

cout<< 选项: ;
cin>>选项;

do {
switch(option){
case 1:
cout< 对于init:< endl;
e = init();
f = init();
menu();
break;
case 2:
cout<< For add:<< endl;
g = addition(e,f);
break;
case 3:
cout<< For print:< endl;
print(g);
break;
case 4:
cout<< bb<< endl;
break;
default:
cout<< 错误< endl;
}

} while(option!= 4);

return;
}
分数加法(Fraction& arg1,Fraction& arg2){

Fraction temp;

temp.setnum((arg1.getnum()* arg2.getdenom())+(arg1.getdenom()* arg2.getnum()));

temp.setdenom(arg1.getdenom()* arg2.getdenom());

return temp;

}

Fraction init(){
int num;
int denom;

cout<< num:;
cin>> num;

cout<< denom:;
cin>> ;

分数信息(num,denom);

返回信息;
}

void print(Fraction& info){
cout< num:< info.getnum()<< endl;
cout<< denom:< info.getdenom()<< endl;
return;
}

我正在让一个程序添加两个分数



我有3个选项的菜单:初始化,添加和打印



我的计划是:



首先,我选择init选项,然后输入两个分数



,然后我将回到菜单并选择选项添加以添加两个分数

,最后我选择打印打印结果



但是从上面的程序,麻烦从init选项



实际上我可以做输入,但是当我回到菜单,并添加,



添加不起作用



我认为它不工作,因为添加函数没有得到输入


$



对不起,因为我可怜的英语

解决方案

菜单函数被破坏。它只读取输入一次,然后永远循环(除非它 1 4 )。您应该在循环中读取选项的值。并删除选项1中不必要的递归。

  void menu(){
int option;
Fraction e;
Fraction f;
Fraction g;

do {
cout<< 选项: ;
cin>>选项;

switch(option){
case 1:
cout< 对于init:< endl;
e = init();
f = init();
// menu(); < - 删除
break;
case 2:
cout<< For add:<< endl;
g = addition(e,f);
break;
case 3:
cout<< For print:< endl;
print(g);
break;
case 4:
cout<< bb<< endl;
break;
default:
cout<< 错误< endl;
}

} while(option!= 4);

return;
}


#include <iostream>
using namespace std;


class Fraction {
private:
    int num;    
    int denom;

public:
    Fraction() {  
        int num = 0;
        int denom = 1;
    }

    Fraction(const Fraction& ref) { 
        num = ref.num;
        denom = ref.denom;
    }

    Fraction(int arg) {

        num = arg;

        denom = 1;
    }

    Fraction(int arg, int arg2) {
        num = arg;
        if (arg2 == 0)
            denom = 1;
        else 
            denom = arg2; 
    } 

    ~Fraction() {     
    }

    void setnum(int arg) {
        num = arg;
        return;
    }

    void setdenom(int arg) {
        if(arg) {
            denom = arg;
        } else {
            denom = 1;
            }
        return;
    }

    int getnum() const {
        return num;
    }

    int getdenom() const {
        return denom;
    }
};

Fraction addition(Fraction&, Fraction&);
Fraction init(void);
void print(Fraction&);
void menu(void);

int main() {

    menu();

    return 0;
}

void menu() {
    int option;
    Fraction e;
    Fraction f;
    Fraction g;

    cout << "option: ";
    cin >> option;

    do {
        switch(option) {
        case 1:
            cout << "For init: " << endl;
            e = init();
            f = init();
            menu();
            break;
        case 2:
            cout << "For add: " << endl;
            g = addition(e,f);
            break;
        case 3:
            cout << "For print: " << endl;
            print(g);
            break;
        case 4:
            cout << "bb" << endl;
            break;
        default:
            cout << "Wrong" << endl;
        }

    }while(option != 4);

    return;
}
Fraction addition(Fraction& arg1, Fraction& arg2) {

    Fraction temp;

    temp.setnum((arg1.getnum() * arg2.getdenom()) + (arg1.getdenom() * arg2.getnum()));

    temp.setdenom(arg1.getdenom() * arg2.getdenom());

    return temp;

}

Fraction init() {
    int num;
    int denom;

    cout << "num: ";
    cin >> num;

    cout << "denom: ";
    cin >> denom; 

    Fraction info(num, denom);

    return info;
}

void print(Fraction& info) {
    cout << "num: " << info.getnum() << endl;
    cout << "denom: " << info.getdenom() << endl;
    return;
} 

I am making a program to add two fraction

and I have menu for 3 option: initialization, addition and print

My plan is:

First I select the option init, and input two fractions

then I will go back to menu and select the option addition to add up two fractions

and at the last I select the option print to print the result

But from the above program, I always got trouble from the init option

actually I could do the input, but when I went back to menu and did the addition,

the addition won't work

I think it was not working because the addition function didn't get the input

So I want to ask how can I fix this?

Sorry for my poor English

解决方案

The menu function is broken. It reads the input only once and then cycles forever (unless it's 1 or 4). You should read the option value inside the loop. And remove the unnecessary recursion in option 1.

void menu() {
    int option;
    Fraction e;
    Fraction f;
    Fraction g;

    do {
        cout << "option: ";
        cin >> option;

        switch(option) {
        case 1:
            cout << "For init: " << endl;
            e = init();
            f = init();
    //      menu();  <-- Remove this
            break;
            case 2:
            cout << "For add: " << endl;
            g = addition(e,f);
            break;
        case 3:
            cout << "For print: " << endl;
            print(g);
            break;
        case 4:
            cout << "bb" << endl;
            break;
        default:
            cout << "Wrong" << endl;
        }

    }while(option != 4);

    return;
}

这篇关于添加两个分数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆