Olá! preciso de ajuda em um exercício, o exercicio diz que um vetor que possui 300 valores inteiros positivos chamado de A deve ser preenchido pelo usuário.
Irão existir 2 vetores auxiliares de A , chamados VALORES e FREQUENCIA.
- O vetor valores deve guardar os valores distintos de A.
- O vetor frequencia registrará quantas vezes o i-ésimo valor de VALORES ocorre em A.
- Depois deve-se imprimir um relatório com os 3 vetores.
No meu caso, fiz essas duas funções abaixo, porem estou com dificuldade em compreender como vou fazer o vetor valores:
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
void lernumeros(int A[]){
int i;
for(i = 0; i <= 299; i++) {
printf("\nDigiite um valor qualquer positivo:\n");
scanf("%d", &A[i]);
if(A[i] < 0){
printf("Numeros Negativos não são permitidos!");
break;
}
}
}
void frequencia(int valores[]){
int tam;
int i;
int temp;
int repetidos = 1;
temp = valores[0];
for (i=1;i<tam;i++) {
if( valores[i] == temp ){
repetidos++;
}
else {
// Se deu valor diferente do anterior, verifica se teve repetições
if( repetidos > 1 ) {
printf("O valor %i esta repetido %i vezes\n", temp, repetidos);
repetidos = 1;
}
// E atualiza este valor de comparação
temp = valores[i];
}
}
if( repetidos > 1 ) {
printf("O valor %i esta repetido %i vezes\n", temp, repetidos);
}
}
return 0;
}
Antes de mais nada, não preencha o vetor manualmente toda vez que quiser testar. Cria outra função que preenche o vetor aleatoriamente e testa com tamanhos menores para ver se está funcionando, ou então cria o vetor de forma estática no código e compara as respostas finais com as que você espera (já que você já sabe o que tem dentro do vetor). Ficar digitando 300 números toda hora vai te tomar muito tempo.
Algumas ideias para te ajudar:
-
Você já pode computar os vetores VALORES
e FREQUENCIA
na mesma hora que lê o valor do usuário. Toda vez que ele informar um valor novo, atualize o VALORES
(verificando se esse valor já existe e inserindo em caso negativo) e o FREQUENCIA
, adicionando 1 à quantidade de ocorrências desse valor;
-
Como não precisa ser dinâmico, você pode criar os dois vetores VALORES
e FREQUENCIA
já com 300 posições, já que esse é o número máximo de valores distintos que o usuário pode informar;
-
Inicializa o vetor FREQUENCIA
todo com 0
. Quando aparecer um número novo no VALORES
, você incrementa de 0
para 1
a mesma posição no FREQUENCIA
. Quando aparecer um número repetido, você também incrementa em 1
a mesma posição desse número no VALORES
em FREQUENCIA
.
Estou tentando fazer, esta ficando mais ou menos assim:
int main(int argc, char *argv[]) {
void lernumeros(int A[]){
int i;
for(i = 0; i <= 299; i++) {
printf("\nDigiite um valor qualquer positivo:\n");
scanf("%d", &A[i]);
if(A[i] < 0){
printf("Numeros Negativos não são permitidos!");
break;
}
}
}
void Valor_Distinto (int Valor, *Valores) {
int i = 0, valor = 0 ;
while ( valorVetor != NULL ) {
valorVetor = Valores[i];
if(ValorVetor == Valor)
return;
i++;
}
if(Valores[i] != NULL){
Valores[i] = Valor;
}
}
int Ocorrencias (int valor,Vetor[]) {
int i = 0, int ocorrencia = 0;
while (Vetor[i] != NULL) {
if(Vetor[i] == valor)
ocorrencias++;
i++;
}
return ocorrencias;
}
return 0;
}