Matriz em java [RESOLVIDO]

10 respostas
B

Olá, Pessoal estou com duvidas em calcular matrizes, vou postar o meu codigo a baixo, porem ele não me traz o produto exato do calculo das matrizes, gostaria de saber como faço para exibir o resultado em forma de matriz tb grato.

public class Exer11{

public static void main(String[] args){

Scanner sc = new Scanner(System.in);
System.out.println("Informe a primeira matriz: ");
    int n = sc.nextInt();
    int[][] mat1 = new int[n][n];
    int prod = 0;
    int p = 0;
     for(int i=0; i<n; i++){
      for(int j=0; j<n; j++){
            mat1[i][j] = sc.nextInt();
      }
     }


    System.out.println("Informe a segunda matriz: ");
    int n2 = sc.nextInt();
    int[][] mat2 = new int[n2][n2];

     for(int i=0; i<n2; i++){
      for(int j=0; j<n2; j++){
            mat2[i][j] = sc.nextInt();
      }
     }

    if(n == n2){
       for(int i=0; i<n; i++){
        for(int j=0; j<n2; j++){
         prod = 0;
            for(p=0; p<n; p++){
             prod += (mat1[i][p]* mat2[p][j]);
            }
            mat1[i][j] = prod;
        }
       }
    } else {
       System.out.println("Nao e possivel realizar o calculo !!");
      }

    sc.close();

    System.out.println("Produto da matriz ");
    for(int i=0; i<n; i++){
     for(int j=0; j<n; j++){
            System.out.println(" ");
            System.out.println(mat1[i][j]+" ");
            System.out.println(" ");
     }
    }

}

}

10 Respostas

A

Tenho um programa que copia matrizes vou procurar aqui e te retorno

B

grato

A
public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		
    		System.out.println("Informe a primeira matriz: ");
    	    int n = sc.nextInt();
    	    int[][] mat1 = new int[n][n];
    	    int prod = 0;
    	    int p = 0;
    	     for(int i=0; i<n; i++){
    	      for(int j=0; j<n; j++){
    	            mat1[i][j] = sc.nextInt();
    	      }
    	     }


    	    System.out.println("Informe a segunda matriz: ");
    	    int n2 = sc.nextInt();
    	    int[][] mat2 = new int[n2][n2];

    	     for(int i=0; i<n2; i++){
    	      for(int j=0; j<n2; j++){
    	            mat2[i][j] = sc.nextInt();
    	      }
    	     }

    	    if(n == n2){
    	       for(int i=0; i<n; i++){
    	        for(int j=0; j<n2; j++){
    	         prod = 0;
    	            for(p=0; p<n; p++){
    	             prod += (mat1[i][p]* mat2[p][j]);
    	            }
    	            mat1[i][j] = prod;
    	        }
    	       }
    	    } else {
    	       System.out.println("Nao e possivel realizar o calculo !!");
    	      }

    	    sc.close();
    	    
    	    System.out.println("Produto da matriz ");
    	    for(int i=0; i<n; i++){
    	     for(int j=0; j<n; j++){
    	           
    	    	 	if(j==n-1) {
    	    	 		System.out.println(mat1[i][j]+" ");
    	            }else {
    	            	
    	            	
    	            	System.out.print(mat1[i][j]+" ");
    	            }
    	            
    	            
    	            
    	     }
    	   
    	    }
    	}

Tenta assim aqui deu certo ‘-’
segredo print printa na msm linha, println quebra(quando ele chega na ultima posiçao da linha ele quebra)

A
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#include <string.h>
#define size 2
// matriz exemplo para comparaçao
void exemplo(int a, int b, int c[a][b]){
	int i,j;
	
	for(i=0;i<a;i++){
		for(j=0;j<b;j++){
		c[i][j] = 0;
		}
	}
	
	
	for(i=0;i<a;i++){
		
			c[i][i] = 1;
	}
	
}

// funçao mostrar matriz
void mostra(int a, int b, int vetor[a][b]){
	
	int i, j;
		printf("\n\n Matriz quadrada ");
		
		for(i=0;i<a;i++){
			for(j=0;j<b;j++){	
				if(j==0){
					printf("\n");
				}						
				printf("  %d", vetor[i][j]);								
			}
		}
	printf("\n\n");

}

// randomizar matriz
void randomizar(int a, int b, int Arr[a][b]){
	int j, i;
			
	srand(time(NULL)); // randomize seed
			
	for(i=0;i<a;i++){
		for(j=0; j<b;j++){
			Arr[i][j] = rand()%size;		
		}
				
	}  
	
}


int main (void){
	int i = 0,j = 0;
	int a = 0, b = 0;
	FILE *arg;
	
	// a = coluna  b = linha
	// atribuindo linha e colunas
	while(a!=b || (a==0 && b==0)){
		//se nao for quadrada
		if(a!=b){
			printf("\n\nMatriz nao quadrada\n "); 
			printf("\n\nDigite novamente\n\n ");	
		}
	printf("\nDigite uma Matriz quadrada\n\n");
	printf("Digite o numero de Colunas...\n");
	scanf("%d", &a);
	printf("Digite o numero de Linhas...\n");
	scanf("%d", &b);
	
	}
	// matriz randomizada
	int vetor[a][b];
	// matriz exemplo
	int c[a][b];
	
	// declarando a matrizes
	randomizar(a,b,vetor);
	exemplo(a,b,c);
	
	// abrindo arquivo e escrevendo as informaçoes
	arg = fopen("arg.txt", "w");
	
  	if(arg == NULL){		//testando se o arquivo foi realmente criado
 	 	printf("Erro na abertura do arquivo!");
 	 	return 1;
	}
	fprintf(arg, "MATRIZ ALEATORIA\n\n");
	for(i=0;i<a;i++){
		for(j=0;j<b;j++){	
			if(j==0){
				fprintf(arg, "\n");
			}						
			fprintf(arg, "  %d", vetor[i][j]);								
		}
	}
		
	printf("\n\nDados gravados com sucesso!\n\n");
	
	//mostrando matrizes
	printf("\n\n******************************************************************");
	printf("\n\n\n\nEXEMPLO");
	mostra(a,b,c);
	printf("\n\n\n\nRANDOMIZADA");
	mostra(a,b,vetor);

	// Fazer verificaçao se a matriz esta correta e Corrigindo e escrever no .txt se estiver incorreta
	int verf=0;
	int verf2=0;
	
	for(i=0;i<a;i++){
		for(j=0;j<b;j++){
			
			if(vetor[i][j] == c[i][j]){ // verificar igualdade entre as matrizes e adicionar pontos a uma variavel
				verf++;
			}
								
		}
	}
	
	verf = a*b;
	printf("\n\n");
	
	if(verf==verf2){
			printf("Matriz esta correta. \n\n");
	}else{
		
		printf("Matriz esta incorreta, corrigindo... \n\n");
		for(i=0;i<a;i++){
			for(j=0;j<b;j++){
				
				if(vetor[i][j] != c[i][j]){  // se o valor do local na matriz estiver diverente igualar o valor
					vetor[i][j] = c[i][j];
				}
									
			}
		}
		fprintf(arg, "\n");
		fprintf(arg, "\n\nMATRIZ ATUALIZADA\n\n");
		for(i=0;i<a;i++){
			for(j=0;j<b;j++){	
				if(j==0){
					fprintf(arg, "\n");
				}						
				fprintf(arg, "  %d", vetor[i][j]);								
			}
		}
		
		printf("\n\nDados gravados com sucesso!\n\n");
	}
	   

	//mostrando matrizes
	printf("\n\n******************************************************************");
	
	printf("\n\n\n\nMATRIZ CORRIGIDA");
	
	mostra(a,b,vetor);
	printf("\n\n******************************************************************");
	
	// mostrando oq esta dentro do arquivo

	char texto_str[20]; // criando buf
	fclose(arg);
	arg = fopen("arg.txt", "r");
	
	char arq_most;
	fflush(stdin);
	
	printf("\n\nDeseja ver o arquivo gravado? Y or N\n");
	scanf("%c", &arq_most);
	
	if(arq_most=='y'){
		while(fgets(texto_str, 20, arg) != NULL)
			printf("%s", texto_str);
	}
	
	
	fclose(arg);
	getch();
 	
 	
   
    
}

esse foi o programa que eu fiz em c a um tempo, pode conter coisas que ajudem a fazer algo que deseja fazer.

B

obrigado amigo vou utilizar como base, se eu conseguir resultado posto aqui

B

Deu certo na hora de exibir o resultado, agora só falta eu resolver a questão da conta que ainda ta calculando errado. Obg

A

Ok, qualquer duvida retorne que eu tento ajudar.

I

Rapaz, para funcionar a multiplicação de matrizes, é necessário que a primeira matriz tenha número de colunas igual ao número de linhas da segunda matriz. Assim, assuma o seguinte:

mat1 -> Matriz 1
mat2 -> matriz 2
mat3 - > Matriz resultante da multiplicação

NL1 -> Número de linhas da matriz 1
NC1 -> Número de colunas da matriz1
NL2 -> Número de linhas da matriz2
NC2 -> Número de colunas da matriz 2

NL3 = NL1 -> Número de linhas da terceira matriz
NC3 = NC2 -> Número de colunas da terceira matriz

for( int i = 0; i < NL1; i++ ) {
  for( int j = 0; j < NC2; j++ ) {
    mat3[ i ] [ j ] = 0;
    for( int k = 0; k < NC1; k++ )
        mat3[ i ][ j ] += mat1[ i ][ k ] * mat2[ k ][ j ];
  }
}

Qualquer dúvida, pode falar. Mas, creio que a solução acima resolve o problema.
Valeu!

B

Perfeito cara achou o X do tesouro rsrsrs, era isso que estava faltando agora a conta esta completa, o erro do meu código era que eu estava armazenado o resultado em uma variável comum do tipo Inteiro, ao mudar essa variável para matriz e armazenar o resultado nela o problema foi sanado e a conta está completa, grato.

B

Código funcional:

import java.util.Scanner;

public class Exer11{

public static void main(String[] args){

Scanner sc = new Scanner(System.in);

int p = 0;

System.out.println("Informe a primeira matriz: ");

int n = sc.nextInt();

int[][] mat1 = new int[n][n];

int[][] prod = new int[n][n];
for(int i=0; i<n; i++){
      for(int j=0; j<n; j++){
            mat1[i][j] = sc.nextInt();
      }
     }


    System.out.println("Informe a segunda matriz: ");
    int n2 = sc.nextInt();
    int[][] mat2 = new int[n2][n2];

     for(int i=0; i<n2; i++){
      for(int j=0; j<n2; j++){
            mat2[i][j] = sc.nextInt();
      }
     }

    if(n == n2){
       for(int i=0; i<n; i++){
        for(int j=0; j<n2; j++){
            for(p=0; p<n2; p++){
             prod[i][j] += mat1[i][p]* mat2[p][j];
            }

        }
       }
    } else {
       System.out.println("Nao e possivel realizar o calculo !!");
      }


    System.out.println("Produto da matriz ");
    for(int i=0; i<n; i++){
     for(int j=0; j<n2; j++){
            if(j==n-1){
             System.out.println(prod[i][j]+" ");
            }else {
                    System.out.print(prod[i][j]+" ");
             }
     }
    }

    sc.close();

}

}

Criado 19 de março de 2020
Ultima resposta 20 de mar. de 2020
Respostas 10
Participantes 3