Questão nº 65
Questão de Tecnologia da Informação · CESGRANRIO Transpetro PSP-RH-2018.1 (nº 65)
Um programador precisa elaborar um método que diga se uma matriz quadrada recebida como parâmetro é a matriz identidade de ordem n. Esse método recebe uma matriz quadrada (mat) e sua ordem (n) como parâmetros, e retorna true, se a matriz recebida for a matriz identidade de ordem n, ou false, caso contrário.
Qual método executa o que foi especificado acima?
- A
(alternativa correta)public static boolean identidade(int mat[][], int n) { for(int i=0; i<n; i++) { if(mat[i][i]!=1) return false; for(int j=i+1; j<n; j++) if(mat[i][j]!=0 || mat[j][i]!=0) return false; } return true; } - B
public static boolean identidade(int mat[][], int n) { int x=1,y=0; for(int i=0; i<n; i++) for(int j=0; j<n; j++) if(i==j) x*=mat[i][j]; else y*=mat[i][j]; if(x==1 && y==0) return true; else return false; } - C
public static boolean identidade(int mat[][], int n) { int x=0,y=0; for(int i=0; i<n; i++) for(int j=0; j<n; j++) if(i==j) x+=mat[i][j]; else y+=mat[i][j]; if(x==n && y==0) return true; else return false; } - D
public static boolean identidade(int mat[][], int n) { for(int i=0; i<n; i++) for(int j=0; j<n; j++) if((i==j && mat[i][j]==1) || (i!=j && mat[i][j]==0)) return true; return false; } - E
public static boolean identidade(int mat[][], int n) { for(int i=0; i<n; i++) for(int j=0; j<n; j++) if((i==j && mat[i][j]!=1) && (i!=j && mat[i][j]!=0)) return false; return true; }
Resposta comentada
Gabarito Alternativa A
Conceito-chave: A matriz identidade de ordem tem 1 em toda a diagonal principal (posições ) e 0 em todas as outras posições (). Para verificar, é preciso checar todos os elementos, sem exceção, e qualquer desvio já invalida a matriz.
- (A) Correta: Verifica a diagonal () e, para cada , testa os pares simétricos fora da diagonal ( e ) com , cobrindo toda a matriz sem repetição; qualquer falha retorna
falseimediatamente. - (B) Incorreta: A armadilha é o uso de produto acumulado ( e ). Se houver um 0 na diagonal, vira 0; se houver um 1 fora da diagonal, vira 1, mas combinações como diagonal com 1 e -1 (produto 1) ou fora com 2 e 0 (produto 0) passariam falsamente.
- (C) Incorreta: Usa soma em vez de verificação individual. Uma matriz com diagonal toda 1 (soma ) e fora toda 0 (soma ) passa, mas uma matriz com diagonal $2, -1, 0=1 \neq n) ou fora com \1, -1=0$) também passaria erroneamente.
- (D) Incorreta: Retorna
truena primeira condição satisfeita, sem checar o restante. Por exemplo, uma matriz com e todos os outros elementos errados retornariatrueprematuramente. - (E) Incorreta: Usa
&&(E lógico) onde deveria ser||(OU). A condição parafalseé se qualquer elemento estiver errado (diagonal OU fora ); com&&, só retornafalsese um elemento for simultaneamente diagonal e fora da diagonal, o que é impossível — então nunca retornafalsepara matrizes erradas.
Fonte: CESGRANRIO Transpetro PSP-RH-2018.1 Analista de Sistemas Júnior - Infraestrutura. Reproduzida para fins de estudo.