Para verificar o maior valor (ou o menor) em uma matriz, assim como com Vetores, deve-se percorrer todos os elementos dessa matriz armazenando o maior valor encontrado (a cada momento) em uma variável que represente o maior valor (ou o menor valor). Esse valor deve ser mostrado apenas no final da verificação.
A condição de verificação é intuitiva. Se o valor da variável que representa o maior valor for menor que o valor da posição comparada, o novo valor da variável maior deve ser agora o valor da própria variável comparada. Não sabendo da dimensão da matriz, assumiremos que o maior valor a princípio será o do primeiro elemento dessa matriz. Se tivéssemos uma matriz de 1 elemento, int M[1][1], o maior valor estaria na posição M[0][0]. Ou seja, se tivermos a seguinte matriz...
int M[3][3] = {
{5,6,3},
{2,4,1},
{8,9,7}};
int MAIOR = M[0][0];
for...
...estará definido que a princípio o maior valor será o 5 no elemento M[0][0], isso antes de verificar em toda a matriz.
Então, durante a verificação iremos comparar o valor de cada elemento com o valor da variável MAIOR.
O seguinte passo, será comparar o valor da variável MAIOR com o valor do segundo elemento da matriz M (já que MAIOR tem o valor do primeiro elemento da matriz M). Então, se MAIOR for menor que M[0][1], MAIOR deve receber o valor de M[0][1], já que até então o maior valor encontrado estará nesse elemento M[0][1]. Se MAIOR NÃO for menor que M[0][1], nada deverá acontecer. Isto nos leva a...
(...)
int n=3, m=3; //OBS: Para uma matriz genéria, deve-se receber a quantidade de linhas (n) e colunas (m).
int M[3][3] = {
{5,6,3},
{2,4,1},
{8,9,7}};
int MAIOR = M[0][0] ...
for (int i = 0; i < n; i++){
for (int j = 0; j < m; j++){
if(MAIOR < M[i][j]){;
MAIOR = M[i][j];
...
Para saber a posição desse valor na matriz, deveremos armazenar em outras variáveis os valores de i e j cada vez que o valor da variável MAIOR for atualizado, ou seja, a cada vez que a expressão MAIOR < M[i][j] retornar verdadeiro. Assim como fizemos a suposição de que o maior valor, a princípio estaria na primeira posição, deveremos inicializar também essas duas variáveis com os índices do primeiro elemento da matriz M (M[0][0]).
(...)
int MAIOR=M[0][0], Mi=0, Mj=0;
for (int i = 0; i < n; i++){
for (int j = 0; j < m; j++){
if (MAIOR < M[i][j]) {
MAIOR = M[i][j];
Mi = i;
Mj = j;
}
}
}
cout << MAIOR << " M["<<Mi<<"]["<<Mj<<"]\n\n";
Assinar:
Postar comentários (Atom)
Redes Sociais
Eu, Jeyson Cruz, utilizo as seguintes redes sociais para divulgar meus trabalhos e projetos acadêmicos.
Facebook - Engenharia, Ciências e Tecnologia
facebook.com/ectvideos
Onde interajo mais diretamente com o pessoal.
ect-videos.blogspot.com.br/
Onde organizo os Vídeos e Playlists.
Obrigado, até mais.
Jeyson Cruz
Jeyson Cruz
olá , estou com um problema para mostrar a posição do maior número na matriz Bidimensional, não sei como usar esse cout , então eu tentei assim :
ResponderExcluir(.......)
for(i=0;i<=6;i++)
{
for(j=0;j<=3;j++)
{
if(maior<m[i][j])
{
maior = m[i][j];
Mj=j;
Mi=i;
}
else;
}
}
printf("o maior valor da matriz e: %d", maior);
printf("\na posicao e : [%d] [%d]", Mi,Mj);
(...)
eu fiz uma matriz 7x4, e aparentemente está tudo ok, o unico problema é mostrar a posição do maior valor, se houver a possibilidade de me ajudar, estou aceitando , obrigado
Este comentário foi removido pelo autor.
ExcluirOlá, Douglas
ExcluirAs suas rotinas printf estão corretas, creio que o seu problema não seja esse. Observe que não há a necessidade desse else nessa parte do seu código.
Ok... Imprimir com cout é fácil também.
Sem muitos detalhes, o cout é um objeto existente no arquivo de cabeçalho chamado iostream. Desse modo, para usá-lo, fazemos #include no topo do código em C++. Já o printf, está definido na stdio.h.
Quando queremos imprimir algo com o objeto cout utilizamos o operador <<.
Ex: cout << "Hello from C++.";
Note que imprimimos apenas uma string. Mas, caso queira imprimir várias outras coisas em uma única instrução, basta adicionar o operador << antes de cada string/variável/palavra-chave a ser impressa.
Ex: cout << "Maior está na posição [" << Mi << "][" << Mj << ']'; //ponto e vírgula ao final.
Voltando à questão, veja como fiz (utilizando printf e cout):
int main(){
int m[7][4], maior,Mj,Mi,i,j;
//Gera uma matriz com valores quaisquer...
for(i=0;i<=6;i++){
for(j=0;j<=3;j++){
m[i][j] = (i*j*j)-(i*j);
}
}
maior = m[0][0]; //O primeiro valor
for(i=0;i<=6;i++){
for(j=0;j<=3;j++){
cout << m[i][j];//Imprime os valores da matriz
if(maior<m[i][j]){
maior = m[i][j];
Mj=j;
Mi=i;
cout << '*'; //Coloca * em todos os valores que passaram pela var maior...
//...exceto
}
cout << '\t';//Espaço após cada valor
}
cout << endl;//Pula uma linha ao final da última coluna.
}
printf("\nO maior valor da matriz e: %d", maior);
printf("\na posicao e : [%d] [%d]", Mi,Mj);
return 0;
}
Qualquer dúvida, me envie seu código completo pelo email jeysoncruz@gmail.com
Um grande abraço,
Jeyson Cruz
muito obrigado, foi de grande ajuda, eu consegui fazer aqui ...
Excluiraliás , to aprendendo muito neste seu blog...
muito obrigado...
Douglas,
ExcluirIndico que você se inscreva no nosso canal youtube.com/jeysoncruzs, pois, infelizmente não estou conseguindo atualizar o blog. Lá tem vários vídeos novos.
Obrigado...