apollw

coluna_por_linha_explicado

Mar 28th, 2014
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 8.02 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. main(){
  4.  
  5. int i,j,linhas,colunas,coluna_usuario,valor_usuario;
  6. int matriz[3][3]={1,2,3,4,5,6,7,8,9},matriz_definida[50][50],aux[50][50];
  7.  
  8. /*Vamos imprimir a primeira matriz normalmente.*/
  9. puts("PRIMEIRA MATRIZ\n");
  10.  
  11. for(i=0;i<=2;i++){
  12.     puts("\n");
  13.     for(j=0;j<=2;j++)
  14.         printf(" %d ",matriz[i][j]);
  15. }
  16. puts("\n");
  17. puts("\n");
  18.  
  19. /*Agora vamos imprimir uma matriz, onde todas as colunas dessa matriz são iguais à 2ª coluna da primeira matriz.*/
  20. puts("MATRIZ FORMADA COMPLETAMENTE PELA COLUNA 2 DA MATRIZ ANTERIOR\n");
  21. for(i=0;i<=2;i++){
  22.     puts("\n");
  23.     for(j=0;j<=2;j++)
  24.         printf(" %d ",matriz[i][1]);
  25. }
  26. puts("\n");
  27.  
  28. /*Percebe-se que a coluna 1 é o vetor-coluna[i][0], pois pega i linhas e só repete a coluna 1. Dessa forma,
  29. pra imprimir uma matriz formada apenas pela coluna que você desejar, tem-se o algoritmo:
  30. matriz[i][coluna desejada],
  31. lembrando que aqui contamos desde a coluna 0 até a coluna 2, por causa do laço for.*/
  32.  
  33. puts("\n");
  34. /*Aqui, tentamos imprimir essa matriz nova, formada apenas pela coluna 2, pelo número dois, só para fins de curiosidade.*/
  35. puts("MATRIZ ACIMA, MULTIPLICADA POR DOIS\n");
  36. for(i=0;i<=2;i++){
  37.     puts("\n");
  38.     for(j=0;j<=2;j++)
  39.         printf(" %d ",matriz[i][1]*2);
  40. }
  41. puts("\n");
  42. puts("\n");
  43.  
  44. /*Com esse raciocínio, podemos estender isso para o conceito de multiplicação da matriz por qualquer número,
  45.  no algoritmo abaixo:
  46. matriz[i][coluna desejada]*numero_desejado*/
  47. /*Agora tentemos imprimir apenas uma coluna da matriz quadrada de ordem 3 (lembrando que o usuário pode entrar com uma
  48. matriz de qualquer ordem*/
  49.  
  50. puts("COLUNA-ESPECIFICA DA PRIMEIRA MATRIZ. NO CASO, COLUNA 2\n");
  51. for(i=0;i<=2;i++){
  52.     puts("\n");
  53.     for(j=1;j<=1;j++)
  54.         printf(" %d ",matriz[i][1]);
  55. }
  56. puts("\n");
  57.  
  58. /*Com o algoritmo acima, conseguimos imprimir apenas uma coluna da matriz, ou seja, um vetor-coluna. No caso,
  59. é o vetor-coluna respectivo à matriz[i][1]. Funciona dessa maneira: Criamos o laço for de i normalmente, segundo o
  60. tamanho da matriz, e criamos o laço for do j, com j variando de 1 até j<=1. Assim, j sempre repetirá o laço na mesma
  61. coluna. No caso, escolhemos a coluna 2, a segunda coluna.*/
  62.  
  63. /*O ponto crucial é tentar imprimir a PRIMEIRA MATRIZ com a coluna multiplicada no lugar da coluna original.*/
  64.  
  65. /*Primeiro definimos a matriz original sem a coluna especificada.*/
  66. puts("\n");
  67. /*Isso imprime a matriz[i][j] com a coluna [i][1] zerada.Primeiro, definimos a matriz auxiliar igual à matriz[i][j].*/
  68. for(i=0;i<=2;i++){
  69.     for(j=0;j<=2;j++)
  70.         aux[i][j]=matriz[i][j];
  71. }
  72.  
  73. /*Assim, podemos alterar o valor da matriz auxiliar, dizendo que ela será a matriz[i][j] menos a matriz[i][1], isso
  74. tudo sem alterar o valor da matriz original. Desta forma, ela imprimirá a primeira matriz sem a coluna especificada.*/
  75. for(i=0;i<=2;i++){
  76.     for(j=1;j<=1;j++)
  77.         aux[i][j]=matriz[i][j]-matriz[i][1];
  78. }
  79.  
  80. puts("MATRIZ SEM A COLUNA DOIS\n");
  81. for(i=0;i<=2;i++){
  82.     puts("\n");
  83.     for(j=0;j<=2;j++)
  84.         printf(" %d ",aux[i][j]);
  85. }
  86. puts("\n");
  87.  
  88. /*Queremos agora outra coisa. Uma maneira de multiplicar a coluna especificada (coluna 2), por um valor (no caso:2).*/
  89. /*Então, devemos determinar uma maneira de imprimir a nova aux[i][j] (agora sem a coluna específica) com a coluna nova
  90. e multiplicada por 2. Em outras palavras:
  91. aux[i][j]=matriz[i][j]-matriz[i][1]+matriz[i][1]*2.*/
  92.  
  93. /*O que ocorre acima é: a auxiliar é a matriz[i][j] sem a coluna específica + a coluna específica multiplicada por 2. Ou seja,
  94. primeiro tira a coluna, fica zero, então, soma zero + a própria coluna que está sendo multiplicada por 2.*/
  95.  
  96. /*Primeiro, retornemos ao valor original da aux[i][j], pois alteramos ele no algoritmo anterior acima.*/
  97. for(i=0;i<=2;i++){
  98.     for(j=0;j<=2;j++)
  99.         aux[i][j]=matriz[i][j];
  100. }
  101.  
  102. /*Isso é para fins explicativos. Mas você não precisará ficar sempre alterando e retornando os valores originais da
  103. sua matriz. Agora, o nosso novo algoritmo funcionará.*/
  104. for(i=0;i<=2;i++){
  105.     for(j=1;j<=1;j++)
  106.         aux[i][j]=matriz[i][j]-matriz[i][1]+matriz[i][1]*2;
  107. }
  108. puts("\n");
  109.  
  110. puts("MATRIZ COM A COLUNA DOIS MULTIPLICADA POR 2\n");
  111. for(i=0;i<=2;i++){
  112.     puts("\n");
  113.     for(j=0;j<=2;j++)
  114.         printf(" %d ",aux[i][j]);
  115. }
  116. puts("\n");
  117.  
  118. /**###########################################################################################################**/
  119. /**------------------------------ALGORITMO PARA UMA MATRIZ DE TAMANHO QUALQUER--------------------------------**/
  120. /**###########################################################################################################**/
  121.  
  122. /*Temos agora todas as ferramentas para estender esse conceito para uma matriz qualquer definida pelo usuário. Sigamos a
  123. lógica:
  124.  
  125. O usuário entrará com um número i de linhas e j de colunas. Assim, devemos ter as variáveis "linhas" e "colunas". Na hora
  126. do laço de determinação da matriz, os "for" de i e j irão de 0 até <=linhas/colunas. Façamos o teste.*/
  127.  
  128. puts("\n");
  129. puts("Entre com o numero de linhas da sua matriz\n");
  130. scanf("%d",&linhas);
  131. puts("Entre com o numero de colunas da sua matriz\n");
  132. scanf("%d",&colunas);
  133. puts("\n");
  134.  
  135. linhas=linhas-1;
  136. colunas=colunas-1;
  137.  
  138. puts("\n");
  139. puts("Defina os elementos de sua matriz\n");
  140. for(i=0;i<=linhas;i++){
  141.    for(j=0;j<=colunas;j++)
  142.         scanf("%d",&matriz_definida[i][j]);
  143. }
  144. puts("\n");
  145.  
  146. puts("\n");
  147. puts("MATRIZ QUALQUER DEFINIDA PELO USUARIO\n");
  148. for(i=0;i<=linhas;i++){
  149.     puts("\n");
  150.     for(j=0;j<=colunas;j++)
  151.         printf(" %d ",matriz_definida[i][j]);
  152. }
  153. puts("\n");
  154.  
  155. /*Já entendemos o conceito de coluna específica e valor específico a ser multiplicado por ela. Agora o usuário
  156. define esse números. Então, devemos ter as variáveis: coluna_usuario e valor_usuario.*/
  157. puts("Qual eh a coluna que voce quer multiplicar?\n");
  158. scanf("%d",&coluna_usuario);
  159. puts("Por qual valor voce quer multiplica-la?\n");
  160. scanf("%d",&valor_usuario);
  161.  
  162. coluna_usuario=coluna_usuario-1;
  163.  
  164. /*Agora vamos definir essa matriz da forma que aprendemos acima. Então,ela é definida da linha i=0 até i<=linhas, e
  165. da coluna j=0 até a coluna j<=coluna_usuario.*/
  166. puts("\n");
  167. puts("MATRIZ FORMADA APENAS DA COLUNA DITA ACIMA\n");
  168. for(i=0;i<=linhas;i++){
  169.     puts("\n");
  170.     for(j=0;j<=colunas;j++)
  171.         printf(" %d ",matriz_definida[i][coluna_usuario]);
  172. }
  173. puts("\n");
  174.  
  175. /*Fica simples multiplicar essa coluna por um número, no caso, valor_usuario.
  176. Primeiro, retornemos ao valor original da aux[i][j] mais uma vez, já que ele já foi alterado.*/
  177. for(i=0;i<=linhas;i++){
  178.     for(j=0;j<=colunas;j++)
  179.         aux[i][j]=matriz_definida[i][j];
  180. }
  181.  
  182. /*Agora, façamos a operação que aprendemos lá em cima. Ou seja, tirar uma coluna específica da matriz digitada pelo usuário.*/
  183. for(i=0;i<=linhas;i++){
  184.     for(j=coluna_usuario;j<=coluna_usuario;j++)
  185.         aux[i][j]=matriz_definida[i][j]-matriz_definida[i][coluna_usuario];
  186. }
  187. /*Imprimamos isso:*/
  188. puts("\n");
  189. puts("MATRIZ SEM A COLUNA ESPECIFICA\n");
  190. for(i=0;i<=linhas;i++){
  191.     puts("\n");
  192.     for(j=0;j<=colunas;j++)
  193.         printf(" %d ",aux[i][j]);
  194. }
  195. puts("\n");
  196.  
  197. /*Só falta repetir o processo para imprimir a auxiliar como a matriz[i][j] com a coluna especifica
  198.  multiplicada pelo valor_usuario.*/
  199. /*Como sempre, retornando o valor original da auxiliar:*/
  200. for(i=0;i<=linhas;i++){
  201.     for(j=0;j<=colunas;j++)
  202.         aux[i][j]=matriz_definida[i][j];
  203. }
  204.  
  205. /*Agora, aplicando o algoritmo conhecido de multiplicar por um valor específico:*/
  206. for(i=0;i<=linhas;i++){
  207.     for(j=coluna_usuario;j<=coluna_usuario;j++)
  208.         aux[i][j]=matriz_definida[i][j]-matriz_definida[i][coluna_usuario]+matriz_definida[i][coluna_usuario]*valor_usuario;
  209. }
  210.  
  211. /*E agora, imprimir essa matriz:*/
  212. puts("\n");
  213. puts("MATRIZ COM A COLUNA ESPECIFICA MULTIPLICADA PELO VALOR ESPECIFICO\n");
  214. for(i=0;i<=linhas;i++){
  215.     puts("\n");
  216.     for(j=0;j<=colunas;j++)
  217.         printf(" %d ",aux[i][j]);
  218. }
  219. puts("\n");
  220.  
  221. puts("-----------------------FIM------------------------");
  222.  
  223. system("pause");
  224. return 0;
  225.  
  226. }
Advertisement
Add Comment
Please, Sign In to add comment