Pages: [1] 2   Go Down
Print
Author Topic: 3° parte  (Read 5565 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
top_broker
Matricola
*
Offline Offline

Posts: 95


« on: 02-02-2010, 20:11:42 »

Salve a tutti!
Volevo sapere se qualcuno di voi sa se è prevista un'ulteriore sessione della 3° prova oltre a quella di domani 3 febbraio e a quella di metà febbraio... mi sembra il 16...
Chi sa qualcosa mi faccia sapere grazie  pc
Logged
ilpuglio
Apprendista Forumista
**
Offline Offline

Posts: 300



« Reply #1 on: 02-02-2010, 22:23:05 »

Il professore ha detto che la prossima III parte sarà al prossimo appello che comincia la settimana dopo il 16 febbraio...
Logged
top_broker
Matricola
*
Offline Offline

Posts: 95


« Reply #2 on: 04-02-2010, 11:17:17 »

 ok
Logged
isuccia89
Apprendista Forumista
**
Offline Offline

Gender: Female
Posts: 481



« Reply #3 on: 04-02-2010, 11:27:23 »

Approfitto di questo topic per chiedere se qualcuno può postare gentilmente il testo della terza parte di ieri.  pray
Grazie in anticipo
Logged

Se incontrerai qualcuno persuaso di saper tutto e di esser capace di far tutto non potrai sbagliare, costui è un imbecille! (Confucio)
XDnl
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 376



« Reply #4 on: 04-02-2010, 15:10:39 »

Ecco il testo:
Si consideri la seguente situazione che si vorrebbe modellare con un opportuno insieme di classi JAVA:

Si vuole creare un database di oggetti geometrici. Una figura geometrica, bidimensionale o tridimensionale, è caratterizzata da un nome, ed  è assegnata mediante le coordinate cartesiane dei suoi vertici. Ogni figura piana è caratterizzata da un codice (float), e quelle solide da un colore (char). Si vogliono considerare triangoli, rettangoli, quadrati e parallelepipedi. Tutte le figure piane possono essere ruotate di un certo angolo; i triangoli però subiscono una rotazione particolare. Rettangoli (e quadrati) hanno l'attributo spessore di linea. Per tutte le figure considerate ha senso calcolare un coefficiente di simmetria; per quelle piane ha senso calcolare l'area. Ogni parallelepipedo contiene al proprio interno una videocamera, caratterizzata dal numero seriale (20 caratteri), dalla data di fabbricazione e da una memoria da 1 KB.

A: analisi e disegno.
Riportare il diagramma UML di tutte le classi che si ritengono necessarie alla corretta descrizione e rappresentazione della situazione sopra descritta. Nella gerarchia ereditaria si considerino anche i seguenti metodi eventualmente polimorfi e se ne dia un'implementazione:
getTotale; restituisce il numero di figure create fino all'istante di invocazione del metodo;
getNumVertici; restituisce il numero di vertici della figura;
getVideocamera; restituisce la videocamera interna;
getCoefficiente; restituisce il coefficiente di simmetria per ogni figura calcolato mediante la formula:
c * Area per i triangoli,
c^5 * Codice / 0.9 per i rettangoli,
7*c + 3 * L + NumeroVertici per i parallelepipedi,
dove c è un coefficiente costante per tutte le figure ed L è il lato più lungo del parallelepipedo considerato.
B: utilizzo delle classi.
Si fornisca un frammento di programma che descriva la creazione e l'inizializzazione casuale di una collezione di 50 fiugre geometriche e
si visualizzino le informazioni per ogni figura,
si trovi la figura piana con il codice minore,
si ordinino (in base al coefficiente di simmetria) in un array indipendente tutti i quadrati della collezione (gli oggetti non devono essere clonati).
 
Oddio mi sono dimenticato di svolgere il primo punto!!     testate
Avevamo un'ora e venti per svolgere il compito.
Logged
Flyer
Apprendista Forumista
**
Offline Offline

Posts: 100



« Reply #5 on: 04-02-2010, 16:18:12 »

Si potrebbe avere anche la soluzione di questa terza parte?
Logged
XDnl
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 376



« Reply #6 on: 04-02-2010, 18:04:15 »

Si potrebbe avere anche la soluzione di questa terza parte?
Potrei postarvi la mia, ma chi vi garantisce che sia corretta?   pc  cry
Logged
Flyer
Apprendista Forumista
**
Offline Offline

Posts: 100



« Reply #7 on: 04-02-2010, 19:26:44 »


Potrei postarvi la mia, ma chi vi garantisce che sia corretta?   pc  cry
Va be non ti preoccupare. Va bene lo stesso  [Emoticon] Asd
Logged
XDnl
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 376



« Reply #8 on: 04-02-2010, 20:15:31 »

Ecco la mia soluzione (a vostro rischio e pericolo  univ)
Diagramma UML (i nomi delle classi ed i metodi scritti in corsivo sono astratti))
http://img229.imageshack.us/img229/9383/diagrammadiclasse5.jpg

