Torna indietro   Hardware Upgrade Forum > Software > Programmazione

iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile
iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile
C'è tanta sostanza nel nuovo smartphone della Mela dedicato ai creator digitali. Nuovo telaio in alluminio, sistema di raffreddamento vapor chamber e tre fotocamere da 48 megapixel: non è un semplice smartphone, ma uno studio di produzione digitale on-the-go
Intel Panther Lake: i processori per i notebook del 2026
Intel Panther Lake: i processori per i notebook del 2026
Panther Lake è il nome in codice della prossima generazione di processori Intel Core Ultra, che vedremo al debutto da inizio 2026 nei notebook e nei sistemi desktop più compatti. Nuovi core, nuove GPU e soprattutto una struttura a tile che vede per la prima volta l'utilizzo della tecnologia produttiva Intel 18A: tanta potenza in più, ma senza perdere in efficienza
Intel Xeon 6+: è tempo di Clearwater Forest
Intel Xeon 6+: è tempo di Clearwater Forest
Intel ha annunciato la prossima generazione di processori Xeon dotati di E-Core, quelli per la massima efficienza energetica e densità di elaborazione. Grazie al processo produttivo Intel 18A, i core passano a un massimo di 288 per ogni socket, con aumento della potenza di calcolo e dell'efficienza complessiva.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 03-12-2008, 21:24   #1
Balop
Senior Member
 
L'Avatar di Balop
 
Iscritto dal: Jul 2005
Messaggi: 3609
[Java] Fare la stessa cosa con classe ereditata.. Help

ciao, vi scrivo quel era l'esercizio così per come l'ho avuto io:
Scrivere il codice di una classe Polinomio. Tale classe dovrà prevedere un costruttore in cui i coefficienti di un polinomio sono passati tramite un vettore di double. Dovrà essere implementata una funzione che restituirà il valore del polinomio in corrispondenza di un valore x passato come argomento. Scrivere il codice di una classe Polinomio2 in java che ereditando dalla classe Polinomio, implementi una funzione che restituisca il valore della derivata del polinomio in corrispondenza di un valore x passato come argomento.

Questo è quello che ho fatto io, però non ho usato l'ereditarietà come era richiesto dall'esercizio (vabbè ho usato pure interi al posto di double...):

Codice:
public class Polinomio {
	public void StampaFunzione(int v[]) {
		for (int i = v.length - 1; i >= 0; i--) {
			if (i > 1 && v[i] != 0) {
				if (v[i] > 1)
					System.out.print(v[i] + "x^" + i);
				else
					System.out.print("x^" + i);
			}
			if (i == 1 && v[i] != 0) {
				if (v[i] > 1)
					System.out.print(v[i] + "x");
				else
					System.out.print("x");
			}
			if (i == 0 && v[i] != 0)
				System.out.println(+v[i]);
			if (i >= 1 && v[i - 1] != 0)
				System.out.print(" + ");
		}
	}

	public void StampaDerivata(int v[]) {
		for (int i = v.length - 1; i > 0; i--) {
			if (i > 2 && v[i] != 0)
				System.out.print((v[i] * i) + "x^" + (i - 1));
			if (i == 2 && v[i] != 0) System.out.print((v[i] * i) + "x");
			if (i == 1 && v[i] != 0)
				System.out.print(v[i]);
			if (i > 1 && v[i - 1] != 0)
				System.out.print(" + ");
		}
	}

	public void Funz(int v[], int x) {
		int ris = v[0];
		for (int i = 1; i < v.length; i++) {
			int n = v[i] * x;
			ris = ris + n;
			x = x * x;
		}
		System.out.println(ris);
	}

	public void Derivata(int v[], int y) {
		int ris = v[1];
		for (int i = 2; i < v.length; i++) {
			int n = v[i] * i * y;
			ris = ris + n;
			y = y * y;
		}
		System.out.println(ris);
	}

