Forum Informatica Unict

LAUREA TRIENNALE (D.M. 270/04) => Programmazione 2, 9 CFU => Topic started by: Grillo on 17-01-2011, 14:55:10



Title: Soluzione Appello 7 Dicembre 2010 - Compito A e Compito B
Post by: Grillo on 17-01-2011, 14:55:10
Dato che il prof non vuole mettere più le soluzioni, qualcuno di buona volontà potrebbe essere così gentile da mettere le proprie soluzioni? Grazie a tutti e speriamo che questa sia la volta buona.


Title: Re:Soluzione Appello 7 Dicembre 2010 - Compito A e Compito B
Post by: gabfri on 19-01-2011, 10:48:19
il problema non è la soluzione ma piuttosto il testo dell'esame (sia del compito A che del compito B) poichè ho provato a scaricarlo ma è semplicemente un foglio bianco con la sola intestazione... dove si possono reperire entrambi i testi???
 .penso


Title: Re:Soluzione Appello 7 Dicembre 2010 - Compito A e Compito B
Post by: bluegirl on 21-01-2011, 11:36:47
il problema non è la soluzione ma piuttosto il testo dell'esame (sia del compito A che del compito B) poichè ho provato a scaricarlo ma è semplicemente un foglio bianco con la sola intestazione... dove si possono reperire entrambi i testi???
 .penso
No no il problema è proprio la soluzione. Finchè nel sito non ci saranno esempi degni di esser chiamati tali, non si passerà mai questa materia...e io mi sono letteralmente rotta di ripeterla ancora e di studiare sempre le stesse cose ormai da mesi e mesi.
Cmq ti posto il testo del compito A-

Si definisca una classe Java denominata SetOfNumbers che implementi l'interfaccia Set071210. La classe rappresenta un insieme ordinato di (non più di 50) numeri interi(utilizzare l'array per l'implementazione dell'insieme). L'ordinamento dell'insieme dovrà essere effettuato mediante l'algoritmo Quicksort semiiterativo(contenente una singola chiamata ricorsiva). La classe dovrà essere immutabile, per cui una volta inseriti gli elementi e ordinato l'insieme, quest'ultimo non potrà più essere modificato(utilizzare un oggetto builder a tale scopo).
In seguiti si realizza un programma Java che prenda in input una sequenza di numer interi e costruisca l'insieme contenente tali numeri. Il programma dovrà stampare in ouput la media dei valori contenuti nell'insieme.

File di input e di output
Il file di input è formato da due righe. La prima riga contiene il numero di elementi dell'insieme, mentre la seconda riga contiene la sequenza di numeri interi separati da uno spazio. Il file di output contiene la media degli elementi in input.


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

interface Set071210
{
public BigDecimal getSize();
public BigDecimal getMean();
public BigDecimal[]getSet;
}


Title: Re:Soluzione Appello 7 Dicembre 2010 - Compito A e Compito B
Post by: Federik88 on 23-01-2011, 15:40:53
Ragazzi, è vero che su internet alcune cose non si trovano ma se andate ai ricevimenti del professore lui è sempre a disposizione per fornire i testi degli esami così come le soluzioni,  nel senso che vi spiegherà come doveva essere esguito il compito fornendovi delle spiegazioni dettagliate sulle classi e i vari metodi


Title: Re:Soluzione Appello 7 Dicembre 2010 - Compito A e Compito B
Post by: callo on 23-01-2011, 18:52:48
a proposito di ricevimento ma è martedì e giovedì dalle 9 alle 10 o dalle 15 alle 16???? .penso


Title: Re:Soluzione Appello 7 Dicembre 2010 - Compito A e Compito B
Post by: Federik88 on 23-01-2011, 19:35:09
martedi e giovedi dalle 15 alle 16


Title: Re:Soluzione Appello 7 Dicembre 2010 - Compito A e Compito B
Post by: callo on 23-01-2011, 19:35:57
grazie mille!! .rido


Title: Re:Soluzione Appello 7 Dicembre 2010 - Compito A e Compito B
Post by: bluegirl on 24-01-2011, 10:27:57
Ragazzi qualcuno ha provato a risolverlo?io ci sto provando ma non capisco se l'oggetto builder lo devo inserire nella classe SetOfNumbers o creare una classe a parte?
Ci potrebbero aiutare i ragazzi che hanno superato l'esame.


Title: Re:Soluzione Appello 7 Dicembre 2010 - Compito A e Compito B
Post by: gabfri on 25-01-2011, 18:33:48
il problema non è la soluzione ma piuttosto il testo dell'esame (sia del compito A che del compito B) poichè ho provato a scaricarlo ma è semplicemente un foglio bianco con la sola intestazione... dove si possono reperire entrambi i testi???
 .penso
No no il problema è proprio la soluzione. Finchè nel sito non ci saranno esempi degni di esser chiamati tali, non si passerà mai questa materia...e io mi sono letteralmente rotta di ripeterla ancora e di studiare sempre le stesse cose ormai da mesi e mesi.
Cmq ti posto il testo del compito A-

Si definisca una classe Java denominata SetOfNumbers che implementi l'interfaccia Set071210. La classe rappresenta un insieme ordinato di (non più di 50) numeri interi(utilizzare l'array per l'implementazione dell'insieme). L'ordinamento dell'insieme dovrà essere effettuato mediante l'algoritmo Quicksort semiiterativo(contenente una singola chiamata ricorsiva). La classe dovrà essere immutabile, per cui una volta inseriti gli elementi e ordinato l'insieme, quest'ultimo non potrà più essere modificato(utilizzare un oggetto builder a tale scopo).
In seguiti si realizza un programma Java che prenda in input una sequenza di numer interi e costruisca l'insieme contenente tali numeri. Il programma dovrà stampare in ouput la media dei valori contenuti nell'insieme.

File di input e di output
Il file di input è formato da due righe. La prima riga contiene il numero di elementi dell'insieme, mentre la seconda riga contiene la sequenza di numeri interi separati da uno spazio. Il file di output contiene la media degli elementi in input.


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

interface Set071210
{
public BigDecimal getSize();
public BigDecimal getMean();
public BigDecimal[]getSet;
}





Grazie grazie grazie... adesso lavoro su questo e vediamo cosa ne esce :D


Title: Re:Soluzione Appello 7 Dicembre 2010 - Compito A e Compito B
Post by: Federik88 on 26-01-2011, 09:35:32
Ragazzi qualcuno ha provato a risolverlo?io ci sto provando ma non capisco se l'oggetto builder lo devo inserire nella classe SetOfNumbers o creare una classe a parte?

la classe Builder và creata all'interno della classe SetOfNumbers. Per chiarirti le idee ti consiglio di guardare questo esercizio  "Esempio : Oggetti Builder" che trovi nel sito del prof , http://www.dmi.unict.it/~faro/prog2/libri.php, nella sezione "Costruzione di oggetti", a me ha aiutato .smile


Title: Re:Soluzione Appello 7 Dicembre 2010 - Compito A e Compito B
Post by: bluegirl on 26-01-2011, 11:33:00
si si grazie, lo conosco giò quell'esempio .smile Con il tuo suggerimento credo di aver risolto il problema...grazie .applausi .applausi


Title: Re:Soluzione Appello 7 Dicembre 2010 - Compito A e Compito B
Post by: Federik88 on 26-01-2011, 11:52:03
di niente  .wink  :-ciao


Title: Re:Soluzione Appello 7 Dicembre 2010 - Compito A e Compito B
Post by: bluegirl on 27-01-2011, 10:17:26
Qualcuno ha il testo del compito B?


Title: Re:Soluzione Appello 7 Dicembre 2010 - Compito A e Compito B
Post by: ilpuglio on 30-01-2011, 12:25:46
Ma voi come svolgereste questo punto?

Quote
La classe dovrà essere immutabile, per cui una volta inseriti gli elementi e ordinato l'insieme, quest'ultimo non potrà più essere modificato(utilizzare un oggetto builder a tale scopo).

Se non ricordo male l'oggetto builder serve se si hanno molti parametri nel costruttore e non se ne vogliono inizializzare alcuni ma cosa c'entra con la classe immutabile?  E:)


Title: Re:Soluzione Appello 7 Dicembre 2010 - Compito A e Compito B
Post by: Grillo on 02-02-2011, 17:40:50
Io non riesco a risolverlo, non ho capito bene come fare a utilizzare l'oggetto builder.
Ma può essere che nessuno ha risolto l'esercizio, anche una soluzione parzialmente completa, non ci credo che nessuno c'ha provato. Perchè non volete pubblicare una soluzione? Io aspetto ancora un ragazzo che doveva mandarmi la soluzione via email, almeno così m'ha detto il giorno dell'esame..


Title: Re:Soluzione Appello 7 Dicembre 2010 - Compito A e Compito B
Post by: bluegirl 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?


Title: Re:Soluzione Appello 7 Dicembre 2010 - Compito A e Compito B
Post by: Grillo 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.


Title: Re:Soluzione Appello 7 Dicembre 2010 - Compito A e Compito B
Post by: Federik88 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 .smile


Title: Re:Soluzione Appello 7 Dicembre 2010 - Compito A e Compito B
Post by: bluegirl on 03-02-2011, 13:52:12
Aaaaaah ok, perfetto. ottimo :-)


Title: Re:Soluzione Appello 7 Dicembre 2010 - Compito A e Compito B
Post by: Grillo on 03-02-2011, 14:14:20
Ma un codice postato no?  .smile


Title: Re:Soluzione Appello 7 Dicembre 2010 - Compito A e Compito B
Post by: ilpuglio on 03-02-2011, 16:33:17
Ma un codice postato no?  .smile
.quoto


Title: Re:Soluzione Appello 7 Dicembre 2010 - Compito A e Compito B
Post by: SixArt 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à  .whistling .whistling .whistling
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]);
}
}


Title: Re:Soluzione Appello 7 Dicembre 2010 - Compito A e Compito B
Post by: Angelo 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à  .whistling .whistling .whistling
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 .. .penso  :boh mi potresti spiegare meglio?  .poverinoi


Title: Re:Soluzione Appello 7 Dicembre 2010 - Compito A e Compito B
Post by: R3m 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  :[Emoticon] PC Asd:


Title: Re:Soluzione Appello 7 Dicembre 2010 - Compito A e Compito B
Post by: Grillo 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.


Title: Re:Soluzione Appello 7 Dicembre 2010 - Compito A e Compito B
Post by: Grillo 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?


Title: Re:Soluzione Appello 7 Dicembre 2010 - Compito A e Compito B
Post by: bluegirl on 07-02-2011, 19:45:29
Nessuno ha il testo del compito B????


Title: Re:Soluzione Appello 7 Dicembre 2010 - Compito A e Compito B
Post by: Grillo 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?