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.