	public static void main(String[] args) {
		int v[] = { 1, 3, 2 };
		int x = 2;
		int y = 2;
		Polinomio obj = new Polinomio();
		System.out.print("La funzione è: ");
		obj.StampaFunzione(v);
		System.out.print("Per x = " + x + " la funzione risulta --> ");
		obj.Funz(v, x);
		System.out.print("La derivata è: ");
		obj.StampaDerivata(v);
		System.out.println("");
		System.out.print("Per x = " + y + " la derivata risulta --> ");
		obj.Derivata(v, y);

	}
}
la classe StampaFunzione e StampaDerivata non erano richieste e non avrei dovuto mettere tutti quei println, ma visto che sono a casa e lo posso provare con il pc volevo vedere se funzionava...

qualcuno mi spiega come avrei dovuto risolvere quest'esercizio con le classi derivate?
__________________
Notebook MSI GT73VR 7RE TITAN SLI: 17.3" 4K IPS @ 120 Hz, i7-7820HK, 2x Nvidia GeForce GTX 1070 (SLI) - 8 GB GDDR5, 2x 16GB DDR4 2.400Mhz, Super Raid 4-512GB NVMe SSD +1TB (SATA) 7200rpm

In vendita:

|Utenti consigliati|: Marcondiron99
|Utenti sconsigliati|: iltoffa, otherman
Balop è offline   Rispondi citando il messaggio o parte di esso
Old 04-12-2008, 10:03   #2
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da Balop Guarda i messaggi
qualcuno mi spiega come avrei dovuto risolvere quest'esercizio con le classi derivate?
Se ho capito bene, avresti dovuto prima implementare la classe Polinomio, con le funzionalità che ti erano state richieste tranne la capacità di calcolare la derivata in corrispondenza di un valore.

A quel punto poi, avresti dovuto implementare una classe Polinomio2, che estende (deriva/eredita da) Polinomio, nella quale ti sarebbe bastato aggiungere la funzionalità mancante.

Codice:
// file Polinomio.java
public class Polinomio
{
    // implementazione della classe Polinomio
}


...


// file Polinomio2.java
public class Polinomio2 extends Polinomio
{
    // definizione del metodo che calcola la derivata
    // per un valore in input
}
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 04-12-2008, 10:58   #3
Xfree
Senior Member
 
L'Avatar di Xfree
 
Iscritto dal: Aug 2001
Messaggi: 9538
Segui il suggerimento di banryu79 e vedi se riesci a farlo, eventualmente confrontiamo la soluzione, ho modificato un pò il tuo codice.
Xfree è offline   Rispondi citando il messaggio o parte di esso
Old 04-12-2008, 13:12   #4
Balop
Senior Member
 
L'Avatar di Balop
 
Iscritto dal: Jul 2005
Messaggi: 3609
allora, ho fatto la classe polinomio2 e ho scritto questo:
Codice:
public class Polinomio2 extends Polinomio {
	public void Derivata(int v[], int x) {
		int ris = v[1];
		for (int i = 2; i < v.length; i++) {
			int n = v[i] * i * x;
			ris = ris + n;
			x = x * x;
		}
		System.out.println(ris);
	}

	public static void main(String[] args) {
		int v[] = { 1, 3, 2 };
		int x = 2;
		Polinomio2 obj = new Polinomio2();
		System.out.print("Per x = " + x + " la derivata risulta --> ");
		obj.Derivata(v, x);
	}

}
per funzionare funziona, però volevo sapere se si poteva fare in altro modo...
inoltre nella classe polinomio2 ho dovuto dichiarare nuovamente il vettore che non eredita dalla classe polinomio,
la stessa cosa mi era capitata con un altro esercizio, non si può evitare giusto?
anche se in verità nei compiti il prof non vuole scritto nè il main nè i vari println, quindi non ci sarebbe questo problema...
__________________
Notebook MSI GT73VR 7RE TITAN SLI: 17.3" 4K IPS @ 120 Hz, i7-7820HK, 2x Nvidia GeForce GTX 1070 (SLI) - 8 GB GDDR5, 2x 16GB DDR4 2.400Mhz, Super Raid 4-512GB NVMe SSD +1TB (SATA) 7200rpm

In vendita:

|Utenti consigliati|: Marcondiron99
|Utenti sconsigliati|: iltoffa, otherman
Balop è offline   Rispondi citando il messaggio o parte di esso
Old 04-12-2008, 13:34   #5
Xfree
Senior Member
 
L'Avatar di Xfree
 
Iscritto dal: Aug 2001
Messaggi: 9538
Il main potresti cominciare a scriverlo in un altro file sorgente ancora. Ma costruttore non ne dichiari?
Questa è la mia soluzione:

Classe Polinomio
Codice:
public class Polinomio {
	int v[];
	
	public Polinomio(int []v) {
		this.v = new int [v.length];
		System.arraycopy(v,0,this.v,0,v.length);
	}
		
	
	public void stampaFunzione() {
		for (int i = getNumeroCoefficienti() - 1; i >= 0; i--) {
			if (i > 1 && v[i] != 0) {
				if (v[i] > 1)
					System.out.print(v[i] + "x^" + i);
				else
					System.out.print("x^" + i);
			}
			if (i == 1 && v[i] != 0) {
				if (v[i] > 1)
					System.out.print(v[i] + "x");
				else
					System.out.print("x");
			}
			if (i == 0 && v[i] != 0)
				System.out.println(+v[i]);
			if (i >= 1 && v[i - 1] != 0)
				System.out.print(" + ");
		}
	}

	public void valorePolinomio(int x) {
		int ris = v[0];
		for (int i = 1; i < getNumeroCoefficienti() ; i++) {
			int n = v[i] * x;
			ris = ris + n;
			x = x * x;
		}
		System.out.println(ris);
	}
	
	public int getNumeroCoefficienti() {
		return this.v.length;
	}
}
Classe Polinomio2
Codice:
public class Polinomio2 extends Polinomio {
	
	public Polinomio2(int v[]) {
		super(v);
	}
	
	public void calcolaDerivata() {
		int []temp = new int[getNumeroCoefficienti()-1];
		for (int i = getNumeroCoefficienti()-1; i > 0; i--)
			temp[i-1] = v[i]*i;
		v = temp;
		
	}
}
Classe TestPolinomio
Codice:
public class TestPolinomio {
	public static void main(String[] args) {
		int v[] = { 1, 3, 2 };
		int x = 2;
		Polinomio obj = new Polinomio(v);
		System.out.print("La funzione e': ");
		obj.stampaFunzione();
		System.out.print("Per x = " + x + " la funzione risulta --> ");
		obj.valorePolinomio(x);
		Polinomio2 obj2 = new Polinomio2(v);
		System.out.print("La derivata e': ");
		obj2.calcolaDerivata();
		obj2.stampaFunzione();
		System.out.print("Per x = " + x + " la derivata risulta --> ");
		obj2.valorePolinomio(x);
	}
}
Xfree è offline   Rispondi citando il messaggio o parte di esso
Old 04-12-2008, 15:15   #6
Balop
Senior Member
 
L'Avatar di Balop
 
Iscritto dal: Jul 2005
Messaggi: 3609
a che serve questo??
Codice:
		System.arraycopy(v,0,this.v,0,v.length);
per il resto il programma è "simile" al mio, cambia solo che tu hai usato getNumeroCoefficienti(), hai calcolato la derivata in un altro modo
e inoltre hai dichiarato il vettore all'inizio e poi lo hai inizializzato con this.v...... ma fa niente se mi dimentico di inizializzarlo?
per esempio con questo programma non ho ottenuto nessun errore.. strano.

comunque per il resto, sommariamente il mio non è pure giusto?
__________________
Notebook MSI GT73VR 7RE TITAN SLI: 17.3" 4K IPS @ 120 Hz, i7-7820HK, 2x Nvidia GeForce GTX 1070 (SLI) - 8 GB GDDR5, 2x 16GB DDR4 2.400Mhz, Super Raid 4-512GB NVMe SSD +1TB (SATA) 7200rpm

In vendita:

|Utenti consigliati|: Marcondiron99
|Utenti sconsigliati|: iltoffa, otherman
Balop è offline   Rispondi citando il messaggio o parte di esso
Old 04-12-2008, 15:34   #7
Oceans11
Senior Member
 
L'Avatar di Oceans11
 
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
Quote:
Originariamente inviato da Balop
a che serve questo??
Codice:
		System.arraycopy(v,0,this.v,0,v.length);
dalla documentazione java della sun:

System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
"Copies an array from the specified source array, beginning at the specified position, to the specified position of the destination array."

Quote:
Originariamente inviato da Balop
hai dichiarato il vettore all'inizio e poi lo hai inizializzato con this.v...... ma fa niente se mi dimentico di inizializzarlo?
fa, fa!
Se dimentichi di "inizializzarlo" (che poi non è un termine corretto) sei costretto a passare sto benedetto array v ad ogni metodo.
In quel modo invece usi la copia propria dell'istanza dell'oggetto Polinomio.
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes]
"Pirating software? Choose Microsoft!"
Oceans11 è offline   Rispondi citando il messaggio o parte di esso
Old 04-12-2008, 23:10   #8
Xfree
Senior Member
 
L'Avatar di Xfree
 
Iscritto dal: Aug 2001
Messaggi: 9538
Togliendo i cambiamenti "cosmetici" c'è che io ho definito un costruttore per ogni classe, ed il motivo è quello spiegato da Oceans11.
Come mai tu non hai usato costruttori?
Diciamo che non è un buon modo passare parametri tra oggetti quando questi parametri potrebbero essere attributi della classe.
Xfree è offline   Rispondi citando il messaggio o parte di esso
Old 04-12-2008, 23:26   #9
Balop
Senior Member
 
L'Avatar di Balop
 
Iscritto dal: Jul 2005
Messaggi: 3609
eh si, avete ragione, alla fine l'ho fatta con il costruttore..
eccovi come le ho fatte:

classe polinomio
Codice:
public class Polinomio {
	int v[];
	Polinomio(int []vett){
		v=vett;
	}
	public void StampaFunzione(int v[]) {
		for (int i = v.length - 1; i >= 0; i--) {
			if (i > 1 && v[i] != 0) {
				if (v[i] > 1)
					System.out.print(v[i] + "x^" + i);
				else
					System.out.print("x^" + i);
			}
			if (i == 1 && v[i] != 0) {
				if (v[i] > 1)
					System.out.print(v[i] + "x");
				else
					System.out.print("x");
			}
			if (i == 0 && v[i] != 0)
				System.out.println(+v[i]);
			if (i >= 1 && v[i - 1] != 0)
				System.out.print(" + ");
		}
	}

	public void Funz(int v[], int x) {
		int ris = v[0];
		for (int i = 1; i < v.length; i++) {
			int n = v[i] * x;
			ris = ris + n;
			x = x * x;
		}
		System.out.println(ris);
	}
}
classe Polinomio2
Codice:
public class Polinomio2 extends Polinomio {
	Polinomio2(int[] vett) {
		super(vett);
	}
	
	public void Derivata(int v[], int x) {
		int ris = v[1];
		for (int i = 2; i < v.length; i++) {
			int n = v[i] * i * x;
			ris = ris + n;
			x = x * x;
		}
		System.out.println(ris);
	}

	public void StampaDerivata(int v[]) {
		for (int i = v.length - 1; i > 0; i--) {
			if (i > 2 && v[i] != 0)
				System.out.print((v[i] * i) + "x^" + (i - 1));
			if (i == 2 && v[i] != 0)
				System.out.print((v[i] * i) + "x");
			if (i == 1 && v[i] != 0)
				System.out.print(v[i]);
			if (i > 1 && v[i - 1] != 0)
				System.out.print(" + ");
		}
	}

	public static void main(String[] args) {
		int v[] = { 1, 3, 2 };
		int x = 2;
		int y = 2;
		Polinomio2 obj = new Polinomio2(v);
		System.out.print("La funzione è: ");
		obj.StampaFunzione(v);
		System.out.print("Per x = " + x + " la funzione risulta --> ");
		obj.Funz(v, x);
		System.out.print("La derivata è: ");
		obj.StampaDerivata(v);
		System.out.println("");
		System.out.print("Per x = " + y + " la derivata risulta --> ");
		obj.Derivata(v, y);
	}
}
questa volta dovrebbero essere corrette no?
__________________
Notebook MSI GT73VR 7RE TITAN SLI: 17.3" 4K IPS @ 120 Hz, i7-7820HK, 2x Nvidia GeForce GTX 1070 (SLI) - 8 GB GDDR5, 2x 16GB DDR4 2.400Mhz, Super Raid 4-512GB NVMe SSD +1TB (SATA) 7200rpm

