Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    26

    help!!programma java

    ciao a tutti, sono Enrico, appena registrato

    sto studiando java, ma ho problemi nella programmazione. Sto sbattendo la testa da un giorno su quest'esercizio:

    Ogni oggetto della classe FunzionePolinomiale rappresenta una funzione nella forma
    codice:
     f(x)=a(n-1 pedice)x^(n-1)+a(n)-2x^(n-2)+…+a(1)x+a(0) (con n>0)
    La classe FunzionePolinomiale ha un costruttore che prende come parametro un array a di tipo double: l’elemento i-esimo di a rappresenta il coefficiente ai della funzione polinomiale. La classe è inoltre dotata dei seguenti metodi di istanza:
    - Il metodo public double getValue(double x) che riceve un parametro x di tipo double e restituisce il valore della funzione in corrispondenza del valore x.
    - Il metodo public FunzionePolinomiale derivata() che restituisce la derivata della funzione.
    - Il metodo public String toString() che restituisce una descrizione testuale della funzione stessa. Per indicare l’elevamento a potenza nella descrizione testuale usare il simbolo “^”. Se, ad esempio, la funzione rappresentata fosse un polinomio di terzo grado e i coefficienti fossero a3=5, a2=7, a1=2 e a0=9, il metodo toString dovrebbe restituire la seguente stringa: “5x^3+7x^2+2x+9”

    - Scrivere una classe di test, di nome ProvaFunzione, che:
    o fa inserire all’utente una sequenza di oggetti FunzionePolinomiale; il grado e i coefficienti di ogni funzione inserita sono scelti dall’utente. Tutti gli oggetti creati debbono essere memorizzati in una LinkedList.
    o Fa inserire all’utente un valore reale x.
    o Per ognuna delle funzioni della sequenza stampa la descrizione della funzione, il valore della funzione in x e il valore della derivata in x.


    Potete aiutarmi??grazie in anticipo

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    su cosa hai problemi??
    un conto è che non ti funziona e/o proponi un check su una soluzione, un conto è che dobbiamo fartelo noi (vietato da regolamento)
    hai già un'idea? pseudo codice??

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    26
    si, scusami. Ecco il codice:

    codice:
    class FunzionePolinomiale {
    
    	private double[] coeff;
    	private int n; // grado funzione
    
    	public double FunzionePolinomiale(double[] a) {
    
    		for(int i=0;i<a.length;i++)
    			coeff[i]=a[i];
    	}
    
    	/* metodo  che riceve un parametro x di tipo double e restituisce il valore della funzione in corrispondenza del valore x. */
    
    	public double getValue(double x)  {
    
    		double valore=0;
    
    		for(int i=0;i<a.length;i++)
    			for(int k=0;k<n;k++)
    			valore+=a[i]*Math.pow(x,(n-k));
    
    		return valore;
    	}
    
    	/* metodo che restituisce la derivata della funzione.*/
    
    	public FunzionePolinomiale derivata()  {
    
    		FunzionePolinomiale derivata = new FunzionePolinomiale(double[] a);
    		String s="";
    
    		for(int i=0;i<a.length-1;i++)
    			for(int k=0;k<n-1;k++)
    			a[i]*=a[i+1];
    
    		s+=a[i]+"x^"+(n-k-1);
    
    		return derivata;
    	}
    
    	/* metodo che restituisce una descrizione della funzione */
    
    	public String toString() {
    
    		String s="";
    
    		for(int i=0;i<n;i++)
    			for(int k=0;k<n;k++)
    			s+=a[i]+"x^"+(n-k);
    
    		return s;
    	}
    }
    il problema principale è il metodo derivata, che è incompleto. Non so come utilizzare la variabile derivata del tipo della classe e restituirlo sotto forma di stringa(credo si debba fare così). Inoltre ho dubbi sul costruttore, credo sia piuttosto incompleto. Ancora non ho scritto la classe che testa questa di sopra, ma credo che avrò problemi nel creare gli oggetti e poi copiarli in una linked list. Vorrei capire bene l'algoritmo da utilizzare, e magari se mi date una grossa mano correggendo i codici del metodo derivata e del costruttore. Grazie.

  4. #4
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    mi è saltato subito all'occhio il costruttore che non deve tornare nessun tipo di valore
    cambia
    codice:
    public double FunzionePolinomiale(double[] a)
    con
    codice:
    public FunzionePolinomiale(double[] a)

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    26
    certo

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    usa i tag [code ] per il codice, aiuti noi a leggerlo e ad aiutarti

    per quanto riguarda la derivata, rifletti matematicamente su cosa è una derivata e su come la fai. Nel caso del polinomio ti basta moltiplicare per l'esponente il coefficiente (e trascura le costanti).

    per cui ipoteticamente hai una roba del genere

    codice:
    int grado = n;
    Double [] coeffderi = new Double[coeff.lenght -1]
    for (int i = 0; i < coeffderi.length; i++ ){
     coeffderi[i] = coeff[i] * grado;
     grado--;
    }
    per quanto riguarda il metodo toString() ti consiglio di passare per uno StringBuffer (questioni di ottimizzazione su cui non riflettiamo):
    ogni volta che su stringhe metti un "+" butti la stringa precedente e ne crei una nuova con i valori della stringa vecchia (prima di "+") e della stringa nuova (dopo "+").
    la stringa resta in memoria fino alla chiamata del garbage collector (il discorso lo semplifico un po).

    Nel caso banale di un solo elemento non ci sono problemi, ma la stessa tecnica è usata anche per oggetti che possono finire in strutture (dinamiche) che possono assumere dimensioni ragguardevoli porta ad un inutile spreco di risorse.
    Con lo stringBuffer fai un append della nuova stringa, solo alla fine il toString con risparmio risorse.
    Il fatto di avere computer potenti su cui sviluppiamo ci fa credere che il computer su cui si esegue è della stessa potenza (e porre requisiti minimi di grandezza solo per non imparare ad ottimizzare non fa acquistare valore aggiunto al software).

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,325

    Moderazione

    @des89: leggi il Regolamento interno e, in futuro, cerca di seguirlo.

    1) Il titolo non è assolutamente conforme
    2) Fin dall'inizio mancavano gli elementi necessari per poter condurre la discussione (il codice, ad esempio)
    3) Il codice va postato usando gli appositi tag CODE

    Sistemo io questa tua prima discussione.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    26
    Originariamente inviato da valia
    usa i tag [code ] per il codice, aiuti noi a leggerlo e ad aiutarti

    per quanto riguarda la derivata, rifletti matematicamente su cosa è una derivata e su come la fai. Nel caso del polinomio ti basta moltiplicare per l'esponente il coefficiente (e trascura le costanti).

    per cui ipoteticamente hai una roba del genere

    codice:
    int grado = n;
    Double [] coeffderi = new Double[coeff.lenght -1]
    for (int i = 0; i < coeffderi.length; i++ ){
     coeffderi[i] = coeff[i] * grado;
     grado--;
    }

    grazie, ci sto lavorando. L'unico dubbio è: il metodo deve restituirmi un oggetto di tipo FunzionePolinomiale. Come posso fare?(il mio problema principale, quando scrivo programmi, è che non riesco ad usare bene i tipi delle classi)

    codice:
     public FunzionePolinomiale derivata()  {
    
    		FunzionePolinomiale derivata = new FunzionePolinomiale(coeff);
    		String s="";
    
    		int grado = n;
    
    		Double[] coeffder = new Double[coeff.length -1];
    
    		for (int i=0;i<coeffder.length;i++ )	{
    			coeffder[i] = coeff[i] * grado;
    			grado--;
    			s+=coeffder[i]+"x^"+grado;
    		}
    
    		
    	}


    per quanto riguarda il metodo toString() ti consiglio di passare per uno StringBuffer (questioni di ottimizzazione su cui non riflettiamo):
    ogni volta che su stringhe metti un "+" butti la stringa precedente e ne crei una nuova con i valori della stringa vecchia (prima di "+") e della stringa nuova (dopo "+").
    la stringa resta in memoria fino alla chiamata del garbage collector (il discorso lo semplifico un po).

    Nel caso banale di un solo elemento non ci sono problemi, ma la stessa tecnica è usata anche per oggetti che possono finire in strutture (dinamiche) che possono assumere dimensioni ragguardevoli porta ad un inutile spreco di risorse.
    Con lo stringBuffer fai un append della nuova stringa, solo alla fine il toString con risparmio risorse.
    Il fatto di avere computer potenti su cui sviluppiamo ci fa credere che il computer su cui si esegue è della stessa potenza (e porre requisiti minimi di grandezza solo per non imparare ad ottimizzare non fa acquistare valore aggiunto al software).

    lo so che è uno spreco di risorse, ma al corso usiamo questo metodo!!

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    26

    Re: Moderazione

    Originariamente inviato da LeleFT
    @des89: leggi il Regolamento interno e, in futuro, cerca di seguirlo.

    1) Il titolo non è assolutamente conforme
    2) Fin dall'inizio mancavano gli elementi necessari per poter condurre la discussione (il codice, ad esempio)
    3) Il codice va postato usando gli appositi tag CODE

    Sistemo io questa tua prima discussione.


    Ciao.

    scusate tutti. Però il titolo non so se va bene, il problema non è solo la derivata XD

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    beh io ti ho detto come calcolare i coefficienti, da quello poi pensa su come fare. Un suggerimento (e lo implementi tu) è dirti che io userei i coefficienti della derivata così calcolati per creare un altro oggetto polinomio e restituirei quello.
    come ti pare come idea?

    che al corso si faccia così va bene, questo non vieta di usare strumenti forniti dalle api java (oltretutto java.util, non robe strane) e di imparare non solo a scrivere codice, ma a scriverlo con criterio

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.