Ir ao conteúdo
  • Cadastre-se
PaulaFabiana

Problema na logica para criação do exercicio

Recommended Posts

Olá estou tendo problema com esse programa , nao estou conseguindo fazer a logica dele

 

Faça um programa que preencha aleatoriamente um vetor de 50 posições com valores entre 1 e 1000. O programa deverá garantir que todos os valores colocados no vetor são distintos entre si. Isto é, só deverá ser colocado um elemento no vetor quando o mesmo não é encontrado dentro dele.  Código para gerar um número aleatório entre 1 e 1000: srand(time(NULL)); numAleatorio = rand()  %  1000; 

 

 

estou fando assim 

 

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

int main (){

    setlocale(LC_ALL, "portuguese");

    int a, i, consta, posicao, vetor[50];

    for(i=0; i<50; i++){

    printf("\n Digite um numero entre 0 e 1000: \n");
    scanf("%d", &a);
    srand(time(NULL)); }

    for(i=0; i<50; i++){

        if(vetor==a){
        consta=vetor;
        posicao=i;
        vetor=rand()%1000;
}
}

return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

srand(time(NULL)); você só deve chamar uma vez, pode ser ao principio de main. Sobre gerar números sem repetir

 

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

#define MAX 50
#define ALEATORIOS 1000

int main () {
    srand ( time ( NULL ) );
    int min = 1, max = 1000; // Numeros de 1 a 1000
    
    setlocale ( LC_ALL, "portuguese" );
    
    int i, gerados = 0, vetor[MAX], numAleatorio, repetido = 0;
    
    //Por enquanto não geramos 50 numeros sem repetição
    while ( gerados < MAX ) { 
        numAleatorio = rand () % ( max - min + 1 ) + min; //Geramos 1 numero de 1 a 1000
        
        i = 0; 
        //verificamos se o numero está repetido dentro do vetor, comparando todas as posiçoes do vetor com o numero gerado aleatoriamente
        while ( i < gerados ) {
            if( vetor[i] != numAleatorio ){ //se essa posiçãofor for diferente a numAleatorio...
                repetido = 0;//...não é repetido
                i++;
            }else if ( vetor[i] == numAleatorio ){ //se a posiçãofor for igual a numAleatorio...  
                repetido = 1; //...é repetido
                break; //Todos os procedimentos restantes serão saltados e voltará al principio de while para gerar outro numero
            }
        }
        
        if ( repetido == 0 ){ //Enão se Não for repetido
            vetor[gerados] = numAleatorio;//Guardamos o numero
            printf ("vetor[%d]=%d\n", gerados, vetor[i] ); //imprimimos
            gerados++; //avançamos uma posição até chegar a 50
        }
        
    }

    
    return 0;
}

Basicamente trata-se de averiguar se cada um dos números gerados aleatoriamente já esta dentro do vetor de gerados. Suponhamos que geramos o numero 10, como é o primeiro não é repetido, vai parar no vetor, gerados incrementa para que o seguinte numero vaia ao vetor[gerados] ou seja vetor[1], é normal ja que o primeiro numero está na posição 1 porque gerados começa valendo 1. Dai o programa gera outro numero vamos supor que o 20. O programa olha desde a primeira posição do vetor até vetor[gerados] para buscar repetidos, se não tiver nenhum então o numero gerado aleatoriamente pode entrar em vetor[gerados] que é a segunda posição, e assim vai até que gerados chegue a 50 números.

Se pegar um papel e desenhar um vetor de 50 posições e ir simulando você conseguirá desenvolver o algoritmo. Não tenha medo de usar papel e lápis, é muito normal, e eu diria que imprescindível para isso.

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

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

×