Skip to content

Instantly share code, notes, and snippets.

@RamonLopezEscudero
Created February 7, 2016 03:53
Show Gist options
  • Save RamonLopezEscudero/1dd6972f62cd78c88a13 to your computer and use it in GitHub Desktop.
Save RamonLopezEscudero/1dd6972f62cd78c88a13 to your computer and use it in GitHub Desktop.
Cálculo de la determinante por reducción Gaussiana
#include <stdio.h>
#include <stdlib.h>
int main()
{
/* ---------------------------------- */
int i, j, k;
int n_colrow;
/* ---------------------------------- */
printf("Programa para calcular la determinante de una matriz por reduccion de Gauss \n \n");
printf("Ingrese el orden de la matriz: ");
scanf("%i", &n_colrow);
/* ---------------------------------- */
int counter;
float escalar_determ, matriz[n_colrow][n_colrow], matriz_apoyo[n_colrow][2];
/* ---------------------------------- */
for (i = 0; i < n_colrow; i++)
{
printf("\nIngrese los valores del renglon %i\n", i + 1);
for (j = 0; j < n_colrow; j++)
{
printf("Ingrese el elemento %i: ", j + 1);
scanf("%f", &matriz[i][j]);
}
}
counter = -1;
escalar_determ = 1.0;
/* Iteracion por renglon para verificar que en la diagonal principal no haya ceros */
for (i = 0; i < n_colrow; i++)
{
counter += 1;
if (matriz[i][counter] == 0)
{
for (j = counter + 1; j < n_colrow; j++)
{
if (matriz[i][j] != 0)
{
escalar_determ = escalar_determ * -1;
for (k = 0; k < n_colrow; k++)
{
matriz_apoyo[k][0] = matriz[k][counter];
matriz_apoyo[k][1] = matriz[k][j];
}
for (k = 0; k < n_colrow; k++)
{
matriz[k][counter] = matriz_apoyo[k][1];
matriz[k][j] = matriz_apoyo[k][0];
}
break;
}
else
{
printf("\nEl valor de la determinante es: 0.000\n");
system("pause");
exit(0);
}
}
}
}
/* ---------------------------------- */
float var_apoyo;
/* ---------------------------------- */
counter = -1;
for (i = 0; i < n_colrow; i++)
{
counter += 1;
var_apoyo = 1 / matriz[i][i];
escalar_determ = escalar_determ * (1 / var_apoyo);
for (j = 0; j < n_colrow; j++)
{
matriz[i][j] = matriz[i][j] * var_apoyo;
}
for (j = counter + 1; j < n_colrow; j++)
{
var_apoyo = matriz[j][i];
for (k = 0; k < n_colrow; k++)
{
matriz[j][k] = matriz[j][k] - (var_apoyo * matriz[i][k]);
}
}
}
/* Impresion de los resultados */
printf("\nEl valor de la determinante es: %0.3f", escalar_determ);
printf("\n");
system("pause");
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment