/*Programa que resuelve matricez de nxn dimenciones a travez del metodo de
eliminacion gaussiana, y sustitucion hacia atras, muestra el valor de las
incognitas y el determinante de la matriz.
Hecho en turbo c++ 3.0 de borland.
Por Oliver Mar Ramirez.
*/
#include <math.h>
#include <malloc.h>
#include <conio.h>
#include <stdio.h>
float **A;
int N;
void eliminacion()
{
int i, j, k, max;
float t;
for(i=0;i<N;i++){
max=i;
for(j=i+1;j<N;j++) if( fabs(A[j][i])> fabs(A[max][i]) ) max=j;
for(k=0;k<N;k++)
{
t=A[i][k];
A[i][k]=A[max][k];
A[i][k]=t;
}
for(j=i+1;j<N;j++)
for(k=N;k>=i;k--)
A[j][k]-=A[i][k]*A[j][i]/A[i][i];
}
}
void sustitucion()
{
int j,k;
float t, *x;
x=(float*)malloc(sizeof(float)*N);
for(j=0;j<N;j++) x[j]=A[j][N+1];
for(j=N-1;j>=0;j--){
t=0.0;
for(k=j+1;k<N;k++)
t+=A[j][k]*x[k];
x[j]=(A[j][N]-t)/A[j][j];
}
printf("Las variables son:\n");
for(j=0;j<N;j++)
printf("%c = %f\n",'A'+j,x[j]);
}
void ponme()
{
for(int L='A',i=0;i<N;i++) printf("%c%13c", L++, ' ');
printf("\b\b\b\b\b\b| R\n");
for(i=0;i<N;i++){
for(int k=1, j=0;j<N+1;j++,k++){
printf("%.2f",A[i][j]);
gotoxy(13*k, wherey());
if(j+1==N) printf("\b\b| ");
}
printf("\n");
}
printf("\n");
}
void lectura()
{
int i, j, L='A';
printf("Cuantas Variables tendra el sistema?\t[ ]\b\b\b");
scanf("%d",&N);
for(i=0;i<N;i++) printf("%c%7c", L++, ' '); printf("\b\b| R\n");
A=(float **)malloc(sizeof(float)*N+1);
for(i=0;i<N+1;i++) A[i]=(float *)malloc(sizeof(float)*N+1);
for(i=0;i<N+1;i++) for(j=0;j<N+1;j++) A[i][j]=0;
for(i=0;i<N;i++)
{ //filas -> ecuaciones
for(int k=1,j=0;j<=N;j++, k++)
{ //columnas -> variables
scanf("%f",&A[i][j]);
gotoxy(wherex()+8*k, wherey()-1);
if(j+1==N) printf("\b\b| ");
}
printf("\n");
}
printf("\n\n");
}
void determinante()
{
float det=1;
for(int i=0;i<N;i++)
det*=A[i][i];
printf("Determinante = %.3f\n", det);
}
void main()
{
clrscr();
lectura();
ponme();
eliminacion();
ponme();
sustitucion();
determinante();
getch();
}
Comentarios sobre la versión: Versión 1 (6)
Nota: solo te falta declarar la variable i de tipo int en una función void "ponme".
Me sirvió mucho.
for(int L='A',i=0;i<N;i++)
printf("%c%13c", L++, ' ');
printf("\b\b\b\b\b\b| R\n");
for(int i=0;i<N;i++){
for(int k=1, j=0;j<N+1;j++,k++){
printf("%.2f",A[i][j]);