Ciao, ringrazio per le vostre risposte: gentili!
In base a quanto ho letto, posto la struttura della ShellCalc: forse è più eloquente che una lunga descrizione in italiano.
All'inizio ho piazzato:
codice:
import java.util.Scanner;
public class ShellCalc {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
In seguito, abbiamo il titolo e la lista delle 25 operazioni. Si tratta di una sequela di
codice:
System.out.println("...");
Dopo, l'utente sceglie l'operatore digitandone il numero corrispondente:
codice:
System.out.print("Scegliere l'operatore: ");
int operatore = input.nextInt();
System.out.println();
In seguito definiamo le diverse variabili:
codice:
double n = 0.0;
double risultato = 0.0;
int gradi = 0;
double pw = 0.0;
int primi = 0;
double secondi = 0.0;
double a = 0.0;
double b = 0.0;
double c = 0.0;
Per poi passare alle richieste dei fattori. Per alcune operazioni, infatti, è necessaria una sola richiesta, in altri casi due (la maggiorparte) o tre (gradi sessagesimali).
Ecco il codice:
codice:
if (operatore == 23) {
System.out.print("[gradi] ");
gradi = input.nextInt();
System.out.print("[primi] ");
primi = input.nextInt();
System.out.print("[secondi] ");
secondi = input.nextDouble();
} else if (operatore == 24) {
System.out.print("[gradi] ");
gradi = input.nextInt();
System.out.print("[primi] ");
primi = input.nextInt();
System.out.print("[secondi] ");
secondi = input.nextDouble();
} else if (operatore == 25) {
System.out.println("Digitare il primo coefficiente: ");
a = input.nextDouble();
System.out.println("Digitare il secondo coefficiente: ");
b = input.nextDouble();
System.out.println("Digitare il terzo coefficiente: ");
c = input.nextDouble();
} else {
System.out.print("Digitare un numero: ");
n = input.nextDouble();
}
A questo punto, la sezione di elaborazione dei calcoli.
codice:
System.out.println();
switch (operatore) {
case 1:
System.out.print("Digitare un numero: ");
double m = input.nextDouble();
double r = n + m;
System.out.println();
System.out.println("Risultato: " + r);
break;
case 2:
System.out.print("Digitare un numero: ");
m = input.nextDouble();
r = n - m;
System.out.println();
System.out.println("Risultato: " + r);
break;
case 3:
System.out.print("Digitare un numero: ");
m = input.nextDouble();
r = n / m;
System.out.println();
System.out.println("Risultato: " + r);
break;
case 4:
System.out.print("Digitare un numero: ");
m = input.nextDouble();
r = n * m;
System.out.println();
System.out.println("Risultato: " + r);
break;
case 5:
System.out.print("Digitare un numero: ");
m = input.nextDouble();
r = java.lang.Math.pow(n, m);
System.out.println("Risultato: " + r);
break;
case 6:
r = java.lang.Math.sqrt(n);
System.out.println();
System.out.println("Risultato: " + r);
break;
case 7:
r = java.lang.Math.exp(n);
System.out.println();
System.out.println("Risultato: " + r);
break;
case 8:
r = java.lang.Math.log(n);
System.out.println();
System.out.println("Risultato: " + r);
break;
case 9:
System.out.print("Digitare la base del logaritmo: ");
m = input.nextDouble();
r = java.lang.Math.log(n) / java.lang.Math.log(m);
System.out.println();
System.out.println("Risultato: " + r);
break;
case 10:
System.out.print("Digitare un numero: ");
m = input.nextDouble();
r = n % m;
System.out.println();
System.out.println("Classe di resto del " + r);
break;
case 11:
r = java.lang.Math.toRadians(n);
System.out.println();
System.out.println("Radianti: " + r);
break;
case 12:
r = java.lang.Math.toDegrees(n);
System.out.println();
System.out.println("Gradi: " + r);
break;
case 13:
r = java.lang.Math.sin(n);
System.out.println();
System.out.println("sin = " + r);
break;
case 14:
r = java.lang.Math.asin(n);
System.out.println();
System.out.println("arcsin = " + r);
break;
case 15:
r = java.lang.Math.cos(n);
System.out.println();
System.out.println("cos = " + r);
break;
case 16:
r = java.lang.Math.acos(n);
System.out.println();
System.out.println("arccos = " + r);
break;
case 17:
r = java.lang.Math.tan(n);
System.out.println();
System.out.println("tan = " + r);
break;
case 18:
r = java.lang.Math.atan(n);
System.out.println();
System.out.println("arctan = " + r);
break;
case 19:
risultato = 180 / Math.PI * n;
gradi = (int) risultato;
pw = (risultato - gradi) * 60;
primi = (int) pw;
secondi = (pw - primi) * 60;
int secondip = (int) secondi;
System.out.println(n + " radianti equivalgono a " + gradi + "° " + primi + "' " + secondip + "''");
break;
case 20:
risultato = 50 / Math.PI * n;
System.out.println(n + " radianti equivalgono a " + risultato + "°");
break;
case 21:
risultato = Math.PI / 50 * n;
System.out.println(n + " gradi sessadecimali equivalgono a " + risultato + " radianti");
break;
case 22:
risultato = n * 360 / 100;
gradi = (int) risultato;
pw = (risultato - gradi) * 60;
primi = (int) pw;
secondi = pw - primi;
secondip = (int) secondi;
System.out.println(n + " radianti equivalgono a " + gradi + "° " + primi + "' " + secondip + "''");
break;
case 23:
risultato = (gradi / 360) * 2 * Math.PI + (primi / 21600) * Math.PI + (secondi / 1296000) * Math.PI;
System.out.println();
System.out.println(gradi + "° " + primi + "' " + secondi + "'' equivalgono a " + risultato + " radianti");
break;
case 24:
risultato = gradi * 100 / 360 + primi * 100 / 21600 + secondi * 100 / 1296000;
System.out.println();
System.out.println(gradi + "° " + primi + "' " + secondi + "'' equivalgono a " + risultato + "°");
break;
case 25:
double delta = java.lang.Math.sqrt(java.lang.Math.pow(b, 2)) - 4 * a * c;
if (delta > 0) {
double x = (-b + (java.lang.Math.sqrt(java.lang.Math.pow(b, 2)) - 4 * a * c)) / 2 * a;
double y = (-b - (java.lang.Math.sqrt(java.lang.Math.pow(b, 2)) - 4 * a * c)) / 2 * a;
System.out.println("Prima soluzione: " + x);
System.out.println("Seconda soluzione: " + y);
} else if (delta == 0) {
double x = (-b + (java.lang.Math.sqrt(java.lang.Math.pow(b, 2)) - 4 * a * c)) / 2 * a;
System.out.println("Prima ed unica soluzione: " + x);
} else if (delta < 0) {
System.out.println("L'equazione non ha soluzioni reali.");
}
break;
default:
System.out.println("Operazione non riconosciuta.");
break;
Seguono scritte finali e graffe di chiusura.
Ora, in realtà mi rendo conto che il codice non risponda proprio del tutto a dei criteri di formattazione, e magari ci sono dei modi più essenziali per realizzare le operazioni che noi abbiamo programmato prendendo strade più complesse (in tal caso vi chiedo se fosse possibile farmelo notare: sono sempre contento di imparare).
Per quanto riguarda la domanda iniziale, ci sono molte possibilità:
- semplice finestra che riproduca il terminale;
- campo di testo per l'operatore e per i fattori, con relativo tasto corrispondente a "Enter";
- campo di testo per gli operatori e menù a tendina per scegliere le operazioni;
- ...
Per iniziare pensavo ad un lavoro semplice, la prima possibilità, anche se poi ovviamente mi piacerebbe fare copie del codice ed adattarlo a GUI sempre più evolute.
Nota: questo lavoro non è un compito scolastico, si tratta di un approfondimento personale di tre pistola che si stanno intrippando di Java (la studiamo da tre mesi).