Pages: [1]   Go Down
Print
Author Topic: ESERCIZIO 11 (Ricorsione)  (Read 904 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
kingborn86
Matricola
*
Offline Offline

Posts: 59


« on: 17-04-2009, 16:16:26 »

salve a tutti, ho un problemino con questo esercizio!

Code:

Scrivere un programma java ricorsivo che riordini un array A di interi, ponendo i valori pari prima di quelli dispari


Posto la mia soluzione, anche se non riesco a gestire il caso nel quale il numero sia dispari, e deve essere inserito alla fine dell'array.
Non trattandosi di una lista, non ho possibilità di inserire in coda, e la cosa si complica decisamente!

Code:

public static void riordina ( int [] A, int i, int [] B)
{
         if (i<A.length)
         {
                 if (A[i] % 2 == 0)
                  {
                          B[i]=A[i];
                          riordina (int [] A, ++i, int [] B);
                  }
                 else
                  {
                          riordina (int [] A, ++i, int [] B);
                  }
         }
}

Logged
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.475


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #1 on: 18-04-2009, 00:09:52 »

Posto la mia soluzione
Code:
//ordina l'array A in cui le posizioni valide vanno da start (incluso) a end (escluso)
//l'utente programmatore lo richiama tramite ordinaPrimaPari (array, 0, array.length);

public static void ordinaPrimaPari (int [] A, int start, int end)
{
//la quantità "end - start" è quella che diminuisce di 1 unità ad ogni passo ricorsivo
//il caso base è quando al massimo tra start ed end c'è 1 elemento.
if (end - start > 1)
{
//se il primo elemento è pari, esso è già ordinato e procedo col passo ricorsivo sul resto dell'array
if ((A [start] % 2) == 0)
ordinaPrimaPari (A, start + 1, end);
else
{
int k = start + 1;
//cerca il primo elemento pari a partire da "start"
while (k < end && (A [k] % 2) == 1) k++;
//se non c'è, sono tutti numeri dispari e l'array è già ordinato
if (k < end)
{ //se c'è, si ricorda di tale numero pari
int p = A [k];
//fa scorrere tutti gli elementi dispari da "start" fino a
//quel pari di una posizione a destra
for (i = k; i > start; i--) A [k] = A [k - 1];
//e mette tale numero pari al primo posto
A [start] = p;

//infine richiama il metodo ricorsivamente sul resto
//dell'array escludendo il primo elemento
ordinaPrimaPari (A, start + 1, end);
}
}
}
}[/quote]
Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
Crasher
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 417



« Reply #2 on: 18-04-2009, 10:40:24 »

Ho fatto 2 versioni di questo esercizio...
il primo che è mezzo bubblesort e passo un solo parametro al metodo
oppure il secondo un po' + generico.
Sapete se il prof accetterebbe il primo? Confermo però che nn è molto ricorsivo, ma di fatto lo è cry

MAIN
Code:
public class Esercizio11 {

   public static void main(String args[]) {
       
       int[] A = {1,2,3,4,5,6};
       
       // Stampa
       for (int i = 0; i<A.length; i++)
        System.out.print(A[i] + "\t");
       
        // Metodo
        metodo(A);
        //metodo(A,0);
        System.out.println ();
       
        // Ristampa
        for (int i = 0; i<A.length; i++)
        System.out.print(A[i] + "\t");
   
   }
   

1° metodo
Code:
// 2 modi diversi x scrivere lo stesso metodo...
   public static void metodo(int[] A){
   
    if ( A.length == 0)
    System.out.println ("Vettore Vuoto!");
   
    else  if ( A.length > 1){
    // Mezzo BubbleSort
    for (int i = 0; i<A.length-1; i++)
    if ( A[i] %2 == 0 && A[i+1] %2 != 0){
    int tmp = A[i];
    A[i] = A[i+1];
    A[i+1] = tmp;
    metodo (A);
    }
    }
   }
   

2° metodo
Code:
    /*public static void metodo(int[] A, int i){
   
    if ( A.length == 0)
    System.out.println ("Vettore Vuoto!");
   
    else if ( A.length > 1 && i<A.length-1){
    if ( A[i] %2 == 0 && A[i+1] %2 != 0){
    int tmp = A[i];
    A[i] = A[i+1];
    A[i+1] = tmp;
    metodo (A,i);
    }
    // rifaccio il metodo...  nel caso in cui ci siano 2 dispari consecutivi
    metodo (A,++i);
    }
   
   }*/
   
} // end class
Logged

Diventa ciò che sei nato per essere
Vivynz
Forumista Eroico
*****
Offline Offline

Gender: Female
Posts: 2.033


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


« Reply #3 on: 18-04-2009, 11:34:28 »

io l'ho fatto così però non si mantiene l'ordine dei numeri dispari..anche se il prof stesso ha detto che se non è specificato..possiamo "fare finta di niente" 
Code:
public static void riordina(int[] array,int da,int a)
{
if(a-da>0)
{
if(array[da]%2==0)
riordina(array,da+1,a);
else
{
int temp=array[da];
for(int i=da+1;i<a;i++)
array[i-1]=array[i];
array[a-1]=temp;
riordina(array,da+1,a);
}
}
else
return;
}
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]   Go Up
Print
Jump to: