Ir ao conteúdo

C Desenvolver Programa com Vetores aleatórios


Ir à solução Resolvido por AdrianoSiqueira,

Posts recomendados

Postado

Estou com dificuldade em fazer este programa alguém poderia me ajudar?

Crie um programa em C que gere aleatoriamente um vetor com 20 elementos variando entre 1 a 30. O programa deverá gerar um novo vetor contendo apenas os elementos que não se repetem. Imprima os dois vetores.

 

#include <time.h>
#include <stdlib.h>
#include <stdio.h>
#define LIM 20
 
int main(){
    int vet[LIM];
    int i, x, j;
    int repetido; /* indicador de passagem */
{
   int x [20];
    srand (time(NULL));
   for (int i = 0; i<20; i++){
       vet[i]= 1 + (rand()%29);
   }
       
       for (int i=0; i<20; i++){
           printf ("\n%d", vet[i]);
       }
}
    printf("\nSem repetições:\n ");
    for(i = 0; i < 20; i++){
        repetido = 0;
        for(j = i-1; j >= 20; j--){
            if(vet[i] == vet[j])
                repetido = 1;
        }
        if(repetido == 0)
            printf("%.2d ", vet[i]);
    }
    printf("\n");
    return 0;
}

 

  • Solução
Postado

Poderia ser assim:

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <limits.h>
#include <time.h>

bool presente(int vetor[], int tamanho, int valor) {
    for (int i = 0; i < tamanho; ++i) {
        if (vetor[i] == valor) {
            return true;
        }
    }

    return false;
}

void imprimeArray(char nome[], int vetor[], int tamanho) {
    printf("%s [ ", nome);

    for (int i = 0; i < tamanho; ++i) {
        printf("%i, ", vetor[i]);
    }

    printf("] \n");
}

int main() {
    int maximo = 20;            // Tamanho dos vetores
    int insercao = 0;           // Posição de inserção no vetor único

    int vetor[maximo];          // Vetor com as informações
    int vetorUnico[maximo];     // Vetor com os valores únicos

    srand((unsigned) time(NULL));

    // Inicializa o primeiro vetor
    for (int i = 0; i < maximo; ++i) {
        vetor[i] = rand() % 30 + 1;
    }

    // Inicializa o vetor único com valores que serão sobrescritos
    for (int i = 0; i < maximo; ++i) {
        vetorUnico[i] = INT_MIN;
    }

    // Preenche o vetor único com os valores do primeiro vetor
    for (int i = 0; i < maximo; ++i) {
        if (!presente(vetorUnico, maximo, vetor[i])) {
            vetorUnico[insercao] = vetor[i];
            insercao += 1;
        }
    }

    // Imprime tudo
    imprimeArray("Vetor", vetor, maximo);
    imprimeArray("Unico", vetorUnico, insercao);

    return 0;
}

Obs.: Perceba que na segunda chamada da função imprimeArray, eu passei o valor de insercao ao invés do tamanho máximo, isso porque não sabemos se o vetorUnico foi totalmente preenchido e para evitar que seja impresso lixo de memória, passamos o valor da última posição que foi inserido algum valor.

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

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

×
×
  • Criar novo...