2011-02-06 1 views
1
//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; 
} 
+0

Это не может быть опечаткой? У вас есть «CrossMultiplication (int, int)» в одном месте и «CrossMuliplication (int NewNumeratorA, int NewNumeratorB)» в другом. – MartW

+0

@CodeByMoonlight: Это совершенно законный прототип функции – Falmarri

+0

Я знаю, но ОП поставил «Muliplication», а не «Умножение» во втором разделе. – MartW

ответ

1

в функции 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; 
    } 
+1

большое спасибо – NewProgrammer22

1

У вас есть опечатка:

int CrossMuliplication (int NewNumeratorA,int NewNumeratorB); 
int CrossMultiplication(int, int); 
+0

Это очень помогло мне сейчас. У меня появилась новая проблема. Я изменил свои операторы 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

 Смежные вопросы

  • Нет связанных вопросов^_^