El día de hoy quiero compartir un código que se sale un poco del contexto de dominz pero que igualmente es muy valido para desarrollar habilidades para tener en cuenta a la hora de programar, no sabia casi de arreglos, por lo que con estudio y esfuerzo he concluido con este proyecto el cual me presento muchas dificultades a la hora de hacerlo pero finalmente lo hice y esta comprobado, el código arroja el determinante de la matriz de 3x3 y luego nos da como resultado la matriz adjunta de la transpuesta, por lo que si multiplico 1/determinante por la matriz adjunta de transpuesta me quedara la matriz inversa con números de coma flotante, por lo que tome la decisión de dar el resultado de la matriz y el determinante separados para mayor facilidad en los cálculos a continuación el código.
package inversa;
import java.util.Scanner;
public class Inversa {
public static void main(String[] args) {
Scanner calculadora;
calculadora = new Scanner(System.in);
int i,vec=0,se,s,co,q,y,j;
int w,t,x,z,conta,so,sc,de=0,web=0;
int matriz2[][];
int matriz[][];
matriz2=new int[3][3];
matriz=new int[3][3];
for(i=0;i<=2;i++){
for(j=0;j<=2;j++){
System.out.print("numero matriz"+"("+i+"-"+j+")");
matriz[i][j]=calculadora.nextInt();
}
}
i=0;
for( j=0;j<=2;j++){
co=0;
se=1;
s=1;
for(int k=1;k<=2;k++){
for(int m=0;m<=2;m++){
if( m!=j){
co=co+1;
if(co==1 || co==4){
se=se*matriz[k][m];
}
if(co==2 || co==3){
s=s*matriz[k][m];
}
if(i+j==1){
vec= -(se-s)*matriz[i][j];
}
if(i+j!=1){
vec= (se-s)*matriz[i][j];
}
}
}
}
web=vec+web;
}
for(q=0;q<=2;q++){
for(y=0;y<=2;y++){
matriz2[q][y]=matriz[y][q];
}
}
System.out.println("determinante de la matriz es "+web);
System.out.println("la matriz adjunta de la transpuesta ");
for(w=0;w<=2;w++){
for(t=0;t<=2;t++){
conta=0;
so=1;
sc=1;
for(x=0;x<=2;x++){
for(z=0;z<=2;z++){
if(x!=w && z!=t){
conta=conta+1;
if(conta ==1 || conta==4){
so=so*matriz2[x][z];
}
if(conta ==2 || conta==3){
sc=sc*matriz2[x][z];
}
if(w+t==1 || w+t==3){
de = -(so-sc);
}
if((w+t)%2==0){
de=(so-sc);
}
}
}
}
System.out.print("("+de+")"+",");
}
}
}
}
package inversa;
import java.util.Scanner;
public class Inversa {
public static void main(String[] args) {
Scanner calculadora;
calculadora = new Scanner(System.in);
int i,vec=0,se,s,co,q,y,j;
int w,t,x,z,conta,so,sc,de=0,web=0;
int matriz2[][];
int matriz[][];
matriz2=new int[3][3];
matriz=new int[3][3];
for(i=0;i<=2;i++){
for(j=0;j<=2;j++){
System.out.print("numero matriz"+"("+i+"-"+j+")");
matriz[i][j]=calculadora.nextInt();
}
}
i=0;
for( j=0;j<=2;j++){
co=0;
se=1;
s=1;
for(int k=1;k<=2;k++){
for(int m=0;m<=2;m++){
if( m!=j){
co=co+1;
if(co==1 || co==4){
se=se*matriz[k][m];
}
if(co==2 || co==3){
s=s*matriz[k][m];
}
if(i+j==1){
vec= -(se-s)*matriz[i][j];
}
if(i+j!=1){
vec= (se-s)*matriz[i][j];
}
}
}
}
web=vec+web;
}
for(q=0;q<=2;q++){
for(y=0;y<=2;y++){
matriz2[q][y]=matriz[y][q];
}
}
System.out.println("determinante de la matriz es "+web);
System.out.println("la matriz adjunta de la transpuesta ");
for(w=0;w<=2;w++){
for(t=0;t<=2;t++){
conta=0;
so=1;
sc=1;
for(x=0;x<=2;x++){
for(z=0;z<=2;z++){
if(x!=w && z!=t){
conta=conta+1;
if(conta ==1 || conta==4){
so=so*matriz2[x][z];
}
if(conta ==2 || conta==3){
sc=sc*matriz2[x][z];
}
if(w+t==1 || w+t==3){
de = -(so-sc);
}
if((w+t)%2==0){
de=(so-sc);
}
}
}
}
System.out.print("("+de+")"+",");
}
}
}
}
hola gracias excelente codigo me ha funcionado de maravilla pero por mas que le doy vueltas no logro determinar el porque las variables o que es lo que haces en cada ciclo for, me podrias explicar? te lo agradeceria mucho
ResponderEliminarHola Dorian, probablemente ya cerraste tu bachillerato o Ingenieria en Sistemas, pero yo tampoco sé :v
Eliminaramigo, y si yo lo quiero implementar para una matriz de tamaño n*n, que le tendría que modificar, o definitivamente este código no soportaría ese cambio?
ResponderEliminarMuchas gracias.
Bueno el aporte gracias..!!!
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminar