Forum Informatica Unict

LAUREA TRIENNALE (D.M. 270/04) => Programmazione 1, 9 CFU => Topic started by: Fr3d3R!K on 31-01-2009, 17:17:14



Title: Esercizio prodotti agricoli CORRETTO
Post by: Fr3d3R!K on 31-01-2009, 17:17:14
Ciao a tutti, ho notato che nel messaggio citato tempo fa da me qui sul forum, riguardante l'esercizio (terza parte) dei prodotti agricoli, ci sono degli errori per cui metto qui l'esercizio corretto (testato e funzionante).
Il diagramma UML è reperibile qui (http://img222.imageshack.us/my.php?image=prodottiumlec8.jpg), mentre il codice java lo riporto qui sotto: E' importante precisare che nel diagramma, i costruttori delle classi Data e Provenienza non hanno parametri perchè non mi bastava lo spazio, ma vanno scritti come fatto in tutte le altre classi. Classi e metodi in corsivo (per chi non lo sapesse) sono abstract.
Ecco i codici (due file in uno le classi ed i metodi visibili nel diagramma UML e nell'altro il main con annessi e connessi):

Prodotti.java
Code:
abstract class Prodotti
{
private int peso;
private static int totale=1;
protected final int C=1;
public Prodotti(int peso)
{
this.peso=peso;
totale++;
}
public int getPeso()
{
return peso;
}
public static int getTotale()
{
return totale;
}
abstract double getPrezzo();
abstract public String toString();
}
class Data
{
private int gg;
private int mm;
private int aaaa;
public Data(int gg, int mm, int aaaa)
{
this.gg=gg;
this.mm=mm;
this.aaaa=aaaa;
}
public String toString()
{
return gg+"/"+mm+"/"+aaaa;
}
}
class Provenienza
{
private String localita;
private long vigna;
private Data raccolta;
public Provenienza(String localita, long vigna, Data raccolta)
{
this.localita=localita;
this.vigna=vigna;
this.raccolta=raccolta;
}
public String toString()
{
return "localita: "+localita+" codice vigna: "+vigna+" Data di raccolta: "+raccolta;
}
}
class Etichetta
{
private long barcode;
private Data imbott;
private Data scadenza;
public Etichetta(long barcode, Data imbott, Data scadenza)
{
this.barcode=barcode;
this.imbott=imbott;
this.scadenza=scadenza;
}
public String toString()
{
return "codice a barre: "+barcode+" data di imbottigliamento :"+imbott+" data di scadenza: "+scadenza;
}
}
class Oli extends Prodotti
{
private int viscosita;
public Oli(int peso, int viscosita)
{
super(peso);
this.viscosita=viscosita;
}
public double getPrezzo()
{
return C*this.getPeso();
}
public int getViscosita()
{
return viscosita;
}
public String toString()
{
return "Olio con peso: "+this.getPeso()+" viscosita: "+this.getViscosita()+" e prezzo: "+this.getPrezzo();
}
}
abstract class Vini extends Prodotti
{
private int conservante;
private Provenienza info;
public Vini(int peso, int conservante, Provenienza info)
{
super(peso);
this.conservante=conservante;
this.info=info;
}
public int getConservante()
{
return conservante;
}
public Provenienza getProvenienza()
{
return info;
}
abstract double getPrezzo();
abstract public String toString();
}
class Rossi extends Vini
{
public Rossi(int peso, int conservante, Provenienza info)
{
super(peso,conservante,info);
}
public double getPrezzo()
{
return Math.pow(C+this.getPeso(),5)*this.getConservante()/0.3;
}
        public void Colora(){}
public String toString()
{
return "Vino rosso con peso: "+this.getPeso()+" percentuale di conservante: "+this.getConservante()+" "+this.getProvenienza();
}
}
class Bianchi extends Vini
{
private Etichetta eti;
private int m=1;
public Bianchi(int peso, int conservante, Provenienza info, Etichetta eti)
{
super(peso,conservante,info);
this.eti=eti;
}
public double getPrezzo()
{
return 52*C*3*m;
}
public Etichetta getEtichetta()
{
return eti;
}
public String toString()
{
return "Vino bianco con peso: "+this.getPeso()+" percentuale di conservante: "+this.getConservante()+" "+this.getProvenienza()+" "+this.getEtichetta();
}
}
class Spumanti extends Bianchi
{
private int gas;
public Spumanti(int peso, int conservante, Provenienza info, Etichetta eti, int gas)
{
super(peso,conservante,info,eti);
this.gas=gas;
}
public String toString()
{
return "Spumante con peso: "+this.getPeso()+" percentuale di conservante: "+this.getConservante()+" "+this.getProvenienza()+" "+this.getEtichetta()+" percentuale di gas: "+gas+"%";
}
}

ProvaProdotti.java
Code:
public class ProvaProdotti
{
public static void main(String[] args)
{
int i=0,vini=0,max=-1,j=0;
Provenienza info;
Data raccolta,imbott,scadenza;
Etichetta eti;
Prodotti[] array=new Prodotti[30];
for(i=0;i<array.length;i++)
{
int tipo=(int)(Math.random()*4);
int peso=(int)(1+Math.random()*50);
int percentuale=(int)(1+Math.random()*100);
switch(tipo)
{
case 0:
raccolta=new Data(12,11,1991);
info=new Provenienza("italia",i,raccolta);
array[i]=new Rossi(peso,percentuale,info);
vini++;
break;
case 1:
raccolta=new Data(13,10,1991);
info=new Provenienza("italia",i,raccolta);
imbott=new Data(12,05,1992);
scadenza=new Data(12,5,2004);
eti=new Etichetta(123456789,imbott,scadenza);
array[i]=new Bianchi(peso,percentuale,info,eti);
vini++;
break;
case 2:
raccolta=new Data(15,8,1995);
info=new Provenienza("italia",i,raccolta);
imbott=new Data(1,3,1990);
scadenza=new Data(13,6,2008);
eti=new Etichetta(987654321,imbott,scadenza);
int gas=(int)(1+Math.random()*100);
array[i]=new Spumanti(peso,percentuale,info,eti,gas);
vini++;
break;
case 3:
array[i]=new Oli(peso,percentuale);
break;
}
System.out.println(array[i]); //Stampa informazioni prodotto.
}
System.out.println();
for(i=0;i<array.length;i++) //ricerca vino bianco più pesante...*
{
if(array[i] instanceof Bianchi)
{
if(max==-1) //piazzo l'indice del primo vino bianco che trovo su max così ho il termine di paragone (ed un vino qualora sia l'unico e non potessi fare il paragone)
max=i;
for(j=i+1;j<array.length;j++)
if(array[j] instanceof Bianchi) // se anche il secondo elemento dell'array è un vino bianco possa confrontarne la pesantezza col primo-
if(array[max].getPeso()<array[j].getPeso())
max=j;
}
}
if(max==-1) //se max==-1 significa che non non è stato trovato nemmeno un vino bianco nell'array.
System.out.println("Non sono presenti vini bianchi in lista");
else
System.out.println("Il vino bianco più pesante è: "+array[max]); //*...e stampa.
System.out.println();
/*System.out.println("Numero totale di elementi: "+Prodotti.getTotale());
System.out.println();*/
Prodotti[] ordinati=new Prodotti[vini];
j=0;
for(i=0;i<array.length;i++) //Trasloco vini nel nuovo array...
{
if(array[i] instanceof Vini)
{
ordinati[j]=array[i];
j++;
}
}
for(i=0;i<ordinati.length-1;i++) //...ordinamento nuovo array per prezzo (tramite bubblesort)...
{
for(j=i+1;j<ordinati.length;j++)
{
if(ordinati[i].getPrezzo()>ordinati[j].getPrezzo())
{
Prodotti temp=ordinati[i];
ordinati[i]=ordinati[j];
ordinati[j]=temp;
}
}
}
for(i=0;i<ordinati.length;i++)
System.out.println(ordinati[i]+" *PREZZO*:"+ordinati[i].getPrezzo()); //...e stampa.
}
}
Spero sia utile, soprattutto in vista della terza prova.
Saluti. .ciaociao


Title: Re:Esercizio prodotti agricoli CORRETTO
Post by: TheSpecialOne on 31-01-2009, 17:41:40
è simile al mio, speriamo capiti un esercizio del genere, non ci si perde molto tempo, e fà confondere poco!


Title: Re:Esercizio prodotti agricoli CORRETTO
Post by: Blonic on 01-02-2009, 19:44:32
Hai dimenticato la parte che dice "i vini rossi possono essere colorati chimicamente"


Title: Re:Esercizio prodotti agricoli CORRETTO
Post by: Fr3d3R!K on 01-02-2009, 19:57:44
grazie per la segnalazione, siccome l'ho fatto al volo ho dimenticato di scriverlo qui (nell'uml infatti c'è).


Title: Re:Esercizio prodotti agricoli CORRETTO
Post by: MisteroLupo on 02-02-2009, 18:52:17
Ho visto che nel main i valori delle sottoclassi e le date non li generi casualmente e così si risparmia un po' di tempo. Nel compito si può quindi fare così?


Title: Re:Esercizio prodotti agricoli CORRETTO
Post by: Fr3d3R!K on 02-02-2009, 19:54:45
Certo, il random è un modo come un altro per dare valori alle variabili (non importa il valore delle variabili ma che l'esercizio sia giusto).


Title: Re:Esercizio prodotti agricoli CORRETTO
Post by: Blonic on 02-02-2009, 21:27:48
Visto che state affrontando l'argomento: quando nei compiti dice "creare ed inizializzare casulamente un array di oggetti" si riferisce ovviamente anche ai parametri degli oggetti, ma che ci dovremmo mettere?!? Non mi dire che ci dovremmo passare il tempo a fare dei Math.random per ogni singolo parametro!!!!


Title: Re:Esercizio prodotti agricoli CORRETTO
Post by: Fr3d3R!K on 02-02-2009, 21:46:32
E invece sì, è richiesto espressamente dal compito passarsi il tempo a fare Math.random() per ogni singolo (anche il più insignificante) parametro!!!!! >:)
Ovviamente scherzo, ma questo per dirti che i random sono degli esempi (e nient'altro), non è ciò che metti nei parametri che è importante, l'importante che il programma sia giusto!!! Non perdiamoci in un bicchiere d'acqua!!! .wink


Title: Re:Esercizio prodotti agricoli CORRETTO
Post by: Blonic on 02-02-2009, 23:07:57
Allora ascolta la mia idea furbetta che mi era venuta per risparmiare parecchio lavoro domani:
Avevo intenzione di mettere un commento all'inizio della porzione di codice (esercizio B) in cui diceva che si supponeva l'esistenza di un metodo genValori() che modificava casualmente i valori di delle variabili d'istanza della classe in cui si trova l'esercizio (di cui di anch'esse si suppone l'esistenza), che corrispondono a quelli da usare come parametri attuali, così prima di creare l'oggerro invoco questo metodo e me la sono sbrigata molto elegantemente.
Che ne pensi?


Title: Re:Esercizio prodotti agricoli CORRETTO
Post by: Fr3d3R!K on 03-02-2009, 08:16:22
non ti complicare la vita, assegna dei valori arbitrari e basta!!! .wink O casomai fai quel che si dovrebbe fare sempre in queste situazioni: chiedi al professore cosa gli andrebbe meglio! :-OK
Saluti. .ciaociao


Title: Re:Esercizio prodotti agricoli CORRETTO
Post by: Blonic on 03-02-2009, 12:32:34
Secondo me la mia non è male come idea, anzi dimistreresti di avere fantasia, requisito importante per la programmazione, in ogni caso meglio chiedere al prof, giusto. Ciao!


Title: Re:Esercizio prodotti agricoli CORRETTO
Post by: Fr3d3R!K on 03-02-2009, 14:06:23
tutte le idee sono belle, però il mio consiglio presuppone che hai 1 ora e mezza per svolgere il compito, e non è bello concentrarsi sui dettagli e poi mangiarsi le mani perchè non si è riusciti a completare l'esercizio .wink


Title: Re:Esercizio prodotti agricoli CORRETTO
Post by: MisteroLupo on 03-02-2009, 14:38:50
tutte le idee sono belle, però il mio consiglio presuppone che hai 1 ora e mezza per svolgere il compito, e non è bello concentrarsi sui dettagli e poi mangiarsi le mani perchè non si è riusciti a completare l'esercizio .wink
.quoto quotone sacrosanto!


Title: Re:Esercizio prodotti agricoli CORRETTO
Post by: Vivynz on 03-02-2009, 20:27:19
ho fatto oggi la prova e con mio ( e penso di tutti) grande sollievo il prof ci ha detto di creare con la math.random() solo il valore casuale per lo switch e poi per i parametri ci ha detto semplicemente di mettere i puntini  .smile altrimenti ci sarebbe voluto troppo tempo ci saremmo persi dietro i 1000 parametri!! :[Emoticon] Asd:


Title: Re:Esercizio prodotti agricoli CORRETTO
Post by: Blonic on 03-02-2009, 20:37:17
Sì, infatti! E' stato davvero confortante!!! :-OK  .quoto


Title: Re:Esercizio prodotti agricoli CORRETTO
Post by: Vivynz on 03-02-2009, 20:39:41
com'è andata a te?


Title: Re:Esercizio prodotti agricoli CORRETTO
Post by: Blonic on 03-02-2009, 20:44:24
Abbastanza bene, ho solo fatto un piccolo errore decisamente da pirla:
Ho dimenticato di mettere di che tipo era la memoria del GPS, perchè all'inizio ero insicuro sul metterci un int o un array di byte, quindi mi son detto "Lo metto dopo!"......
.............e infatti si è visto! :-)|
Te invece?


Title: Re:Esercizio prodotti agricoli CORRETTO
Post by: Vivynz on 03-02-2009, 20:46:24
 :[Emoticon] Asd:
bho penso che sia andata bene ma sinceramente conoscendomi sbaglio sempre cavolate..non penso di aver fatto eccezione stavolta  .smile


Title: Re:Esercizio prodotti agricoli CORRETTO
Post by: Blonic on 03-02-2009, 21:16:38
Succede lo stesso anche a me ma penso anche per molti... Credi di aver fatto un capolavoro di compito e poi fai errori dementi... :-)|

Ma giusto per curiosità personale..... che hai messo per la memoria? .penso


Title: Re:Esercizio prodotti agricoli CORRETTO
Post by: Crasher on 04-02-2009, 09:56:57
Spero che il prof riesca a correggerlo... non sapevo più dove impostare i diagrammi!
E non parliamo sulle cancellature :boh


Title: Re:Esercizio prodotti agricoli CORRETTO
Post by: Vivynz on 04-02-2009, 12:28:07
Succede lo stesso anche a me ma penso anche per molti... Credi di aver fatto un capolavoro di compito e poi fai errori dementi... :-)|

Ma giusto per curiosità personale..... che hai messo per la memoria? .penso
neanche mi ricordo ahaha...no vabbè ho creato una classe memoria che aveva una variabile m di tipo byte[]...
Spero che il prof riesca a correggerlo... non sapevo più dove impostare i diagrammi!
E non parliamo sulle cancellature :boh
a me dovrebbe dare un bel voto solo per l'ordine  .smile ho aperto il foglio e ho fatto l'uml in orizzontale, tutto bello largo e pulitissimo( o quasi  :[Emoticon] Asd:) :yoh


Title: Re:Esercizio prodotti agricoli CORRETTO
Post by: Blonic on 04-02-2009, 20:43:23
Speriamo che dia un mezzovoto per l'ordine! No perchè io il compito l'avevo fatto in un'ora; gli ultimi 30 minuti me li sono passati a farlo pulito  :[Emoticon] Asd: !!!


Title: Re:Esercizio prodotti agricoli CORRETTO
Post by: Vivynz on 05-02-2009, 11:04:57
 .quoto :[Emoticon] Asd: :[Emoticon] Asd:


Title: Re:Esercizio prodotti agricoli CORRETTO
Post by: gaernik on 01-03-2009, 13:32:13
io ho fatto questo (http://img4.imageshack.us/my.php?image=prodottiagricoli.jpg) uml per i prodotti agricoli, che ve ne pare? errori\migliorie?  .arrossisco


Title: Re:Esercizio prodotti agricoli CORRETTO
Post by: Fr3d3R!K on 01-03-2009, 14:04:54
1. io avrei dichiarato totale come static per poterlo richiamare con la sintassi "abbreviata", ma sono scelte;
2. Manca la nota sul metodo getColore();
3. Manca il metodo getProvenienza();
Saluti. .ciaociao


Title: Re:Esercizio prodotti agricoli CORRETTO
Post by: gaernik on 01-03-2009, 14:13:17
1. in che senso con la sintassi abbreviata?  .penso
2. è necessaria la nota sul metodo getColore() oppure è una miglioria?
3. quello l'ho dimenticato, mo lo aggiungo  :boh

grazie per le risposte  :pray


Title: Re:Esercizio prodotti agricoli CORRETTO
Post by: Fr3d3R!K on 01-03-2009, 14:25:12
1. leggi qui (http://java.sun.com/j2se/1.5.0/docs/guide/language/static-import.html) per chiarimenti. Con la parola chiave static puoi richiamare direttamente il metodo usando la sintassi, ad esempio:
Code:
array[i].getTotale()
2. Non è un errore, ma visto che hai messo le note per i metodi getPrezzo(), il metodo getColore() è l'unico metodo rimasto "ignoto". Detto in parole povere, hai specificato tutti i metodi necessari tranne quello e Aromatizza() (che ho dimenticato di citare pure io) dei quali non indichi "cosa fanno". Ma come ti ho detto non è un errore, semplicemente per non lasciare il lavoro a metà (come si suol dire), in quanto l'UML è semplicemente uno schema indicativo. Non se mi spiego.
Saluti!


Title: Re:Esercizio prodotti agricoli CORRETTO
Post by: gaernik on 01-03-2009, 14:27:44
ah ok capito, in quelli avevo messo le note perchè è così che li vuole implementati nella terza prova il prof no?


Title: Re:Esercizio prodotti agricoli CORRETTO
Post by: Fr3d3R!K on 01-03-2009, 14:30:26
In quello avevi messo le note per specificare che, in quei metodi, andava scritto quel codice. Nel caso degli altri due (getColore() ed Aromatizza) chi legge lo schema potrebbe chiedersi "e questi due invece cosa devono fare?"
Understood? .wink


Title: Re:Esercizio prodotti agricoli CORRETTO
Post by: gaernik on 01-03-2009, 17:42:55
tutto chiaro, grazie ancora  :-ciao