Теперь я не могу заставить числитель вывести любое число.Когда я делаю это, я получаю 0 / любой знаменатель.Что мне не хватает? - PullRequest
1 голос
/ 06 февраля 2011
//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;
}

Ответы [ 2 ]

1 голос
/ 06 февраля 2011

в функции 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 голос
/ 06 февраля 2011

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

int CrossMuliplication (int NewNumeratorA,int NewNumeratorB);
int CrossMultiplication(int, int);
...