Forum Informatica Unict

LAUREA TRIENNALE (D.M. 270/04) => Programmazione 1, 9 CFU => Topic started by: Vivynz on 31-01-2009, 11:57:47



Title: terza prova:chiavi
Post by: Vivynz on 31-01-2009, 11:57:47
Qualcuno mi può dire cosa ne pensa, se ci sono errori?
qui c'è il diagramma uml http://www.megaupload.com/it/?d=UZF4V3DZ (http://www.megaupload.com/it/?d=UZF4V3DZ)
e questa è la parte di codice richiesta dal testo

Code:
public static void main (String[] args)
{
Chiave c=new Chiave[400];
for(int i=0;i<c.length;i++)
{
int x=(int)(Math.random()*3);
switch(x)
{
case 0:
{
c[i]=new Meccanica("Meccanica"+i,(float)(Math.random()),(float)(3+Math.random()*5),(int)(10+Math.random()*10));
break;
}
case 1:
{
c[i]=new Magnetica("Magnetica"+i,(float)(Math.random()),(float)(3+Math.random()*5),
new Informazioni((int)(Math.random*6),(char)('A'+Math.random()*3)+"1",
new Data((int)(1+Math.random()*31),(int)(1+Math.random()*12),(int)(2006+Math.random()*4))),(float)(Math.random()*6));
break;
}
case 2:
{
c[i]=new Microchip("Microchip"+i,(float)(Math.random()),(float)(3+Math.random()*5),
new Informazioni((int)(Math.random*6),(char)('A'+Math.random()*3)+"2",
new Data((int)(1+Math.random()*31),(int)(1+Math.random()*12),(int)(2006+Math.random()*4))),
new Chip(new Data((int)(1+Math.random()*31),(int)(1+Math.random()*12),(int)(2006+Math.random()*4)),new Memoria()));
break;
}
}
}
//----------------------------------------------------------------------------------------------------------------------------------------
int indice=-1;
int max=0;
for(int i=0;i<c.length;i++)
if(c[i] instanceof Meccanica)
if(((Meccanica)c[i]).getNumeroDentelli()>max)
{
max=((Meccanica)c[i]).getNumeroDentelli();
indice=i;
}
if(indice!=-1)
System.out.println("La chiave meccanica con maggior numero di dentelli è quella di indice "+iindice+" e ha numero di dentelli: "+((Meccanica)c[indice]).getNumeroDentelli());
else
System.out.println("Non ci sono chiavi meccaniche");
//------------------------------------------------------------------------------------------------------------------------------------------
Chiave[] cc=new Chiave[c.length];
for(int i=0;i<cc.length;i++)
cc[i]=c[i];
ordina(cc);
for(int i=0;i<cc.length;i++)
System.out.println(cc[i]);
//-------------------------------------------------------------------------------------------------------------------------------------------
int cont=0;
for(int i=0;i<c.length;i++)
if(c[i] instanceof Elettronica)
if(((Elettronica)c[i]).getAbilitazione().getLivelloAbilitazione()>0)
cont++;
System.out.println("Il numero di chiavi abilitate è: "+cont);
}
public static void ordina(Chiave[] 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(Chiave[] a,int b,int c)
{
Chiave temp=a[b];
a[b]=a[c];
a[c]=temp;
}

P.S. come fate a mettere i link direttamente nelle parole?? .smile


Title: Re:terza prova:chiavi
Post by: gaernik on 31-01-2009, 13:36:09
scrivi
Code:
[url=www.google.it]parola[/url]

 .wink


Title: Re:terza prova:chiavi
Post by: Vivynz on 31-01-2009, 13:37:00
grazie  .smile


Title: Re:terza prova:chiavi
Post by: TheSpecialOne on 31-01-2009, 17:36:29
Qualcuno mi può dire cosa ne pensa, se ci sono errori?
qui c'è il diagramma uml http://www.megaupload.com/it/?d=UZF4V3DZ (http://www.megaupload.com/it/?d=UZF4V3DZ)
e questa è la parte di codice richiesta dal testo

Code:
public static void main (String[] args)
{
Chiave c=new Chiave[400];
for(int i=0;i<c.length;i++)
{
int x=(int)(Math.random()*3);
switch(x)
{
case 0:
{
c[i]=new Meccanica("Meccanica"+i,(float)(Math.random()),(float)(3+Math.random()*5),(int)(10+Math.random()*10));
break;
}
case 1:
{
c[i]=new Magnetica("Magnetica"+i,(float)(Math.random()),(float)(3+Math.random()*5),
new Informazioni((int)(Math.random*6),(char)('A'+Math.random()*3)+"1",
new Data((int)(1+Math.random()*31),(int)(1+Math.random()*12),(int)(2006+Math.random()*4))),(float)(Math.random()*6));
break;
}
case 2:
{
c[i]=new Microchip("Microchip"+i,(float)(Math.random()),(float)(3+Math.random()*5),
new Informazioni((int)(Math.random*6),(char)('A'+Math.random()*3)+"2",
new Data((int)(1+Math.random()*31),(int)(1+Math.random()*12),(int)(2006+Math.random()*4))),
new Chip(new Data((int)(1+Math.random()*31),(int)(1+Math.random()*12),(int)(2006+Math.random()*4)),new Memoria()));
break;
}
}
}
//----------------------------------------------------------------------------------------------------------------------------------------
int indice=-1;
int max=0;
for(int i=0;i<c.length;i++)
if(c[i] instanceof Meccanica)
if(((Meccanica)c[i]).getNumeroDentelli()>max)
{
max=((Meccanica)c[i]).getNumeroDentelli();
indice=i;
}
if(indice!=-1)
System.out.println("La chiave meccanica con maggior numero di dentelli è quella di indice "+iindice+" e ha numero di dentelli: "+((Meccanica)c[indice]).getNumeroDentelli());
else
System.out.println("Non ci sono chiavi meccaniche");
//------------------------------------------------------------------------------------------------------------------------------------------
Chiave[] cc=new Chiave[c.length];
for(int i=0;i<cc.length;i++)
cc[i]=c[i];
ordina(cc);
for(int i=0;i<cc.length;i++)
System.out.println(cc[i]);
//-------------------------------------------------------------------------------------------------------------------------------------------
int cont=0;
for(int i=0;i<c.length;i++)
if(c[i] instanceof Elettronica)
if(((Elettronica)c[i]).getAbilitazione().getLivelloAbilitazione()>0)
cont++;
System.out.println("Il numero di chiavi abilitate è: "+cont);
}
public static void ordina(Chiave[] 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(Chiave[] a,int b,int c)
{
Chiave temp=a[b];
a[b]=a[c];
a[c]=temp;
}

P.S. come fate a mettere i link direttamente nelle parole?? .smile

ma la classe scorrimento era fondamentale?
ho notato, provando a rifare l'esercizio seguendo il tuo uml, che la classe scorrimento si possa eliminare, inserendo come parametro la lunghezza nella superclasse!
almeno penso che si possa fare anche cosi, cmq è molto complicato questo esercizio!!!
spero ci capiti qualcosa di piu facile, ci sono troppe classi qui!!


Title: Re:terza prova:chiavi
Post by: Mito on 31-01-2009, 17:51:59
ma la classe scorrimento era fondamentale?
ho notato, provando a rifare l'esercizio seguendo il tuo uml, che la classe scorrimento si possa eliminare, inserendo come parametro la lunghezza nella superclasse!
almeno penso che si possa fare anche cosi, cmq è molto complicato questo esercizio!!!
spero ci capiti qualcosa di piu facile, ci sono troppe classi qui!!

Non è fondamentale ai fini del funzionamento dell'esercizio; però il testo la richiede (citazione: Sia le chiavi elettroniche che quelle meccaniche sono chiavi a scorrimento...).

Sicuramente è l'esercizio di Terza Parte più completo tra quelli in circolazione (non tanto per il numero di classi da implementare quanto per la "difficoltà" dell'esercizio stesso).

L'unico "nemico", a parer mio, nello svolgimento di questa Terza Parte è il tempo!  :-)|


Title: Re:terza prova:chiavi
Post by: Vivynz on 31-01-2009, 17:57:59
Quanto tempo c'è?


Title: Re:terza prova:chiavi
Post by: Mito on 31-01-2009, 18:03:26
Quanto tempo c'è?

Presumo 1 ora e mezza oppure 1 ora.

Code:
int cont=0;
for(int i=0;i<c.length;i++)
if(c[i] instanceof Elettronica)
if(((Elettronica)c[i]).getAbilitazione().getLivelloAbilitazione()>0)
cont++;
System.out.println("Il numero di chiavi abilitate è: "+cont);

Ho dato un'occhiata veloce al codice (...e all'UML) ma questo getLivelloAbilitazione() dove lo hai implementato?


Title: Re:terza prova:chiavi
Post by: Vivynz on 31-01-2009, 18:10:16
ops  .arrossisco doveva essere getLivelloSicurezza()  :[Emoticon] Asd:  .penso .penso o forse no??aspetta  :-)|


Title: Re:terza prova:chiavi
Post by: Vivynz on 31-01-2009, 18:12:38
 .penso .penso credo che avevo interpretato male...come si fa a vedere quali chiavi sono abilitate??


Title: Re:terza prova:chiavi
Post by: Mito on 31-01-2009, 18:30:20
.penso .penso credo che avevo interpretato male...come si fa a vedere quali chiavi sono abilitate??

Non ho capito del tutto la frase si conti il numero delle chiavi elettroniche abilitate.

Se con questa frase il testo richieda di contare il numero di Chiavi Elettroniche (quindi Magnetiche e Microchip) abilitate (cioè che contengano informazioni relative all'abilitazione) allora un controllo del tipo:

Code:
if(((Elettronica)c[i]).getAbilitazione().getLivelloSicurezza()>0)

oppure

if(((Elettronica)c[i]).getAbilitazione().getZona()>0)

...è sufficiente.

Io ho capito così. Forse ho interpretato male la richiesta...? .penso




Title: Re:terza prova:chiavi
Post by: Vivynz on 31-01-2009, 18:34:51
come al solito l'ambiguità lessicale di Cincotti fa la sua comparsa in grande stile  .whistling :[Emoticon] Asd:


Title: Re:terza prova:chiavi
Post by: Fr3d3R!K on 31-01-2009, 22:48:00
a me la frase si conti il numero delle chiavi elettroniche abilitate non sembra ambigua, anzi piuttosto chiara .penso . Bisogna controllare quante chiave elettroniche sono state abilitate tramite l'apposito metodo.


Title: Re:terza prova:chiavi
Post by: Vivynz on 01-02-2009, 07:53:16
 .penso non c'è un metodo abilita..o perlomeno non diceva che serviva  :-)|


Title: Re:terza prova:chiavi
Post by: Fr3d3R!K on 01-02-2009, 09:54:51
ho letto il testo e nel punto in cui dice
Quote
Le chiavi elettroniche (magnetiche e microchip) contengono le informazioni relative all’abilitazione (livello di sicurezza, zona di abilitazione, data scadenza) delle stesse.
In questa classe si può implementare il metodo relativo alla zona di abilitazione (on/off).
P.S. Vivynz: nel tuo uml la variabile peso è dichiarata public, suppongo sia un errore di battitura in quanto penso volevi metterla private per poi recuperarla con il metodo getPeso() che hai scritto...


Title: Re:terza prova:chiavi
Post by: Vivynz on 01-02-2009, 15:51:37
si bè infatti ok!!per la variabile peso si sicuramente ho dimenticato di cambiarla e metterla private come tutte le altre  .smile


Title: Re:terza prova:chiavi
Post by: chernobyl on 19-02-2009, 13:06:11
Ciao Vivinz ma il main di questo esercizio è giusto o no?
p.s. hai capito chi sono? sn matt :yoh


Title: Re:terza prova:chiavi
Post by: •Black Angel• on 20-02-2009, 10:37:36
scusate ma alla fine quante classi ci sono in tutto?  :yoh


Title: Re:terza prova:chiavi
Post by: •Black Angel• on 20-02-2009, 10:39:36
scusate ma alla fine quante classi ci sono in tutto?  :yoh

mi auto quoto^^ qualcuno ha per caso l'uml??


Title: Re:terza prova:chiavi
Post by: Vivynz on 20-02-2009, 12:30:12
il link al mio uml è nel primo post di questo topic  .smile


Title: Re:terza prova:chiavi
Post by: •Black Angel• on 20-02-2009, 12:31:40
 .huh che sono rimbambita..  :yoh grazie..


Title: Re:terza prova:chiavi
Post by: Vivynz on 20-02-2009, 12:35:28
di niente  :[Emoticon] Asd:


Title: Re:terza prova:chiavi
Post by: •Black Angel• on 21-02-2009, 11:15:37
Code:
case 0:
{
c[i]=new Meccanica("Meccanica"+i,(float)(Math.random()),(float)(3+Math.random()*5),(int)(10+Math.random()*10));
break;
}
case 1:
{
c[i]=new Magnetica("Magnetica"+i,(float)(Math.random()),(float)(3+Math.random()*5),
new Informazioni((int)(Math.random*6),(char)('A'+Math.random()*3)+"1",
new Data((int)(1+Math.random()*31),(int)(1+Math.random()*12),(int)(2006+Math.random()*4))),(float)(Math.random()*6));
break;
}
case 2:
{
c[i]=new Microchip("Microchip"+i,(float)(Math.random()),(float)(3+Math.random()*5),
new Informazioni((int)(Math.random*6),(char)('A'+Math.random()*3)+"2",
new Data((int)(1+Math.random()*31),(int)(1+Math.random()*12),(int)(2006+Math.random()*4))),
new Chip(new Data((int)(1+Math.random()*31),(int)(1+Math.random()*12),(int)(2006+Math.random()*4)),new Memoria()));
break;
}
}

i valori della math.Random sono valori casuali no?? oppure sono stati scelti secondo un criterio??
mi riferisco a questi esempio: 3+Math.random()*5


Title: Re:terza prova:chiavi
Post by: Vivynz on 21-02-2009, 12:36:26
no sono casuali!cmq nell'esame della terza prova non c'è bisogno di scrivere tutti i valori casuali perchè sono troppi e ci vorrebbe un'infinità di tempo!basta mettere la math.random per lo switch e poi per tutto il resto i puntini ad esempio
Code:
c[i]= new Meccanica(....)


Title: Re:terza prova:chiavi
Post by: •Black Angel• on 21-02-2009, 12:41:19
no sono casuali!cmq nell'esame della terza prova non c'è bisogno di scrivere tutti i valori casuali perchè sono troppi e ci vorrebbe un'infinità di tempo!basta mettere la math.random per lo switch e poi per tutto il resto i puntini ad esempio
Code:
c[i]= new Meccanica(....)

mmm sicuro? non è che poi se ne esce il prof che mancano parti di codice??


Title: Re:terza prova:chiavi
Post by: Fr3d3R!K on 21-02-2009, 12:53:50
si sicuro è stato detto dal professore Cincotti il giorno dell'esame stesso.


Title: Re:terza prova:chiavi
Post by: Vivynz on 21-02-2009, 12:55:25
non avrei detto cose a caso!! .smile altrimenti magari scrivevo penso che...invece lo sapevo perchè gliel'ho chiesto io il giorno dell'esame e lui ha detto cosi  :[Emoticon] Asd:


Title: Re:terza prova:chiavi
Post by: •Black Angel• on 21-02-2009, 13:04:09
non avrei detto cose a caso!! .smile altrimenti magari scrivevo penso che...invece lo sapevo perchè gliel'ho chiesto io il giorno dell'esame e lui ha detto cosi  :[Emoticon] Asd:

 :-OK grazie... un peso in meno  .smile


Title: Re:terza prova:chiavi
Post by: Vivynz on 21-02-2009, 13:15:57
 :-OK


Title: Re:terza prova:chiavi
Post by: chernobyl on 27-02-2009, 17:21:08
Ragazzi qualcuno ha scritto in java l'uml di questo esrcizio? io nn capisco come fare la classe della memoria. se qualcuno l'ha fatto lo postate per favore? grazie in anticipo


Title: Re:terza prova:chiavi
Post by: Bart46 on 27-02-2009, 18:19:55
scusate.. io ieri ho fatto lo stesso esercizio.. xo ho fatto 2 cose diverse.. i dati della classe informazione le ho messe dentro elettroniche( è la stessa cosa, anche se probabilmente è più professionale come avete fatto voi).. e poi memoria l'ho messo come attributo e non come classe.. dato che alla fine non viene chiesto nessun metodo che utilizzi la memoria..


è un errore? ed eventualmente è un errore grave? xche credo che come l'ho fatto io vada bene lo stesso...


Title: Re:terza prova:chiavi
Post by: Vivynz on 27-02-2009, 22:53:24
non è sbagliato ma più scomponi un oggetto in tante classi e meglio è, in quanto siamo in ambito di una programmazione object oriented e perciò bisogna considerare gli oggetti costituiti da tutte le loro singole parti...per capirci...tu potresti fare una classe macchina mettendo motore, carrozzeria,ruote ecc...come attributi...ma ciò che ci insegnano a fare con questo tipo di programmazione è creare invece una classe per ogni componente..


Title: Re:terza prova:chiavi
Post by: Bart46 on 28-02-2009, 02:28:30
non è sbagliato ma più scomponi un oggetto in tante classi e meglio è, in quanto siamo in ambito di una programmazione object oriented e perciò bisogna considerare gli oggetti costituiti da tutte le loro singole parti...per capirci...tu potresti fare una classe macchina mettendo motore, carrozzeria,ruote ecc...come attributi...ma ciò che ci insegnano a fare con questo tipo di programmazione è creare invece una classe per ogni componente..

ok.. grazie mille


Title: Re:terza prova:chiavi
Post by: CollegaCaparezza on 28-02-2009, 10:47:54
Chiarimento da parte mia
se io due classi (A, B) ed A ha al suo interno questo valore
Code:
public int x;
public B b;
e sapendo che il costruttore di B è:
Code:
public B(float _x, int _y)
cosa metterò nel costruttore di A per valorizzare la B?
Grazie in anticipo :[Emoticon] PC Asd:


Title: Re:terza prova:chiavi
Post by: Fr3d3R!K on 28-02-2009, 10:56:11
Code:
b=new B(parametri);


Title: Re:terza prova:chiavi
Post by: CollegaCaparezza on 28-02-2009, 11:08:01
Code:
[code]Code:
b=new B(parametri)[/
code]
in che senso
[/code]


Title: Re:terza prova:chiavi
Post by: Fr3d3R!K on 28-02-2009, 12:12:27
è l'istruzione da scrivere. Essendo stato già creato un costruttore di B, in A vado ad istanziare un nuovo oggetto di B.
EDIT: ho aggiunto il punto e virgola che mancava.


Title: Re:terza prova:chiavi
Post by: ɹǝǝuıƃuǝsɹǝʌǝɹ on 28-02-2009, 15:01:13
Chiarimento da parte mia
se io due classi (A, B) ed A ha al suo interno questo valore
Code:
public int x;
public B b;
e sapendo che il costruttore di B è:
Code:
public B(float _x, int _y)
cosa metterò nel costruttore di A per valorizzare la B?
Grazie in anticipo :[Emoticon] PC Asd:
Semplice:
Code:
public A(int _x, B _b)
È davvero la medotologia più usata, anche se uno dei parametri è a sua volta un oggetto .wink.


Title: Re:terza prova:chiavi
Post by: CollegaCaparezza on 28-02-2009, 16:58:23
Grazie ragazzi


Title: Re:terza prova:chiavi
Post by: Fr3d3R!K on 28-02-2009, 17:05:52
ah ho capito cosa intendevo io pensavo volessi sapere cosa mettere nel corpo del costruttore, non nella dichiarazione dello stesso. Ma comunque l'importante è che il problema sia risolto.
Saluti.


Title: Re:terza prova:chiavi
Post by: CollegaCaparezza on 28-02-2009, 17:19:51
Tranquillo Fr3d3R!K. Forse mi sono espresso male io  :-ciao


Title: Re:terza prova:chiavi
Post by: CollegaCaparezza on 28-02-2009, 17:22:48
Ed un ultima cosa. Nel costruttore di a nel caso di:
Code:
public A(int _x, B _b)
bisogna mettere:
Code:
x=_x;
b=new B (_b);
o altro?
Grazi in anticipo colleghi  :pray


Title: Re:terza prova:chiavi
Post by: ɹǝǝuıƃuǝsɹǝʌǝɹ on 28-02-2009, 17:38:37
Ed un ultima cosa. Nel costruttore di a nel caso di:
Code:
public A(int _x, B _b)
bisogna mettere:
Code:
x=_x;
b=new B (_b);
o altro?
Grazi in anticipo colleghi  :pray
Mmm... no. In genere si prende direttamente l'oggetto.
Code:
public A (int _x, B _b)
{
    b = _b;
    x = _x;
}
(evidentemente istanziato da qualche altra parte nel codice).

Sarà poi responsabilità di chi istanzia l'oggetto di classe A, se proprio ne ha bisogno e se tale operazione è supportata, creare una copia o clone dell'oggetto _b, ad esempio con:
Code:
A mioOggettoA = new A (5, mioOggettoB.clone ());

Inoltre, scrivere:
Code:
b=new B (_b);
lascia intendere che B abbia un costruttore che accetta un oggetto come unico parametro e ne restituisce una copia nuova di zecca, un po' come fa uno dei costruttori (http://java.sun.com/javase/6/docs/api/java/lang/String.html#String(java.lang.String)) di java.lang.String (http://java.sun.com/javase/6/docs/api/java/lang/String.html), ma questa è un'informazione che non ci è stata data.
 .ciaociao


Title: Re:terza prova:chiavi
Post by: CollegaCaparezza on 28-02-2009, 17:45:19
Grazie Reversengiress
 :pray :pray :pray :pray