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.