Programa não executa ao preencher vetor com números randômicos não repetidos em C

28/03/2017

2

C C++

Estou tentando fazer com que o números randômicos sejam gerados e preencher um vetor em uma função separada, porém o programa não executa e trava se eu colocar um número alto, e nem tão alto, como 50 ou 100. Abaixo segue meu código, se alguém souber o que está errado me ajuda aí, pfv.

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

//variáveis globais
int tamanho = 0;

//links das funções
int menuPrincipal();
int retornaTamanho();
void preencheVetor(int tamanhoVetor, int *vetor);

int main(){
    setlocale(LC_ALL, "Portuguese");

    int opcao = 0, vetor[tamanho];

    do{
        opcao = menuPrincipal();

        switch(opcao){
        case 0:
            printf("\\n ----------- APLICAÇÃO ENCERRADA! ----------- \\n");
            exit(0);
            break;
        case 1:
            tamanho = retornaTamanho();

            printf("\\n Tamanho do Vetor = %d \\n", tamanho);

            preencheVetor(tamanho, vetor);

            break;
        default:
            printf("\\n ----------- OPÇÃO INVÁLIDA ----------- \\n\\n");
            system("pause");
            system("cls");
            break;
        }
    }while(true);

    return 0;
}

int menuPrincipal(){
    int opcaoMenu = 0;

    printf("\\n ------------ MENU ------------ \\n");
    printf("\\n ESCOLHA O MÉTODO DE ORDENAÇÃO: \\n");
    printf("\\n 1 - BUBBLE SORT \\n");
    printf("\\n 2 - SELECT SORT \\n");
    printf("\\n 3 - INSERT SORT \\n");
    printf("\\n 0 - SAIR \\n");
    printf("\\n DIGITE SUA OPÇÃO = ");
    scanf("%d", &opcaoMenu);

    system("cls");

    return opcaoMenu;
}

int retornaTamanho(){
    int opcaoTamanho = 0, valorTamanho = 0;

    printf("\\n ------- TAMANHO DO VETOR -------- \\n");
    printf("\\n ESCOLHA O TAMANHO DO VETOR: \\n");
    printf("\\n 1 - 100 \\n");
    printf("\\n 2 - 10.000 \\n");
    printf("\\n 3 - 100.000 \\n");
    printf("\\n 4 - 1.000.000 \\n");
    printf("\\n 0 - VOLTAR \\n");
    printf("\\n DIGITE SUA OPÇÃO = ");
    scanf("%d", &opcaoTamanho);

    system("cls");

    switch(opcaoTamanho){
    case 0:
        main();
        break;
    case 1:
        valorTamanho = 100;
        break;
    case 2:
        valorTamanho = 10000;
        break;
    case 3:
        valorTamanho = 100000;
        break;
    case 4:
        valorTamanho = 1000000;
        break;
    default:
        retornaTamanho();
        break;
    }

    return valorTamanho;
}

void preencheVetor(int tamanhoVetor, int *vetor){
    int randomico = 0;

    bool numExistente = false;

    srand(time(NULL));

    for(int i = 0; i < tamanhoVetor; i++){

        randomico = (int) rand() % tamanhoVetor;

        for(int j = 0; j < i; j++){
            if(randomico == vetor[j]){
                numExistente = true;
                break;
            }
        }

        if(!numExistente){
            vetor[i] = randomico;
        }else{
            i--;
        }
    }
}
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários. Para saber mais sobre o uso de cookies,
consulte nossa política de privacidade. Ao continuar navegando em nosso site, você concorda com a nossa política.

Aceitar