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