Pages: 1 2 3 [4]   Go Down
Print
Author Topic: Esercizi di laboratorio  (Read 11492 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Vivynz
Forumista Eroico
*****
Offline Offline

Gender: Female
Posts: 2.033


File reality.sys corrupted, Reboot Universe? Y/N


« Reply #45 on: 30-01-2009, 14:18:41 »

Eccolo...non considerate tanto la classe Data perchè l'ho fatta tanto così!ci vorrebbe molto più lavoro!
Code:
public class Elicotteristi
{
public static void ordina (Tour[] a)
{
for(int i=0;i<a.length-1;i++)
{
int min=i;
for(int j=i+1;j<a.length;j++)
if(a[j].getPrezzo()<a[min].getPrezzo())
min=j;
scambia(a,min,i);
}
}
public static void scambia(Tour[] a,int b,int c)
{
Tour temp=a[b];
a[b]=a[c];
a[c]=temp;
}
public static void main (String[] args)
{
Tour[] t=new Tour[25];
for(int i=0;i<t.length;i++)
{
int x=(int)(Math.random()*4);
switch(x)
{
case 0:
{
t[i]=new Manhattan(new Data((int)(1+Math.random()*31),(int)(1+Math.random()*12),(int)(2009+Math.random()*2)),
(int)(20+Math.random()*70),(int)(10+Math.random()*30));
break;
}
case 1:
{
t[i]=new Hudson(new Data((int)(1+Math.random()*31),(int)(1+Math.random()*12),(int)(2009+Math.random()*2)),
(int)(20+Math.random()*70),(int)(Math.random()*4));
break;
}
case 2:
{
t[i]=new StatuaLibertà(new Data((int)(1+Math.random()*31),(int)(1+Math.random()*12),(int)(2009+Math.random()*2)),
(int)(20+Math.random()*70),(int)(Math.random()*4),(int)(1+Math.random()*3));
break;
}
case 3:
{
t[i]=new Matrimonio(new Data((int)(1+Math.random()*31),(int)(1+Math.random()*12),(int)(2009+Math.random()*2)),
(int)(20+Math.random()*70),(int)(Math.random()*4),(int)(1+Math.random()*3));
break;
}
}
}
//------------------------------------------------------------------------------------------------------------------------
for(int i=0;i<t.length;i++)
System.out.println(t[i].altrotoString());
//------------------------------------------------------------------------------------------------------------------------
int indice=-1;
int min=50;
for(int i=0;i<t.length;i++)
if(t[i] instanceof Manhattan)
if(((Manhattan)t[i]).getQuota()<min)
{
min=((Manhattan)t[i]).getQuota();
indice=i;
}
if(indice!=-1)
System.out.println("Il tour che vola a quota più bassa è quello di indice: "+indice+" e vola a "+((Manhattan)t[indice]).getQuota()+" metri.");
else
System.out.println("Non ci sono tour su Manhattan.");
//-------------------------------------------------------------------------------------------------------------------------
Tour[] tt=new Tour[t.length];
for(int i=0;i<tt.length;i++)
tt[i]=t[i];
ordina(tt);
for(int i=0;i<tt.length;i++)
System.out.println(tt[i]);
}
}
abstract class Tour
{
private Data DataInizio;
private int Durata;
protected static float c=6.3F;
public Tour(Data datainizio,int durata)
{
DataInizio=datainizio;
Durata=durata;
}
public Data getDataInizio()
{
return DataInizio;
}
public int getDurata()
{
return Durata;
}
abstract public char getTipo();
abstract public float getPrezzo();
abstract public String toString();
public String altrotoString()
{
String str="";
for(int i=0;i<(int)(getPrezzo());i++)
str+=getTipo();
str+="\n";
return str;
}
}
class Data
{
private int Giorno;
private int Mese;
private int Anno;
public Data(int giorno,int mese,int anno)
{
Giorno=giorno;
Mese=mese;
Anno=anno;
if(Mese==2&&(Giorno==30||Giorno==31))
Giorno=28;
if((Mese==11||Mese==4||Mese==6||Mese==9)&&(Giorno==30));
}
public int getGiorno()
{
return Giorno;
}
public int getMese()
{
return Mese;
}
public int getAnno()
{
return Anno;
}
public String toString()
{
return getGiorno()+"/"+getMese()+"/"+getAnno();
}
}
class Manhattan extends Tour
{
private int Quota;
public Manhattan(Data datainizio,int durata,int quota)
{
super(datainizio,durata);
Quota=quota;
}
public int getQuota()
{
return Quota;
}
public char getTipo()
{
return 'M';
}
public float getPrezzo()
{
return (getQuota()+c)%8;
}
public String toString()
{
return "Il tour è del tipo: "+getTipo()+", ha data di inzio: "+getDataInizio()+", durata: "+getDurata()+
"minuti, vola alla quota di: "+getQuota()+" metri, costa: "+getPrezzo()+" euro.\n";
}
}
class Hudson extends Tour
{
private int PontiIncrociati;
public Hudson(Data datainizio,int durata,int pontiincrociati)
{
super(datainizio,durata);
PontiIncrociati=pontiincrociati;
}
public int getPontiIncrociati()
{
return PontiIncrociati;
}
public char getTipo()
{
return 'H';
}
public float getPrezzo()
{
return 8+(getPontiIncrociati()+getDurata())%(float)8;
}
public String toString()
{
return "Il tour è del tipo: "+getTipo()+", ha data di inzio: "+getDataInizio()+", durata: "+getDurata()+
"minuti, passa da: "+getPontiIncrociati()+" ponti incrociati, costa: "+getPrezzo()+" euro.\n";
}
}
class StatuaLibertà extends Hudson
{
private int Giri;
public StatuaLibertà(Data datainizio,int durata,int pontiincrociati,int giri)
{
super(datainizio,durata,pontiincrociati);
Giri=giri;
}
public int getGiri()
{
return Giri;
}
public char getTipo()
{
return 'L';
}
public float getPrezzo()
{
return 16+(getGiri()*c)%8;
}
public String toString()
{
return "Il tour è del tipo: "+getTipo()+", ha data di inzio: "+getDataInizio()+", durata: "+getDurata()+
"minuti, passa da: "+getPontiIncrociati()+" ponti incrociati, fa "+getGiri()+" giri, costa: "+getPrezzo()+" euro.\n";
}
}
class Matrimonio extends Hudson
{
private int Ecclesiastici;
public Matrimonio(Data datainizio,int durata,int pontiincrociati,int ecclesiastici)
{
super(datainizio,durata,pontiincrociati);
Ecclesiastici=ecclesiastici;
}
public int getEcclesiastici()
{
return Ecclesiastici;
}
public char getTipo()
{
return '#';
}
public float getPrezzo()
{
return 24+(float)(Math.pow(getDurata(),getEcclesiastici()))%8;
}
public String toString()
{
return "Il tour è del tipo: "+getTipo()+", ha data di inzio: "+getDataInizio()+", durata: "+getDurata()+
"minuti, passa da: "+getPontiIncrociati()+" ponti incrociati, ha a bordo +"+getEcclesiastici()+" ecclesiastici, costa: "+getPrezzo()+" euro.\n";
}
}
Logged

L'odrine delle lttere dnetro una praorla non è ipmortatne, la sloa cosa ipmortatne è che la pmria e l'utlima ltteera sinao nel potso giutso. Il rseto può essree in un dsiodrine più totlae e voi ptoerte smerpe lggeree sneza porblmea.
MisteroLupo
Apprendista Forumista
**
Offline Offline

Posts: 273

Tra il dire e il fare c'è distanza di hamming 2.


« Reply #46 on: 30-01-2009, 14:36:23 »

...non considerate tanto la classe Data perchè l'ho fatta tanto così!ci vorrebbe molto più lavoro!
Cos'altro aggiungeresti alla classe data?
Logged
Vivynz
Forumista Eroico
*****
Offline Offline

Gender: Female
Posts: 2.033


File reality.sys corrupted, Reboot Universe? Y/N


« Reply #47 on: 30-01-2009, 15:06:01 »

Bè l'ho fatta superficiale...ci sono diversi problemi...tipo gli anni bisestili...oppure ad esempio in altri esercizi bisognerebbe calcolare la distanza tra una data e l'altra in giorni..e non saprei come fare..
Logged

L'odrine delle lttere dnetro una praorla non è ipmortatne, la sloa cosa ipmortatne è che la pmria e l'utlima ltteera sinao nel potso giutso. Il rseto può essree in un dsiodrine più totlae e voi ptoerte smerpe lggeree sneza porblmea.
Alex_47
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 409


The spiral's King


« Reply #48 on: 30-01-2009, 15:08:54 »

Vyvniz...
Ho creato un topic apposito  per questo problema..

http://forum.sdai.unict.it/index.php?topic=1151.0

Invece vorrei capire come dobbiamo usare le percentuali quando ci dice di aggiungere una certa percentuale a una variabile
Logged
Vivynz
Forumista Eroico
*****
Offline Offline

Gender: Female
Posts: 2.033


File reality.sys corrupted, Reboot Universe? Y/N


« Reply #49 on: 30-01-2009, 15:11:28 »

perchè Vyvniz?mi anagrammi il nome? [Emoticon] Asd [Emoticon] Asd [Emoticon] Asd [Emoticon] Asd
cmq bho non lo so...
Logged

L'odrine delle lttere dnetro una praorla non è ipmortatne, la sloa cosa ipmortatne è che la pmria e l'utlima ltteera sinao nel potso giutso. Il rseto può essree in un dsiodrine più totlae e voi ptoerte smerpe lggeree sneza porblmea.
MisteroLupo
Apprendista Forumista
**
Offline Offline

Posts: 273

Tra il dire e il fare c'è distanza di hamming 2.


« Reply #50 on: 30-01-2009, 15:12:54 »

Bè l'ho fatta superficiale...ci sono diversi problemi...tipo gli anni bisestili...oppure ad esempio in altri esercizi bisognerebbe calcolare la distanza tra una data e l'altra in giorni..e non saprei come fare..
Vyznvi pensi che si debba implementare pure con gli anni bisestili nel compito? testate
Logged
Alex_47
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 409


The spiral's King


« Reply #51 on: 30-01-2009, 16:00:46 »

perchè Vyvniz?mi anagrammi il nome? [Emoticon] Asd [Emoticon] Asd [Emoticon] Asd [Emoticon] Asd
cmq bho non lo so...

Scusami scrivevo di fretta XD

Comunque spero che questo casino della data non ci sia nel laboratorio di lunedi!

per quanto riguarda il Totale che si è spiegato prima , per evocarlo nel main dobbiamo scrivere..

Code:

NomeClasse.getTotale()


metto il nome della classe perchè Totale è static
Logged
Vivynz
Forumista Eroico
*****
Offline Offline

Gender: Female
Posts: 2.033


File reality.sys corrupted, Reboot Universe? Y/N


« Reply #52 on: 30-01-2009, 16:35:34 »

per quanto riguarda il Totale che si è spiegato prima , per evocarlo nel main dobbiamo scrivere..

Code:

NomeClasse.getTotale()


metto il nome della classe perchè Totale è static

si è giusto!
Vyznvi pensi che si debba implementare pure con gli anni bisestili nel compito? testate
wow è nata la caccia all'anagramma migliore? [Emoticon] Asd [Emoticon] Asd cmq no non credo proprio 

posto il codice anche di quest'esercizio che ho appena finito non si sa mai può servire..

Un’azienda vende dispositivi Magnetici di memoria, caratterizzati dal numero di testine, e dispositivi di memoria su Microchip, caratterizzati dal numero di piedini. Ogni dispositivo possiede il riferimento all’anno di creazione, una capacità in bit (max ½Kb), e contiene lo spazio di immagazzinamento dei bit (dipendente dalla capacità). Inoltre, tra i Microchip si distinguono le memorie Flash (caratterizzate dalla velocità di scrittura), e tra quest’ultime quelle UltraFlash, contraddistinte dal tipo di tecnologia (A,B,o C). 

Si implementi una gerarchia ereditaria in Java con i seguenti metodi eventualmente polimorfi:
•   getTipo;    restituisce un carattere che identifica il tipo di dispositivo (‘M’ per quelli Magnetici,  ‘C’ per quelli Microchip, ‘F‘ per quelli Flash, ‘U’ per quelli UltraFlash);
•   getTestine;       restituisce il numero di testine del dispositivo;
•   getCapacità;    restituisce la capacità in bit del dispositivo;
•   getCosto;       restituisce il costo di ogni dispositivo, calcolato mediante la formula:
o   (Testine +  c) % 7            per quelli Magnetici, 
o   (Piedini +  Capacità) % 7 +7      per quelli a Microchip, 
o   (Velocità  • c)  % 7 + 14         per quelli Flash e UltraFlash, 
dove c  è un coefficiente costante per tutti i dispositivi che vale 3,7.

Si generi una collezione di 21 dispositivi casuali e
   si visualizzi una stringa per ogni dispositivo (mediante il toString() ) costituita da una sequenza di N caratteri getTipo() terminata da un ‘\n’, dove N è il costo del dispositivo;
   si trovi il dispositivo con il minor numero di testine;
   si visualizzino tutti i dispositivi (mediante il toString() ), ordinati in senso non-decrescente in base al loro costo.

Code:
public class AziendaDispositivi
{
public static void ordina (DispositiviMemoria[] a)
{
for(int i=0;i<a.length-1;i++)
{
int min=i;
for(int j=i+1;j<a.length;j++)
if(a[j].getCosto()<a[min].getCosto())
min=j;
scambia(a,min,i);
}
}
public static void scambia(DispositiviMemoria[] a,int b,int c)
{
DispositiviMemoria temp=a[b];
a[b]=a[c];
a[c]=temp;
}
public static void main (String[] args)
{
DispositiviMemoria[] d=new DispositiviMemoria[21];
for(int i=0;i<d.length;i++)
{
int x=(int)(Math.random()*4);
switch(x)
{
case 0:
{
d[i]=new Magnetico((int)(2007+Math.random()*3),(int)(1+Math.random()*512),(int)(Math.random()*4));
break;
}
case 1:
{
d[i]=new Microchip((int)(2007+Math.random()*3),(int)(1+Math.random()*512),(int)(10+Math.random()*20));
break;
}
case 2:
{
d[i]=new Flash((int)(2007+Math.random()*3),(int)(1+Math.random()*512),(int)(10+Math.random()*20),(float)(4+Math.random()*48));
break;
}
case 3:
{
d[i]=new UltraFlash((int)(2007+Math.random()*3),(int)(1+Math.random()*512),(int)(10+Math.random()*20),(float)(4+Math.random()*48),(char)('A'+Math.random()*3));
break;
}
}
}
//----------------------------------------------------------------------------------------------------------------------------------------
for(int i=0;i<d.length;i++)
System.out.println(d[i].altrotoString());
//-----------------------------------------------------------------------------------------------------------------------------------------
int indice=-1;
int min=4;
for(int i=0;i<d.length-1;i++)
if(d[i] instanceof Magnetico)
if(((Magnetico)d[i]).getTestine()<min)
{
min=((Magnetico)d[i]).getTestine();
indice=i;
}
if(indice!=-1)
System.out.println("Il dispositivo magnetico con minor numero di testine è quello di indice"+indice+
" e ha numero di testine: "+((Magnetico)d[indice]).getTestine()+".");
else
System.out.println("Non ci sono dispositivi magnetici");
//------------------------------------------------------------------------------------------------------------------------------------------
DispositiviMemoria[] dd=new DispositiviMemoria[d.length];
for(int i=0;i<dd.length;i++)
dd[i]=d[i];
ordina(dd);
for(int i=0;i<dd.length;i++)
System.out.println(dd[i]);

}
}
abstract class DispositiviMemoria
{
protected static float c=3.7F;
private int AnnoCreazione;
private int Capacita;
private int[] ImmagazinamentoBit;
public DispositiviMemoria(int annocreazione,int capacita)
{
AnnoCreazione=annocreazione;
Capacita=capacita;
ImmagazinamentoBit=new int[Capacita];
}
public int getAnnoCreazione()
{
return AnnoCreazione;
}
public int getCapacita()
{
return Capacita;
}
public String altrotoString()
{
String str="";
for(int i=0;i<(int)(getCosto());i++)
str+=getTipo();
str+="\n";
return str;
}
public abstract char getTipo();
public abstract float getCosto();
public abstract String toString();
}
class Magnetico extends DispositiviMemoria
{
private int Testine;
public Magnetico(int annocreazione,int capacita,int testine)
{
super(annocreazione,capacita);
Testine=testine;
}
public int getTestine()
{
return Testine;
}
public char getTipo()
{
return 'M';
}
public float getCosto()
{
return (getTestine()+c)%(float)7;
}
public String toString()
{
return "Il dispositivo di memoria è di tipo: "+getTipo()+", anno creazione: "+getAnnoCreazione()+
", capacita: "+getCapacita()+"bit, "+getTestine()+" testine, costo: "+getCosto()+".\n";
}
}
class Microchip extends DispositiviMemoria
{
private int Piedini;
public Microchip(int annocreazione,int capacita,int piedini)
{
super(annocreazione,capacita);
Piedini=piedini;
}
public int getPiedini()
{
return Piedini;
}
public char getTipo()
{
return 'C';
}
public float getCosto()
{
return (getPiedini()+getCapacita())%(float)7+7;
}
public String toString()
{
return "Il dispositivo di memoria è di tipo: "+getTipo()+", anno creazione: "+getAnnoCreazione()+
", capacita: "+getCapacita()+"bit, "+getPiedini()+" piedini, costo: "+getCosto()+".\n";
}
}
class Flash extends Microchip
{
private float VelocitaScrittura;
public Flash(int annocreazione,int capacita,int piedini,float velocitascrittura)
{
super(annocreazione,capacita,piedini);
VelocitaScrittura=velocitascrittura;
}
public float getVelocitaScrittura()
{
return VelocitaScrittura;
}
public char getTipo()
{
return 'F';
}
public float getCosto()
{
return (getVelocitaScrittura()*c)%7+14;
}
public String toString()
{
return "Il dispositivo di memoria è di tipo: "+getTipo()+", anno creazione: "+getAnnoCreazione()+
", capacita: "+getCapacita()+"bit, "+getPiedini()+" piedini, velocita di scrittura: "+getVelocitaScrittura()+", costo: "+getCosto()+".\n";
}
}
class UltraFlash extends Flash
{
private char TipoTecnologia;
public UltraFlash(int annocreazione,int capacita,int piedini,float velocitascrittura,char tipotecnologia)
{
super(annocreazione,capacita,piedini,velocitascrittura);
TipoTecnologia=tipotecnologia;
}
public char getTipoTecnologia()
{
return TipoTecnologia;
}
public char getTipo()
{
return 'U';
}
public String toString()
{
return "Il dispositivo di memoria è di tipo: "+getTipo()+", anno creazione: "+getAnnoCreazione()+
", capacita: "+getCapacita()+"bit, "+getPiedini()+" piedini, velocita di scrittura: "+getVelocitaScrittura()+
", tipo di tecnologia: "+getTipoTecnologia()+", costo: "+getCosto()+".\n";
}
}
« Last Edit: 30-01-2009, 16:41:06 by Vivynz » Logged

L'odrine delle lttere dnetro una praorla non è ipmortatne, la sloa cosa ipmortatne è che la pmria e l'utlima ltteera sinao nel potso giutso. Il rseto può essree in un dsiodrine più totlae e voi ptoerte smerpe lggeree sneza porblmea.
MisteroLupo
Apprendista Forumista
**
Offline Offline

Posts: 273

Tra il dire e il fare c'è distanza di hamming 2.


« Reply #53 on: 30-01-2009, 17:08:47 »

wow è nata la caccia all'anagramma migliore? [Emoticon] Asd [Emoticon] Asd
univ
cmq no non credo proprio 
Ho avuto un attimo di panico I
Logged
Mito
Matricola
*
Offline Offline

Posts: 56


« Reply #54 on: 30-01-2009, 17:13:49 »

Quote from: Vivynz
Però non so come fare per il punto 1 delle tre consegne alla fine...se io con il metodo toString() visualizzo tutte le informazioni sul tour allo stesso tempo come faccio a  visualizzare con lo stesso metodo la sequenza di caratteri??
Perciò avevo pensato di risolvere il punto 1 con il toString() della superclasse e poi utilizzare quello nel main..non so bene come spiegare..questo è tutto il codice...poi al di là di questo mi dici com'è...se ci sono cose che non vanno..

creando un altro metodo...non c'è altro!

Invece di creare un altrotoString() nella classe principale abstract, potresti fare una concatenazione di stringhe nel toString() delle sottoclassi, ove serve (ritornando per es. --> return str1+str2).

Direi che in questo modo è anche più logico e corretto.  ok

PS: ringrazio un amico per il consiglio...
« Last Edit: 30-01-2009, 18:18:54 by Mito » Logged
Acicatena86
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 404


See full me now who neon


« Reply #55 on: 30-01-2009, 17:55:48 »

Quote from: Vivynz
Però non so come fare per il punto 1 delle tre consegne alla fine...se io con il metodo toString() visualizzo tutte le informazioni sul tour allo stesso tempo come faccio a  visualizzare con lo stesso metodo la sequenza di caratteri??
Perciò avevo pensato di risolvere il punto 1 con il toString() della superclasse e poi utilizzare quello nel main..non so bene come spiegare..questo è tutto il codice...poi al di là di questo mi dici com'è...se ci sono cose che non vanno..

creando un altro metodo...non c'è altro!

Invece di creare un altrotoString() nella classe principale abstract, potresti fare una concatenazione di stringhe nel toString() delle sottoclassi, ove serve (ritornando per es. --> return str1+str2).

Direi che in questo modo è anche più logico e corretto.  ok

Bravo bravo prenditi il merito
Logged
Mito
Matricola
*
Offline Offline

Posts: 56


« Reply #56 on: 30-01-2009, 18:12:34 »

Bravo bravo prenditi il merito

Ringrazio il mio amico Acicatena86 che mi ha consigliato questa soluzione. Il merito è suo. Un grande!

 
« Last Edit: 30-01-2009, 18:22:17 by Mito » Logged
Vivynz
Forumista Eroico
*****
Offline Offline

Gender: Female
Posts: 2.033


File reality.sys corrupted, Reboot Universe? Y/N


« Reply #57 on: 31-01-2009, 09:11:24 »

grazie per il consiglio  quindi nello stesso toString() comparirebbero sia le informazioni e sia la sequenza di caratteri giusto?
Logged

L'odrine delle lttere dnetro una praorla non è ipmortatne, la sloa cosa ipmortatne è che la pmria e l'utlima ltteera sinao nel potso giutso. Il rseto può essree in un dsiodrine più totlae e voi ptoerte smerpe lggeree sneza porblmea.
Pages: 1 2 3 [4]   Go Up
Print
Jump to: