Forum Informatica Unict

LAUREA TRIENNALE (D.M. 270/04) => Programmazione 1, 9 CFU => Topic started by: atrix0ne on 31-03-2009, 16:18:51



Title: AEREO TOROIDALE SOLUZIONE
Post by: atrix0ne 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? :[Emoticon] PC Asd:
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));
  }
 }


Title: Re:AEREO TOROIDALE SOLUZIONE
Post by: TheUniversalMind 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.


Title: Re:AEREO TOROIDALE SOLUZIONE
Post by: djjeck 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.


Title: Re:AEREO TOROIDALE SOLUZIONE
Post by: atrix0ne 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));
  }
 }


Title: Re:AEREO TOROIDALE SOLUZIONE
Post by: djjeck on 01-04-2009, 16:25:01
boh, forse... ma ti è avanzata una i


Title: Re:AEREO TOROIDALE SOLUZIONE
Post by: Daréios89 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.


Title: Re:AEREO TOROIDALE SOLUZIONE
Post by: atrix0ne 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?


Title: Re:AEREO TOROIDALE SOLUZIONE
Post by: Daréios89 on 05-04-2009, 13:40:54
Ah ah, capisco, si ora sembra più chiaro, provo a rileggerlo. Thanks.


Title: Re:AEREO TOROIDALE SOLUZIONE
Post by: Daréios89 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...


Title: Re:AEREO TOROIDALE SOLUZIONE
Post by: atrix0ne on 05-04-2009, 14:10:21
A[0].length è da sinistra a destra,A.length dall'alto in basso .smile


Title: Re:AEREO TOROIDALE SOLUZIONE
Post by: Daréios89 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?


Title: Re:AEREO TOROIDALE SOLUZIONE
Post by: atrix0ne on 05-04-2009, 14:14:23
A[0].length=riga quindi r
A.length=colonna quindi c


Title: Re:AEREO TOROIDALE SOLUZIONE
Post by: Daréios89 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?


Title: Re:AEREO TOROIDALE SOLUZIONE
Post by: atrix0ne on 05-04-2009, 14:31:18
decrementa la i se non fà movimenti


Title: Re:AEREO TOROIDALE SOLUZIONE
Post by: Daréios89 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.