Você está na página 1de 5

Matriz Diagonal Dominante

matrizdiag.c
Universidade Federal do ABC

Faça um programa conforme descrito a seguir:

1. Lê quatro inteiros:
1. Semente: para o gerador de número aleatório;
2. Mínimo e máximo: faixa de valores para ser usada na geração de
números aleatórios;
3. Lado: tamanho dos lados da matriz quadrada a ser gerada.
2. Após isso, o programa gera uma matriz aleatória, seguindo as especificações
dos valores lidos (semente, mínimo e máximo);
3. Assim que a matriz for gerada, o programa fica lendo códigos de operação (até
que a operação de código zero seja recebida, quando o programa é encerrado):
Operação Descrição
1 Imprime matriz atual.

2 Transforma a matriz em estritamente diagonal dominante por linha.

3 Transforma a matriz em estritamente diagonal dominante por coluna.

0 Encerra o programa.

Matriz diagonal dominante:


Uma matriz A é estritamente diagonal dominante por linhas se:
𝑛

|𝑎𝑖𝑖 | > ∑ |𝑎𝑖𝑗 |


𝑗=1,𝑗≠𝑖
Ou seja, o módulo do valor da diagonal é maior que a soma dos módulos dos demais
valores da linha.
Uma matriz A é estritamente diagonal dominante por colunas se:
𝑛

|𝑎𝑗𝑗 | > ∑ |𝑎𝑖𝑗 |


𝑖=1,𝑖≠𝑗
Ou seja, o módulo do valor da diagonal é maior que a soma dos módulos dos demais
valores da coluna.

Números aleatórios
Para a geração de números aleatórios, utilize a função a seguir (que retorna inteiros
aleatórios positivos):

int semente; // declare a semente como variável global do programa

int rand2() {
int lim = 99999;
semente = (semente * 32719 + 3) % 32749;
return ((semente % lim) + 1);
}
Código-fonte adaptado de https://www.daniweb.com/programming/software-
development/code/216329/construct-your-own-random-number-generator

Para normalizar a faixa de valores mínimos utilize o resto da divisão, conforme visto em
aula. Contudo, no caso deste exercício, será necessário um passo a mais, pois a faixa
é [mínimo;máximo] e não [0;máximo] (como no exercício da aula prática). Para testar
se os valores estão corretos, basta comparar com as matrizes apresentadas nos
exemplos a seguir.

Observações:
• Para transformar a matriz, caso o elemento da diagonal não atenda ao
requisito, adicione o menor inteiro positivo possível para atender ao
requisito de diagonal dominante;
• Se o elemento da diagonal já atende ao requisito de matriz diagonal
dominante, ele não deve ser alterado;
• O único header aceito para este exercício é o stdio.h.

Exemplos
Entradas do usuário representadas em azul.
Exemplo 1
123 5 40 4
1

16 24 21 12
11 30 23 40
14 19 16 25
21 5 10 38
2
1

58 24 21 12
11 75 23 40
14 19 59 25
21 5 10 38
3
1

58 24 21 12
11 75 23 40
14 19 59 25
21 5 10 78
0

Exemplo 2
321 5 12 4
1

8 11 8 6
8 11 12 12
12 9 7 8
12 8 12 10
0
Exemplo 3
199 -80 15 4
1

15 -75 -14 3
2 -59 -24 8
5 -66 -35 11
-77 -63 -26 -78
2
1

93 -75 -14 3
2 -59 -24 8
5 -66 83 11
-77 -63 -26 167
3
1

93 -75 -14 3
2 205 -24 8
5 -66 83 11
-77 -63 -26 167
0

Exemplo 4
507 -5 5 5
1

4 2 -4 5 3
2 -4 4 0 3
-5 3 0 -3 2
-3 1 4 -4 2
-2 2 1 2 -2
3
1

13 2 -4 5 3
2 9 4 0 3
-5 3 14 -3 2
-3 1 4 11 2
-2 2 1 2 11
2
1

15 2 -4 5 3
2 10 4 0 3
-5 3 14 -3 2
-3 1 4 11 2
-2 2 1 2 11
3
1

15 2 -4 5 3
2 10 4 0 3
-5 3 14 -3 2
-3 1 4 11 2
-2 2 1 2 11
0