Pages: [1] 2   Go Down
Print
Author Topic: Ordinamento di un array di oggetti in un altro array indipendente  (Read 3762 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Alex_47
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 409


The spiral's King


« on: 26-01-2009, 18:14:55 »

Qualcuno ha mai provato a fare la terza fase degli esercizi sull'UML??

Questi esercizi sono tutti con l'ordinamento e come se non bastasse bisogna ordinare tutto ciò in un array indipendente senza clonare gli oggetti  , qualcuno per caso è riuscito a farli?

vi prego rispondete!!!   
« Last Edit: 26-01-2009, 18:22:41 by Alex_47 » Logged
Aigor
Forumista Esperto
****
Offline Offline

Gender: Male
Posts: 1.184


"Il destino non è una catena, ma un volo."[A.B.]


« Reply #1 on: 26-01-2009, 18:23:43 »

Questa parte si basa sugli algoritmi di ordinamento studiati. Se non ne viene richiesto uno in particolare ti consiglio di utilizzare il bubblesort, gli altri che potrebbero essere richiesti sono il selectionsort e l'insertionsort ! Dovresti trovare tutto nel moduloC comunque.
Logged

"Era d'altronde uno di quegli uomini che amano assistere alla propria vita, ritenendo impropria qualsiasi ambizione a viverla.
Si sarà notato che essi osservano il loro destino nel modo in cui, i più, sono soliti osservare una giornata di pioggia." - Seta,Baricco
Alex_47
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 409


The spiral's King


« Reply #2 on: 26-01-2009, 18:26:25 »

Si! l'unico problema che ho provato a farne uno ma mi chiedo come si possa fare se gli oggetti non vengono clonati!

MI servirebbe sentire il parere di qualcuno che è riuscito a farli , dato che bisogna salvare i dati in un array indipendente di oggetti , il che è un casino!
Logged
Alex_47
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 409


The spiral's King


« Reply #3 on: 26-01-2009, 18:45:04 »

Comunque per provare a capirlo meglio sto partendo da una esercizio tipo selection sort in cui prendendo un array di interi li salva ordinandoli un un altro array indipdente , ma l'ordinamente avviene in maniera errata..

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


public class valo
{
static void swap ( int a[],int b[] , int primo, int secondo )
    {
      int Q;
      int W;
     
      Q = a[primo];
      W = a[secondo];
     
      b[primo] = W;
      b[secondo] = Q;
     
      //tmp = a[primo];         
      //a[primo] = a[secondo]; 
      //a[secondo] = tmp;
    }


public static void main(String []args)
{
int [] A = {8, 4, 6, 1, 2, 7, 5, 3};

int [] B = new int[8];

int i,j;
int min;

   

for(j=0;j<A.length-1;j++)
{

min=j;

for(i=j+1;i<A.length;i++)
{
if( (A[i] < A[min]))
min=i;

swap(A,B,min,j);

}
}




for(i=0;i<B.length;i++)
{
System.out.println(B[i]);
}
}

}



e l'outpout mi viene..
1
1
1
1
2
3
3
5

Logged
Aigor
Forumista Esperto
****
Offline Offline

Gender: Male
Posts: 1.184


"Il destino non è una catena, ma un volo."[A.B.]


« Reply #4 on: 26-01-2009, 18:52:12 »


Scusa ma non vedo il problema >_> ....
Ammettiamo che tu abbia il tuo bell'array di oggetti nel tuo main, lo passi al metodo bubblesort ...

Code:

public void bubbleSort(BaseObject[] data){
int i,j;
for (i = 0; i < data.length-1; i++)
for (j = data.length-1; j > i; --j)
if (data[j].isLessThan(data[j-1]))
swap(data,j,j-1);
}

void swap(BaseObject []a, int e1, int e2) {
BaseObject tmp = a[e1];
a[e1] = a[e2];
a[e2] = tmp;
}

...e come per magia l'array è ordinato >_> .... Non stiamo clonando gli oggetti nè tanto meno ne stiamo inventando di nuovi
Logged

"Era d'altronde uno di quegli uomini che amano assistere alla propria vita, ritenendo impropria qualsiasi ambizione a viverla.
Si sarà notato che essi osservano il loro destino nel modo in cui, i più, sono soliti osservare una giornata di pioggia." - Seta,Baricco
Aigor
Forumista Esperto
****
Offline Offline

Gender: Male
Posts: 1.184


"Il destino non è una catena, ma un volo."[A.B.]


« Reply #5 on: 26-01-2009, 18:55:45 »

Comunque per provare a capirlo meglio sto partendo da una esercizio tipo selection sort in cui prendendo un array di interi li salva ordinandoli un un altro array indipdente , ma l'ordinamente avviene in maniera errata..

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


public class valo
{
static void swap ( int a[],int b[] , int primo, int secondo )
    {
      int Q;
      int W;
     
      Q = a[primo];
      W = a[secondo];
     
      b[primo] = W;
      b[secondo] = Q;
     
      //tmp = a[primo];         
      //a[primo] = a[secondo]; 
      //a[secondo] = tmp;
    }


public static void main(String []args)
{
int [] A = {8, 4, 6, 1, 2, 7, 5, 3};

int [] B = new int[8];

int i,j;
int min;

   

for(j=0;j<A.length-1;j++)
{

min=j;

for(i=j+1;i<A.length;i++)
{
if( (A[i] < A[min]))
min=i;

swap(A,B,min,j);

}
}




for(i=0;i<B.length;i++)
{
System.out.println(B[i]);
}
}

}



e l'outpout mi viene..
1
1
1
1
2
3
3
5



Prima di fare lo swap devi controllare che min != i !!!!
Logged

"Era d'altronde uno di quegli uomini che amano assistere alla propria vita, ritenendo impropria qualsiasi ambizione a viverla.
Si sarà notato che essi osservano il loro destino nel modo in cui, i più, sono soliti osservare una giornata di pioggia." - Seta,Baricco
TheSpecialOne
Apprendista Forumista
**
Offline Offline

Posts: 232



« Reply #6 on: 26-01-2009, 19:00:40 »

se vi puo aiutare, metto una mia "versione" di bubblesort!
Se ci sono errori correggete pure!!

Code:

int dim=vettore.length-1;
prodotti temp;
for (int i=0;i<vettore.length-1;i++)
{
     dim--;
     for (int j=0;j<dim;j++)
     {
           int k=j+1;
           if (vettore[j].getCosto()>vettore[k].getCosto())         //getCosto() metodo preso per esempio
           {
               temp=vettore[j];
               vettore[j]=vettore[k];
               vettore[k]=temp;
           }
      }
}

for (int i=0;i<vettore.length-1;i++)
{
      System.out.println (vettore[i]);
}
« Last Edit: 26-01-2009, 19:02:44 by TheSpecialOne » Logged
Alex_47
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 409


The spiral's King


« Reply #7 on: 26-01-2009, 19:06:40 »

Il tuo esempio è buono! Ma i dati dell'array devono essere ordinati un array indipendente , il che è ancora più difficile , io ci ho provato a farlo partendo da un array di interi , ma non risulta , per caso il prof mercoledi a che orario fa ricevimento?
Logged
TheSpecialOne
Apprendista Forumista
**
Offline Offline

Posts: 232



« Reply #8 on: 26-01-2009, 19:10:17 »

Il tuo esempio è buono! Ma i dati dell'array devono essere ordinati un array indipendente , il che è ancora più difficile , io ci ho provato a farlo partendo da un array di interi , ma non risulta , per caso il prof mercoledi a che orario fa ricevimento?

non sò sinceramente il ricevimento del prof...nel frattempo se qualcuno ha altre soluzioni, fatevi sotto!  boh
Logged
Alex_47
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 409


The spiral's King


« Reply #9 on: 26-01-2009, 19:13:18 »

Io comunque ho fatto una soluzione del genere ma che però non va , prendendo un array di oggetti e ordinandolo in un altro array indipendente di oggetti

Code:

prodotti [] X = new prodotti[30];
prodotto Q;
prodotto W;

for(int j=1;j<P.length;j++)
{
    
    for(i=0;i<P.length;i++)
    {
         if(P[i].getPrezzo()>P[i+1].getPrezzo])
         {

         Q=P[i];
         W=P[i+1];
         X[i]=W;
         X[i+1]=Q;
     }
}

« Last Edit: 26-01-2009, 19:23:39 by Alex_47 » Logged
Alex_47
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 409


The spiral's King


« Reply #10 on: 26-01-2009, 19:28:10 »

questo è invece l'esercizio prendendo l'array e salvandolo in un array indipendente ordinato , ma non riesco a capire il perchè non me lo ordina!!

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


public class valo
{

public static void main (String []args)
{

int [] A = {8, 4, 6, 1, 2, 7, 5, 3};

int [] B = new int[8];

        int Q;
        int W;
     
int i,j;

for ( j = 1; j < A.length; j++ )
{
for ( i = 0; i < A.length-1;i++ )
{
if ( A[i] > A[i+1] )
{


Q=A[i];
B[i]=A[i+1];
B[i+1]=Q;


}   
       
               
            }
    }




for(i=0;i<B.length;i++)
{
System.out.println(B[i]);
}




}

}

« Last Edit: 26-01-2009, 22:26:02 by Alex_47 » Logged
Aigor
Forumista Esperto
****
Offline Offline

Gender: Male
Posts: 1.184


"Il destino non è una catena, ma un volo."[A.B.]


« Reply #11 on: 27-01-2009, 00:54:57 »

Ecco qua i tre metodi di ordinamento, funzionanti e testati !! Spero vi possano essere d'aiuto per l'esame !!!

Code:

public class ordinamento
{

public static void main (String []args)
{

int [] A = {8, 4, 6, 1, 2, 7, 5, 3};
int [] B = {2,6,4,10,12,8};
        int [] C = {9,18,21,3,6,12};
       
        System.out.println("Bubble Sort:");
        bubbleSort(A);
        print(A);
        System.out.println("\n\nSelection Sort:");
        selectionSort(B);
        print(B);
        System.out.println("\n\nInserection Sort");
        inserectionSort(C);
        print(C);
       
       

    }
    //Semplice metodo di stampa
    public static void print(int[]A){
       
        for(int i=0;i<A.length;i++)
            System.out.print(A[i]+" ");
    }
    //Ordinamento a bolle
    public static void bubbleSort(int[] data){
        int i,j;
        for (i = 0; i < data.length-1; i++)
            for (j = data.length-1; j > i; --j)
                if (data[j]<data[j-1])
                    swap(data,j,j-1);
    }
    //Ordinamento per selezione
    public static void selectionSort(int[] data) {
        int i,j,least;
        for (i = 0; i < data.length-1; i++)
        {
            for (j=i+1, least=i; j<data.length; j++)
                if (data[j]<data[least])
                    least = j;
            if (least != i)
                 swap(data,least,i);
        }

    }
    //Ordinamento per inserimento
    public static void inserectionSort(int[] data) {
        int tmp,i, j;
        for (i = 1; i < data.length; i++)
        {
            tmp = data[i];
            for (j=i; j>0 && tmp<data[j-1]; j--)
                data[j] = data[j-1];
            data[j] = tmp;
        }
    }
   
    //Scambio !
    public static void swap(int[]a, int e1, int e2) {
        int tmp = a[e1];
        a[e1] = a[e2];
        a[e2] = tmp;
    }

}


Logged

"Era d'altronde uno di quegli uomini che amano assistere alla propria vita, ritenendo impropria qualsiasi ambizione a viverla.
Si sarà notato che essi osservano il loro destino nel modo in cui, i più, sono soliti osservare una giornata di pioggia." - Seta,Baricco
Vivynz
Forumista Eroico
*****
Offline Offline

Gender: Female
Posts: 2.033


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


« Reply #12 on: 27-01-2009, 10:24:04 »

Come ti ho già detto non c'è niente di difficile...basta copiare tutti gli elementi dell'array in un altro array(essendo degli oggetti e non dei tipi primitivi non vengono clonati ma viene copiato solamente il riferimento,cioè si avranno due riferimenti,quello del vecchio array e quello dell'array indipendente,che puntano allo stesso oggetto) e poi fare l'ordinamento dell'array appena creato, con uno dei tre algoritmi che abbiamo studiato(bubblesort,insertionsort,selectionsort)
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 #13 on: 27-01-2009, 10:45:02 »

chiariamo una cosa (aaah cosa fa fare studiare il C++ ed i puntatori che quel gran "vigliaccone" di java invece ci nasconde evil ): clonare un oggetto significa crearne un altro dal nulla esattamente identico a quello che abbiamo che però risulta essere un altro array a tutti gli effetti (come qualsiasi altro tipo di clonazione in quanto ho ripreso il significato del termine). Quando dichiariamo un vettore con la classica sintassi java
Code:
int[] vettore;
non viene allocato il vettore vero e proprio ma una variabile contenente l'indirizzo di memoria dell'array (che quindi punta al vero e proprio array). Il nostro array quindi conterrà i puntatori (variabili che infatti puntano alla locazione di memoria dove sta l'oggetto) degli oggetti. A questo punto se io, avendo due vettori A e B scrivessi l'istruzione
Code:
B[0]=A[0]
questa copierebbe semplicemente il riferimento all'oggetto della 0sima posizione di A all'interno della posizione 0sima di B, l'oggetto che sta nella posizione 0 di A non viene toccato, nè copiato. Per clonare un oggetto si usa questo metodo, con un buon esempio rintracciabile in questo blog.
Saluti!
EDIT: Ouch mi ha anticipato Vivynz (e sembra di parecchio [Emoticon] Asd ). Vabbè meglio due spiegazioni che una
« Last Edit: 27-01-2009, 10:47:18 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 #14 on: 27-01-2009, 11:02:42 »

EDIT: Ouch mi ha anticipato Vivynz (e sembra di parecchio [Emoticon] Asd ). Vabbè meglio due spiegazioni che una
ahaha non fa niente però il fatto che la spiegazione coincide mi fa piacere significa che qualcosa la sto imparando  yoh
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.
Pages: [1] 2   Go Up
Print
Jump to: