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

Posts: 56


« Reply #30 on: 29-01-2009, 19:51:56 »

ho mandato un'email al prof...e ha detto che questo è il primo anno che la prova è strutturata così quindi nessun altro esempio come quello che già abbiamo...

Il Prof. ha detto bene.

io ho visto l'esempio e mi è sembrato come la prova di laboratorio dell'anno scorso...mah...

No.

come può essere???ma la prova dell'anno scorso qual era??c'è da qualche parte?

...da quest'anno --> Esempio Prova Lab.

...anni passati --> in soldoni, era una Terza Parte (da fare al PC) con meno classi da implementare.

Ecco un esempio:

Un' azienda vende dispositivi Magnetici di mem., caratterizzati dal numero di testine, e dispositivi di mem. su Microchip, caratterizzati da num.di piedini. Ogni dispositivo possiede il riferimento all'anno di creazione, una capacità in bit(max 1/2 Kb), e contiene lo spazio di immagazzinamento dei bit(dipendente dalla capacità). Inoltre, tra i Microchip si distinguono le mem.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 1 carattere che identifica il tipo di disp.('M' x quelli Magnetici, 'C' x quelli MicroChip,'F' x quelli Flash,'U' x quelli UltraFlash);
   
-getTestine:restituisce il num. di testine del disp.;
-getCapacita:restituisce la capacita in bit del dispositivo;
-getCosto: restituisce il costo di ogni disp., calcolato mediante la formula:
   - (testine + c) %7      x quelli MAgnetici;
   - (Piedini + Capacita) % 7 + 7   x quelli Microchip;
   - ((velocita * c) % 7 +14   x quelli Flash e ultraFlash;

dove c è un coefficiente costante per tutti i disp. che vale 3,7.

Si generi una collezione di 21 disp. casuali e
-si visualizzi una stringa per ogni disp.(mediante toString()) costituita da una sequenza di N caratteri getTipo() terminata da un '\n', dove N è il costo del disp.;
-si trovi il disp. con il minor. numero di testine;
-si visualizzino  tutti i disp.(mediante il toString() ),ordinati in senso non decrescente in base al loro costo.
« Last Edit: 29-01-2009, 19:54:57 by Mito » Logged
Fr3d3R!K
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.463



« Reply #31 on: 29-01-2009, 20:14:13 »

di questo me ne sono accorto anche io, quello che volevo dire e che fondamentalmente (o come dici tu in soldoni) la prova non ha avuto questo cambiamento così radicale...
Logged

Search Button, CODE Tag, Google & Italian language are your friends! Use Them!
Vivynz
Forumista Eroico
*****
Offline Offline

Gender: Female
Posts: 2.033


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


« Reply #32 on: 29-01-2009, 20:20:06 »

bè ma nella prova di quest'anno il diagramma uml è già bell'e pronto 
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.
Vivynz
Forumista Eroico
*****
Offline Offline

Gender: Female
Posts: 2.033


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


« Reply #33 on: 29-01-2009, 21:19:43 »

C'è un modo per utilizzare volontariamente un metodo della superclasse(anzichè quello della sottoclasse) di cui è stato fatto l'overriding??Non so se mi sono fatta capire 
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.
Fr3d3R!K
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.463



« Reply #34 on: 29-01-2009, 21:22:24 »

ad esempio?
Logged

Search Button, CODE Tag, Google & Italian language are your friends! Use Them!
Vivynz
Forumista Eroico
*****
Offline Offline

Gender: Female
Posts: 2.033


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


« Reply #35 on: 29-01-2009, 21:31:38 »

Ad esempio se ho un oggetto di una sottoclasse e anzichè voler utilizzare il toString() della sottoclasse voglio utilizzare quello della superclasse..si può 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.
Vivynz
Forumista Eroico
*****
Offline Offline

Gender: Female
Posts: 2.033


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


« Reply #36 on: 29-01-2009, 21:46:29 »

Magari mi spiego meglio se parlo più concretamente 
Ho implementato le classi di quest'esercizio:

"Un club privato di elicotteristi organizza dei tour su Manhattan, caratterizzati dalla quota di navigazione, e sul fiume Hudson, caratterizzati dal numero di ponti incrociati. Ogni tour ha una data d’inizio ed una durata in ore. Inoltre, tra i tour sull’Hudson si distinguono quelli attorno alla statua della libertà (caratterizzati dal numero di giri), e tra quest’ultimi quelli per celebrare matrimoni, contraddistinti dal numero di ecclesiastici a bordo. 

Si implementi una gerarchia ereditaria in Java con i seguenti metodi eventualmente polimorfi:
•   getTipo;     restituisce un carattere che identifica il tipo di tour (‘M’ per quelli su Manhattan,  ‘H’ per quelli sull’Hudson, ‘L‘ per quelli sulla statua della libertà, ‘#’ per quelli matrimoniali);
•   getQuota;       restituisce la quota di navigazione;
•   getDurata;       restituisce la durata del volo;
•   getCosto;       restituisce il costo di ogni volo, calcolato mediante la formula:
o   (Quota +  c) % 8            per i tour su Manhattan, 
o   8 + (Ponti +  Durata) % 8      per i tour sull’Hudson, 
o   16 + (Giri  • c)  % 8         per i tour della statua della libertà, 
o   24 + (Durata^Ecclesiastici)  %  8  per i tour matrimoniali,
dove c  è un coefficiente costante per tutti i voli che vale 6,3.

Si generi una collezione di 25 tour casuali e
   si visualizzi una stringa per ogni tour (mediante il toString() ) costituita da una sequenza di N caratteri getTipo() terminata da un ‘\n’, dove N è il costo del tour;
   si trovi il tour che vola alla quota più bassa;
   si visualizzino tutti i voli (mediante il toString() ), ordinati in senso non-decrescente in base al loro costo."

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..
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;
}
}
}
//------------------------------------------------------------------------------------------------------------------------



//------------------------------------------------------------------------------------------------------------------------
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();
public String toString()
{
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.
Fr3d3R!K
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.463



« Reply #37 on: 29-01-2009, 21:47:31 »

se non è abstract certo che puoi. Se è abstract devi ridefinire per forza il metodo.
Ho visto ora l'altra risposta però potresti ridefinire (tramite overriding) semplicemente il toString() per adattarlo a quel caso, visto che comunque, se implementi il toString() abstract va ridefinito comunque. Non so se mi spiego.
« Last Edit: 29-01-2009, 21:51:48 by Fr3d3R!K » Logged

Search Button, CODE Tag, Google & Italian language are your friends! Use Them!
Vivynz
Forumista Eroico
*****
Offline Offline

Gender: Female
Posts: 2.033


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


« Reply #38 on: 29-01-2009, 21:59:45 »

mhm...no  scusa non ho capito...come faccio a ridefinirlo in due modi diversi??
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.
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.475


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #39 on: 30-01-2009, 01:23:21 »

mhm...no  scusa non ho capito...come faccio a ridefinirlo in due modi diversi??
Ok. Ho capito cosa intendi.
Ciò normalmente non è possibile.
Si può aggirare il problema creando un nuovo metodo con la signature diversa (cioè dove cambi almeno uno tra: nome, numero parametri, tipo di almeno uno dei parametri, ordine dei parametri, elenco dei parametri) all'interno della classe figlia, e fare in modo che il body di tale metodo contenga una chiamata a super.metodoComune (...), e poi "dall'esterno", invocare questo nuovo metodo .
Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
Fr3d3R!K
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.463



« Reply #40 on: 30-01-2009, 11:12:26 »

Ciò normalmente non è possibile.
Si può aggirare il problema creando un nuovo metodo con la signature diversa (cioè dove cambi almeno uno tra: nome, numero parametri, tipo di almeno uno dei parametri, ordine dei parametri, elenco dei parametri) all'interno della classe figlia, e fare in modo che il body di tale metodo contenga una chiamata a super.metodoComune (...), e poi "dall'esterno", invocare questo nuovo metodo .
quello che intendevo, scusa ma avevo da fare ieri sera per cui non ho potuto approfondire il discorso...
Saluti.
Logged

Search Button, CODE Tag, Google & Italian language are your friends! Use Them!
Vivynz
Forumista Eroico
*****
Offline Offline

Gender: Female
Posts: 2.033


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


« Reply #41 on: 30-01-2009, 11:55:56 »

ecco infatti!!va bene allora è tutto chiaro!!grazie a entrambi!!
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.
Mito
Matricola
*
Offline Offline

Posts: 56


« Reply #42 on: 30-01-2009, 13:45:31 »

ecco infatti!!va bene allora è tutto chiaro!!grazie a entrambi!!

Alla fine come hai risolto?

Code:
public String toString()
{
String str="";
for(int i=0;i<(int)(getPrezzo());i++)
str+=getTipo();
str+="\n";
return str;
}
Logged
Vivynz
Forumista Eroico
*****
Offline Offline

Gender: Female
Posts: 2.033


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


« Reply #43 on: 30-01-2009, 13:47:45 »

creando un altro metodo...non c'è altro!
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.
Mito
Matricola
*
Offline Offline

Posts: 56


« Reply #44 on: 30-01-2009, 13:51:17 »

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

Puoi postare l'esercizio completo (svolto), giusto per completezza? 

Grazie.
Logged
Pages: 1 2 [3] 4   Go Up
Print
Jump to: