22.10.2014 Views

Aprendendo a Programar Programando em Linguagem C - FSM

Aprendendo a Programar Programando em Linguagem C - FSM

Aprendendo a Programar Programando em Linguagem C - FSM

SHOW MORE
SHOW LESS

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)

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!