Ir ao conteúdo
  • Cadastre-se

C Escalonamento de Matriz C


Posts recomendados

Ola,sou um novo usuário do Forum Clubdohardware e peço paciência.
Fiz esse algoritmo para escalonar uma matriz, gostaria da opinião da comunidade e se possível maneiras de otimizar o algoritmo e suas aplicações. Obrigado.

#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */
void Ler_matrix(int lx,int cx,int Mx[10][10])
{
 int i,j;
 for(i=1;i<=lx+1;i++)
 {
  for(j=1;j<=cx+1;j++)
  {
   if(i==lx+1||j==lx+1)
   {
    Mx[j]=0;
   }
   else
   {
   scanf("%d",&Mx[j]);
   }
  }
 }
}
void Imprimir_matrix(int lx, int cx,int Mx[10][10])
{
 int i,j;
 for(i=1;i<=lx;i++)
 {
  for(j=1;j<=cx;j++)
  {
   printf("|%d |",Mx[j]);
  }
 printf("\n");
 }
}
int Ler_Matrix_Escalonada(int lx, int cx,int Mz[10][10],int ex)
{
 int i,j,e;

 e=1;
 for(j=1;j<=lx;j++)
 {  
  for(i=j;i<=cx;i++)
  {
   if(Mz[j]!=0&&i!=j)
   {
    e=0; 
   }
   if(i==j)
   {
    if(Mz[j]==0)
    {
     if(Mz[i+1][j+1]!=0)
     {
      e=0;
     }
    } 
   } 
  }
 }
 
 ex=e;
 
}
void Contar_zeros (int lx,int cx,int Mz[10][10],int Vz[10])
{
 int i,j,cont;
 
 for(i=1;i<=lx;i++)
 {
 j=1;
 cont=0;
  while(Mz[j]==0&&j<cx)
  {
   cont=cont+1;
   j=j+1;
  }
  Vz=cont;
 }
}
void Trocar_linhas(int lx,int cx,int Mz[10][10],int ix)
{
 int j,k;
 for(j=1;j<=cx;j++)
 {
  k=Mz[ix][j];
  Mz[ix][j]=Mz[ix+1][j];
  Mz[ix+1][j]=k;
 }
 
}
void Procurar_Pivos(int lx,int cx,int Mz[10][10],int Vp[10])
{
 int i,j;
 for(i=1;i<=lx;i++)
 {
  j=1;
  while(Mz[j]==0&&j<lx)
  {
   j=j+1;//printf("%d",j);system("pause");
  }
  Vp=Mz[j];//printf("Vp[%d]=%d",i,Mz[j]);system("pause");
 }
}
void soma_linhas(int lx,int cx, int Mz[10][10],int R[10],int ix)
{
 //multiplico a linha i pelo pivo da linha i+1; e o mesmo para linha i+1 pela linha i
 int a,b,j;
 Procurar_Pivos(lx,cx,Mz,R);
 a=R[ix];//vetor pivo referencia
 b=R[ix+1];
 //multiplicar o vetor referencia(o vetor que se quer somar com o maior pivo)
 for(j=1;j<=cx;j++)
 {
  
  Mz[ix+1][j]=Mz[ix+1][j]*a-Mz[ix][j]*b;//system("pause");printf("%d",Mz[ix+1][j]);
  
 }
}
int main(int argc, char *argv[]) {
 int k,i,l,c,M[10][10],Z[10],P[10];
 printf("Escreva as Dimensoes da Matrix a ser escalonada");
 scanf("%d%d",&l,&c);
 Ler_matrix(l,c,M);
k=0;
while(k<l)
{
 k=k+1;
 Imprimir_matrix(l,c,M);
 printf("\n");
 //contar zero
 i=1;
 while(i<l)
 {Contar_zeros(l,c,M,Z);
  if(Z>Z[i+1])
  {
  Trocar_linhas(l,c,M,i); 
  Imprimir_matrix(l,c,M);
  printf("\n");
  i=0;
  }
  i=i+1;
 }
 i=1;
 while(i<l)
 {
  Procurar_Pivos(l,c,M,P);
  if(Z==Z[i+1]&&P!=0&&P<P[i+1])
  {
   Trocar_linhas(l,c,M,i); 
   Imprimir_matrix(l,c,M);
  printf("\n");
  i=0;
  }
  i=i+1;
 }
 Contar_zeros(l,c,M,Z);
 Procurar_Pivos(l,c,M,P);

 if(Z[k]==Z[k+1]&&P!=0)
 {//printf("k=%d",k);system("pause");
  Procurar_Pivos(l,c,M,P);
  soma_linhas(l,c,M,P,k);
  k=0;
 }
 k=k+1;
 }
 printf("Fim Algoritmo");
 return 0;
}
Gabriel Sardinha Colicigno Graduando Engenharia elétrica pela universidade Julio de Mesquita Filho-Unesp Ilha Solteira.

 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...