Encontrar valores repetidos no vetor
Esse post começa comentando sobre uma ambiguidade em um enunciado de tarefa anterior. Vou replicar a atividade a solução que desenvolvi para ela (junto com o vídeo onde explicado a solução).
Enunciado: escreva um programa que receba do usuário um vetor com 20 valores inteiros e apresente o maior, o menor e suas respectivas posições em que os mesmos foram informados. Caso existam números iguais mostre a posição da primeira ocorrência.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
#include <stdio.h> #define TAM 5 //cria uma constante int main() { int vet[TAM], i, maior, posMaior, menor, posMenor; //preenche o vetor for (i = 0; i < TAM; i++) { scanf("%i", &vet[i]); } //encontra o maior valor maior = vet[0]; posMaior = 0; for (i = 1; i < TAM; i++) { if (vet[i] > maior) { maior = vet[i]; posMaior = i; } } //encontra o menor valor menor = vet[0]; posMenor = 0; for (i = 1; i < TAM; i++) { if (vet[i] < menor) { menor = vet[i]; posMenor = i; } } //mostra o vetor printf("Vetor: "); for (i = 0; i < TAM; i++) { printf("%i ", vet[i]); } printf("\nMaior valor: %i - posicao: %i", maior, posMaior+1); printf("\nMenor valor: %i - posicao: %i", menor, posMenor+1); return 0; } |
Teste o código em: https://ideone.com/JpQqQm
Resolução em vídeo
Link para o vídeo:https://youtu.be/JGu84T1QPHU
1 |
<hr/> |
A solução apenas indicava a primeira ocorrência no vetor do maior e do menor valor presente (era o que eu esperava com o enunciado), mas fui questionado sobre o enunciado e resolvi apresentar uma outra solução (o questionamento foi explicado no vídeo). O vídeo a seguir apresenta a codificação para identificar os valores repetidos no vetor.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
//Caso existam números iguais mostre a posição da primeira ocorrência. #include <stdio.h> #define TAM 5 //cria uma constante int main() { int vet[TAM], i, j, valor; //preenche o vetor for (i = 0; i < TAM; i++) { scanf("%i", &vet[i]); } for (i = 0; i < TAM; i++) { for (j = i+1; j < TAM; j++) { if (vet[i] == vet[j]) { printf("Valor repetido :%i: nos indices %i e %i", vet[i], i, j); for (j = j+1; j < TAM; j++) { if (vet[i] == vet[j]) { printf(" e %i", j); } } printf("\n"); } } } return 0; } |
Resolução em vídeo