Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Cybersecurity: email, utenti e agenti IA, la nuova visione di Proofpoint
Cybersecurity: email, utenti e agenti IA, la nuova visione di Proofpoint
Dal palco di Proofpoint Protect 2025 emerge la strategia per estendere la protezione dagli utenti agli agenti IA con il lancio di Satori Agents, nuove soluzioni di governance dei dati e partnership rafforzate che ridisegnano il panorama della cybersecurity
Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti
Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti
Dopo alcuni anni di assenza dai cataloghi dei suoi televisori, Hisense riporta sul mercato una proposta OLED che punta tutto sul rapporto qualità prezzo. Hisense 55A85N è un televisore completo e versatile che riesce a convincere anche senza raggiungere le vette di televisori di altra fascia (e altro prezzo)
Recensione Borderlands 4, tra divertimento e problemi tecnici
Recensione Borderlands 4, tra divertimento e problemi tecnici
Gearbox Software rilancia la saga con Borderlands 4, ora disponibile su PS5, Xbox Series X|S e PC. Tra le novità spiccano nuove abilità di movimento, un pianeta inedito da esplorare e una campagna che lascia al giocatore piena libertà di approccio
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 08-11-2006, 14:39   #1
niky89
Senior Member
 
L'Avatar di niky89
 
Iscritto dal: Aug 2004
Città: Veneto
Messaggi: 2301
Equazione 2° grado con bluej

Ciao a tutti vorrei sapere come programmare la risoluzione di una equazione di secondo grado con bluej... grazie ciao
__________________
sono colui che è
niky89 è offline   Rispondi citando il messaggio o parte di esso
Old 08-11-2006, 20:18   #2
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Se per BlueJ intendi questo IDE Java qui allora immagino che il problema si risolva come con un comune programma Java.

Frazioni e -B + 2AC x HK radice del pim pum pam.

Armato di google ho prodotto la seguente immondizia che non userei per risolvere un compito di matematica neanche alle elementari MA è molto divertente .

Codice:
import java.util.*;
import java.io.*;

public class Main {

	public static void main(String[] args) {
		PrintStream out = System.out;
		out.println("Inserire i valori dei coefficienti A, B e C separati da uno spazio");
		out.println("Es: 1 -4 5/7");
		out.println("Es: 3/2 0 0");
		String line = new Scanner(System.in).nextLine();
		StringTokenizer tk = new StringTokenizer(line);
		Fraction a = toFraction(tk.nextToken());
		Fraction b = toFraction(tk.nextToken());
		Fraction c = toFraction(tk.nextToken());
		Biqua qua = new Biqua(a, b, c);
		qua.solve();
		qua.dumpSolution();
	}
	
	private static Fraction toFraction(String token) {
		StringTokenizer tk = new StringTokenizer(token, "/");
		int num = Integer.parseInt(tk.nextToken());
		int den = 1;
		if(tk.hasMoreTokens()) {
			den = Integer.parseInt(tk.nextToken());
		}
		return new Fraction(num, den);
	}
}

/** Rappresentazione di un'equazioned di secondo grado */
class Biqua {
	/* coefficienti dell'equazione */
	private Fraction a, b, c;
	/* risultati dell'equazione */
	private Number solutionOne, solutionTwo;
	/* true se l'equazione sia stata risolta */
	private boolean solved = false;
	
	/** Crea un'equazione con i coefficienti a, b e c (forma
	normale Ax^2 + Bx + C = 0) */
	public Biqua(Fraction a, Fraction b, Fraction c) {
		this.a = a;
		this.b = b;
		this.c = c;
	}
	
	public Number getX1() {
		return solutionOne;
	}
	
	public Number getX2() {
		return solutionTwo;
	}
	
	public void dumpSolution() {
		if(!solved) {
			solve();
		}
		if(solutionOne == null && solutionTwo == null) {
			System.out.println("Nessuna soluzione");
		} else if(solutionOne != null && solutionTwo == null) {
			System.out.println("Una soluzione: x = " + solutionOne);
		} else {
			System.out.println("Due soluzioni: x1 = " + solutionOne + " x2 = " + solutionTwo);
		}
	}
	
	/** Restituisce una rappresentazione testuale di
	questa equazione */
	public String toString() {
		return a + " " + b + " " + c;
	}
	
	/** Risolve l'equazione */
	public void solve() {
		if(b.equals(0) && c.equals(0)) {
			monoSolve();
		} else if(c.equals(0)) {
			spuriousSolve();
		} else if(b.equals(0)) {
			pureSolve();
		} else {
			completeSolve();
		}
		solved = true;
	}
	
	private void monoSolve() {
		//Ax^2 = 0
		solutionOne = 0;
	}
	
	private void spuriousSolve() {
		//Ax^2 + B = 0
		Fraction x2 = b.clone().multiply(-1).divide(a);
		solutionOne = 0;
		solutionTwo = x2;
	}
	
	private void pureSolve() {
		//x^2 = -C/A
		if(c.signum() == a.signum()) {
			System.out.println("Nessuna soluzione");
		} else {
			Fraction ca = c.clone().divide(a).multiply(-1);
			boolean sqr = ca.squareRoot();
			if(sqr) {
				Fraction x1 = ca.clone().multiply(-1);
				Fraction x2 = ca;
				solutionOne = x1;
				solutionTwo = x2;
				//System.out.println("Due soluzioni, x1 = " + x1 + " x2 = " + x2);
			} else {
				double doubleSqr = ca.squareRootAsDouble();
				double x1 = -1 * doubleSqr;
				double x2 = +1 * doubleSqr;
				solutionOne = x1;
				solutionTwo = x2;
				//System.out.println("Due soluzioni \"irrazionali\", x1 = " + x1 + " x2 = " + x2);
			}
		}
	}
	
	private void completeSolve() {
		//Ax^2 + Bx + C
		Fraction disc = b.clone().pow(2).sum(a.clone().multiply(c).multiply(-4));
		if(disc.signum() < 0) {
			System.out.println("Discriminante negativo.");
		} else {
			boolean sqr = disc.squareRoot();
			if(sqr) {
				Fraction a2 = a.clone().multiply(2);
				Fraction x1 = b.clone().multiply(-1).sum(disc).divide(a2);
				Fraction x2 = b.clone().multiply(-1).subtract(disc).divide(a2);
				solutionOne = x1;
				solutionTwo = x2;
				//System.out.println("Due soluzioni, x1 = " + x1 + " x2 = " + x2);
			} else {
				double squareRoot = disc.squareRootAsDouble();
				double bDouble = -1 * b.doubleValue();
				double a2 = a.doubleValue() * 2;
				double x1 = (bDouble + squareRoot) / a2;
				double x2 = (bDouble - squareRoot) / a2;
				solutionOne = x1;
				solutionTwo = x2;
				//System.out.println("Due soluzioni \"irrazionali\", x1 = " + x1 + " x2 = "+ x2); 
			}
		}
	}
}

/** Una frazione */
class Fraction extends Number {
	/* den sta per denominatore, num sta per numeratore, come
	in 2/4, 2 = numeratore, 4 = denominatore */
	private int den, num;
	
	/** Inizializza una frazione con denominatore unitario */
	public Fraction(int num) {
		this(num, 1);
	}
	
	/** Inizializza una frazione con il numeratore num ed il denominatore
	den */
	public Fraction(int num, int den) throws IllegalArgumentException {
		if(den == 0) throw new IllegalArgumentException("Denominator cannot be 0");
		this.den = den;
		this.num = num;
		reduce();
	}
	
	public byte byteValue() {
		return (byte)doubleValue();
	}
	
	public short shortValue() {
		return (short)doubleValue();
	}
	
	public float floatValue() {
		return (float)doubleValue();
	}
	
	public int intValue() {
		return num / den;
	}
	
	public long longValue() {
		return intValue();
	}
	
	/** Restituisce il segno di questa frazione */
	public int signum() {
		return (int)(Math.signum(den) * Math.signum(num));
	}
	
	/* true se questa frazione abbia un valore pari
	all'intero in argomento */
	public boolean equals(int value) {
		if(value == 0) return num == 0;
		return equals(new Fraction(value, 1));
	}
	
	/* true se questa frazione abbia il valore della
	frazione in argomento */
	public boolean equals(Fraction that) {
		that.reduce();
		reduce();
		return
			den == that.den &&
			num == that.num;
	}
	
	/** Restituisce la radice quadrata di questa
	frazione in formato double */
	public double squareRootAsDouble() {
		return Math.sqrt(num) / Math.sqrt(den);
	}
	
	/** Restituisce il valore di questa frazione
	in formato double */
	public double doubleValue() {
		return (double)num / (double)den;
	}
	
	/** Trasforma questa frazione nella radice quadrata
	di sè stessa e restituisce true se tale radice sia un
	numero razionale (un numero che può essere espresso
	tramite una frazione). Altrimenti restituisce false. */
	public boolean squareRoot() {
		/* Molto finemente, se le radici del numeratore
		e del denominatore sono numeri interi, allora
		la radice della frazione è considerata
		razionale */
		boolean result = false;
		double denSqrt = Math.sqrt(den);
		double numSqrt = Math.sqrt(num);
		int intDenSqrt = (int)denSqrt;
		int intNumSqrt = (int)numSqrt;
		if(intDenSqrt == denSqrt && intNumSqrt == numSqrt) {
			result = true;
			den = intDenSqrt;
			num = intNumSqrt;
		}
		return result;
	}
	
	/** Trasforma questa frazione nell'elevamento
	a potenza factor di sè stessa */
	public Fraction pow(int factor) {
		den = (int)Math.pow(den, factor);
		num = (int)Math.pow(num, factor);
		reduce();
		return this;
	}
	
	/** Trasforma questa frazione nel risultato della
	moltiplicazione di questa frazione con l'intero
	factor */
	public Fraction multiply(int factor) {
		num *= factor;
		reduce();
		return this;
	}
	
	/* Trasforma questa frazione nel risultato della
	moltiplicazione tra questa frazione e la frazione
	in argomento */
	public Fraction multiply(Fraction that) {
		den *= that.den;
		num *= that.num;
		reduce();
		return this;
	}
	
	/** Trasforma questa frazione nel risultato della
	divisione di questa frazione per quella in
	argomento */
	public Fraction divide(Fraction that) {
		den *= that.num;
		num *= that.den;
		reduce();
		return this;
	}
	
	/** Trasforma questa frazione nel risultato
	della sottrazione della frazione in argomento
	a questa frazione */
	public Fraction subtract(Fraction that) {
		int newDen = den * that.den;
		int newNum = num * that.den - den * that.num;
		num = newNum;
		den = newDen;
		reduce();
		return this;
	}
	
	/** Trasforma questa frazione nel risultato
	della somma tra questa frazione e quella in
	argomento */
	public Fraction sum(Fraction that) {
		int newDen = den * that.den;
		int newNum = den * that.num + num * that.den;
		num = newNum;
		den = newDen;
		reduce();
		return this;
	}
	
	/** Crea un duplicato autonomo di questa
	frazione */
	public Fraction clone() {
		return new Fraction(num, den);
	}
	
	/** Riduce la frazione */
	private void reduce() {
		int div = maxCommonDivisor(Math.abs(num), Math.abs(den));
		if(div > 1) {
			num /= div;
			den /= div;
		}
		if(Math.signum(den) < 0) {
			num *= -1;
			den *= -1;
		}
	}
	
	/* Restituisce il massimo comune divisore dei numeri
	a e b */
	private int maxCommonDivisor(int a, int b) {
		if(b == 0) return a;
		return maxCommonDivisor(b, a % b);
	}
	
	/** Restituisce una rappresentazione in formato
	stringa di questa frazione */
	public String toString() {
		return 
			den == 1 ?
			String.valueOf(num) :
			"(" + num + "/" + den + ")";
	}
}
Molto teoricamente, dovrebbe maneggiare, finchè può, delle frazioni. Tipo:

due ics quadro meno cinque ics più due fa due e un mezzo

quattro noni ics quadro meno uno fa men tre mezzi e tre mezzi

mentre

ics quadro meno due fa meno 1.4142135623730951 e più 1.4142135623730951 perchè la radice di due è irrazionale.

Non garantisco neanche che parta .
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 09-11-2006, 09:44   #3
lovaz
Senior Member
 
L'Avatar di lovaz
 
Iscritto dal: Jul 2002
Messaggi: 4334
Scusa, ma...
Codice:
...
float s1 = -b + pim pum pam,
s2 = -b - pim pum pam;

System.out.println("x1: " + s1 + "\nx2" + s2);
...
E poi basta 'na calcolatrice, o la console di python, o octave, o matlab, o C, o basic (!)...
lovaz è offline   Rispondi citando il messaggio o parte di esso
Old 09-11-2006, 12:08   #4
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
A volte uno programma perchè è divertente.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 10-11-2006, 17:35   #5
lovaz
Senior Member
 
L'Avatar di lovaz
 
Iscritto dal: Jul 2002
Messaggi: 4334
Certo, non era mica una critica a te...

Solo mi sembrava strano che chiedesse una cosa del genere
lovaz è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Cybersecurity: email, utenti e agenti IA, la nuova visione di Proofpoint Cybersecurity: email, utenti e agenti IA, la nuo...
Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti Hisense A85N: il ritorno all’OLED è convi...
Recensione Borderlands 4, tra divertimento e problemi tecnici Recensione Borderlands 4, tra divertimento e pro...
TCL NXTPAPER 60 Ultra: lo smartphone che trasforma la lettura da digitale a naturale TCL NXTPAPER 60 Ultra: lo smartphone che trasfor...
Un fulmine sulla scrivania, Corsair Sabre v2 Pro ridefinisce la velocità nel gaming Un fulmine sulla scrivania, Corsair Sabre v2 Pro...
PlayStation 5 Slim a 399€ o bundle con N...
roborock Qrevo Curv S5X in offerta a 649...
Sapphire Nitro+ B850A WIFI 7: la nuova s...
CraftGPT: un giocatore costruisce ChatGP...
Il Conto Termico 3.0 è ufficiale: fino a...
Tesla inaugura la stazione di ricarica S...
20 super sconti Amazon senza precedenti:...
Un TV 65 pollici a 399€? Si è possibile ...
Internet in Italia: Vodafone trionfa in ...
Electronic Arts: l'acquisizione è...
Apple Intelligence: ecco le app che sono...
Arriva l'aggiornamento di fine settembre...
Volete un ottimo SSD Gen.4 da 2TB e 7450...
L'attrice che non esiste può gi&a...
Ogni persona al mondo con una GPU dedica...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 11:18.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v