Время выполнения C - PullRequest
       26

Время выполнения C

0 голосов
/ 29 июня 2018

У меня проблема, когда я хочу проверить время выполнения с помощью time.h в C. А именно; Я добавил таймер для расчета времени выполнения при запуске поиска. Однако таймер запускается, когда я выбираю несколько переменных.

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

int main()
{
    int selection = 0;
    printf(" 1. Calculate Execution Time Depends on Variables. \n 2. Calculate Variable Numbers Depends on Time Execution.\n  What You want to do ? \n Selection :  ");
    scanf_s("%d", &selection);

    if (selection==1)
    {   
        int numberselection = 0;
        int number_Elements = 0;

        printf(" Please Select the Number of Elements. \n 1. 500.000    2. 1.000.000    3. 2.000.000    4. 3.000.000    5. 100.000.000 \n Selection : ");
        scanf_s("%d", &numberselection);

        if (numberselection==1)
        {
            number_Elements = 500000;
        }
        if (numberselection == 2)
        {
            number_Elements = 1000000;

        }
        if (numberselection == 3)
        {
            number_Elements = 2000000;

        }
        if (numberselection == 4)
        {
            number_Elements = 3000000;

        }
        if (numberselection == 5)
        {
            number_Elements = 100000000;

        }

        int i = 0;

        int *NumberList = malloc(number_Elements * sizeof(int));

        NumberList[number_Elements];

        srand((unsigned)time(NULL));
        for (i = 0; i < number_Elements; i++)
        {
            double random = rand() % 99999 + 99999999;


            NumberList[i] = random;
        }

        double number_Search;

        printf("\n Please Enter Number To Search : ");
        scanf_s("%d", &number_Search);



        Algorithm(number_Elements, NumberList, number_Search);





    }





    return 0;


}

 int Algorithm(int G_Number_Elements , int G_NumberList[] , int G_Number_Search)
{
    int k = 0;

    double time_taken = 0;


    clock_t t = 0;
    for ( k = 0; k < G_Number_Elements; k++) // NUMBER TO TIME
    {
        if (G_NumberList[k] == G_Number_Search)
        {
            break;
        }
        else
        {
            printf("\n Not Found...");
            break;
        }


    }

    t = clock() - t;
    time_taken = ((double)t) / CLOCKS_PER_SEC;

    printf("\n Exacution Time Depends %d Variables = %f  ms.\n", G_Number_Elements, time_taken);

    return 0;
}

Когда я получаю значение таймера, добавляется время ожидания консоли. У меня есть два сценария;

Фотографии сценариев

У меня такой вопрос: как я могу исключить время ожидания из таймера?

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Я решил проблему с помощью @Korrat!

Последнее состояние кодов:

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

int main()
{

    int selection = 0;
    printf(" 1. Calculate Execution Time Depends on Variables. \n 2. Calculate Variable Numbers Depends on Time Execution.\n \n What You Want to Do ? \n Selection :  ");
    scanf_s("%d", &selection);

    if (selection == 1)
    {
        int numberselection = 0;
        int number_Elements = 0;

        printf(" Please Select the Number of Elements. \n 1. 500.000    2. 1.000.000    3. 2.000.000    4. 3.000.000    5. 100.000.000 \n Selection : ");
        scanf_s("%d", &numberselection);

        if (numberselection == 1)
        {
            number_Elements = 500000;
        }
        if (numberselection == 2)
        {
            number_Elements = 1000000;

        }
        if (numberselection == 3)
        {
            number_Elements = 2000000;

        }
        if (numberselection == 4)
        {
            number_Elements = 3000000;

        }
        if (numberselection == 5)
        {
            number_Elements = 100000000;

        }


        int i = 0;

        int *NumberList = malloc(number_Elements * sizeof(int));

        NumberList[number_Elements];

        srand((unsigned)time(NULL));
        for (i = 0; i < number_Elements; i++)
        {
            double random = rand() % 99999 + 99999999;


            NumberList[i] = random;
        }

        double number_Search;

        printf("\n Please Enter Number To Search : ");
        scanf_s("%d", &number_Search);

        int k = 0;

        clock_t begin = clock();

        for (k = 0; k <= number_Elements; k++) // NUMBER TO TIME
        {
            if (NumberList[k] == number_Search)
            {
                break;
            }
            if (k == number_Elements)
            {
                printf("Your Number Not Found in List ! \n");

            }



        }

        clock_t end = clock();
        float time_spent = (double)(end - begin) / CLOCKS_PER_SEC;

        printf("\n Exacution Time Depends %d Variables = %f  Second !. \n", number_Elements, time_spent);


    }





    return 0;
}
0 голосов
/ 29 июня 2018

Проблема в том, что clock() считает все такты, которые использует ваша программа. Вы, вероятно, хотите инициализировать t текущим значением clock(), например,

clock_t t = clock();

Таким образом, вы берете количество времени, потраченное на выбор входа из расчета времени.

Дополнительная информация взята из C ссылки на clock()

Чтобы вычислить фактическое время обработки программы, значение, возвращаемое часами, должно сравниваться со значением, возвращенным предыдущим вызовом той же функции.

...