In vendita:

|Utenti consigliati|: Marcondiron99
|Utenti sconsigliati|: iltoffa, otherman
Balop è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2008, 07:40   #10
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Beh, veramente c'e' ancora qualcosa che non va: hai dichiarato un vettore membro di nome v[] e lo inizializzi correttamente nel costruttore.
Ma poi non lo usi mai, perche' ad ogni metodo passi un vettore v[], che si suppone essere diverso (infatti va a "nascondere" il vettore membro).

Dovresti quindi cancellare dalla lista dei parametri formali delle funzioni il vettore v. Per intenderci, il metodo

Codice:
public void StampaFunzione(int v[])
deve diventare
Codice:
public void StampaFunzione()
Un'altra cosa: dichiarare

Codice:
public class Polinomio {
	int v[];
significa rendere "visibile" il vettore v a tutte le classi del package. Siccome e' un po' troppo, sarebbe opportuno fare in modo che altre classi non possano accedere a v. Dichiaralo protected.
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2008, 09:12   #11
Balop
Senior Member
 
L'Avatar di Balop
 
Iscritto dal: Jul 2005
Messaggi: 3609
Quote:
Originariamente inviato da sottovento Guarda i messaggi
Un'altra cosa: dichiarare

Codice:
public class Polinomio {
	int v[];
significa rendere "visibile" il vettore v a tutte le classi del package. Siccome e' un po' troppo, sarebbe opportuno fare in modo che altre classi non possano accedere a v. Dichiaralo protected.
vabbè dai, il prof non si attacca pure a certe cose, devo fare "solo" un compito mica devo fare un programma serio...

comunque grazie a tutti dei consigli!!!


Ps: ho pure un altro esercizio da proporvi, è senza classi ereditate ma mi funziona solo parzialmente.....
__________________
Notebook MSI GT73VR 7RE TITAN SLI: 17.3" 4K IPS @ 120 Hz, i7-7820HK, 2x Nvidia GeForce GTX 1070 (SLI) - 8 GB GDDR5, 2x 16GB DDR4 2.400Mhz, Super Raid 4-512GB NVMe SSD +1TB (SATA) 7200rpm

In vendita:

|Utenti consigliati|: Marcondiron99
|Utenti sconsigliati|: iltoffa, otherman
Balop è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile iPhone 17 Pro: più di uno smartphone. &Eg...
Intel Panther Lake: i processori per i notebook del 2026 Intel Panther Lake: i processori per i notebook ...
Intel Xeon 6+: è tempo di Clearwater Forest Intel Xeon 6+: è tempo di Clearwater Fore...
4K a 160Hz o Full HD a 320Hz? Titan Army P2712V, a un prezzo molto basso 4K a 160Hz o Full HD a 320Hz? Titan Army P2712V,...
Recensione Google Pixel Watch 4: basta sollevarlo e si ha Gemini sempre al polso Recensione Google Pixel Watch 4: basta sollevarl...
2 minuti per vedere le 27 offerte imperd...
Ray-Ban Meta Display: tecnologia sorpren...
Un mini PC a prezzo stracciato, non cerc...
Al via i coupon nascosti di ottobre: qua...
Ferrari Elettrica si aggiorna solo in of...
Doppio sconto sugli smartphone top Xiaom...
Samsung è sempre più prota...
ChatGPT ha pregiudizi politici? Ecco cos...
Un solo iPhone rubato ha portato alla sc...
Xiaomi 17 Ultra sta arrivando: ecco come...
Il Motorola Edge 70 non ha più se...
Alcuni Galaxy S26 utilizzeranno il chip ...
Amazon, ecco i super sconti del weekend:...
Scovare un bug di sicurezza sui disposit...
Offerta Amazon su NordVPN: proteggi 10 d...
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: 08:30.


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