Aprendendo a Programar Programando em Linguagem C - FSM
Aprendendo a Programar Programando em Linguagem C - FSM
Aprendendo a Programar Programando em Linguagem C - FSM
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 />
}