Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) clock()


Ark

Pergunta

Aew galera, beleza?

estou tentando fazer um trabalho da faculdade pra gerar um vetor com números aleatórios distintos e ordenar esse vetor pelos tres algorítmos básicos de ordenação: seleção, inserção e bolha. Também faz parte do trabalho "pegar" o tempo que cada um gasta para os mais diversos tamanhos de vetor. Agora o problema é justamente com a função clock() do time.h que tá funcionando de forma inesperada, ela simplesmente dá o mesmo tempo final e inicial, sendo que entre uma chamada e outra da função clock() o meu algorítmo faz uma das ordenações acima. No fim das contas o printf abaixo do meu código só imprime zero(final-inicial). Antes de implementar esse programa, eu já tinha feito um teste com a clock() só pra ver como funciona e tal e ela funcionou direitinho pra um programa bem pequeno, alguém pode me dar uma luz?

O algorítmo que TENTA calcular o tempo da geração do vetor, sem sucesso:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(){
    clock_t n, tFim, tInicio, tDecorrido;
    srand(time(NULL));
    printf("Digite o tamanho do vetor a ser gerado: ");
    scanf("%d", &n);

    int vetor[n];

    tInicio = clock();
    printf("Tempo inicial: %d\n", tInicio);
    int count, num;
    for(count = 0; count < n; count++){
        num = rand() % ( 2 * n ) + 1;
        while(ExisteNoVetor(vetor, num, count))
            num = rand() % ( 2 * n ) + 1;
        vetor[count] = num;
    }
    tFim = clock();
    printf("Tempo final: %d\n", tFim);

    tDecorrido = tFim - tInicio;
    printf("Vetor gerado em %d milisegundos:\n", tDecorrido);
    Imprime(vetor, n);

    return 0;
}
E aqui o algorítmo que, não sei porque, é mais especial que o outro, roda:
#include <stdio.h>
#include <time.h>

int main(){
    int count, duracao, begin, end;
    begin = clock();
    for(count = 0; count < 10000; count++) printf("%d ", count);
    end = clock();
    duracao = end - begin;
    printf("O laco for demorou %dms ...", duracao);
    system("pause");
    return 0;
}

Agradeço pela atenção, []'s.

Editado por Ark
Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Certeza que ele não está fazendo o trabalho em 1ms?

A única diferença que notei entre os programas foi o tipo da variável, mas acho que não há muita diferença, já que clock_t deve ser um unsigned long. De qualquer forma, tente fazer um cast no printf.

Abraços.

Link para o comentário
Compartilhar em outros sites

  • 0

Galera, o que tá acontecendo é que o tempo inicial e o final retornados pela clock() tem valores iguais, o que é IMPOSSÍVEL, já que esse pedaço de código

for(count = 0; count < n; count++){
        num = rand() % ( 2 * n ) + 1;
        while(ExisteNoVetor(vetor, num, count))
            num = rand() % ( 2 * n ) + 1;
        vetor[count] = num;
    }

Cria o vetor e ainda por cima chama outra função pra garantir que os números serão distintos, como esse pedaço de código cria o vetor de forma consideravelmente lenta, isso impossibilita que o tempo inical seja igual ao tempo final. Os tempos iniciais e finais estão sendo impressos antes e depois do pedaço de código acima. Testei o código usando a função GetTickCount() da api do windows em vez da clock() e o comportamento estranho persiste. Alguém, por favor, me ajude a "exorcisar" esse programa...hehehehe...

Certeza que ele não está fazendo o trabalho em 1ms?

A única diferença que notei entre os programas foi o tipo da variável, mas acho que não há muita diferença, já que clock_t deve ser um unsigned long. De qualquer forma, tente fazer um cast no printf.

cara, ele tá fazendo em ms mesmo. E quanto ao segundo comentário, nem me preocupei em tentar o cast porque os tempos inicial e final nem são diferentes. O problema é justamente o tempo inicial ser igual ao final, eu até coloquei o algoritmo pra gerar vetores maiores, com mais de 1000 elementos, mas isso continua.

Espero ter sido claro, obrigado pela atenção, []'s

Editado por Ark
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152.1k
    • Posts
      651.8k
×
×
  • Criar Novo...