Pages: [1] 2   Go Down
Print
Author Topic: Aiuto esercizio parte prima  (Read 2937 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
atrix0ne
Forumista
***
Offline Offline

Posts: 607


homo faber fortunae suae


« on: 22-02-2009, 12:39:11 »

non capisco cosa c'e che non và ,mi dà true anche in questo caso:
Code:
/*
Scrivere un metodo che prenda in input una matrice A di long ed un intero m, e restituisca un
boolean che indichi se esistono due righe di A che condividono almeno m elementi (cioè devono
essere presenti in entrambe le righe, anche in posizioni differenti).
N.B.: Si supponga che ogni singola riga di A contenga elementi distinti.
*/

public class Es
{
public static boolean metodo(long [][] A,int m)
  {
  int r,c,r1,c1,k,k2,k3=0;
  int cont=0;
  for(r=0;r<A.length;r++)
    {
    for(c=0;c<A[0].length;c++)
      {
     
      for(r1=r+1;r1<A.length;r1++)
        {
        for(c1=0;c1<A[0].length;c1++)
          {
           cont=0;
          if(A[r][c]==A[r1][c1])
            {
            cont++;
            for(k=c+1;k<A[0].length;k++)
             {
              for(k2=r+1;k2<A.length;k2++)
               {
                for(k3=0;k3<A[0].length;k3++)
                {
                if(A[r][k]==A[k2][k3])
                  {
                  cont++;
                  }
                }
              }
            }
          if(cont==m)
            {
            return true;
            }
         
          }
        }
      }
    }
  }
return false;
}

    public static void main (String[]args)
  {
    int riga=4;
    int colonna=4;
    long m[][]= {   {1,2, 3, 4},
                     {5, 6, 7, 8},
                     {9,2,1, 12},
                     {13,14,100,3},
                  };
    int i,j;
   
    for(i=0;i<riga;i++)
      {
        System.out.println();
        for(j=0;j<colonna;j++)
          System.out.print(m[i][j]+" ");
      }
   
    System.out.println();
     
    System.out.println(metodo(m,3));
  }
}
Logged

KingDavid
Forumista
***
Offline Offline

Posts: 788


Alla fine [...] tutta la realtà è binaria.


« Reply #1 on: 22-02-2009, 13:00:53 »

 ciao senti non ce la faccio proprio a controllare il tuo metodo... così ne ho fatto uno tutto mio!
Facciamo così: io te lo posto e poi tu lo confronti col tuo!
Code:
public static boolean metodo(long [][] A,int m)
  {
   
      for(int i=0; i< A.length; i++)//seleziono prima riga
        for(int j=0; j < A[i].length && j!=i; j++ ) //seleziono la seconda riga diversa dalla prima
        {
            int cont=0;
            for(int k=0; k < A[i].length; k++)
              for(int a=0; a < A[j].length; a++)
                  if(A[i][k] == A[j][a])
                        cont++;
            if(cont >= m)
                return true;
        }
      return false;
           
  }

Fammi sapere cosa non andava!
Logged

Basti pensare che un ipotetico quadrato di specchi, lungo 200 chilometri per ogni lato, potrebbe produrre tutta l'energia necessaria all'intero pianeta.
(Carlo Rubbia)
atrix0ne
Forumista
***
Offline Offline

Posts: 607


homo faber fortunae suae


« Reply #2 on: 22-02-2009, 13:28:30 »

avevi ragione tu,ho usato troppi for io cry
Logged

atrix0ne
Forumista
***
Offline Offline

Posts: 607


homo faber fortunae suae


« Reply #3 on: 22-02-2009, 13:34:23 »

ma ki è ke ripete la prima parte come me??
Logged

atrix0ne
Forumista
***
Offline Offline

Posts: 607


homo faber fortunae suae


« Reply #4 on: 22-02-2009, 14:00:49 »

Tanto di cappello a KingDavid pray
Logged

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

Gender: Male
Posts: 4.474


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


WWW
« Reply #5 on: 22-02-2009, 22:10:32 »

non capisco cosa c'e che non và ,mi dà true anche in questo caso:
Sbagli nel'ordine in cui sono annidati i singoli cicli for.

Per come hai scrito tu avviene la seguente cosa:
prima di tutto selezioni una riga (fra tutte, dalla prima all'ultima, e questo è già errato, poiché l'ultima non ha senso selezionarla in questo primo ciclo for), poi selezionata la prima riga, scorri per tutte le colonne della prima riga (no, non la prima riga "scelta" al ciclo precedente, ma proprio la prima riga in assoluto, quella con indice 0!), il che è valido solo per matrici ma non per array bidimensionali frastagliati.
Selezionata una prima riga e una prima colonna (tra quelle della prima riga in assoluto), scegli una seconda riga, almeno questa nell'intervallo corretto, e infine una una seconda colonna (sempre fra quelle della prima riga in assoluto).
Poi, se trovi che gli elementi in queste due posizioni dell'array bidimensionale sono uguali, incrementi un contatore (bene) e fai altri due cicli che non devono essere fatti (male).

Spero tu abbia capito il tuo errore da questa analisi.

ciao senti non ce la faccio proprio a controllare il tuo metodo... così ne ho fatto uno tutto mio!
Facciamo così: io te lo posto e poi tu lo confronti col tuo!
[...]
Fammi sapere cosa non andava!
Errato anche il tuo, caro KingDavid.
Come per atrix0ne, il primo for cicla su troppi elementi (in particolare, cicla anche sull'ultima riga della matrice, cosa che non dovrebbe fare in quanto inutile).
Il secondo for, poi, presenta ben 2 errori: il primo riguarda il limite massimo per j, che invece di essere A.length è A[i].length; il secondo è la condizione posta in congiunzione (and) con cui pretendi di garantire la diversità tra i e j (come spieghi nel commento a fine riga), ma che in realtà si trasforma in una fucilata che fa morire il ciclo for i cui è condizione di continuazione saltando così non solo quell'elemento dall'indice uguale (bene), ma anche tutti quelli delle righe successive (male).
Il resto del codice è  ok.
Tanto di cappello a KingDavid pray
Ma perché non ci controllate il codice a vicenda prima di ringraziarvi del nulla ?... Vabè
 

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
KingDavid
Forumista
***
Offline Offline

Posts: 788


Alla fine [...] tutta la realtà è binaria.


« Reply #6 on: 23-02-2009, 00:46:46 »

ringrazio reverseengineer per le correzioni e mi scuso con atrix0ne delle distrazioni.
 
Logged

Basti pensare che un ipotetico quadrato di specchi, lungo 200 chilometri per ogni lato, potrebbe produrre tutta l'energia necessaria all'intero pianeta.
(Carlo Rubbia)
ShiShi
Apprendista Forumista
**
Offline Offline

Gender: Female
Posts: 256



« Reply #7 on: 23-02-2009, 09:42:48 »

Code:
/*Scrivere un metodo che prenda in input una matrice A di long ed un intero m,
e restituisca un boolean che indichi se esistono due righe di A che condividono almeno m elementi
(cioè devono essere presenti in entrambe le righe, anche in posizioni differenti).
N.B.: Si supponga che ogni singola riga di A contenga elementi distinti.*/

public class Esercizio46 {
 public static void main (String[]args) {
     int M = 2;   
     long [][] A = {{1, 2, 3, 4},
                       {5, 6, 7, 12, 11},
                       {10, 11, 12}};
        System.out.println (metodo (A, M));
    }
public static boolean metodo (long [][] A, int M) {
    boolean found = false;
    for (int r1 = 0; r1 < A.length-1; r1++) {
        for (int r2 = r1+1; r2 < A.length; r2++) {
                int numero = 0;
            for (int c1 = 0; c1 < A [r1].length; c1++)
                for (int c2 = 0; c2 < A [r2].length; c2++) {
                    if (A [r1][c1] == A [r2][c2])
                        numero++;
                }
        if (numero==M)
             return true;
           }
        }
        return false;
    }
}

Così è come l'ho svolto io, credo sia giusto 
Logged
KingDavid
Forumista
***
Offline Offline

Posts: 788


Alla fine [...] tutta la realtà è binaria.


« Reply #8 on: 23-02-2009, 11:19:55 »

Ho rifatto il metodo, credo che dovrebbe essere giusto
Code:
public static boolean metodo(long [][] A,int m)
  {
   
      for(int i=0; i< A.length-1; i++)//seleziono prima riga
        for(int j=i+1; j < A.length; j++ ) //seleziono la seconda riga diversa dalla prima
        {
            int cont=0;
            for(int k=0; k < A[i].length; k++)
              for(int a=0; a < A[j].length; a++)
                if(A[i][k] == A[j][a])
                  {
                        cont++;
                        break;
                  }
            if(cont == m)
                return true;
        }
      return false;
           
  }
« Last Edit: 23-02-2009, 17:01:34 by KingDavid » Logged

Basti pensare che un ipotetico quadrato di specchi, lungo 200 chilometri per ogni lato, potrebbe produrre tutta l'energia necessaria all'intero pianeta.
(Carlo Rubbia)
atrix0ne
Forumista
***
Offline Offline

Posts: 607


homo faber fortunae suae


« Reply #9 on: 23-02-2009, 11:55:13 »

Tanto di cappello a reversengineer pray ahha
Logged

atrix0ne
Forumista
***
Offline Offline

Posts: 607


homo faber fortunae suae


« Reply #10 on: 23-02-2009, 12:34:09 »

lo rifaccio e lo posto di nuovo
Logged

KingDavid
Forumista
***
Offline Offline

Posts: 788


Alla fine [...] tutta la realtà è binaria.


« Reply #11 on: 23-02-2009, 13:21:21 »

Tanto di cappello a reversengineer pray ahha
Si è un grande in tutti i sensi! ok
Logged

Basti pensare che un ipotetico quadrato di specchi, lungo 200 chilometri per ogni lato, potrebbe produrre tutta l'energia necessaria all'intero pianeta.
(Carlo Rubbia)
atrix0ne
Forumista
***
Offline Offline

Posts: 607


homo faber fortunae suae


« Reply #12 on: 23-02-2009, 16:48:33 »

Kingdavid scusami una cosa,ma tu come confronti la seconda riga diversa dalla prima?io credevo r1=r+1 invece tu fai j=i e nn capisco il motivo 
Logged

atrix0ne
Forumista
***
Offline Offline

Posts: 607


homo faber fortunae suae


« Reply #13 on: 23-02-2009, 17:00:00 »

ora dovrebbe andare
Code:
/*Scrivere un metodo che prenda in input una matrice A di long ed un intero m,
e restituisca un boolean che indichi se esistono due righe di A che condividono almeno m elementi
(cioè devono essere presenti in entrambe le righe, anche in posizioni differenti).
N.B.: Si supponga che ogni singola riga di A contenga elementi distinti.*/
public class eser
  {
  public static boolean metodo(long [][] A,int m)
    {
    int r,r1,c,c1=0;
    int cont=0;
    for(r=0;r<A.length;r++)
      {
      for(r1=r+1;r1<A.length;r1++)
        {
        cont=0;
        for(c=0;c<A[r].length;c++)
          {
          for(c1=0;c1<A[r1].length;c1++)
            {
            if(A[r][c]==A[r1][c1])
              {
              cont++;
              }
            }
          }
        if(cont==m)
          {
          return true;
          }
        }
      }
    return false;
  }

    public static void main (String[]args)
  {
    int riga=4;
    int colonna=4;
    long m[][]= {    {1,2, 3, 4},
                     {5, 6, 7, 8},
                     {3,2,1, 12},
                     {13,100,120,111},
                  };
    int i,j;

    for(i=0;i<riga;i++)
      {
        System.out.println();
        for(j=0;j<colonna;j++)
          System.out.print(m[i][j]+" ");
      }

    System.out.println();

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

KingDavid
Forumista
***
Offline Offline

Posts: 788


Alla fine [...] tutta la realtà è binaria.


« Reply #14 on: 23-02-2009, 17:02:10 »

Kingdavid scusami una cosa,ma tu come confronti la seconda riga diversa dalla prima?io credevo r1=r+1 invece tu fai j=i e nn capisco il motivo 
Un'altra distrazione...ehehe
Sistemato! Grazie
Logged

Basti pensare che un ipotetico quadrato di specchi, lungo 200 chilometri per ogni lato, potrebbe produrre tutta l'energia necessaria all'intero pianeta.
(Carlo Rubbia)
Pages: [1] 2   Go Up
Print
Jump to: