Programa Matriz
Enviado por blakwhite • 3 de Noviembre de 2014 • 262 Palabras (2 Páginas) • 191 Visitas
#include <stdio.h>
#include <conio.h>
#include <math.h>
/*********** VARIABLES GLOBALES **********************/
double matriz[50][50];
double identidad[50][50];
int N; //N contiene el tama¤o de la matriz cuadrada
/*********** PROTOTIPOS DE FUNCIONES *****************/
void hallar_inversa(void);
void escalonar_matriz(void);
void permutar_filas(int fila1, int fila2);
void multip_fila(int fila,double factor);
void sumar_fila_multip(int fila1,int fila2, double factor);
void ceros_abajo(int fila_pivote, int columna_pivote);
void ceros_arriba(int fila_pivote, int columna_pivote);
void generar_matriz_identidad(void);
/*****************************************************/
int main()
{
int fi, co;
clrscr();
do{
printf("Ingrese el tama¤o de la matriz cuadrada: ");
scanf("%i",&N);
if(N>50 || N<2) {clrscr(); printf("El numero debe estar entre 2 y 50n");}
}while(N>50 || N<2);
for(fi=0;fi<N;fi++)
{
for(co=0;co<N;co++)
{
printf("Ingrese el valor de matriz[%i][%i]",fi+1,co+1);
scanf("%lf",&matriz[fi][co]);
}
}
hallar_inversa();
return 0;
}
/*-------------------------------------------------------------------------*/
void hallar_inversa(void)
{
int cont,cont2, flag=0;
escalonar_matriz();
generar_matriz_identidad(); //rellena la matriz identidad
for(cont=0;cont<N;cont++) //recorre filas
{
for(cont2=0;cont2<N;cont2++) //recorre columnas
{
if(matriz[cont][cont2]!=0) //busca pivote (elemento ditinto de 0)
{
if(matriz[cont][cont2]!=1) //si pivote no es 1, se lo multiplica
{
multip_fila(cont,pow(matriz[cont][cont2],-1));
}
ceros_arriba(cont,cont2); // se hacen 0's por arriba
ceros_abajo(cont,cont2); // y por debajo del pivote
break;
}
}
}
/*--------------------------------------------------------------*/
/* Una vez terminada esta operacion, la matriz identidad estara */
/* transformada en la inversa */
/* */
/* Ahora se comprueba que la matriz original este transformada */
/* en la matriz identidad, de no ser asi la inversa obtenida */
/* no es valida y la matriz no tiena inversa */
/*--------------------------------------------------------------*/
for(cont=0;cont<N;cont++)
{
for(cont2=0;cont2<N;cont2++)
{
if(cont==cont2)
{
if(matriz[cont][cont2]!=1) flag=1;
}
else
{
if(matriz[cont][cont2]!=0) flag=1;
}
}
}
if(flag==1)
{
printf("nnLa matriz no tiene inversann");
}
else
{
printf("nnLa Matriz Inversa es :nn");
for(cont=0;cont<N;cont++)
{
for(cont2=0;cont2<N;cont2++)
{
printf("%+#0.3f ",identidad[cont][cont2]);
}
printf("n");
}
}
printf("nPresione una tecla para continuar...");
getch();
}
/*-----------------------------------------------------------------------*/
...