Uma matriz é diagonal dominante se o elemento da diagonal for maior ou igual à soma dos outros elementos da mesma linha. No trecho de função abaixo, a é uma matriz quadrada de ordem n. Complete o corpo da função para que a mesma retorne 1 se a matriz for diagonal dominante, ou
, caso contrário.
DiagonalDominante(float **a, int n)
{
int i, j;
DiagonalDominante(float **a, int n)
{
int i, j;
Passo 1
O enunciado pede para completar uma função em C que verifica se uma matriz quadrada de ordem n é diagonalmente dominante, ou seja, para cada linha i, o valor absoluto do elemento a[i][i] deve ser maior ou igual à soma dos valores absolutos dos demais elementos dessa mesma linha. Vamos usar funções de math.h (fabs) para calcular valores absolutos de floats.
Passo 2
A lógica é: para cada linha i de 0 até n-1, somamos os valores absolutos de todos os elementos a[i][j] para j ≠ i; depois comparamos essa soma com o valor absoluto de a[i][i]. Se em alguma linha a condição |a[i][i]| ≥ soma não se mantiver, a matriz NÃO é diagonal dominante e retornamos 0 imediatamente.
Passo 3
Implementamos dois loops aninhados: o loop externo itera sobre linhas (i) e o interno sobre colunas (j), acumulando em uma variável soma a contribuição de cada a[i][j] quando j ≠ i. Após o loop interno comparamos fabs(a[i][i]) com soma; se for menor, retornamos 0.
Passo 4
Se todas as linhas passarem na verificação, saímos do loop externo e retornamos 1 para indicar que a matriz é diagonalmente dominante.
Resposta
#include <math.h>
int DiagonalDominante(float **a, int n)
{
int i, j;
for (i = 0; i < n; i++) {
float soma = 0.0f;
for (j = 0; j < n; j++) {
if (j != i) {
soma += fabs(a[i][j]);
}
}
if (fabs(a[i][i]) < soma) {
return 0;
}
}
return 1;
}
{
int i, j;
for (i = 0; i < n; i++) {
float soma = 0.0f;
for (j = 0; j < n; j++) {
if (j != i) {
soma += fabs(a[i][j]);
}
}
if (fabs(a[i][i]) < soma) {
return 0;
}
}
return 1;
}