Ir ao conteúdo
  • Cadastre-se

Dev C++ - Matriz M x N


Posts recomendados

Bom dia á todos do Clube do Hardware.

Sou iniciante na área de Programação em C++ e preciso da ajuda de vocês.

Preciso elaborar o seguinte programa:

 
Escreva um programa que carrega uma matriz de M x N lidos pelo teclado com numeros aleatorios compreendidos entre 1 e 400. 
Considere o produto M x N <= 300. Em seguida escreva um procedimento para carregar e imprimir o conteúdo da matriz
Em seguida implemente os seguintes procedimentos tendo como parametro a matriz carregada:
A ) Um procedimento para verificar e imprimir a quantidade de vezes que cada numero aparece na matriz; 
B ) Uma funcao que calcula a soma dos 2 menores numeros contidos na matriz.
C ) Uma funcao que calcula a diferenca entre os dois maiores numeros contidos nos vetores (Primeiro Maior - Segundo Maior).
D ) Um metodo que imprima o numero que mais se aproxima da media dos elementos da matriz, informando sua posicao.
 
Bem, já fiz boa parte do programa, mais exatamente dos itens A até o C e acabei me enrolando no D. E preciso da ajuda de vocês na resolução dele, pois o mesmo é de suma importância para mim. Segue o código:
 

#include <time.h>#include <iostream>#include <cstdlib>#include <stdlib.h>#include <stdio.h>using namespace std;int linhas, colunas;int numlinhas, numcolunas, limite;int matriz[100][100];int menor = 400;int menor2 = 400;int maior = 0;int maior2 = 0;float media = 0;int numaproximado = 400;int numdamatriz;int aleatorio;int numerosaleatorios[1000];// FUNÇÃO QUE CARREGA (INSERE VALORES ALEATÓRIOS POR MEIO DO SRAND) A MATRIZ.void carrega(){		srand(time(NULL));		for (linhas=0; linhas<numlinhas; linhas++){			for (colunas=0; colunas<numcolunas; colunas++){			aleatorio = matriz[linhas][colunas] = rand()%400+1;			numerosaleatorios[aleatorio] += 1;		}	}}// FUNÇÃO QUE IMPRIME A MATRIZ.void imprime(){		for (linhas=0; linhas<numlinhas; linhas++){			for (colunas=0; colunas<numcolunas; colunas++){			printf("%5d", matriz[linhas][colunas]);		}cout<<"\n";cout<<"\n";	}}// FUNÇÃO QUE VERIFICA A QUANTIDADE DE VEZES QUE O NÚMERO É REPETIDO.void imprimeqtdvezes(){		cout<<"ITEM A:"<< endl;		for (int i = 0; i <= 400; i++){		if(numerosaleatorios[i] != 0){		cout << "O numero " << i << " foi repetido " << numerosaleatorios[i] << " vez(es)." << endl;		}	}}// VERIFICA O MENOR NÚMERO.void menornumero(){ cout << "\n";cout << "ITEM B:" << endl;		 for(int linhas=0; linhas<numlinhas; linhas++){			for (int colunas=0; colunas<numcolunas; colunas++){ 			if (matriz[linhas][colunas]<menor){			menor=matriz[linhas][colunas]; 			}		}	}}// DEPOIS DO MENOR NÚMERO DEFINIDO, É DEFINIDO O SEGUNDO MENOR NÚMERO.void calculasoma2menores(){		menornumero();		for (int linhas=0; linhas<numlinhas; linhas++){			for (int colunas=0; colunas<numcolunas; colunas++){			if (matriz[linhas][colunas]>menor && matriz[linhas][colunas]<menor2){			menor2=matriz[linhas][colunas];			}		}	} }// VERIFICA O MAIOR NÚMERO.void maiornumero(){cout << "ITEM C:" << endl;		for (int linhas=0; linhas<numlinhas; linhas++){			for (int colunas=0; colunas<numcolunas; colunas++){			if (matriz[linhas][colunas]>maior){			maior=matriz[linhas][colunas]; 			}		}	}}// DEPOIS DO MAIOR NÚMERO DEFINIDO, É DEFINIDO O SEGUNDO MAIOR NÚMERO.void calculadiferenca2maiores(){	maiornumero();		for (int linhas=0; linhas<numlinhas; linhas++){			for (int colunas=0; colunas<numcolunas; colunas++){			if (matriz[linhas][colunas]<maior && matriz[linhas][colunas]>maior2){			maior2=matriz[linhas][colunas];			}		}	}}// FUNÇÃO QUE TIRA A MÉDIA E DIZ QUAL O NÚMERO DA MATRIZ MAIS SE APROXIMA DA MESMA.void tirarmedia(){	cout << "\n";float total = 0;	for (int linhas=0; linhas<numlinhas; linhas++){		for (int colunas=0; colunas<numcolunas; colunas++){total = total + matriz[linhas][colunas];		}media = total/(numlinhas*numcolunas);	}	for (int linhas=0; linhas<numlinhas; linhas++){		for (int colunas=0; colunas<numcolunas; colunas++){						if (matriz[linhas][colunas] < media){			numdamatriz = media - matriz[linhas][colunas];			}else{			numdamatriz = matriz[linhas][colunas] - media;		}			matriz[linhas][colunas] = numdamatriz; 			}		}	}							int main(){// ÍNICIO DO MÉTODO MAIN.cout << "=========================== ATIVIDADE GRUPO VX - Matriz M x N - JOAO VITOR CORREIA E GABRIEL SOUZA ===========================" << endl << endl;cout << "Escreva um programa que carrega uma matriz de M x N lidos pelo teclado com numeros aleatorios compreendidos entre 1 e 400." << endl; cout << "Considere o produto M x N <= 300. Em seguida escreva um procedimento para carregar e imprimir o conteúdo da matriz." << endl;cout << "Em seguida implemente os seguintes procedimentos tendo como parametro a matriz carregada:" << endl << endl;cout << "A) Um procedimento para verificar e imprimir a quantidade de vezes que cada numero aparece na matriz; " << endl; cout << "B) Uma funcao que calcula a soma dos 2 menores numeros contidos na matriz." << endl;cout << "C) Uma funcao que calcula a diferenca entre os dois maiores numeros contidos nos vetores (Primeiro Maior - Segundo Maior)." << endl;cout << "D) Um metodo que imprima o numero que mais se aproxima da media dos elementos da matriz, informando sua posicao." << endl << endl;cout << "==============================================================================================================================" << endl << endl;while (1){cout << "Numero de linhas: ";cin >> numlinhas;cout << "Numero de colunas: ";cin >> numcolunas;if (numlinhas * numcolunas <= 300){//cout << "Limite de numeros aleatorios: ";//cin >> limite;cout << "\n";carrega();imprime();imprimeqtdvezes();calculasoma2menores();cout << menor << " é o menor numero, " << menor2 << " é o segundo menor numero.\n"; cout << "O resultado da soma dos dois menores numeros é: " << menor+menor2;cout<<"\n";cout<<"\n";calculadiferenca2maiores();cout << maior << " é o maior numero, " << maior2  << " é o segundo maior numero.\n"; cout << "O resultado da diferenca dos dois maiores numeros é: " << maior-maior2; cout<<"\n";cout<<"\n";tirarmedia();cout<<"A media da matriz é: "<<media << endl;cout << "O num da matriz que mais se aproxima é: " << numdamatriz;break; 	}else{cout << "\n";cout << ">>>>>>>>>>>>>>>>>>>>>>>>>>>>> INSIRA VALORES VALIDOS : (Num. de Linhas * Num. de Colunas <= 300) <<<<<<<<<<<<<<<<<<<<<<<<<<<<<" << endl << endl;		}	}}

Aguardo respostas o mais breve possível, abraços !

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

1) Torne a variável "numdamatriz" em duas. Uma sendo "numdalinha" e outra "numdacoluna". Pode também tornar a variável "numdamatriz" em um vetor de 2 posições. Fica a seu critério.

 

2) Dentro da função "tirarmedia()", crie duas variáveis. Por exemplo: "diferenca" e "diferencaMedia".

  - A variável "diferenca" será utilizada no lugar da atual "numdamatriz".

  - A variável "diferencaMedia" será para armazenar a menor diferença total. Sempre que a comparação for verdade, armazene as posições da matriz em suas respectivas variáveis ("numdalinha" e "numdacoluna").

 

A partir daí, é só mostrar o valor na tela utilizando as posições armazenadas para posicionar a matriz "matriz[][]".

 

Espero ter ajudado.

Att

Link para o comentário
Compartilhar em outros sites

  • 4 meses depois...

1) Torne a variável "numdamatriz" em duas. Uma sendo "numdalinha" e outra "numdacoluna". Pode também tornar a variável "numdamatriz" em um vetor de 2 posições. Fica a seu critério.

 

2) Dentro da função "tirarmedia()", crie duas variáveis. Por exemplo: "diferenca" e "diferencaMedia".

  - A variável "diferenca" será utilizada no lugar da atual "numdamatriz".

  - A variável "diferencaMedia" será para armazenar a menor diferença total. Sempre que a comparação for verdade, armazene as posições da matriz em suas respectivas variáveis ("numdalinha" e "numdacoluna").

 

A partir daí, é só mostrar o valor na tela utilizando as posições armazenadas para posicionar a matriz "matriz[][]".

 

Espero ter ajudado.

Att

Boa tarde @ScreenBlack, tem como me ajudar, sou iniciante também e estou com problema nesse ultimo item "D".

 

Segue trecho do meu script

 

void media(){
   total = 0;
      for (M=0; M<=numlinhas; M++){
        for (N=0; N<=numcolunas; N++){
        total = total + matriz[M][N];
}
        float media = total/(numlinhas*numcolunas);
}
}
 
void dif_media(){
float media;
num_menor = media - matriz[0][0];
      for (M=0; M<numlinhas; M++)
        for (N=0; N<numcolunas; N++)
           if (num_menor<0){
           num_menor=num_menor*-1;
}
else{
num_menor=num_menor*1;
}
 
cout<<"o numero da matriz que mais se aproxima é "<<num_menor<<endl;
}
 
 
O número que se aproxima da média, ta sendo sempre o primeiro numero da matriz!

Gostaria de saber onde esta o erro. Obrigado!

Link para o comentário
Compartilhar em outros sites

O valor próximo da média pode ser um valor anterior ou posterior à própria média.

 

Para isso, precisa basicamente, iniciar a variável "valorProximo" com um valor contido na matriz (qualquer um) e executar 5 comparações entre o valor contido numa certa posição da matriz para com a média:

1) Se forem são iguais, o valor da matriz será verdadeiro;2) Se valor da matriz e o valor da variável "valorProximo" forem menor que a média, verificar se o valor da matriz é maior que a variável "valorProximo", então, o valor da matriz será verdadeiro;3) Se valor da matriz e o valor da variável "valorProximo" forem maior que a média, verificar se o valor da matriz é menor que a variável "valorProximo", então, o valor da matriz será verdadeiro;4) Se valor da matriz é maior que a média e o valor da variável "valorProximo" menor que a média, verificar se o resultado da subtração (valor da matriz - média) é menor do que o resultado da subtração (média - "valorProximo"), então, o valor da matriz será verdadeiro;5) Se valor da matriz é menor que a média e o valor da variável "valorProximo" maior que a média, verificar se o resultado da subtração (média - valor da matriz) é menor do que o resultado da subtração ("valorProximo" - média), então, o valor da matriz será verdadeiro.
Link para o comentário
Compartilhar em outros sites

Segue o que eu consegui fazer, mas ta retornando ainda o primeiro valor da matriz e agora negativo.
O que eu teria que mudar?

void dif_media(){	int valoraprox=matriz[0][0];	float media;	num_menor = media - matriz[0][0];	for (M=0; M<numlinhas; M++)		for (N=0; N<numcolunas; N++)	if (valoraprox == media){		cout<< " " << num_menor;		}	   if (valoraprox and num_menor < media){	   	if (num_menor>valoraprox){	   		cout << " " << num_menor;		}	}		if (num_menor and valoraprox > media){		 if (num_menor < valoraprox){		 cout << " " << num_menor;		 }	}		if (num_menor > media and valoraprox < media){		  if ((num_menor - media) < (media - valoraprox)){				cout << " " << num_menor;		  }	}		if (num_menor < media and valoraprox > media){			if ((media - num_menor) < (valoraprox - media)){				cout << " " << num_menor;			}		}			}
Link para o comentário
Compartilhar em outros sites

Ah sim, tinha entendido errado, vou ver se consigo ajeitar aqui o cod, eu tava fazendo do jeito que o professor tava explicando, mas nem entendi, ja pelo seu método compreendi mais!


So tem uma coisa que não to compreendendo. 

A variavel "valorproximo" e a media eu sei quais são. Qual seria o valor da matriz? matriz[M][N] é?

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!