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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

DiasMeses da seguinte forma:<br />

int DiasMeses = {{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, {0, 31, 29, 31, 30, 31, 30, 31, 31,<br />

30, 31, 30, 31}};<br />

onde a primeira componente refere-se aos dias dos meses de um ano não bissexto e a segundo, aos dias dos<br />

meses de um ano bissexto (este vetor será utilizado num ex<strong>em</strong>plo a seguir e, na ocasião, será explicada a<br />

razão da primeira componente de cada vetor componente ser zero).<br />

Um vetor bidimensional é usualmente chamado de matriz e os números de componentes são<br />

chamados, respectivamente, número de linhas e número de colunas. Estes dois números separados por x (que<br />

é lido por) é a ord<strong>em</strong> da matriz. Assim, a variável Mat do ex<strong>em</strong>plo acima está apta a armazenar até uma<br />

matriz de ord<strong>em</strong> 8 x 10. Estas denominações, <strong>em</strong>prestadas da mat<strong>em</strong>ática, são justificadas pelo fato de que,<br />

<strong>em</strong>bora as componentes de um vetor bidimensional sejam armazenadas de forma consecutiva (a primeira<br />

componente do segundo vetor logo após a última componente do primeiro vetor), uma matriz, para facilitar<br />

sua compreensão, pode ser imaginada como constituída de linhas e de colunas. Por ex<strong>em</strong>plo, o vetor<br />

DiasMeses do ex<strong>em</strong>plo acima pode ser imaginado como sendo<br />

0 31 28 31 30 31 30 31 31 30 31 30 31<br />

0 31 29 31 30 31 30 31 31 30 31 30 31<br />

facilitando a compreensão de referências do tipo DiasMeses[1][2] que indica o el<strong>em</strong>ento da segunda linha (a<br />

primeira é de índice zero) e da terceira coluna (a primeira é de índice zero).<br />

Se o número de linhas e o número de colunas de uma tabela são conhecidos, o seu armazenamento <strong>em</strong><br />

uma matriz é muito simples. Basta utilizar dois comandos for aninhados, controlados pelo número de linhas<br />

e pelo número de colunas, respectivamente.<br />

void ArmazenaTabelaMN(float Mat[10][10], int m, int n)<br />

{<br />

int i, j;<br />

printf("Digite, por linha, os el<strong>em</strong>entos da matriz");<br />

for (i = 0; i < m; i = i + 1)<br />

for (j = 0; j < n; j = j + 1)<br />

scanf("%f", &Mat[i][j]);<br />

}<br />

Se o número de linhas e o número de colunas de uma tabela não são conhecidos, pode-se usar um<br />

duplo while aninhado, definindo-se um flag para encerramento da digitação dos el<strong>em</strong>entos de cada linha e<br />

um outro flag para encerramento da digitação da matriz. Naturalmente, a função deverá retornar o número<br />

de linhas e o número de colunas da tabela, o que justifica os ponteiros m e n da proposta abaixo.<br />

void ArmazenaTabela(float Mat[10][10], int &m, int &n)<br />

{<br />

int i, j;<br />

printf("Digite, por linha, os el<strong>em</strong>entos da matriz (-1 para encerrar cada linha e -2 para encerrar a<br />

matriz");<br />

i = 0;<br />

j = 0;<br />

scanf("%f", &Mat[i][j]);<br />

while (Mat[i][j] != -2)<br />

{<br />

while (Mat[i][j] != -1)<br />

{<br />

j = j + 1;<br />

scanf("%f", &Mat[i][j]);<br />

n = j;<br />

}<br />

i = i + 1;<br />

j = 0;<br />

scanf("%f", &Mat[i][j]);<br />

}<br />

m = i;<br />

}

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

Saved successfully!

Ooh no, something went wrong!