Problema con visualizzazione

di il
1 risposte

Problema con visualizzazione

Ciao ho un problema con la visualizzazione a video di questo programma :

#include <iostream>
using namespace std;
#include <stdlib.h>

int MCD(int a, int b);
int mcm(int a, int b);

class rational {
    public:
              int dividend, divisor;
             rational() {dividend = 1; divisor = 1;} // costruttore con inizializzazione a 1
             void set(int a, int b); // inserimento
             void show() {cout << dividend << "/" << divisor;} // visualizzazione
             void sum(rational *q1, rational *q2); // somma
             void sub(rational *q1, rational *q2); // sottrazione
             void mul(rational *q1, rational *q2); // moltiplicazione
            
};

void rational::set(int a, int b) {
     dividend = a;
     if (!b) {
        cout << "Divisione per 0 NON accettata, inserisco 1!\n";
        divisor = 1;
     }
     else divisor = b;
}

void rational::sum(rational *q1, rational *q2) {
     int common_multiple = mcm(dividend, divisor); // minimo comune multiplo (least common multiple)
     int result1, result2;
     result1 = (common_multiple / q1->divisor) * q1->dividend;
     result2 = (common_multiple / q2->divisor) * q2->dividend;
     this->dividend = result1 + result2;
     this->divisor = common_multiple;
}

void rational::sub(rational *q1, rational *q2) {
     int common_multiple = mcm(dividend, divisor); // minimo comune multiplo
     int result1, result2;
     result1 = (common_multiple / q1->divisor) * q1->dividend;
     result2 = (common_multiple / q2->divisor) * q2->dividend;
     this->dividend = result1 - result2;
     this->divisor = common_multiple;
}

void rational::mul(rational *q1, rational *q2) {
    this->dividend = q1->dividend * q2->dividend; // prodotto dei dividendi
    this->divisor = q1->divisor * q2->divisor; // prodotto dei divisori
}


int main() {
    int dividendo, divisore, entry;
    rational *quoziente1 = new rational;
    rational *quoziente2 = new rational;
    rational *risultato = new rational;
    do {
        cout << "Le attuali frazioni sono :" << endl;
       cout << "Frazione 1 = ";
       quoziente1->show();
       cout << "\nFrazione 2 = ";
       quoziente2->show();
       cout << endl;
       cout<< "\nScegli l'operazione da fare: \n";
       cout << "1) modifica il primo numero razionale\n";
       cout << "2) modifica il secondo numero razionale\n";
       cout << "3) somma i due numeri razionali\n";
       cout << "4) sottrazione i due numeri razionali\n";
       cout << "5) prodotto fra i due numeri razionali\n";
       cout << "0) uscire\n";
       cout << "\n==> ";
       cin >> entry;
       switch (entry) {
              case 0:
                delete quoziente1;
                delete quoziente2;
                break;
            case 1:
                cout << "\nFrazione (INT): ";
                cin >> dividendo;
                cout << "                ---\n                ";
                cin >> divisore;
                quoziente1->set(dividendo, divisore);
                cout << "\nOK! ";
                break;
            case 2:
                cout << "\nFrazione (INT): ";
                cin >> dividendo;
                cout << "                ---\n                ";
                cin >> divisore;
                quoziente2->set(dividendo, divisore);
                cout << "\nOK! ";
                break;
      
            case 3:
           
                risultato->sum(quoziente1, quoziente2);
                cout << "\nLa somma e' ";
                risultato->show();
                cout << endl << endl;
                break;
            case 4:
                cout << "Q1 = ";
                quoziente1->show();
                cout << " | Q2 = ";
                quoziente2->show();
                risultato->sub(quoziente1, quoziente2);
                    cout << "\nLa differenza e' ";
           risultato-> show();
            cout << endl << endl;
                break;
            case 5:
                cout << "Q1 = ";
                quoziente1->show();
                cout << " | Q2 = ";
                quoziente2->show();
                cout << "\nIl prodotto e' ";
                risultato->mul(quoziente1, quoziente2);
           risultato-> show();
            cout << endl << endl;
                break;
            default:
                cout << "\nSCELTA SBAGLIATA, riprova\n";
                break;
        }
    } while (entry != 0);
    return 0;
}

int MCD(int a, int b) {
    int temp;
    if ((a == 0) && (b == 0)) return -1;
    a = abs(a); b = abs(b);
    if (a < b) {
       temp = a;
       a = b;
       b = temp;
       }
    if (b == 0) return a;
    else return MCD(b, a % b);
}

int mcm(int a, int b) {
    return a * b / MCD(a, b);
    }

in pratica devo fare la somma e la sottrazione dei due numeri che sono due frazioni ma a video mi esce stampato la soluzione è 1/1 che sono i numeri di default che ho inserito. come faccio a far stampare altri numeri se questi vengono inseriti? spero in una vostra risposta. Grazie in anticipo.

1 Risposte

Devi accedere o registrarti per scrivere nel forum
1 risposte