Analisi dei dati:
INPUT
-A = numeratore 1^ frazione
-B = denominatore 1^ frazione
-C = numeratore 2^ frazione
-D = denominatore 2^ frazione
-tip = tipo dell'operazione da eseguire
-rip = risposta SI/NO per ripetere l'esercizio
ELABORAZIONE
-MCD = Minimo comun divisore
-M = minimo comune multiplo
-X = variabile intera
-Y = variabile intera
-R = variabile (fa da resto nel calolo del MCD)
OUTPUT
-P = Numeratore della frazione finale
-Q = Denominatore della frazione finale
import IO.*;
class calcola_frazioni {
public static void main(String[] args) {
Input pc = new Input();
int A, B, C, D; //Numeri delle frazioni
int P, Q; //Valori del risultato
int tip; //Tipo dell'operazione da eseguire
int MCD; //Minimo comune divisore tra numeratore e denominatore
int X, Y, R, M; //Altre variabili
String rip;
do
{
//Input dei valori delle frazioni
System.out.println("Date le frazioni A/B e C/D");
System.out.print("A = ");
A = pc.leggiInt();
System.out.print("B = ");
B = pc.leggiInt();
System.out.print("C = ");
C = pc.leggiInt();
System.out.print("D = ");
D = pc.leggiInt();
//Mostra le due frazioni scritte
System.out.println("Le due frazioni sono: "+A+"/"+B+" e "+C+"/"+D);
//Chiedere all'utente che operazione vuole fare
System.out.println("Che operazione vuoi effettuare?");
System.out.println("1 - Addizione");
System.out.println("2 - Prodotto");
System.out.println("3 - Quoziente");
System.out.println("4 - Calolare le frazioni inverse");
System.out.print("Scrivi il numero dell'operazione: ");
tip = pc.leggiInt();
//Per ogni operazione si seguiranno passi diversi
switch (tip)
{
case 1: // Addizione
{
//Calcoliamo prima MCM
M = B;
while (M%D!=0)
{
M = M+B;
}
A = A*(M/B);
B = B*(M/B);
C = C*(M/D);
D = D*(M/D);
P = A + C;
Q = B;
/*Verificare se la frazione risultata sia ridotta ai minimi termini
*Semplifica se si ritiene necessario
*Usiamo il metodo di Euclide per trovare MCD
*/
//per A e B
X = P;
Y = Q;
if (P<Q)
{
X = Q;
Y = P;
}
while (X%Y!=0)
{
R = X%Y;
X = Y;
Y = R;
}
MCD = Y;
//Se MCD e' 1 allora lascia invariate P e Q
if (MCD!=1)
{
P = P/MCD;
Q = Q/MCD;
}
System.out.println("L'addizione e' uguale a: "+P+"/"+Q);
}
break;
case 2: //Prodotto
{
P = A*C;
Q = B*D;
/*Verificare se la frazione risultata sia ridotta ai minimi termini
*Semplifica se si ritiene necessario
*Usiamo il metodo di Euclide per trovare MCD
*/
//per A e B
X = P;
Y = Q;
if (P<Q)
{
X = Q;
Y = P;
}
while (X%Y!=0)
{
R = X%Y;
X = Y;
Y = R;
}
MCD = Y;
if (MCD!=1)
{
P = P/MCD;
Q = Q/MCD;
}
System.out.println("Il prodotto e': "+P+"/"+Q);
}
break;
case 3: //Quoziente
{
//Troviamo il reciproco di C/D
X = C;
C = D;
D = X;
P = A*C;
Q = B*D;
/*Verificare se la frazione risultata sia ridotta ai minimi termini
*Semplifica se si ritiene necessario
*Usiamo il metodo di Euclide per trovare MCD
*/
//per A e B
X = P;
Y = Q;
if (P<Q)
{
X = Q;
Y = P;
}
while (X%Y!=0)
{
R = X%Y;
X = Y;
Y = R;
}
MCD = Y;
//Se MCD e' 1 allora lascia invariate P e Q
if (MCD!=1)
{
P = P/MCD;
Q = Q/MCD;
}
System.out.println("Il quoziente e': "+P+"/"+Q);
}
break;
case 4: //Frazioni inverse
{
X = A;
A = B;
B = X;
Y = C;
C = D;
D = Y;
System.out.println("Le due frazioni inverse sono: "+A+"/"+B+" e "+C+"/"+D);
}
break;
default: //Per nessuna operazione
{
System.out.println("Il numero non corrisponde a nessun'operazione.");
System.out.println("Dovrai ricominciare l'esercizio!");
}
}
//Ciede all'utente se vuole ripetere l'esercizio
System.out.println("Vuoi ripetere l'esercizio? si/no");
rip = pc.leggiString();
while (rip.compareTo("no")!=0 && rip.compareTo("si")!=0)
{
System.out.println("La risposta non è valida. Riprova!");
System.out.println("Vuoi ripetere l'esercizio? si/no");
rip = pc.leggiString();
//Se la risposta e' diversa da SI/NO, allora chiede di nuovo
}
if (rip.compareTo("no")==0)
{
System.out.println("L'esercizio è finito");
//Se la risposta e' no, allora conclude l'esercizio
}
}
while (rip.compareTo("si")==0); //Se la risposta è si, ripete l'esecizio
}
}
Nessun commento:
Posta un commento