Forum Informatica Unict

LAUREA TRIENNALE (D.M. 270/04) => Programmazione 1, 9 CFU => Topic started by: atrix0ne on 21-02-2009, 13:01:14



Title: Esercizio prima parte
Post by: atrix0ne on 21-02-2009, 13:01:14
è corretto?
Code:
/*Scrivere un metodo che prenda in input un array bidimensionale frastagliato A di long, e restituisca
un boolean che indichi se esistono due righe non consecutive in A contenenti rispettivamente due
elementi uguali (anche in colonne differenti).*/
  public class provissima
  {
  public static boolean metodo(long [][]A)
    {
 int r,c,r1,c1=0;
    for(r=0;r<A.length-1;r++)
      {
      for(c=0;c<A[r].length;c++)
        {
        for(r1=r+1;r1<A.length;r1++)
          {
          for(c1=0;c1<A[r1].length;c1++)
            {
            if(A[r][c]==A[r1][c1])
              {
              return true;
              }
            }
          }
        }
      }
    return false;
    }
   



public static void main (String [] args){

long [][] S = {          {1,1, 20,4,5},
                                         {8, 7, 6},
                                         {1,11,10,9} };


System.out.println(metodo(S));
}
}


Title: Re:Esercizio prima parte
Post by: Vivynz on 21-02-2009, 13:12:25
bè se lo provi con vari input te ne dovresti accorgere se è corretto..se funziona lo è altrimenti no  .smile
cmq intanto le righe non devono essere consecutive...dal tuo codice non sembra però...cerca di sistemare questo...e poi il confronto tra stringhe si fa con il metodo equals non con == che confronta gli indirizzi di memoria in questo caso!n.b.le stringhe sono oggetti NON SONO tipi primitivi  .smile


Title: Re:Esercizio prima parte
Post by: atrix0ne on 21-02-2009, 13:15:08
leggi bene il testo sono long non string e poi confronto il primo elemento di ogni riga cn tutto l'array ke parte dalla riga successiva e non sono consecutivi  .wink


Title: Re:Esercizio prima parte
Post by: Vivynz on 21-02-2009, 13:18:19
ops mea culpa  :[Emoticon] Asd: scusa...comunque le righe non devono essere consecutive..quindi se prendi la riga r e la riga r+1 sono consecutive  .smile se prendi ad es la riga 1 devi controllare tutti gli elementi con tutti gli altri per ogni riga a patire dalla 3


Title: Re:Esercizio prima parte
Post by: atrix0ne on 21-02-2009, 13:22:25
non sono consecutivi  .bah controllo il primo elemento cn tutto l'array a partire dalla seconda riga,compilalo su scite e vedi :[Emoticon] PC Asd:


Title: Re:Esercizio prima parte
Post by: Vivynz on 21-02-2009, 13:45:07
ma non sono gli elementi a non dover essere consecutivi ma le righe


Title: Re:Esercizio prima parte
Post by: atrix0ne on 21-02-2009, 14:03:57
lo provi al pc e mi dici ke nn và  .huh a me risulta corretto


Title: Re:Esercizio prima parte
Post by: Root on 21-02-2009, 14:09:25
Quello che intende dire Vivynz e che tu, cominciando a controllare gli elementi della riga r+1, controlli gli elementi della riga adiacente ad r. Devi dunque iniziare da r+2 (stando attendo a non uscire fuori dai limiti del vettore).

Salut
Dario


Title: Re:Esercizio prima parte
Post by: atrix0ne on 21-02-2009, 14:10:37
allora è sbagliato?


Title: Re:Esercizio prima parte
Post by: Root on 21-02-2009, 14:13:14
Quote
/*Scrivere un metodo che prenda in input un array bidimensionale frastagliato A di long, e restituisca
un boolean che indichi se esistono due righe non consecutive in A contenenti rispettivamente due
elementi uguali (anche in colonne differenti).*/

E' sbagliato in quanto ritornerebbe true anche se esistono due righe consecutive contenenti lo stesso long, quando, invece, il testo dice espressamente che le righe non devono essere consecutive.



Title: Re:Esercizio prima parte
Post by: Root on 21-02-2009, 14:15:50
Non voglio poi essere quello che da consigli ma....
Testare la correttezza di un algoritmo provandolo può essere utile, ma non soddisfacente per la dimostrazione della correttezza.


Title: Re:Esercizio prima parte
Post by: Vivynz on 21-02-2009, 14:41:05
vabbè si ma intanto è un inizio...trovando un controesempio ci si accorge che è sbagliato ad esempio..


Title: Re:Esercizio prima parte
Post by: atrix0ne on 21-02-2009, 14:54:29
allora basterebbe mettere qualche controllo?


Title: Re:Esercizio prima parte
Post by: Fr3d3R!K on 21-02-2009, 14:58:41
trovando un controesempio ci si accorge che è sbagliato..
che per la cronaca esiste già... .whistling


Title: Re:Esercizio prima parte
Post by: atrix0ne on 21-02-2009, 15:44:23
nn poxo mettere un controllo x indicare le non consecutive,ke mi consigliate?


Title: Re:Esercizio prima parte
Post by: atrix0ne on 21-02-2009, 16:19:46
cosa devo mettere x sistemare il mio programma??


Title: Re:Esercizio prima parte
Post by: atrix0ne on 21-02-2009, 16:27:36
r1=2?


Title: Re:Esercizio prima parte
Post by: Root on 21-02-2009, 16:29:11
Quello che intende dire Vivynz e che tu, cominciando a controllare gli elementi della riga r+1, controlli gli elementi della riga adiacente ad r. Devi dunque iniziare da r+2 (stando attendo a non uscire fuori dai limiti del vettore).

Salut
Dario

ti avevo già risposto


Title: Re:Esercizio prima parte
Post by: atrix0ne on 21-02-2009, 16:43:44
Questo è il codice corretto:
Code:
/*Scrivere un metodo che prenda in input un array bidimensionale frastagliato A di long, e restituisca
un boolean che indichi se esistono due righe non consecutive in A contenenti rispettivamente due
elementi uguali (anche in colonne differenti).*/
  public class provissima
  {
  public static boolean metodo(long [][]A)
    {
 int r,c,r1,c1=0;
    for(r=0;r<A.length-1;r++)
      {
      for(c=0;c<A[r].length;c++)
        {
        for(r1=r+2;r1<A.length;r1++)
          {
          for(c1=0;c1<A[r1].length;c1++)
            {
            if(A[r][c]==A[r1][c1] )
              {
              return true;
              }
            }
          }
        }
      }
    return false;
    }
   



public static void main (String [] args){

long [][] S = {          {1,2,3,4,5},
                                         {6, 7, 9},
                                         {10, 11, 12,13},
                                         {6,15, 14},
                                         {17,18,19,20} };


System.out.println(metodo(S));
}
}


Title: Re:Esercizio prima parte
Post by: Root on 21-02-2009, 16:50:01
Questo è il codice corretto:
Code:
/*Scrivere un metodo che prenda in input un array bidimensionale frastagliato A di long, e restituisca
un boolean che indichi se esistono due righe non consecutive in A contenenti rispettivamente due
elementi uguali (anche in colonne differenti).*/
  public class provissima
  {
  public static boolean metodo(long [][]A)
    {
 int r,c,r1,c1=0;
    for(r=0;r<A.length-1;r++)
      {
      for(c=0;c<A[r].length;c++)
        {
        for(r1=r+2;r1<A.length;r1++)
          {
          for(c1=0;c1<A[r1].length;c1++)
            {
            if(A[r][c]==A[r1][c1] )
              {
              return true;
              }
            }
          }
        }
      }
    return false;
    }
   



public static void main (String [] args){

long [][] S = {          {1,2,3,4,5},
                                         {6, 7, 9},
                                         {10, 11, 12,13},
                                         {6,15, 14},
                                         {17,18,19,20} };


System.out.println(metodo(S));
}
}

Una miglioria potrebbe essere quella di modificare la condizione del primo for in r<A.length-2.
La penultima riga infatti porterebbe r2 al valore A.length e quindi la condizione su r2 che regola il for fallirebbe ad ogni iterazione del for che controlla c.


Title: Re:Esercizio prima parte
Post by: atrix0ne on 21-02-2009, 17:04:59
quindi aggiungere r<A.length potrebbe migliorarlo,ma nel mio caso il professore a quell'esercizio potrebbe darmi punteggio pieno?


Title: Re:Esercizio prima parte
Post by: Vivynz on 22-02-2009, 10:20:41
scusate ma
Code:
r<A.length-2
non è una miglioria è necessario...perchè essendo r1=r+2 quando r va a leggere la penultima riga r+2 esce fuori dall'array!


Title: Re:Esercizio prima parte
Post by: atrix0ne on 22-02-2009, 10:53:53
si in effetti hai ragione  8:-)


Title: Re:Esercizio prima parte
Post by: Vivynz on 22-02-2009, 11:42:53
 :-OK


Title: Re:Esercizio prima parte
Post by: Root on 22-02-2009, 13:28:53
scusate ma
Code:
r<A.length-2
non è una miglioria è necessario...perchè essendo r1=r+2 quando r va a leggere la penultima riga r+2 esce fuori dall'array!
Si, il valore di r2 è maggiore del numero di righe ma la condizione del for

r2<A.length

fallisce miseramente, quindi non si sfora nulla.

Salut
Dario