Pages: [1]   Go Down
Print
Author Topic: AEREO TOROIDALE SOLUZIONE  (Read 2328 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
atrix0ne
Forumista
***
Offline Offline

Posts: 607


homo faber fortunae suae


« on: 31-03-2009, 16:18:51 »

secondo voi è giusto?accetto critiche e consiglie,secondo voi il contatore deve essere incrementato una volta ogni casella o ogni volta ke si sposta sulla stessa linea? pc
Code:
/*Un aereo si muove in una superficie toroidale rappresentata da una matrice S di nxn interi occupando di volta in volta una posizione di S. L'aereo si sposta alternando un movimento orizzontalr da sinistra a destra ad uno verticale dal'alto in basso; se l'aereo si trova nella posizione (i,j) l'ampiezzadello spostamento successivo è data da S[i,j] se quest'ultimo è positivo. Se S[i,j] contiene valore zero si tratta di un aeroporto in cui l'aereo atterra, se contiene un valore negativo si tratta di un tifone che fa precipitare l'aereo. Scrivere un metodo che prenda in input S e restituisca il numero di spostamenti compiuti da un ereo cha parte dal centro di S.*/
public class aereo
  {
  public static int metodo(int [][]A)
    {
   int r=A.length/2;
   int c=A[0].length/2;
    int i=0;
    for(i=0;A[r][c]>0;i++)
      {
      c=(c+A[r][c])%A[0].length;
      i++;
      if(A[r][c]>0)
        {
      r=(r+A[r][c])%A[0].length;
        i++;
        }
      i--;
      }
    if(A[r][c]==0)
      {
      System.out.println("aeroporto") ;
      return i;
      }
     else
     {
     System.out.println("precipitato");
     return i;
     }
   }
           public static void main (String[]args)
  {

    int m[][]= { { 12,3,4,8,2},
                    {6,1,13 ,20,7},
                    {-1,18,34 ,0,6},
                     {5,3,30 ,2,8},
                    {0,2,32 ,14,18}
                  };

    System.out.println(metodo(m));
  }
 }
Logged

TheUniversalMind
Forumista
***
Offline Offline

Gender: Male
Posts: 581



« Reply #1 on: 01-04-2009, 10:30:44 »

scusa, ora non ho il tempo di guardare il tuo codice,
se vuoi quando torno a casa posto la soluzione,
e magari correggo il tuo.
Logged

Chuck Norris è riuscito a contare fino a \infty. Per ben due volte.
djjeck
Matricola
*
Offline Offline

Gender: Male
Posts: 89


Ho una donna nuda per avatar. Non c'era di meglio.


WWW
« Reply #2 on: 01-04-2009, 14:42:54 »

Utilizzi il for in modo improprio, la condizione di uscita non dipende dall'indice, e non stai scorrendo qualcosa.
Forse sarebbe meglio un while.

E poi credo che l'incremento di i sia esclusivamente del numero che trovi dentro A[r][c], e non di uno ogni volta.
Logged
atrix0ne
Forumista
***
Offline Offline

Posts: 607


homo faber fortunae suae


« Reply #3 on: 01-04-2009, 15:15:34 »

risulta questo
Code:
/*Un aereo si muove in una superficie toroidale rappresentata da una matrice S di nxn interi occupando di volta in volta una posizione di S. L'aereo si sposta alternando un movimento orizzontalr da sinistra a destra ad uno verticale dal'alto in basso; se l'aereo si trova nella posizione (i,j) l'ampiezzadello spostamento successivo è data da S[i,j] se quest'ultimo è positivo. Se S[i,j] contiene valore zero si tratta di un aeroporto in cui l'aereo atterra, se contiene un valore negativo si tratta di un tifone che fa precipitare l'aereo. Scrivere un metodo che prenda in input S e restituisca il numero di spostamenti compiuti da un ereo cha parte dal centro di S.*/
public class aereo
  {
  public static int metodo(int [][]A)
    {
    int cont=0;
   int r=A.length/2;
   int c=A[0].length/2;
    int i=0;
    for(i=0;A[r][c]>0;i++)
      {
      cont+=A[r][c];
      c=(c+A[r][c])%A[0].length;
      i++;
      if(A[r][c]>0)
        {
        cont+=A[r][c];
      r=(r+A[r][c])%A[0].length;
        i++;
        }
      i--;
      }
    if(A[r][c]==0)
      {
      System.out.println("aeroporto"+i) ;
     
      return cont;
      }
     else
     {
     System.out.println("precipitato"+i);
     return cont;
     }
   }
           public static void main (String[]args)
  {

    int m[][]= { { 12,3,4,8,2},
                    {6,1,13 ,20,7},
                    {-1,18,34 ,0,6},
                     {5,3,30 ,2,8},
                    {0,2,32 ,14,18}
                  };

    System.out.println(metodo(m));
  }
 }
Logged

djjeck
Matricola
*
Offline Offline

Gender: Male
Posts: 89


Ho una donna nuda per avatar. Non c'era di meglio.


WWW
« Reply #4 on: 01-04-2009, 16:25:01 »

boh, forse... ma ti è avanzata una i
Logged
Daréios89
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.679


La musica è la forma d'arte suprema.


« Reply #5 on: 05-04-2009, 13:03:16 »

Io non sono riuscito ad elaborare un codice, volevo chiederti alcune cose Atrix per capire il tuo.

 Come mai nel for scrivi cont+=A[r][c]?

Cosa significa praticamente c=(c+A[r][c])%A[0].length?

E poi la stessa cosa sulla r?

Infine come mai bisogna decrementare la i?

Grazie.
Logged

"Utilizzare sempre de l'Hôpital.....è come andare a caccia di farfalle con un bazooka".
atrix0ne
Forumista
***
Offline Offline

Posts: 607


homo faber fortunae suae


« Reply #6 on: 05-04-2009, 13:12:09 »

allora
1)c=(c+A[r][c])%A[0].length;
 con questa formula mi sposto da destra verso sinistra nell'array prima di tutto e ciò serve per eliminare tutti gli out of bounds ke si sarebbero creati indicando il movimento toroidale,xkè tu prendendo le coordinate di riga colonna hai per esempio il numero 100,e devi spostarti di 100 posizioni,cosi' con quella formula ti rientra nelle grandezze dell'array e nn conti 100 posizioni non avendo array di grandezza 100.In sostanza è una semplice formula matematica ke ti indica la superficie toroidale e ti sposta di tot posizioni nella riga.
e con l'altra forumula mi sposto dall'altro verso il basso!
2)il cont incrementa le esatte posizioni ke fà l'aereo xkè se fai cont++ ti incrementa solo di uno,se fai cont+=A[r][c] ti incrementa le posizioni esatte dell'aereo ke può essere anke +1 ma anche +35,dipende da quanto è il valore ke è contenuto nelle coordinate riga e colonna.
Capito?
Logged

Daréios89
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.679


La musica è la forma d'arte suprema.


« Reply #7 on: 05-04-2009, 13:40:54 »

Ah ah, capisco, si ora sembra più chiaro, provo a rileggerlo. Thanks.
Logged

"Utilizzare sempre de l'Hôpital.....è come andare a caccia di farfalle con un bazooka".
Daréios89
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.679


La musica è la forma d'arte suprema.


« Reply #8 on: 05-04-2009, 14:09:04 »

Aspetta atrix ma per quanto riguarda lo spostmento, hai sbagliato tu a scrivere? l'esercizio vuole che l'aereo si sposti da siniatra a destra...
Logged

"Utilizzare sempre de l'Hôpital.....è come andare a caccia di farfalle con un bazooka".
atrix0ne
Forumista
***
Offline Offline

Posts: 607


homo faber fortunae suae


« Reply #9 on: 05-04-2009, 14:10:21 »

A[0].length è da sinistra a destra,A.length dall'alto in basso
Logged

Daréios89
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.679


La musica è la forma d'arte suprema.


« Reply #10 on: 05-04-2009, 14:12:37 »

nella r hai scritto:
r=r+A[r][c]%A[0].length, non dovrebbe essere allora solamente A.length?

E poi, mi pare non l'avevi scritto, perchè decrementi la i?
« Last Edit: 05-04-2009, 14:15:03 by guitarplaying » Logged

"Utilizzare sempre de l'Hôpital.....è come andare a caccia di farfalle con un bazooka".
atrix0ne
Forumista
***
Offline Offline

Posts: 607


homo faber fortunae suae


« Reply #11 on: 05-04-2009, 14:14:23 »

A[0].length=riga quindi r
A.length=colonna quindi c
Logged

Daréios89
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.679


La musica è la forma d'arte suprema.


« Reply #12 on: 05-04-2009, 14:19:39 »

Quindi è giusto mettere in entrambi i casi, per r e c=A[r][c]%A[0].length.

E poi non mi ricordo se me lo hai detto, perchè decrementi la i?
Logged

"Utilizzare sempre de l'Hôpital.....è come andare a caccia di farfalle con un bazooka".
atrix0ne
Forumista
***
Offline Offline

Posts: 607


homo faber fortunae suae


« Reply #13 on: 05-04-2009, 14:31:18 »

decrementa la i se non fà movimenti
Logged

Daréios89
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.679


La musica è la forma d'arte suprema.


« Reply #14 on: 05-04-2009, 14:40:10 »

Mh....ok tutto chiaro, l'ultimissima domanda, ma se decrementa la i se non fa movimenti, non ci vorrebbe un else prima di i-- ? Altrimenti non la decrementerebbe a prescindere?

Grazie di avermelo fatto capire tutto Atrix, ci becchiamo a lezione.
Logged

"Utilizzare sempre de l'Hôpital.....è come andare a caccia di farfalle con un bazooka".
Pages: [1]   Go Up
Print
Jump to: