Pages: [1]   Go Down
Print
Author Topic: Esercizio Esame prima parte  (Read 1247 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Gam
Apprendista Forumista
**
Offline Offline

Posts: 385



« on: 20-01-2009, 17:52:59 »

Ragazzi ho un problema con questo esercizio:
Code:
Scrivere un metodo che prenda in input tre matrici, con le stesse dimensioni, di double e restituisca
un boolean che indichi se le tre matrici presentano (in qualunque posizione) una colonna comune.
P.S.: Due double sono considerati uguali se differiscono per meno di un millesimo.

class esempioprova1
{
public static boolean m(int A[][],int B[][], int C[][])
{
  int c,c1,c2;
  int r=0;
  int i=0;
  boolean t=false;

          for (c=0; c<A[0].length;c++) //COLONNA PRIMA MATRICE
           for (c1=0;c1<A[0].length;c1++) //COLONNA SECONDA MATRICE
            for (c2=0;c2<A[0].length;c2++) //COLONNA TERZA MATRICE
    {
      t=false; //MI SERVE PER RIENTRARE NEL CICLO SOTTOSTANTE
              for (r=0; r<A.length&&t==false;r++) //RIGA DELLE 3 MATRICI      
               if ( (A[r][c]!=B[r][c1])||(B[r][c1]!=C[r][c2]) ) //SE I VALORI IN CORRISPONDENZA SONO DIVERSI
        t=true;                                                      //ALLORA MI FA USCIRE DAL CICLO DELLE RIGHE E MI
         if (r==A.length)                                         //FA AVANZARE LA COLONNA DELL'ULTIMA MATRICE      
          return true;               
    }
  return false;
        }
        public static void main (String args[])
        {
          int x[][]={ {1,2,3,4},
                          {2,6,7,8},
                          {3,1,2,3} };
 
          int y[][]={ {051,22,1,44},
                          {052,66,2,88},
                          {053,11,3,33} };
 
          int z[][]={ {1,222,2341,444},
                          {2,666,2234,888},
                          {3,111,3456,333} };
          System.out.println(m(x,y,z));
        }
}
Per il momento non ho considerato il fatto dei double che devono differire di meno di un millesimo ma l'ho provato con gli interi.
Cmq cercate di aiutarmi a capire dove sta l'errore. sarà na stupidata.
Logged
hax
Matricola
*
Offline Offline

Posts: 64


« Reply #1 on: 20-01-2009, 20:44:58 »

Code:
if (r==A.length)
             return true;
dichiara una variabile "cont" che conta gli elementi uguali in una colonna e sostituisci questo codice:
Code:
else
            {
cont++;
if (cont==A.length)
                       return true;
            }
inoltre cont deve essere azzerato dopo che inizializzi t a false
Logged
MisteroLupo
Apprendista Forumista
**
Offline Offline

Posts: 273

Tra il dire e il fare c'è distanza di hamming 2.


« Reply #2 on: 21-01-2009, 15:58:52 »

ecco come l'ho risolto io, ho usato il tuo stesso main yoh
non l'ho testato più di tanto ma sembra funzionare, qualche luminario mi dica se va bene dato che con la scorsa prova in itinere ho perso fiducia in me stesso cry..
Code:
package esercizi;
/*Scrivere un metodo che prenda in input tre matrici, con le stesse dimensioni, di double e restituisca
un boolean che indichi se le tre matrici presentano (in qualunque posizione) una colonna comune.
P.S.: Due double sono considerati uguali se differiscono per meno di un millesimo.
*/
public class ProvaEsame {
    public static boolean metodo(double[][] A, double[][] B, double[][] C) {
        for (int i=0;i<A[0].length;i++) {
            for (int j=0;j<B[0].length;j++) {
                for (int k=0;k<C[0].length;k++) {
                    if (colonneUguali(A,B,C,i,j,k)) return true;
                }
            }
        }
        return false;
    }

    public static boolean colonneUguali(double[][] A, double[][] B, double[][] C, int col1, int col2, int col3) {
        int contatore = 0;
        for (int i=0;i<A.length;i++) {
            if (Math.abs(A[i][col1] - B[i][col2])<0.001 &&
                Math.abs(B[i][col2] - C[i][col3])<0.001) contatore++;
        }
        if (contatore==A.length) return true;
        return false;
    }

    public static void main(String[] args) {
          double A[][]={ {1,2,3,4},
                          {2,6,7,8},
                          {3,1,2,3} };

          double B[][]={ {051,22,1,44},
                          {052,66,2,88},
                          {053,11,3,33} };

          double C[][]={ {1,222,2341,444},
                          {2,666,2234,888},
                          {3,111,3456,333} };
          System.out.println(metodo(A,B,C));
    }
}
Logged
Vivynz
Forumista Eroico
*****
Offline Offline

Gender: Female
Posts: 2.033


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


« Reply #3 on: 21-01-2009, 18:21:15 »

potete dare un'occhiata al mio codice? qui http://forum.sdai.unict.it/index.php?topic=859.msg5542#msg5542
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.
Pages: [1]   Go Up
Print
Jump to: