Bruchteil Berechnung
Ich muss ein Programm schreiben, berechnen kann Brüche mit dem operator, den der Benutzer eingibt. Ich habe verschiedene Funktionen zu reduzieren, die Fraktionen und finden Sie den größten gemeinsamen Nenner (was ich nicht sicher bin, ob ich Sie korrekt eingerichtet oder nicht), und dann habe ich die Funktion berechnen (), um die Antwort zu finden. Ich muss drucken Sie die Letzte Antwort in der Fraktion bilden, und nicht dezimal.
Das problem, das ich habe ist, dass ich nicht weiß, wie die Rückkehr num3 und den3 von calculate() zurück in die main-Funktion. Wenn jemand helfen könnte wäre ich sehr dankbar. Danke.
Hier ist mein code bisher:
/*Problem: Write a program to manipulate fractions. It allows for the addition, subtraction, multiplication, or division of fractions.
Inputs:
Outputs:
*/
#include <iostream>
using namespace std;
void calculate(int num1, int den1, int& num3, int& den3, int num2, int den2);
void reduce(int& num, int& den);
int gcd(int a, int b);
int main(){
int num1, num2, den1, den2, add, sub, mult, div;
int op, calc;
int num3, den3;
cout << "Enter the numerator of the first fraction" << endl;
cin >> num1;
cout << "Enter the denominator of the first fraction" << endl;
cin >> den1;
cout << "Enter the numerator of the second fraction" << endl;
cin >> num2;
cout << "Enter the denominator of the second fraction" << endl;
cin >> den2;
cout << "Enter a 1 for addition, 2 for subtraction, 3 for multiplication, or 4 for division" << endl;
cin >> op;
calculate(op, num1, den1, num3, den3, num2, den2);
cout << "The answer using option: " << op << endl;
cout << "is " << num3 << " /" << den3 << endl;
return 0;
}
void calculate(int op, int num1, int den1, int& num3, int& den3, int num2, int den2){
if(op==1){
num3 = num1 + num2;
den3 = den1;
}
else if(op==2){
num3 = num1 - num2;
den3 = den1;
}
else if(op==3){
num3 = num1 * num2;
den3 = den1 * den2;
}
else if(op==4){
num3 = num1 * den2;
den3 = num2 * den1;
}
}
void reduce(int& num, int& den){
int reduced;
reduced = gcd(num, den);
num = num/reduced;
den = den/reduced;
}
int gcd(int a, int b){
int divisor=1, temp;
while(b!= 0 || b>a){
temp = a % b;
a = b;
b = temp = divisor;
}
while(a!=0 || a>b){
temp = b % a;
b = a;
a = temp = divisor;
}
return divisor;
}
- Sie brauchen nicht, etwas besonderes zu tun. Sie tun bereits alles, was Sie brauchen, nur durch die Zuweisung neuer Werte zu
num3
undden3
. Der Anrufer wird beobachten, diese neuen Werte. Das ist es, was Referenzen sind.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Blick auf Ihre Funktion Erklärung, Sie Links aus dem ersten argument, op.
Dann rufen Sie berechnen, wie Sie beabsichtigen,
Und die definition einer Funktion hat die op, damit man merkt, dass es argument Diskrepanz zwischen der Deklaration und der definition,
Die kanonische Art und Weise zu handhaben rationalen zahlen ist zu deklarieren, std::pair, deklarieren Sie eine Klasse mit Zähler und Nenner.
Es ist auch ein Fehler in deiner addition und Subtraktion-code. Sie müssen überlegen, wie Sie zu tun, rational addition/Subtraktion (siehe: Rational addition/Subtraktion). Befestigt ist unten. Vielleicht schauen Sie genau auf den gcd um sicherzustellen, dass es ordnungsgemäß funktioniert.
Darüber hinaus könnten Sie überlegen, mit einer switch/case-Anweisung für die Entscheidung, den Betrieb, und Sie können konvertieren Sie die numerischen Eingaben zu schreiben opcode leicht.
Hier ist dein code einige Fehler behoben und ein paar andere änderungen,
Wäre es schöner, wenn entweder 1) implementieren Sie eine rationale Zahl Klasse, oder 2) verwenden std::Paare
<int, int>
für Zähler und Nenner. Dann kann man immer wieder entweder eine rationale Zahl im Fall von 1, oder ein paar in die Falle der 2.Ansatz 1 ermöglicht es Ihnen, sich mit Singularitäten natürlich. Sie kann eine exception werfen, wenn der Nenner null ist.
Nur ein anderer Ansatz....