Pages: 1 [2]   Go Down
Print
Author Topic: Esercizio 1 (Metodo ricorsivo)  (Read 2882 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
francesco89b
Apprendista Forumista
**
Offline Offline

Posts: 169



« Reply #15 on: 14-04-2009, 15:29:26 »

Ok allora se mi è permesso vorrei postare l'esercizio 3, più che altro per capire se il metodo con cui lo svolto è corretto e ricorsivo visto che di funzionare funziona

Si supponga di avere un array contenente n2 oggetti. Scrivere un
metodo  ricorsivo che  inserisca  tutti  gli  ogggetti in  un  array
bidimensionale n x n.



Quote
public class es3
{

   public static void main(String[] args)
   {
      int[] a={5,6,3,4,5,4,3,2,3};
      int[][] b = esercizio3(a);
      for(int k=0;k<b.length;k++){
         for(int j=0;j<b[k].length;j++)
            System.out.print(b[k][j]+ "  ");
         System.out.println();
      }
      
   }
      
      
   public static int[][] esercizio3(int[] a)
      {
         int[][] b= new int[(int)Math.sqrt(a.length)][(int)Math.sqrt(a.length)];
         return esercizio3(a,b,0);
      }
      
   public static int[][] esercizio3(int[]a, int[][] b,int l)
      {
         if(l==b.length) return b;
         for (int k=0;k<b.length;k++)
            b[l][k]=a[l*b.length+k];
         return esercizio3(a,b,l+1);
         
      }
}
         
Logged

Ogni mia affermazione è sempre da considerarsi con un ampio margine di errore X0
Vivynz
Forumista Eroico
*****
Offline Offline

Gender: Female
Posts: 2.033


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


« Reply #16 on: 14-04-2009, 15:45:13 »

io posto invece l'esercizio 2, l'ho svolto richiamando un metodo con un parametro in più...
Code:
/*Scrivere un metodo ricorsivo che data una lista di interi la modifichi
eliminando ogni elemento pari e replicando ogni elemento dispari tante volte
quanti sono gli elementi pari che lo precedono*/
public class Es2ricorsione
{
public static ListaLinkata eliminaEReplica(ListaLinkata l,ListaLinkata m)
{
return eliminaEReplica(l,m,0);
}
public static ListaLinkata eliminaEReplica(ListaLinkata l,ListaLinkata m, int n)
{
if(!l.vuota())
{
Nodo aux=new Nodo(l.cancellaTesta());
if(((Integer)aux.getInfo())%2==0)
{
eliminaEReplica(l,m,++n);
}
else
{
eliminaEReplica(l,m,n);
for(int i=0;i<=n;i++)
m.inserisciTesta(aux.getInfo());
}
}
return m;
}
public static void main (String[] args)
{
ListaLinkata l=new ListaLinkata();
ListaLinkata m=new ListaLinkata();
int[] a={1,8,4,3,6,2,7};
for(int i=a.length-1;i>=0;i--)
l.inserisciTesta(a[i]);
l.stampa();
eliminaEReplica(l,m).stampa();
}
}
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.
Zeridos
Forumista
***
Offline Offline

Gender: Male
Posts: 705


The Original


« Reply #17 on: 14-04-2009, 16:20:51 »

Io il secondo l'ho fatto così:
Code:
public static void modifica(LList x)
{ modifica(x,0,x.getSize());    }

public static ListNode modifica(LList x,int cont,int size)
{
if(size==0)
return null;
else
{
if((x.getHead().getInfo()%2)==0)
{ x.deleteHead();
modifica(x,cont+1,size-1);
}
else
{
ListNode aux=x.getHead();
int app=cont;
while(app!=0)
{ x.insertHead(x.getHead().getInfo());
app--;
}
aux.setNext(modifica(new LList(aux.getNext()),cont,size-1));
}
return x.getHead();
}
}
main:
Code:
public static void main(String [] args)
{
LList test = new LList();
    int[] x={4,6,7,3,2,5};
   
    for(int i=0;i<x.length;i++)
    test.insertTail(x[i]);
test.stampa();
System.out.println();
modifica(test);
test.stampa();
}


Ciauz
Logged

I love penguins, dead ones...
k1r4
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 375


Il mio nick si pronuncia cappaunoerrequattro!!


WWW
« Reply #18 on: 15-04-2009, 09:34:17 »

[Esercizio1]

Quote
In + ha sottolineato come non ci fosse scritto che i numeri pari dovessere essere necessariamente in ordine, basta che lo siano i numeri dispari (si nell'esempio anche i pari era in ordine, ma era un opzional).

e io che sbattevo la testa per cercare di mantenere l'ordine dei numeri pari  testate

Code:
    public static void ordina(SLinkedList L, Node aux) {
        if (aux == null) {
            return;
        }
        if (aux.getElement() % 2 == 0) {
            Node t1 = aux;
            Node t2 = aux;
            while (t2 != null && t2.getElement() % 2 == 0) {
                t2 = t2.getNext();
            }

            if (t2 == null) {
                return;
            }

            int t = t1.getElement();
            t1.setElement(t2.getElement());
            t2.setElement(t);
        }
        ordina(L, aux.getNext());
    }

    public static void main(String[] args) {
        SLinkedList L = new SLinkedList();

        L.insertTail(3);
        L.insertTail(7);
        L.insertTail(2);
        L.insertTail(8);
        L.insertTail(1);
        L.insertTail(4);
        L.insertTail(3);

        ordina(L, L.getHead());

        Node t = L.getNextNode();
        for (; t != null; t = L.getNextNode()) {
            System.out.println(t.getElement());
        }
    }

il mio metodo prende in input una linked list e un nodo che punta alla testa della lista. La lista viene ordinata secondo la consegna del testo ovvero rispettando l'ordine dei soli numeri dispari.

 
Logged

k1r4
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 375


Il mio nick si pronuncia cappaunoerrequattro!!


WWW
« Reply #19 on: 15-04-2009, 10:09:57 »

[Esercizio2]

Code:
    /*
    Scrivere un metodo ricorsivo che data una lista di interi la
    modifichi eliminando ogni elemento pari e replicando ogni
    elemento dispari tante volte quanti sono gli elementi pari che lo
    precedono (es. L=4,6,7,3,2,5  L=7,7,7,3,3,3,5,5,5,5).
     */
    private static SLinkedList sostituisci(SLinkedList L, Node aux, SLinkedList l2, int i) {
        if (l2 == null) {
            l2 = new SLinkedList();
        }
        if (aux == null) {
            return l2;
        }

        while (aux != null && aux.getElement() % 2 == 0) {
            i++;
            aux = aux.getNext();
        }

        if (aux.getElement() % 2 != 0) {
            for (int j = 0; j <= i; j++) {
                l2.insertTail(aux.getElement());
            }
        }

        sostituisci(L, aux.getNext(), l2, i);
        return l2;
    }
   
    public static SLinkedList sostituisci(SLinkedList L) {
        return sostituisci(L, L.getHead(), null, 0);
    }

    public static void main(String[] args) {
        SLinkedList L = new SLinkedList();

        L.insertTail(4);
        L.insertTail(6);
        L.insertTail(7);
        L.insertTail(3);
        L.insertTail(2);
        L.insertTail(5);

        SLinkedList l2 = sostituisci(L);

        Node t = l2.getNextNode();
        for (; t != null; t = l2.getNextNode()) {
            System.out.println(t.getElement());
        }
    }

Praticamente ho fatto 2 metodi in overload, richiamo il metodo passando la lista L che a sua volta richiama l'altro metodo sostituisci che conta e tiene traccia del numero di elementi pari attraverso la variabile i e inserisce in un altra lista linkata gli elementi dispari i volte.

Tuttavia questa soluzione dei metodi in overload non mi piace molto.. qualcuno l'ha fatto in modo diverso?
« Last Edit: 15-04-2009, 10:20:45 by k1r4 » Logged

k1r4
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 375


Il mio nick si pronuncia cappaunoerrequattro!!


WWW
« Reply #20 on: 15-04-2009, 10:32:03 »

Un'altra cosa.... nell'esercizio 4:

Scrivere un metodo ricorsivo per trovare l’elemento massimo in
un array A di n elementi.

per array di elementi si intende un array di Object? Se si, come si dovrebbe fare per confrontarli? Object non implementa l'interfaccia comparable 
Logged

vincenzo86
Forumista
***
Offline Offline

Gender: Male
Posts: 505



« Reply #21 on: 04-05-2009, 11:38:21 »

Questo stesso esercizio poteva essere svolto nel modo seguente? Ossia sempre il caso base è che la lista deve essere stata controllata tutta, e poi dopo di ciò come passo ricorsivo se gli elementi sono dispari eseguire un inserimento in testa e gli altri (ossia i numeri pari) fare inserimento in coda? Appena finisco di scrivere il codice lo posto.. Per ora stavo ragionando su questi esercizi.
Grazie per le risposte. Ciao
PS: intendo dire il primo esercizio ovviamente
« Last Edit: 04-05-2009, 14:32:01 by vincenzo86 » Logged
Pages: 1 [2]   Go Up
Print
Jump to: