Ir ao conteúdo
  • Cadastre-se

Posts recomendados

Postado

Prezados,

 

Preciso construir um programa que  que leia duas matrizes de reais (de no maximo 100x100), e mostre o resultado da soma,  caso não seja possivel somar, escrever na tela "Matrizes incompativeis para a soma!" 

Porém, sou extremamente leigo em C++

Vocês poderiam me ajudar?

  • Curtir 1
  • Membro VIP
Postado

Caro usuário,

 

Seja bem-vindo ao Clube do Hardware.

 

No intuito de servir como fonte de pesquisa no caso de instituições de ensino, informamos que incorrer no resolvimento por completo de questões relacionadas a disciplinas escolares de cursos técnicos e faculdades podem ser revistas e removidas pela Equipe de Moderação do Clube do Hardware.

 

Para sanar dúvidas sobre esse tipo de problema, por gentileza, publique o passo a passo do desenvolvimento da questão, projeto, monografia ou conteúdo em dúvida para que possamos analisar se a resposta está correta ou não, ou para que possa ser auxiliado com a dúvida no desenvolvimento do exercício.

 

Infelizmente, não há como resolver os trabalhos pelos usuários. O objetivo do Clube do Hardware é auxiliar seus usuários a encontrar soluções para que possam sanar suas dúvidas, e não de trazer soluções prontas para seus usuários. Além disso, copiar e colar respostas que não são de autoria própria do qualquer usuário é considerado plágio, o que é ilegal.

 

Esperamos que compreenda.

 

Atenciosamente,

Equipe Clube do Hardware

  • Curtir 2
Postado

@devair1010 A soma das matrizes só possível se essas forem de mesma ordem, ou seja, devem possuir o mesmo número de linhas e colunas.

Ainda estou tentando construir o código, até o momento só consigo fazer a leitura de duas matrizes, porém com o tamanho já definido.

No problema, o usuario deve determinar a ordem das matrizes com uma entrada de 1 a 100.

Agradeço desde já!

  • Obrigado 1
Postado

Você pode implementar uma matriz usando um vetor normal. Por exemplo, numa matriz 3 por 3, do tipo

 

a b c

d e f

g h i

 

os elementos podem ser agrupados num vetor convencional:

 

a b c d e f g h i

 

Se o numero de linhas é N e o numero de colunas é M, então

 

float *matrix = new float[N*M];

 

E o elemento a com coordenadas (n, m) pode ser encontrado com uma fórmula mágica:

 

a = matrix[n*N + m];

 

Essa técnica chama-se ordenamento row-major. De fato você pode reduzir qualquer tensor com varias dimensões num vetor 1D. Assim, pra uma matriz A e uma matriz B, a soma C seria algo tão simples quanto

 

for (int n = 0; n < N; ++n)
{
	for (int m = 0; m < M; ++m)
	{
		C[n*N + m] = A[n*N + m] + B[n*N + m];
	}
}

 

E quando N = M, tudo torna-se ainda mais simples (e extremamente eficiente):

 

for (int n = 0; n < N*M; ++n)
{
	C[n] = A[n] + B[n];
}

 

E por fim, como é um projeto em C++, você poderia empacotar os vetores, a inicialização de elementos, os operadores, destruição dos ponteiros etc. numa classe. Não é necessariamente importante mas dá o charme de C++.

  • Curtir 1
  • Obrigado 1
Postado

@V!OLADOR muito obrigado! foi de grande ajuda!

Alguém saberia o porque de nunca entrar no primeiro "if" mesmo quando são digitados valores idênticos?

Sempre estou recebendo a mensagem que são incompatíveis para soma.

Agradeço desde já!

#include <stdio.h>

int main () {
	


int r1, c1, r2, c2;
printf("\nDigite o número de linhas da primeira matriz: \n");
scanf("%d", &r1);
printf("\nDigite o número de colunas da primeira matriz: \n");
scanf("%d", &c1);
printf("\nDigite o número de linhas da segunda matriz: \n");
scanf("%d", &r2);
printf("\nDigite o número de colunas da segunda matriz: \n");
scanf("%d", &c1);



if(c1 == c2 && r1 == r2){
	
int m1 [r1] [c1];
int m2 [r2] [c2];
int R [r2] [c2];
int i,j;

printf("\nDigite os valores da primeira matriz: \n");

for( i = 0; i < r1; i++){
    
	for( j = 0; j < c1; j++){
    	
    	scanf("%d", &m1[i][j]);
    	
	}  	
	
}

printf("\nDigite os valores da segunda matriz: \n");
for( i = 0; i < r2; i++){
    
	for( j = 0; j < c2; j++){
    	
    	scanf("%d", &m2[i][j]);
    	
	}  	
	
}

for( i = 0; i < r2; i++){
    
	for( j = 0; j < c2; j++){
    	
    	R[i][j]=m1[i][j]+m2[i][j];
    	
	}  	
	
}

printf("\nMatriz resultante: \n");

for( i = 0; i < r2; i++){
    
	for( j = 0; j < c2; j++){
    	
    	printf("\t%d", &R[i][j]);
    	
	}  	
	
}
	
}

else{
	
	printf("\nMatrizes incompativeis para a soma!\n");
}

return 0;

}

 

  • Curtir 1
Postado

@edupiombini  Olá,

Preste atenção no nome das variáveis, Você está especificando errado. na hora de pegar os valores com scanf().

1 hora atrás, edupiombini disse:

scanf("%d", &c1);

Você está recebendo os valores duas vezes na mesma variável.

 

Recomendo testar com valores pré definidos primeiro depois fazer o input, E utilizar nomes maiores e mais claros em variáveis para evitar que você cometa estes erros.

 

Espero ter lhe ajudado, até mais!

  • Obrigado 2
Postado

Tudo certo com o condicional, porém, a saída não faz a soma correta, acredito que esteja mostrando um endereço de memória

Matriz resultante:
        6487120 6487124 6487128 6487132

 

Alguem poderia me ajudar, por favor?

Agradeço desde já!

 

#include <stdio.h>

int main () {
	


int r1, c1, r2, c2;
printf("\nDigite o número de linhas da primeira matriz: \n");
scanf("%d", &r1);
printf("\nDigite o número de colunas da primeira matriz: \n");
scanf("%d", &c1);
printf("\nDigite o número de linhas da segunda matriz: \n");
scanf("%d", &r2);
printf("\nDigite o número de colunas da segunda matriz: \n");
scanf("%d", &c2);



if(r1 == r2 && c1 == c2){
	
int m1 [r1] [c1];
int m2 [r2] [c2];
int R [r2] [c2];
int i,j;

printf("\nDigite os valores da primeira matriz: \n");

for( i = 0; i < r1; i++){
    
	for( j = 0; j < c1; j++){
    	
    	scanf("%d", &m1[i][j]);
    	
	}  	
	
}

printf("\nDigite os valores da segunda matriz: \n");
for( i = 0; i < r2; i++){
    
	for( j = 0; j < c2; j++){
    	
    	scanf("%d", &m2[i][j]);
    	
	}  	
	
}

for( i = 0; i < r2; i++){
    
	for( j = 0; j < c2; j++){
    	
    	R[i][j] = m1[i][j] + m2[i][j];
    	
	}  	
	
}

printf("\nMatriz resultante: \n");

for( i = 0; i < r2; i++){
    
	for( j = 0; j < c2; j++){
    	
    	printf("\t%d", &R[i][j]);
    	
	}  	
	
}
	
}

else{
	
	printf("\nMatrizes incompativeis para a soma!\n");
}

return 0;

}

 

  • Curtir 1
Postado
Em 07/10/2020 às 13:48, devair1010 disse:

se as matrizes são de números sempre terá como somar

 

O enunciado pode não ser muito objetivo, mas em geral vai considerar que se não tem o mesmo número de linhas e colunas não deve somar.

 

Até poderia, "projetando" uma sobre a outra e definindo algum tipo de soma.

 

Note que em C++ você pode definir a soma das matrizes. Algo como criar uma classe matriz e definir a soma, e escrever coisas como
 

Matriz A(5,10);
Matriz outra(3,2);
Matriz Resultado = A + outras;

 

C++ foi escrita com isso em mente.

 

 

Se  enunciado não obriga, nunca leia do teclado. É muito mais fácil ler de um arquivo que você pode editar no próprio IDE. E na hora de testar é muito mais fácil e rápido. Imagine duas matrizes 20x20... apenas 800 valores fora os tamanhos. Isso quer dizer que não vai testar direito...

  • Curtir 1
  • Obrigado 1

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...