1 exercicio de vectores em C

7.105 visualizações

Publicada em

Com base num desafio numérico colocado num pacote de Açucar, é tomada a oportunidade de manipular vectores e matrizes em linguagem de programação C

Publicada em: Educação
0 comentários
4 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
7.105
No SlideShare
0
A partir de incorporações
0
Número de incorporações
101
Ações
Compartilhamentos
0
Downloads
0
Comentários
0
Gostaram
4
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

1 exercicio de vectores em C

  1. 1. Um desafio com vectores... ...para implementação em linguagem C Luis Borges Gouveia [email_address]
  2. 2. Era uma vez... Um pacote de açucar!
  3. 3. Problema <ul><li>Retirado de um pacote de açucar da RAR... (Out/08) </li></ul><ul><ul><li>Considere a seguinte tabela: </li></ul></ul><ul><li>  </li></ul><ul><ul><li>Complete esta tabela de forma a que a soma em coluna, linha e diagonal seja 15. </li></ul></ul>
  4. 4. Linhas, colunas, diagonais 6 1 8 5 2 4
  5. 5. Resolução <ul><li>Passo 1: necessário saber quais os algarismos não colocados. </li></ul><ul><ul><li>estão em falta, o 3, 7 e o 9. Criar uma lista com estes valores. </li></ul></ul><ul><li>Passo 2: verificar quais as linhas com um só elemento em falta e o seu valor. </li></ul><ul><ul><li>é a terceira linha e o valor da soma dos elementos existentes é 6. </li></ul></ul><ul><li>Passo 3: para cada avaliação anterior subtrair a 15, o valor encontrado. </li></ul><ul><ul><li>neste caso 6, obtendo-se o valor 9 (15-6). Retira-se da lista o valor 9. </li></ul></ul><ul><li>Repetir passo 2 e 3 considerando as colunas, tomando a primeira coluna: </li></ul><ul><ul><li>o valor encontrado é 8, sendo que subtraído a 15, obtêm-se 7. Retira-se este valor da lista. </li></ul></ul><ul><li>A coluna em falta é a terceira (lembrar que o algarismo 9 foi colocado quando se analisaram as linhas). </li></ul><ul><ul><li>o valor da soma é 12 que, subtraído a 15, coincide com o valor em falta (3). </li></ul></ul><ul><li>Passo 4: verificar que cada coluna e linha tem como soma dos seus elementos o valor 15. </li></ul><ul><ul><li>efectuada na passagem inicial por linhas e colunas, respectivamente. </li></ul></ul><ul><li>Passo 5: última verificação de soma 15 é realizada nas diagonais. </li></ul>
  6. 6. As variáveis... e inicialização <ul><li>#include <stdio.h> </li></ul><ul><li>#include <stdlib.h>  </li></ul><ul><li>main(){ </li></ul><ul><li>int matriz[3][3]; // matriz de inteiros 3x3 p/ os 9 alg int linha, coluna, indice, soma; // ind. de posição int algarismos[10]; int val_falta=0;   /* inicializar a zero o vector de algarismos */ for (indice=0; indice < 11; indice++) algarismos[indice]=0;   </li></ul>
  7. 7. Inicializar a matriz com 9 elementos <ul><li>/* Colocar os valores do problema inicial */ /* Os valores podem ser algarismo 1 a 9 */ /* O zero (0) significa sem valor */ matriz[0][0] = 6; matriz[0][1] = 1; matriz[0][2] = 8; matriz[1][0] = 0; matriz[1][1] = 5; matriz[1][2] = 0; matriz[2][0] = 2; matriz[2][1] = 0; matriz[2][2] = 4; </li></ul><ul><li>Ou forma? </li></ul><ul><ul><li>int matriz[3][3] = { 6, 8, 1, 0, 5, 0, 2, 0, 4 }; </li></ul></ul>
  8. 8. Entrada de dados pelo utilizador <ul><li>/* alternativamente, pedir valores ao utilizador */ printf(&quot; Carregamento de valores da matriz inicial &quot;); for (linha = 0; linha < 3; linha++) { printf(&quot;Linha : %d &quot;, linha + 1); </li></ul><ul><li>for (coluna = 0; coluna < 3; coluna++) { printf(&quot; c: %d ::&quot;, coluna+1); scanf(&quot;%d&quot;, &matriz[linha][coluna]);; } printf(&quot; &quot;); } </li></ul>
  9. 9. Contar valores em falta <ul><li>/* visualizar conteudos da matriz e contar valores em falta */ printf(&quot; Matriz de valores &quot;); for (linha = 0; linha < 3; linha++) { for (coluna = 0; coluna < 3; coluna++) { printf(&quot; : %d : &quot;, matriz[linha][coluna]); if (matriz[linha][coluna] == 0) val_falta++; algarismos[matriz[linha][coluna]] = matriz[linha][coluna]; </li></ul><ul><li> } printf(&quot; &quot;); } </li></ul>
  10. 10. Verificar as linhas <ul><li>/* verificar as linhas */ for (linha = 0; linha < 3; linha++) { soma = 0; val_falta = 0; for (coluna = 0; coluna < 3; coluna++) { if (matriz[linha][coluna] == 0) val_falta++; soma += matriz[linha][coluna]; } printf(&quot; Linha: %d Soma: %d Faltas %d &quot;, linha+1, soma,val_falta); if (val_falta == 1) { printf(&quot;Algarismo a colocar: %d&quot;, 15 - soma); for (coluna = 0; coluna < 3; coluna++) { </li></ul><ul><li>if (matriz[linha][coluna] == 0) { matriz[linha][coluna] = 15 - soma; </li></ul><ul><li>algarismos[15 - soma] = 15 - soma; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>} printf(&quot; &quot;); </li></ul>
  11. 11. Verificar colunas <ul><li>/* verificar as colunas */ </li></ul><ul><li>for (coluna = 0; coluna < 3; coluna++) { </li></ul><ul><li>soma = 0; </li></ul><ul><li>val_falta = 0; </li></ul><ul><li>for (linha = 0; linha < 3; linha++) { </li></ul><ul><li>if (matriz[linha][coluna] == 0) val_falta++; </li></ul><ul><li>soma += matriz[linha][coluna]; } </li></ul><ul><li>printf(&quot; Coluna: %d Soma: %d Faltas %d &quot;, coluna+1, soma,val_falta); </li></ul><ul><li>if (val_falta == 1) { </li></ul><ul><li>printf(&quot;Algarismo a colocar: %d&quot;, 15 - soma); for (linha = 0; linha < 3; linha++) { </li></ul><ul><li>if (matriz[linha][coluna] == 0) { matriz[linha][coluna] = 15 - soma; </li></ul><ul><li>algarismos[15 - soma] = 15 - soma; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  12. 12. Verificar diagonais <ul><li>/* Verificar diagonais */ // diagonal principal soma = 0; for (linha = 0; linha < 3; linha++) for (coluna = 0; coluna < 3; coluna++) if (linha == coluna) soma += matriz[linha][coluna];   printf(&quot; Diagonal principal: %d &quot;, soma); if (soma == 15) printf(&quot;OK!&quot;);   // segunda diagonal soma = 0; for (linha = 0; linha < 3; linha++) soma += matriz[linha][2-linha];   printf(&quot; Segunda diagonal: %d &quot;, soma); if (soma == 15) printf(&quot;OK! &quot;); </li></ul>
  13. 13. Apresentar a matriz completa <ul><li>/* visualizar conteudos da matriz resolvida printf(&quot; Matriz resolvida &quot;); for (linha = 0; linha < 3; linha++) { for (coluna = 0; coluna < 3; coluna++) printf(&quot; : %d : &quot;, matriz[linha][coluna]); printf(&quot; &quot;); } printf(&quot; ”); </li></ul><ul><li>}  </li></ul>
  14. 14. Comentários <ul><li>O programa proposto funciona bem, se os valores introduzidos foram correctos, isto é: </li></ul><ul><ul><li>se tratarem de algarismos não repetidos e </li></ul></ul><ul><ul><li>respeitarem aqueles que são colocados, a regra da soma igual a quinze. </li></ul></ul>
  15. 15. Testar o programa <ul><li>Teste o programa para a seguinte tabela: Quais são os resultados obtidos? </li></ul>
  16. 16. Questões <ul><li>Quais são os valores mínimos a introduzir para que o programa funcione? </li></ul><ul><li>Uma melhoria interessante do programa, seria a geração de todas as combinações possíveis de tabelas que utilizam os nove algarismos com as propriedades indicadas. </li></ul>

×