Pages: 1 [2]   Go Down
Print
Author Topic: Soluzione Appello 7 Dicembre 2010 - Compito A e Compito B  (Read 4093 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
bluegirl
Apprendista Forumista
**
Offline Offline

Posts: 360



« Reply #15 on: 02-02-2011, 18:43:56 »

Io non capisco una cosa: allora mi costruisco l'oggetto builder all'interno della classe principale e fin qui ci siamo, ma i metodi dell'interfaccia da implementare dove li dovrei implementare?Dentro la classe Builder no, perchè mi ritornano oggetti Builder e non BigDecimal...quindi?
Logged
Grillo
Apprendista Forumista
**
Offline Offline

Posts: 219


« Reply #16 on: 02-02-2011, 19:07:04 »

Si ma se man mano non si va postando il codice, non solo non possiamo aiutare nessuno, ma non risolveremo mai questo esercizio.
Logged
Federik88
Matricola
*
Offline Offline

Gender: Female
Posts: 96



« Reply #17 on: 03-02-2011, 13:08:46 »

Io non capisco una cosa: allora mi costruisco l'oggetto builder all'interno della classe principale e fin qui ci siamo, ma i metodi dell'interfaccia da implementare dove li dovrei implementare?Dentro la classe Builder no, perchè mi ritornano oggetti Builder e non BigDecimal...quindi?

i metodi dell'intefaccia li devi implementare all'interno della classe SetOfNumbers. SetOfNumbers avrà al suo interno l'oggetto Builder, quindi implementi la classe Builder,e dopo implementi il costruttore della classe SetOfNumbers e i suoi rispettivi metodi, che sono quelli indicati nell'interfaccia. Spero di averti chiarito le idee
Logged
bluegirl
Apprendista Forumista
**
Offline Offline

Posts: 360



« Reply #18 on: 03-02-2011, 13:52:12 »

Aaaaaah ok, perfetto. ottimo :-)
Logged
Grillo
Apprendista Forumista
**
Offline Offline

Posts: 219


« Reply #19 on: 03-02-2011, 14:14:20 »

Ma un codice postato no? 
Logged
ilpuglio
Apprendista Forumista
**
Offline Offline

Posts: 300



« Reply #20 on: 03-02-2011, 16:33:17 »

Ma un codice postato no? 

Logged
SixArt
Matricola
*
Offline Offline

Gender: Male
Posts: 51



« Reply #21 on: 04-02-2011, 18:46:48 »

Io l'ho fatto così il compito A, l'unica cosa è che non ho fatto la lettura da file per comodità, e non ho fatto l'array con max estensione 50.
PS: non mi prendo responsabilità  
Code:
// l'unica cosa che non ho considerato è stata quella dell'array di dimensione 50.

import java.io.*;
import java.util.*;
import java.math.*;

interface Set071210
{
public BigDecimal getSize(); //ritorna la dimensione dell'insieme
public BigDecimal getMean(); // ritorna la media degli elementi
public BigDecimal[] getSet(); // ritorna l'array contenente gli elementi
}

class SetOfNumbers implements Set071210
{
private final int[] set;
private final BigDecimal size;
private final BigDecimal mean;

public SetOfNumbers(Builder build)
{
this.size=new BigDecimal(build.size.toString());
this.mean=new BigDecimal(build.mean.toString());
int[] newSet = new int[build.set.length];
for(int i=0; i<newSet.length; i++)
newSet[i]=build.set[i];
this.set=newSet;
}

public BigDecimal getSize(){return new BigDecimal(size.toString());}

public BigDecimal getMean(){return new BigDecimal(mean.toString());}

public BigDecimal[] getSet()
{
BigDecimal[] newSet = new BigDecimal[set.length];
for(int i=0; i<newSet.length; i++)
newSet[i]=new BigDecimal((double)set[i]);
return newSet;
}

public static class Builder
{
private int[] set;
private BigDecimal size;
private BigDecimal mean;
// costruttore
public Builder(int[] set)
{
SemiQuick(set,0,set.length-1);
this.mean=mean(set);
this.size=new BigDecimal((double)set.length);
this.set=set;
}
// quick sort semi-iterativo
public void SemiQuick(int[] A, int i, int j)
{
while(i<j)
{
int r=partition(A,i,j);
SemiQuick(A,r+1,j);
j=r;
}
}
// partition
private int partition(int[] A,int i,int j)
{
int p=A[j];
int a=i-1;
int b=j+1;
while(a<b)
{
do
{
a++;
}
while(A[a]<p);
do
{
b--;
}
while(A[b]>p);
if(a<b)
{
int tmp=A[a];
A[a]=A[b];
A[b]=tmp;
}
}
if(a==b)
return b-1;
return b;
}
// calcola la media
private BigDecimal mean(int[] A)
{
int sum=0;
for(int i=0; i<A.length;i++)
sum+=A[i];
return new BigDecimal((double)sum/A.length);
}
// ritorna un oggetto SetOfNumbers
public SetOfNumbers build()
{
return new SetOfNumbers(this);
}
}
}
public class Programma
{
public static void main(String[] args)
{
//non ho fatto la lettura da file, ma ho messo gli stessi dati
int size=10;
int[] set= new int[size];
set[0]=23;
set[1]=3;
set[2]=7;
set[3]=21;
set[4]=15;
set[5]=8;
set[6]=11;
set[7]=9;
set[8]=1;
set[9]=27;

SetOfNumbers collect=new SetOfNumbers.Builder(set).build();
System.out.println(collect.getMean());
// per vedere se lo ha ordinato
BigDecimal[] sett=collect.getSet();
for(int i=0; i<size; i++)
System.out.println(sett[i]);
}
}
« Last Edit: 04-02-2011, 18:50:48 by SixArt » Logged
Angelo
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 274



« Reply #22 on: 07-02-2011, 11:17:41 »

Io l'ho fatto così il compito A, l'unica cosa è che non ho fatto la lettura da file per comodità, e non ho fatto l'array con max estensione 50.
PS: non mi prendo responsabilità  
Code:
// l'unica cosa che non ho considerato è stata quella dell'array di dimensione 50.

import java.io.*;
import java.util.*;
import java.math.*;

interface Set071210
{
public BigDecimal getSize(); //ritorna la dimensione dell'insieme
public BigDecimal getMean(); // ritorna la media degli elementi
public BigDecimal[] getSet(); // ritorna l'array contenente gli elementi
}

class SetOfNumbers implements Set071210
{
private final int[] set;
private final BigDecimal size;
private final BigDecimal mean;

public SetOfNumbers(Builder build)
{
this.size=new BigDecimal(build.size.toString());
this.mean=new BigDecimal(build.mean.toString());
int[] newSet = new int[build.set.length];
for(int i=0; i<newSet.length; i++)
newSet[i]=build.set[i];
this.set=newSet;
}

public BigDecimal getSize(){return new BigDecimal(size.toString());}

public BigDecimal getMean(){return new BigDecimal(mean.toString());}

public BigDecimal[] getSet()
{
BigDecimal[] newSet = new BigDecimal[set.length];
for(int i=0; i<newSet.length; i++)
newSet[i]=new BigDecimal((double)set[i]);
return newSet;
}

public static class Builder
{
private int[] set;
private BigDecimal size;
private BigDecimal mean;
// costruttore
public Builder(int[] set)
{
SemiQuick(set,0,set.length-1);
this.mean=mean(set);
this.size=new BigDecimal((double)set.length);
this.set=set;
}
// quick sort semi-iterativo
public void SemiQuick(int[] A, int i, int j)
{
while(i<j)
{
int r=partition(A,i,j);
SemiQuick(A,r+1,j);
j=r;
}
}
// partition
private int partition(int[] A,int i,int j)
{
int p=A[j];
int a=i-1;
int b=j+1;
while(a<b)
{
do
{
a++;
}
while(A[a]<p);
do
{
b--;
}
while(A[b]>p);
if(a<b)
{
int tmp=A[a];
A[a]=A[b];
A[b]=tmp;
}
}
if(a==b)
return b-1;
return b;
}
// calcola la media
private BigDecimal mean(int[] A)
{
int sum=0;
for(int i=0; i<A.length;i++)
sum+=A[i];
return new BigDecimal((double)sum/A.length);
}
// ritorna un oggetto SetOfNumbers
public SetOfNumbers build()
{
return new SetOfNumbers(this);
}
}
}
public class Programma
{
public static void main(String[] args)
{
//non ho fatto la lettura da file, ma ho messo gli stessi dati
int size=10;
int[] set= new int[size];
set[0]=23;
set[1]=3;
set[2]=7;
set[3]=21;
set[4]=15;
set[5]=8;
set[6]=11;
set[7]=9;
set[8]=1;
set[9]=27;

SetOfNumbers collect=new SetOfNumbers.Builder(set).build();
System.out.println(collect.getMean());
// per vedere se lo ha ordinato
BigDecimal[] sett=collect.getSet();
for(int i=0; i<size; i++)
System.out.println(sett[i]);
}
}

stavo provando il tuo partition con un array di 4 elementi..finito il primo while do a= 4, entro nel secondo while do ma A[4]<p...ma A[4] non esiste essendo un array di 4 elementi ..   boh mi potresti spiegare meglio? 
Logged

..elimindo il ponte pedonale di andrea doria..hanno eliminato una parte di me!..
R3m
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 486



« Reply #23 on: 07-02-2011, 12:11:24 »

ragazzi potreste postarmi i link dei pdf se possibile per piacere? non ci capisco molto leggendo il testo nei post  pc
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.
Grillo
Apprendista Forumista
**
Offline Offline

Posts: 219


« Reply #24 on: 07-02-2011, 16:11:29 »

Grazie per la soluzione, è già qualcosa, dobbiamo cercare di aiutarci l'un l'altro altrimenti non la passiamo mai sta materia.
Logged
Grillo
Apprendista Forumista
**
Offline Offline

Posts: 219


« Reply #25 on: 07-02-2011, 17:54:35 »

Qualcuno sa dare una spiegazione semplice del funzionamento degli oggetti builder? Cosa sono, come si usano, quando si usano e cosa si va a modificare nel codice?
Tipo per il caso dell'immutabilità nei compiti d'esame bisogna mettere private e nel costruttore creare la copia dell'oggetto con new; invece per gli oggetti builder?
Logged
bluegirl
Apprendista Forumista
**
Offline Offline

Posts: 360



« Reply #26 on: 07-02-2011, 19:45:29 »

Nessuno ha il testo del compito B?Huh?
Logged
Grillo
Apprendista Forumista
**
Offline Offline

Posts: 219


« Reply #27 on: 15-02-2011, 11:36:25 »

Il testo è già online su sistema di esercitazione. La soluzione invece l'ha fatta qualcuno?
Qualcuno può postarla?
Logged
Pages: 1 [2]   Go Up
Print
Jump to: