#include 
#include 



int Lee_Datos(float *tole, int *ciclos, float a[][10], float x[3]);
int Checa_Error(float *Tolera, float x[3], float ant[3], int n);
void Imprime_Sistema(int n, float a[][10]);


int main()
{
  int N;
  float A[10][10];
  float X[3];
  float Ant[3];
  float Sum;
  int k,j,i;
  int Ciclos = 0;
  float Tole = 0.0;
  int Cont;
  int Flag;

  clrscr();
  printf("\n        METODO DE GAUSS-SEIDEL");
  printf("\n");

  N=Lee_Datos(&Tole,&Ciclos,A,X);
  Imprime_Sistema(N,A);
  printf("\n Aproximaciones Realizadas");
  printf("\n      X1        X2       X3");
  printf("\n");
  Cont = 0;
  Flag = 1;
  while ( Flag && Cont < Ciclos)
    {
		Cont += 1;
		printf("%3d",Cont);
		for (i=0; i < N; i++)
        {
			 Sum = 0;
			 for (j=0; j < N; j++)
            {
				  if ( i != j)
					  Sum += A[i][j]*X[j];
              }
          Ant[i] = X[i];
			 X[i] = (A[i][N]-Sum)/A[i][i];
			 printf("%10.4f",X[i]);
       }
	  printf("\n");
	  Flag = Checa_Error(&Tole, X, Ant, N);
   }
	printf("  ....... Solucion Aproximada");
	getch();
}


int Lee_Datos(float *tole, int *ciclos, float a[][10], float x[3])

  {
	 int n;
	 int k, Numero;
	 float Tolera,temp;
	 printf("  Numero de Ecuaciones =");
	 scanf("%d",&n);
	 for (k =0; k < n; k++)
      {
			printf(" Dar el Valor inicial de X[%d] -> ",k);
			scanf("%f",&temp);
			x[k]=temp;
      }
	 printf(" Cual es el error Permitido ->");
	 scanf("%f",tole);
	 printf(" Numero de ciclos maximos ->");
	 scanf("%d",ciclos);
	 printf("\n Sistema de Ecuaciones Lineales:");
	 printf("\n--------------------------------");

	 a[0][0] = 3;    a[0][1]= -1;  a[0][2] = -1;   a[0][3]= 1;
	 a[1][0] = -1;   a[1][1]= 3;   a[1][2] = -1;   a[1][3]= 0;
	 a[2][0] = -1;   a[2][1]= -1;  a[2][2] = 3;    a[2][3]= 2;



	 printf("\n");
	 return n;
}

void Imprime_Sistema(int n, float a[][10])

{
	 int k, j;
	 for (k=0; k < n; k++)
		{
		  for (j=0; j < n+1; j++)
			 {
				if (j == n)
					printf("  = %10.4f ",a[k][n]);
				else
					printf(" %10.4f X%d",a[k][j],j+1);
          }
		  printf("\n");
      }
	 printf("\n");
}

int Checa_Error(float *Tolera, float x[3], float ant[3], int n)

{
	  int k;
	  float Error;
	  for (k=0; k < n; k++)
       {
			 Error = fabs((x[k]-ant[k])/x[k]);
			 if (Error > *Tolera)
				 return 1;

		 }
	  return 0;
}


    Source: geocities.com/siliconvalley/pines/7894/metodos

               ( geocities.com/siliconvalley/pines/7894)                   ( geocities.com/siliconvalley/pines)                   ( geocities.com/siliconvalley)