Preciso identificar se uma matriz quadrada de numeros inteiros é uma matriz identidade ou não. Se for matriz identidade ela tem que me retornar 1, e se não for precisa retornar 0 (matriz identidade é aquela em que a diagonal principal contém apenas 1s e o resto da matriz contém zeros). A função recebe como parâmetro a matriz de inteiros, usando a representação de matrizes através de ponteiro simples e um inteiro que indica a posição da matriz. Essa função deve obedecer o protótipo:
int ehMatrizIdentidade ( const int * mat, int n );
Estou desde ontem batendo cabeça com esse código e ainda não consegui fazer funcionar. Alguém pode me ajudar?
obs: usei o New porque no final de tudo os vetores tem que ser deletados.
#include <iostream>
using namespace std;
int ehMatrizIdentidade(const int ** mat, int n) {
bool control = true;
for(int i = 0; i<=n; i++){
for(int j = 0; j <= n; j++){
if(i==j){
if(mat[0][2] +j != 1){
control = false;
}
}else{
if(mat[0][2] +j != 0){
control = false;
}
}
}
}
if(control == true ){
return 1;
} else {
return 0;
}
}
int main(){
int** mat = new int*[3];
int i, j;
for(int i = 0; i <3; i++){
mat[i] = new int [3];
for(i=0; i <= 3; i++){
for(j=0;j <=3; j++){
cout<<"Insira os valores da matriz: ";
cin>> mat[i][j];
}
}
}
cout<< ehMatrizIdentidade(mat, 3);
delete[]mat;
}
eu acho que a notação de C para ponteiros é um tanto confusa.
ainda mais se vc pensar de onde veio isso tudo. Se vc olhar como assembler funciona, vai ver como é natural acessar as posições de memoria. e trabalhar com dados mais complexos que o byte tem la seus desafios. ouve uma epoca q todo o programador tinha q começar seus programas definindo como fazer a multiplicação e divisão de numeros de ponto flutuante. isso só foi ser normalizado “recentemente” pela IEEE ( norma 754 é de 1985 pra vc ter uma ideia).
quando vc estuda assembler vc percebe por que C possui goto, porque if compara se é 0 ou diferente de 0, etc. e C++ vai trazer uma camada de abstração maior, vai tentar corrigir coisas no C, etc.
minha dica é vc observar a coisa do ponto de vista historico. quando vc entende o que motivou o que, e quais as premissas basicas, a ficha cai.
Sim, acho que por isso o prof manda usar c++. Eu entendo mais ou menos, mas as vezes em um código grande eu acabo, como se diz… emperrando. Chega um ponto que travo e não consigo sair do lugar por um tempo.