Advertisement
Edu004

Ceros por debajo

May 24th, 2012
35
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.83 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <math.h>
  4.  
  5. /*********** VARIABLES GLOBALES **********************/
  6. int N = 5; //N contiene el tama¤o de la matriz cuadrada
  7. double matriz[5][5];
  8. double identidad[5][5];
  9.  
  10. /*********** PROTOTIPOS DE FUNCIONES *****************/
  11.  
  12. void hallar_matriz(void);
  13. void escalonar_matriz(void);
  14. void permutar_filas(int fila1, int fila2);
  15. void multip_fila(int fila,double factor);
  16. void sumar_fila_multip(int fila1,int fila2, double factor);
  17. void ceros_abajo(int fila_pivote, int columna_pivote);
  18. /*****************************************************/
  19.  
  20.  
  21. int main()
  22. {
  23. srand (time(NULL));
  24. int fi, co;
  25.  
  26. for(fi=0;fi<N;fi++)
  27. {
  28. for(co=0;co<N;co++)
  29. {
  30.  
  31. int numero= rand()%99; //numeros entre 0 y 99
  32. matriz[fi][co] = numero;
  33. printf("%d ", numero);
  34. }
  35. printf("\n");
  36. }
  37. printf("Calculando la matriz .... \n");
  38. hallar_matriz();
  39.  
  40. return 0;
  41. }
  42.  
  43. /*-------------------------------------------------------------------------*/
  44.  
  45. void hallar_matriz(void)
  46. {
  47. int cont,cont2, flag=0;
  48.  
  49. escalonar_matriz();
  50.  
  51.  
  52. for(cont=0;cont<N;cont++)
  53. {
  54. for(cont2=0;cont2<N;cont2++)
  55. {
  56. if(matriz[cont][cont2]!=0) //busca pivote (elemento ditinto de 0)
  57. {
  58. if(matriz[cont][cont2]!=1) //si pivote no es 1, se lo multiplica
  59. {
  60. multip_fila(cont,pow(matriz[cont][cont2],-1));
  61. }
  62.  
  63. ceros_abajo(cont,cont2); // 0's por debajo del pivote
  64.  
  65. break;
  66. }
  67. }
  68. }
  69.  
  70. for(cont=0;cont<N;cont++)
  71. {
  72. for(cont2=0;cont2<N;cont2++)
  73. {
  74. printf("%+#0.3f ",matriz[cont][cont2]);
  75. }
  76. printf("\n");
  77. }
  78.  
  79.  
  80. printf("\n Presione una tecla para continuar...");
  81. getch();
  82.  
  83.  
  84. }
  85.  
  86. /*-----------------------------------------------------------------------*/
  87. /* */
  88. /* Ordena la matriz de forma que quede en su forma escalonada por */
  89. /* renglones */
  90. /* */
  91. /*-----------------------------------------------------------------------*/
  92.  
  93. void escalonar_matriz(void)
  94. {
  95. int cont, col, ceros, vec[10];
  96. int flag, aux;
  97.  
  98. for(cont=0;cont<N;cont++)
  99. {
  100. col=0,ceros=0;
  101.  
  102. if(matriz[cont][col]==0)
  103. {
  104. do{
  105. ceros++;
  106. col++;
  107. }while(matriz[cont][col]==0);
  108. }
  109. vec[cont]=ceros;
  110. }
  111.  
  112.  
  113. do
  114. {
  115. flag=0;
  116. for(cont=0;cont<N-1;cont++)
  117. {
  118. if(vec[cont]>vec[cont+1])
  119. {
  120. aux=vec[cont];
  121. vec[cont]=vec[cont+1];
  122. vec[cont+1]=aux;
  123.  
  124. permutar_filas(cont,cont+1);
  125.  
  126. flag=1;
  127. }
  128. }
  129. }while(flag==1);
  130.  
  131. }
  132.  
  133. /*----------------------------------------------------------------------*/
  134. /* SE DEFINEN LAS 3 OPERACIONES ELEMENTALES DE FILA */
  135. /* */
  136. /* Las operaciones que se le realizen a la matriz para reducirla */
  137. /* tambien deberan realizarsele a la matriz identidad para obtener */
  138. /* la matriz inversa */
  139. /*----------------------------------------------------------------------*/
  140.  
  141.  
  142. void permutar_filas(int fila1,int fila2)
  143. {
  144. float auxval;
  145. int cont;
  146.  
  147. for(cont=0;cont<N;cont++)
  148. {
  149. auxval=matriz[fila1][cont];
  150. matriz[fila1][cont]=matriz[fila2][cont];
  151. matriz[fila2][cont]=auxval;
  152.  
  153. auxval=identidad[fila1][cont];
  154. identidad[fila1][cont]=identidad[fila2][cont];
  155. identidad[fila2][cont]=auxval;
  156. }
  157. }
  158.  
  159. /*----------------------------------------------------------------------*/
  160.  
  161. void multip_fila(int fila,double factor)
  162. {
  163. int cont;
  164.  
  165. for(cont=0;cont<N;cont++)
  166. {
  167. matriz[fila][cont]=(matriz[fila][cont])*factor;
  168. identidad[fila][cont]=(identidad[fila][cont])*factor;
  169. }
  170. }
  171.  
  172. /*----------------------------------------------------------------------*/
  173.  
  174. void sumar_fila_multip(int fila1,int fila2, double factor)
  175. {
  176. int cont;
  177. for(cont=0;cont<N;cont++)
  178. {
  179. matriz[fila1][cont]=(matriz[fila1][cont])+((matriz[fila2][cont])*factor);
  180. identidad[fila1][cont]=(identidad[fila1][cont])+((identidad[fila2][cont])*factor);
  181. }
  182. }
  183.  
  184. /*-------------------------------------------------------------------------*/
  185. void ceros_abajo(int fila_pivote, int columna_pivote)
  186. {
  187. int cont;
  188.  
  189. for(cont=columna_pivote+1;cont<N;cont++)
  190. {
  191. sumar_fila_multip(cont,fila_pivote,((matriz[cont][columna_pivote])*(-1)));
  192. }
  193.  
  194. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement