Aprendendo a Programar Programando em Linguagem C - FSM
Aprendendo a Programar Programando em Linguagem C - FSM
Aprendendo a Programar Programando em Linguagem C - FSM
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
⎛ 1 0 0⎞<br />
⎜<br />
⎟<br />
I 3<br />
= ⎜ 0 1 0⎟<br />
⎜<br />
⎟<br />
⎝ 0 0 1⎠<br />
void GeraMatrizUnidade(int Mat[10][10], int m)<br />
{<br />
int i, j;<br />
for (i = 0; i < m; i = i + 1)<br />
for (j = 0; j < m; j = j + 1)<br />
if (i == j)<br />
Mat[i][j] = 1;<br />
else<br />
Mat[i][j] = 0;<br />
}<br />
3. Quando o número de linhas de uma matriz é igual ao número de colunas a matriz é dita matriz<br />
quadrada. Neste caso, os el<strong>em</strong>entos de índices iguais constitu<strong>em</strong> a diagonal principal. A soma dos<br />
el<strong>em</strong>entos da diagonal principal de uma matriz quadrada é o traço da matriz. Como mais um ex<strong>em</strong>plo de<br />
programas que manipulam matrizes, a função abaixo determina o traço de uma matriz quadrada dada.<br />
Observe que para percorrer a diagonal principal não há necessidade de um duplo for.<br />
float Traco(float Mat[10][10], int m, int n)<br />
{<br />
int i;<br />
float Tr;<br />
Tr = 0;<br />
if (m == n)<br />
{<br />
for (i = 0; i < m; i = i + 1)<br />
Tr = Tr + Mat[i][i];<br />
return(Tr);<br />
}<br />
else<br />
printf("A matriz nao e quadrada");<br />
}<br />
4. Uma tabela que enumere as distâncias entre várias cidades é uma matriz simétrica: os termos<br />
simétricos <strong>em</strong> relação à diagonal principal são iguais, ou seja Mat[i][j] = Mat[j][i]. Obviamente, a digitação<br />
de uma matriz com esta propriedade pode ser simplificada, devendo-se digitar apenas os termos que estão<br />
acima da diagonal principal.<br />
void ArmazenaMatrizSimetrica(float Mat[10][10], int m)<br />
{<br />
int i, j;<br />
printf("Digite, por linha, os el<strong>em</strong>entos da matriz, a partir da diagonal");<br />
for (i = 0; i < m; i = i + 1)<br />
for (j = i; j < m; j = j + 1)<br />
{<br />
scanf("%f", &Mat[i][j]);<br />
Mat[j][i] = Mat[i][j];<br />
}<br />
}<br />
Observe que a inicialização de j no segundo comando for foi com o valor de cada i do primeiro. A<br />
razão disto é que só serão digitados os termos acima da diagonal principal, termos <strong>em</strong> que j ≥ i.<br />
5. Nos ex<strong>em</strong>plos anteriores, s<strong>em</strong>pre "percorr<strong>em</strong>os a matriz pelos el<strong>em</strong>entos de suas linhas". O próximo<br />
ex<strong>em</strong>plo mostra um caso <strong>em</strong> que é necessário percorrer as colunas. Trata-se de uma questão muito comum<br />
da totalização das colunas de uma tabela.<br />
void TotalizaColunas(float Mat[10][10], int m, int n)