Visita el Chat que está en la parte inferior de la página

martes, 10 de noviembre de 2009

Por si les gusta la programación y las matrices


Hace muuucho que no publico nada, de hecho olvide publicar las fechas de los últimos dos Grandes Premios de la F1 (Brazil y Abu Dhabi) pero no importa, ganó Jenson Button en pilotos y Brawn GP en constructores, como sea, si alguno de ustedes llega a llevar Programación en C++ y les piden un programa que calcule la matriz inversa de una matriz entera 3X3 pues yo comparto el código de uno, espero les sirva y también espero que suba la popularidad del blog (en realidad no, pero bueno, hay que tener esperanza...)

#include
#include
#include

void main(void)
{
int c1=0,i=0,j=0,mat[3][3],col=2,reng=4,detx[3],z=1,z1=2,det=0,adj[3][3],s=1,v,v1=1,v2=2,v3=2,z2;
float inv[3][3],idet;

clrscr();
gotoxy(2,2);
printf("Este programa calcula la inversa de una matriz 3X3");

for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
gotoxy(2,reng);
printf("Introduce la entrada (%d,%d) de la matriz: ",i+1,j+1);
scanf("%d",&mat[i][j]);
reng++;
}


}

gotoxy(2,14);
printf("Tu matriz es:");
c1=0;
i=0;
j=0;
reng=16;

for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
gotoxy(col,reng);
printf("%d",mat[i][j]);
col+=3;
}
reng++;
col=2;
}

////determinante

for(c1=0;c1<3;c1++)
{
if(c1==0)
{
z=1;
z1=2;
}

if(c1==1)
{
z=2;
z1=0;
}
if(c1==2)
{
z=0;
z1=1;

}


detx[c1]=mat[0][c1]*((mat[1][z]*mat[2][z1])-(mat[1][z1]*mat[2][z]));

}

c1=0;
for(c1=0;c1<3;c1++)
det=det+detx[c1];

gotoxy(2,20);
printf("El determinante de tu matriz es: %d",det);



/////inversa

if(det==0)
{
gotoxy(2,21);
printf("Tu matriz no es invertible");
}
else
{
gotoxy(2,21);
printf("Tu matriz es invertible, presiona Enter para obtener la inversa");
getch();

////adjunta

clrscr();


i=0;
j=0;
for(i=0;i<3;i++)
{
v=1;

if(i==0)
{
v1=1;
v2=2;
v3=2;
}

if(i==1)
v1=0;

if(i==2)
v3=1;

for(j=0;j<3;j++)
{
if(j==0)
v=1;
else
v=0;

if(j==2)
v2=1;

else
v2=2;

adj[i][j]=s*((mat[v][v1]*mat[v2][v3])-(mat[v][v3]*mat[v2][v1]));
s=-s;
}


}

gotoxy(2,2);
printf("Tu Matriz es: ");
i=0;
j=0;
col=2;
reng=4;

for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
gotoxy(col,reng);
printf("%d",mat[i][j]);
col+=3;
}
reng++;
col=2;
}

gotoxy(2,9);
printf("La matriz adjunta es:");
col=2;
reng=11;

for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
gotoxy(col,reng);
printf("%d",adj[i][j]);
col+=5;
}
reng+=2;
col=2;
}


idet=pow(det,-1);
i=0;
j=0;

for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
inv[i][j]=(idet)*(adj[i][j]);

}

gotoxy(25,9);
printf("La matriz inversa es:");
col=25;
reng=11;

i=0;
j=0;

for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
gotoxy(col,reng);
printf("%.4f",inv[i][j]);
col+=10;
}
reng+=2;
col=25;
}




}







getch();

}



//espero les sirva y comenten por gran justicia!!
//y si, hemos tenido peores meses
//por cierto, las librerías no se ven, son stdio, conio y math

2 comentarios:

Yez dijo...

como puede subir la popularidad de este blog si no tienen gente con chispa y ademas el programa no incluye confactores o no aplica para numeros complejos

Tex dijo...

Tu carota nos confirma que no tenemos gente con chispa.