Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Gabriel T.I

C++ Multiplicar diagonal principal pelo maior valor

Recommended Posts

E ai galera, estou com um problema aqui e espero que alguém possa me ajudar, o exercício é esse:

 

4) Faça um algoritmo que leia uma matriz 5 x 5 de números e encontre o maior valor da matriz. A seguir, multiplique cada elemento das diagonais principais pelo maior valor. Mostre a matriz após as multiplicações.

 

Eu fiz o código até uma certa parte, o código está lendo a matriz, exibindo na tela os valores digitados e depois o maior valor encontrado, porém agora não sei como fazer a lógica para multiplicar cada elemento da diagonal principal pelo maior valor encontrado, alguém me ajuda ai por favor, :thumbsup:

 

Segue o código até onde eu fiz:

 

#include <stdlib.h>
#include <stdio.h>
#include <locale.h>

int main()
{
		int lin,col;
		int mat[5][5];
		int maior=0;

						
	setlocale(LC_ALL,"portuguese");
						
	for(lin=0; lin<=4; lin++){
		for(col=0; col<=4; col++){
			printf("Digite um número para linha %d e um número para coluna %d: ", lin+1,col+1);
			scanf("%d", &mat[lin][col]);
		}
		printf("\n");
	}

	printf("\n Matriz:\n\n");

	for(lin=0; lin<=4; lin++){
		for(col=0; col<=4; col++){
			printf("%d\t ",mat[lin][col]);
		}
		printf("\n\n");
	}
	
		for(lin=0; lin<=4; lin++){
			for(col=0; col<=4; col++){
				if(mat[lin][col] > maior){
					maior = mat[lin][col];			
				}
			}
		}
	
	printf("\n Maior será: %d", maior);
	
	printf("\n\n");
	system("pause");
	return 0;
	
}

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

O elemento é da diagonal principal quando os índices ([j]) são iguais. 

Citação

for(lin = 0; lin < 4; lin++)

    mat[lin][lin] = 0;

 

Nesse exmplo estou zerando a diagonal principal. Só precisa adaptar para o que você quer.

  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • #include <stdlib.h>
    #include <stdio.h>
    #include <locale.h>
    
    int main()
    {
    		int lin,col;
    		int mat[5][5];
    		int maior=0;
    		int soma;
    
    						
    	setlocale(LC_ALL,"portuguese");
    						
    	for(lin=0; lin<=4; lin++){
    		for(col=0; col<=4; col++){
    			printf("Digite um número para linha %d e um número para coluna %d: ", lin+1,col+1);
    			scanf("%d", &mat[lin][col]);
    		}
    		printf("\n");
    	}
    
    	printf("\n Matriz:\n\n");
    
    	for(lin=0; lin<=4; lin++){
    		for(col=0; col<=4; col++){
    			printf("%d\t ",mat[lin][col]);
    		}
    		printf("\n\n");
    	}
    	
    		for(lin=0; lin<=4; lin++){
    			for(col=0; col<=4; col++){
    				if(mat[lin][col] > maior){
    					maior = mat[lin][col];			
    				}
    			}
    		}
    		
    		for(lin = 0; lin < 4; lin++){
        		mat[lin][lin] = 0;
        		soma = mat[lin][lin] + maior;
        	}
    	
    	printf("\n Maior será: %d", maior);
    	
    	printf("\n\n");
    	system("pause");
    	return 0;
    	
    }
    
    
    

    @MassakiMsk Bom, entendi porém ainda não sei como aplicar em meu código, pois preciso somar a diagonal principal com o maior valor encontrado da matriz, seria por esse caminho ? pode me direcionar ?

     

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    De acordo com as propriedades de matrizes, um elemento faz parte da diagonal principal quando i(linha) = j(coluna). Ou seja, ele pede que você altere o valor de cada um dos elementos da diagonal principal pelo produto do elemento com o maior número da matriz.

    int i;
    for(i = 0; i < 5; i++)
    {
    	mat[i][i] *= maior;//O operador *= é a multiplicação do valor atual por outro valor.
    }

    Como i = j, é possível fazer o calculo com apenas um for.

    • Curtir 2
    • Obrigado 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • for(lin=0; lin<=4; lin++){
    			for(col=0; col<=4; col++){
    				if(mat[lin][col] > maior){
    					maior = mat[lin][col];			
    				}
    			}
    		}
    		
    		for(lin=0; lin<=4; lin++){
    			mat[lin][lin] *= maior;
    	
    		}
    		
    	printf("\n Maior será: %d", maior);
    	
    	printf("\n A diagonal principal x o maior número da matriz será: %d", mat[lin][lin]);
    	
    	printf("\n\n");
    	system("pause");
    	return 0;
    	
    }

    @iHollyZinhO  Ok, entendi a lógica que tem que ser usada, porém estou com problemas para exibir o resultado na tela, tentei deste modo porém não deu certo, não sei em que parte estou errando ;)

     

     

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    agora, Gabriel T.I disse:
    
    for(lin=0; lin<=4; lin++){
    			for(col=0; col<=4; col++){
    				if(mat[lin][col] > maior){
    					maior = mat[lin][col];			
    				}
    			}
    		}
    		
    		for(lin=0; lin<=4; lin++){
    			mat[lin][lin] *= maior;
    	
    		}
    		
    	printf("\n Maior será: %d", maior);
    	
    	printf("\n A diagonal principal x o maior número da matriz será: %d", mat[lin][lin]);
    	
    	printf("\n\n");
    	system("pause");
    	return 0;
    	
    }

    @iHollyZinhO  Ok, entendi a lógica que tem que ser usada, porém estou com problemas para exibir o resultado na tela, tentei deste modo porém não deu certo, não sei em que parte estou errando ;)

     

     

    O seu código está quase pronto, mas o que está faltando é mostrar a nova diagonal principal, e para isso você precisará de mais um loop no final que irá de 1 a 4 para imprimir os elementos mat.

     

    Você poderia aproveitar o loop que gera a nova diagonal para mostra-la na tela, como por exemplo:

    printf("A nova diagonal principal é:");
    for(lin=0; lin<=4; lin++)
    {
    	mat[lin][lin] *= maior;
      	printf("%d", mat[lin][lin]);
    }

     

    • Curtir 1
    • Obrigado 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • #include <stdlib.h>
    #include <stdio.h>
    #include <locale.h>
    
    int main()
    {
    	int lin,col;
    	int mat[5][5];
    	int maior=0;
    						
    	setlocale(LC_ALL,"portuguese");
    						
    	for(lin=0; lin<=4; lin++){
    		for(col=0; col<=4; col++){
    			printf("Digite um número para linha [%d] e um número para coluna [%d]: ", lin+1,col+1);
    			scanf("%d", &mat[lin][col]);
    		}
    		printf("\n");
    	}
    
    	printf("\n Matriz:\n\n");
    
    	for(lin=0; lin<=4; lin++){
    		for(col=0; col<=4; col++){
    			printf("%d\t ",mat[lin][col]);
    		}
    		printf("\n\n");
    	}
    	
    	for(lin=0; lin<=4; lin++){
    		for(col=0; col<=4; col++){
    			if(mat[lin][col] > maior){
    				maior = mat[lin][col];			
    			}
    		}
    	}
    		
    	for(lin=0; lin<=4; lin++){
    		mat[lin][lin] *= maior;
    	}
    		
    	printf("\n Maior será: %d", maior);
    	
    	printf("\n\n A nova diagonal principal é:");
    	
    	for(lin=0; lin<=4; lin++){
    		mat[lin][lin] *= maior;
      		printf(" %d", mat[lin][lin]);
    	}
    
    	printf("\n\n");
    	system("pause");
    	return 0;
    }
    
    

    23634614_1006968812777664_1717864320_n.jpg.d4c33bb0e39ee92a8ce3ea30fd72988a.jpg

     

    @iHollyZinhO  Coloquei no código da mesma maneira que você mencionou, porém a multiplicação está errada ;)

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Deu errado porque tem mais um for em cima do printf do maior.

    Remova esse:

    for(lin=0; lin<=4; lin++){
    		mat[lin][lin] *= maior;
    	}

     

    • Curtir 1
    • Obrigado 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×