Exercicio de Vetores

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;
}