//This program evaluates an expression of two fractions added or subtracted
#include <iostream>
#include <cmath>
using namespace std;
int CrossMultiplication(int, char, int);
int DenominatorConversion(int, int);
int main(){
int NumeratorA;
int NumeratorB;
int DenominatorA;
int DenominatorB;
char Operation;
char Slash;
Slash = '/';
cout << "This program evaluates an expression of two fractions added or subtracted.\n";
cout << "The expression should look like this: A/B + C/D where A, B, C, and D are ";
cout << "integers, the + sign can be a - sign and spacing is not important.\n";
cout << "\nEnter the expression: ";
cin >> NumeratorA >> Slash >> DenominatorA >> Operation >> NumeratorB >> Slash >> DenominatorB;
cout << NumeratorA << Slash << DenominatorA << " " << Operation << " " << NumeratorB << Slash << DenominatorB << " " << "=" << " " << CrossMultiplication(NumeratorA,Operation,NumeratorB) << Slash << DenominatorConversion(DenominatorA,DenominatorB);
cout << "\nThanks for using this program.";
cin.get();
cin.get();
return 0;
}
int CrossMultiplication (int NumeratorA,char Operation, int NumeratorB){
int NewNumerator;
int DenominatorA;
int DenominatorB;
switch (Operation) {
case '+': NewNumerator = NumeratorA*DenominatorB + NumeratorB*DenominatorA;
break;
case '-':NewNumerator = NumeratorA*DenominatorB - NumeratorB*DenominatorA;
break;
return NewNumerator;
}
}
int DenominatorConversion(int DenominatorA, int DenominatorB){
int NewDenominator;
NewDenominator = DenominatorA*DenominatorB;
return NewDenominator;
}
ответ
в функции Crossmultiplication, ваши значения для DenominatorA и DenominatorB не правильно инициализирован. Попробуйте изменить его на нечто вроде
int CrossMultiplication (int NumeratorA, int DenominatorA, char Operation, int NumeratorB, int Denominator B)
и соответствующим образом изменить вызов функции.
Кроме того, ваше заявление о возврате должно быть вне конструкции коммутатора. Как и сейчас, он никогда ничего не вернет. В качестве альтернативы вы можете полностью избавиться от переменной NewNumerator и написать ее следующим образом:
switch (Operation) {
case '+': return NumeratorA*DenominatorB + NumeratorB*DenominatorA;
case '-': return NumeratorA*DenominatorB - NumeratorB*DenominatorA;
}
большое спасибо – NewProgrammer22
У вас есть опечатка:
int CrossMuliplication (int NewNumeratorA,int NewNumeratorB);
int CrossMultiplication(int, int);
Это очень помогло мне сейчас. У меня появилась новая проблема. Я изменил свои операторы if на контур переключателя, я ввел 1/2 + 1/2, и я получил ответ на переключатель 0/4 (операция) { \t \t case '+': NewNumerator = NumeratorA * DenominatorB + NumeratorB * Знаменатель A; \t \t \t break; \t \t case '-': NewNumerator = NumeratorA * DenominatorB - NumeratorB * DenominatorA; \t \t \t break; \t return NewNumerator; – NewProgrammer22
Это не может быть опечаткой? У вас есть «CrossMultiplication (int, int)» в одном месте и «CrossMuliplication (int NewNumeratorA, int NewNumeratorB)» в другом. – MartW
@CodeByMoonlight: Это совершенно законный прототип функции – Falmarri
Я знаю, но ОП поставил «Muliplication», а не «Умножение» во втором разделе. – MartW