Ir ao conteúdo
  • Cadastre-se

Problema na logica para criação do exercicio


PaulaFabiana

Posts recomendados

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

Link para o comentário
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.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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