All pastes #419196 Raw Edit

Artur Castiel

public text v1 · immutable
·published 2007-04-01 03:48 UTC
rendered paste body
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

float **alocaomatriz(int m, int n)
/* Funcao Especial para alocação do sistema */
/* Variaveis : pointtemp -> Ponteiro temporário*/
/* index, variável auxiliar para contagem*/
/* m - linhas , n - colunas */
{
   int index;
   float **pointtemp;
   if ( (m<1) || (n<0))
   {
     printf("Valores de M x N invalidos");     
     return(NULL);
   }
   /* Alocação das linhas */
   pointtemp = (float **) calloc(m , sizeof (float *));
   if ( pointtemp == NULL )
   {
     printf("**Erro , memoria Insuficiente.**");
     return (NULL);
   }
   /* Alocação das colunas*/
   for (index = 0 ; index < m ; index++)
   {
     pointtemp[index] = (float *) calloc(n , sizeof(float));
     if ( pointtemp[index] == NULL )
     {
       printf("**Erro , memoria Insuficiente.**");
       return (NULL); 
     }
   }    
   return(pointtemp);
}



float **leitormatriz(int m, int n)
/* Programa de leitura da matrix*/
/* Variavies: m - linhas , n - colunas */
/* index1, index2, variaveis auxiliare de contagem*/
/* sistema => ponteiro de ponteiros, matriz*/
{
 int index1, index2;
 float **sistema;
 sistema = alocaomatriz(m,n);
 for (index1 = 0 ; index1 < m ; index1++)  
   {
   for ( index2 = 0 ; index2 < n ; index2++)
       {
       printf("\nDigite X (%d) (%d): ", index1 + 1, index2 + 1); 
       scanf("%f",&sistema[index1][index2]);
       }
   }        
 return (sistema);
 }

void liberarmatriz(float **matriz , int m, int n)
{
 int index;

 if ( (m < 1) || (n < 0))
 {
  printf("Valores de M x N invalidos");    
  return;
 }

 for (index = 0 ; index < m ; index++)
  free(matriz[index]);

 free(matriz);    
}

void impressaomatriz(float **sistema ,int m,int n)
/*Funcao de impressao da matriz*/
{
 int index1, index2;   
 for (index1 = 0 ; index1 < m ; index1++)
  {
     for (index2=0 ; index2< n ; index2++)
      {
      printf(" %f*X(%d)",sistema[index1][index2], index2+1);
      if (index2 < n-2)
      {
      printf(" + ");
      }
      else if (index2 == n-2) 
      {
      printf(" = ");
      }
     }
//quebrea de linha 
       printf("\n");     
    
  }   
}


float arredondamento(float f)
{
	if ((f < 0.0001 && f > 0)  || (f > -0.0001 && f < 0))
	{
     return(0);
    }
    else
    return(f);   
}

int continuar()
{
 int a;
 a=0;
 while ((a!= 1) || (a!= 2))
 {
 printf("Deseja continuar? (1-Sim 2-Nao)");
 scanf("%d",&a);
 if ( a == 1)
  {
  return (0);
  }       
 if ( a == 2)
  {
  return (1);
  } 
 }
}

void trocadelinha(float **sistema , int l1, int l2,int n)
//m - > números de linhas
//n - > números de colunas
//sistema -> matriz do sistema
//vetorcopia -> vetor temporário
//l1 e l2 linhas a serem permutadas
{
  int index;
  float vetorcopia;
  for (index=0;index < n; index++)
  {
   vetorcopia = sistema[l1][index];
   sistema[l1][index] = sistema[l2][index];
   sistema[l2][index] = vetorcopia;   
  }  
}


void metgaus(float** sistema, int m, int n)
{
	int i, j, k;
	float c;

	for (i = 0; i < m-1; i++) {
		for (j = i+1; j < m; j++) {
			c = -(sistema[j][i]/sistema[i][i]);

			for (k = i; k < n; k++)
				sistema[j][k] = arredondamento(sistema[j][k] + c*sistema[i][k]);
		}
	printf("Iteracao numero: %d\n", i + 1 );
    impressaomatriz(sistema, m, n);
	if (continuar() == 1)
	 {
     return;
     }
    }
}

int main()
{
    /* Sistema = matriz dos sistema n x m*/
    /* a -> m, b-> n */
    
    float **sistema ;
    int a,b;
    printf("Digite o tamanho do seu sistema: Linhas x Colunas \n");
    scanf("%d",&a);
    scanf("%d",&b);
    sistema = leitormatriz(a,b);
    printf("\n");
    impressaomatriz(sistema,a,b);
    printf("**\n");
    metgaus(sistema,a,b);
    printf("\n**\n");
//    impressaomatriz(sistema,a,b);
    liberarmatriz(sistema,a,b);
    getch();
    return(0);  
}