Jump to content

Recommended Posts

Posted (edited)

Tenho aqui um programa cuja função é identificar se uma matriz é identidade.

o código é este a baixo . eu basicamente estou a invocar uma função que cria matrizes identidade, mas a minha questão é como iniciar a variável n que é a que vai ser invocada na função a ser invocada.

o código da criação da matriz identidade é:

static int[][] createIdentity(int n)
{

int [][]m= new int [n][n];
m[0][0]=1;
for(int i=0; i<m.length-1;i++)
{
for (int j=0; j<m[i].length-1;j++)
{
 m[i+1][j+1]=m[i][j];
}
}
return m;

o código da função principal é:

static boolean isIdentity (int [][]v)
{

int[][] p=createIdentity(n);
if (v==p)
{
return true;
}
return false;
}

isto é uma matriz identidade:http://pt.wikipedia.org/wiki/Matriz_identidade

Edited by Baderous
geshi
Posted (edited)

o código está errado, basta ver que nunca atribuis nada a m[0][N] ou m[N][0] para N [1 .. n]

o que pretendes será :

static int[][] createIdentity(int n)
{
 int [][]m= new int [n][n];

 for(int i = 0; i < m.length; i++)
 {
   for (int j = 0; j < m[i].length; j++)
   {
     if (i == j)
       m[i][j] = 1; // na diagonal princial
     else
       m[i][j] = 0;
   }
 }
 return m;
}

para verificar basta fazer copy-paste desta função e fazer as alterações necessárias:

static bool isIdentity(int[][] m)
{
 for(int i = 0; i < m.length; i++)
 {
   for (int j = 0; j < m[i].length; j++)
   {
     if ((i == j && m[i][j] != 1) || // se for na diagonal principal e não for 1
         (i != j && m[i][j] != 0))   // ou se não for na diagonal principal e não for 0
       return false;
   }
 }

 return true;
}
Edited by HappyHippyHippo
IRC : sim, é algo que ainda existe >> #p@p
Posted

O código que escrevi para criar uma matriz identidade está correcto pois funciona.

Em relação ao que escreveste, não vi pk tem já a solução, queria era dicas, pistas 😉

Posted (edited)

O código que escrevi para criar uma matriz identidade está correcto pois funciona.

estás a negar esta afirmação :

o código está errado, basta ver que nunca atribuis nada a m[0][N] ou m[N][0] para N [1 .. n]

tens é sorte que o java deverá atribuir 0 a todos os bytes alocados ...

ps : que na realidade, se assim for, o código ficaria muito mais simples :

static int[][] createIdentity(int n)
{
 int [][]m= new int [n][n];

 for(int i = 0; i < m.length; i++)
 {
   m[i][i] = 1;
 }
 return m;
}
Edited by HappyHippyHippo
IRC : sim, é algo que ainda existe >> #p@p

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.