Codice punto A:
Code:

// Vi posto la classe quasi per intero, anche se non richiesto dal testo
abstract class FiguraGeometrica
{
protected String nome;
protected Vertice[] vert;
public static float c = 1.0f;
private static int nIstanze = 0;

public FiguraGeometrica(String nome, Vertice[] vert)
{
this.nome = nome;
this.vert = vert;
nIstanze++;
}

...

public String getNome() { return nome; }
public int getNumVertici() { return vert.length; }
public static int getTotale() { return nIstanze; }

...
}

class Parallelepipedo extends FiguraSolida
{
...

public Videocamera getVideocamera() { return cam; }
public float getCoefficiente()
{
return 7 * FiguraGeometrica.c + 3 * getMaxL() + getNumVertici();
}

...
}

class Rettangolo extends FiguraPiana
{
...

public float getCoefficiente()
{
return (float)(Math.pow(c, 5) * codice / 0.9);
}

...
}


class Triangolo extends FiguraPiana
{
...

public float getCoefficiente()
{
return FiguraGeometrica.c * area();
}

...
}

Codice punto B:
Code:
public static void main(String[] args)
{
// Generazione casuale di 50 elementi
FiguraGeometrica[] v = new FiguraGeometrica[50];
for (int i = 0; i < v.length; i++)
switch ((int)(Math.random() * 4))
{
case 0:
v[i] = new Triangolo(...);
break;
case 1:
v[i] = new Rettangolo(...);
break;
case 2:
v[i] = new Quadrato(...);
break;
case 3:
v[i] = new Parallelepipedo(...);
break;
}

// Si visualizzino le informazioni per ogni figura
for (int i = 0; i < v.length; i++)
System.out.println(v[i].toString());

// Si trovi la figura piana con il codice minore
int minIndex = -1;
float minCode = 0;
for (int i = 0; i < v.length; i++)
if (v[i] instanceof FiguraPiana && (v[i].getCoefficiente() < minCode || minIndex == -1))
{
minIndex = i;
minCode = v[i].getCoefficiente();
}

// Si ordinino, in base al coefficiente di simmetria,  in un array indipendente tutti i quadrati
// della collezione (gli oggetti non devono essere clonati).
int nQ = 0;
for (int i = 0; i < v.length; i++)
if (v[i] instanceof Quadrato) nQ++;

Quadrato[] v2 = new Quadrato[nQ];
int last = 0;
for (int i = 0; i < v.length; i++)
if (v[i] instanceof Quadrato)
{
v2[last] = (Quadrato)(v[i]);
last++;
}

for (int i = 0; i < v2.length - 1; i++)
for (int j = i + 1; j < v2.length; j++)
if (v2[i].getCoefficiente() > v2[j].getCoefficiente())
{
Quadrato temp = v2[i];
v2[i] = v2[j];
v2[j] = temp;
}
}
« Last Edit: 04-02-2010, 20:21:51 by XDnl » Logged
isuccia89
Apprendista Forumista
**
Offline Offline

Gender: Female
Posts: 481



« Reply #9 on: 05-02-2010, 10:21:09 »

Ecco il testo:
Si consideri la seguente situazione che si vorrebbe modellare con un opportuno insieme di classi JAVA:

Si vuole creare un database di oggetti geometrici. Una figura geometrica, bidimensionale o tridimensionale, è caratterizzata da un nome, ed  è assegnata mediante le coordinate cartesiane dei suoi vertici. Ogni figura piana è caratterizzata da un codice (float), e quelle solide da un colore (char). Si vogliono considerare triangoli, rettangoli, quadrati e parallelepipedi. Tutte le figure piane possono essere ruotate di un certo angolo; i triangoli però subiscono una rotazione particolare. Rettangoli (e quadrati) hanno l'attributo spessore di linea. Per tutte le figure considerate ha senso calcolare un coefficiente di simmetria; per quelle piane ha senso calcolare l'area. Ogni parallelepipedo contiene al proprio interno una videocamera, caratterizzata dal numero seriale (20 caratteri), dalla data di fabbricazione e da una memoria da 1 KB.

A: analisi e disegno.
Riportare il diagramma UML di tutte le classi che si ritengono necessarie alla corretta descrizione e rappresentazione della situazione sopra descritta. Nella gerarchia ereditaria si considerino anche i seguenti metodi eventualmente polimorfi e se ne dia un'implementazione:
getTotale; restituisce il numero di figure create fino all'istante di invocazione del metodo;
getNumVertici; restituisce il numero di vertici della figura;
getVideocamera; restituisce la videocamera interna;
getCoefficiente; restituisce il coefficiente di simmetria per ogni figura calcolato mediante la formula:
c * Area per i triangoli,
c^5 * Codice / 0.9 per i rettangoli,
7*c + 3 * L + NumeroVertici per i parallelepipedi,
dove c è un coefficiente costante per tutte le figure ed L è il lato più lungo del parallelepipedo considerato.
B: utilizzo delle classi.
Si fornisca un frammento di programma che descriva la creazione e l'inizializzazione casuale di una collezione di 50 fiugre geometriche e
si visualizzino le informazioni per ogni figura,
si trovi la figura piana con il codice minore,
si ordinino (in base al coefficiente di simmetria) in un array indipendente tutti i quadrati della collezione (gli oggetti non devono essere clonati).
 
Oddio mi sono dimenticato di svolgere il primo punto!!     testate
Avevamo un'ora e venti per svolgere il compito.

grazie 
Logged

Se incontrerai qualcuno persuaso di saper tutto e di esser capace di far tutto non potrai sbagliare, costui è un imbecille! (Confucio)
R3m
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 486



« Reply #10 on: 11-02-2010, 09:47:06 »

Ecco la mia soluzione (a vostro rischio e pericolo  univ)
Diagramma UML (i nomi delle classi ed i metodi scritti in corsivo sono astratti))
http://img229.imageshack.us/img229/9383/diagrammadiclasse5.jpg

Ho letto il tuo UML ma mi sorge un dubbio...come mai dichiari abstract le classi Vertice e FiguraSolida senza però che queste abbiano dei metodi abstract?
Logged

Ciò che è nostro è stato in campo sudato....ciò che vostro è stato in aula assegnato.
In serie B non sei mai stato perchè la prescrizione t'ha salvato.
XDnl
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 376



« Reply #11 on: 11-02-2010, 10:49:29 »

Ho letto il tuo UML ma mi sorge un dubbio...come mai dichiari abstract le classi Vertice e FiguraSolida senza però che queste abbiano dei metodi abstract?

La classe FiguraGeometrica è abstract, e contiene il metodo astratto getCoefficiente().
La classe FiguraSolida è abstract perchè eredita da FiguraGeometrica, ma NON implementa il metodo astratto getCoefficiente().
Volendo scendere ancora nella gerarchia, ad esempio nella classe Parallelepipedo, essa eredita da FiguraSolida, ma poichè implementa il metodo getCoefficiente() non è astratta.

Per quanto riguarda la classe Vertice ho preferito dichiararla astratta per "forzare" un eventuale programmatore ad utilzzare solamente le sottoclassi Vertice2D e Vertice3D.
Una classe, infatti, può essere dichiarata abstract anche se non contiene alcun metodo astratto, e si comporterà allo stesso modo, cioè non potrà essere istanziata direttamente.

 
Comunque credo che la mia soluzione vada abbastanza bene, visto che la valutazione è stata positiva.  pc
Logged
R3m
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 486



« Reply #12 on: 11-02-2010, 11:11:45 »

Ho letto il tuo UML ma mi sorge un dubbio...come mai dichiari abstract le classi Vertice e FiguraSolida senza però che queste abbiano dei metodi abstract?

La classe FiguraGeometrica è abstract, e contiene il metodo astratto getCoefficiente().
La classe FiguraSolida è abstract perchè eredita da FiguraGeometrica, ma NON implementa il metodo astratto getCoefficiente().
Volendo scendere ancora nella gerarchia, ad esempio nella classe Parallelepipedo, essa eredita da FiguraSolida, ma poichè implementa il metodo getCoefficiente() non è astratta.

Per quanto riguarda la classe Vertice ho preferito dichiararla astratta per "forzare" un eventuale programmatore ad utilzzare solamente le sottoclassi Vertice2D e Vertice3D.
Una classe, infatti, può essere dichiarata abstract anche se non contiene alcun metodo astratto, e si comporterà allo stesso modo, cioè non potrà essere istanziata direttamente.

quindi se ho capito bene bisogna dichiarare nella gerarchia le classi "figlie" astratte finchè non si arriva a una classe che implemente il dato metodo astratto giusto?

Comunque credo che la mia soluzione vada abbastanza bene, visto che la valutazione è stata positiva.  pc

non avevo messo in dubbio la cosa...invece tu non ascoltare me perchè ho preso 14 ( xD) quindi...
« Last Edit: 11-02-2010, 11:13:29 by R3m » Logged

Ciò che è nostro è stato in campo sudato....ciò che vostro è stato in aula assegnato.
In serie B non sei mai stato perchè la prescrizione t'ha salvato.
XDnl
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 376



« Reply #13 on: 11-02-2010, 11:15:14 »

quindi se ho capito bene bisogna dichiarare nella gerarchia le classi "figlie" astratte finchè non si arriva a una classe che implemente il dato metodo astratto giusto?
Esatto. In particolare, TUTTI i metodi che sono astratti (nel nostro esempio ce n'era uno solo).

Comunque credo che la mia soluzione vada abbastanza bene, visto che la valutazione è stata positiva.  pc

non avevo messo in dubbio la cosa...invece tu non ascoltare me perchè ho preso 14 ( xD) quindi...
Tranquillo  ok
Logged
aryanna
Apprendista Forumista
**
Offline Offline

Posts: 110



« Reply #14 on: 16-02-2010, 12:07:58 »

ragazzi nn riesco a capire alcuni punti allora.. prima di tutto la cosa più semplice:
il getCoefficiente dei parallelepipedi è trovato in base alla formula 7*c+3*L..... questo L è trovato con un metodo che restituisce il lato più lungo di questa figura, ma è necessario crearlo proprio questo metodo?
poi non riesco proprio a capire come funziona la classe Vertice, se la variabile che ha è un array di float, come fa poi il costruttore ad essere fatto passando (nComponenti: int)? non capisco per lo più cosa sono...
grazie!! ciao
Logged

Rappresentante studenti Corso di Laurea in Informatica - arianna317@gmail.com

write once, run everywhere..
Pages: [1] 2   Go Up
Print
Jump to: