Задержка консоли в с++

Тема в разделе "MS Visual C++", создана пользователем Gemini, 17 мар 2015.

  1. Gemini

    Gemini Member

    Регистрация:
    17 мар 2015
    Сообщения:
    6
    Симпатии:
    0
    Как сделать задержку консоли меньше, чем на 1 млс? Команда sleep не подходит. Можно ли как-то в тиках? Желательно в одну строку, ибо это важно в коде. Так-то задержка должна быть в самом цикле.
     
  2. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    Способ есть.
    Ваш преподаватель вероятно очень интересный человек,если это задание при обучении и я не буду
    отвечать, чтобы не портить образовательный процесс.Заинтересованный обучаемый при поиске ответа
    на этот вопрос очень обогатит свои знания.
    Если же это рабочая задача, то вы крайне не точны и наивны.
    В одну строку серьёзно?)
     
    2 пользователям это понравилось.
  3. Gemini

    Gemini Member

    Регистрация:
    17 мар 2015
    Сообщения:
    6
    Симпатии:
    0
    Ох, я так надеялась, что здесь будет ответ, ибо обыскалась уже, а преподаватель толком ничего не сказал, сказал только, что раз в млс не получается, попробовать в тиках.. вот и думала, что есть что-то типа команды sleep.. А так задание заключается в расчете времени работы сортировки векторов разных размеров. Например, пузырьковая сортировка. Задержка должна быть в самом внутреннем цикле, но sleep(1) не подходит, ибо вектор размером в 1000 элементов сортируется около полутора часов. Слишком долго.
     
  4. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    Это не знание документации sleep (1) не гарантирует задержку в 1 милисекунду
    параметром является минимальное время задержки, т.е. может уснуть надолго.
    Ознакомтись очень внимательно ссылка
     
  5. Gemini

    Gemini Member

    Регистрация:
    17 мар 2015
    Сообщения:
    6
    Симпатии:
    0
    Код (Text):
    void Sort1()
    {
    int mas[1000];//сортируемый вектор
    int size[12]={25, 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000};//размер вектора
    int result[12][2];//массив результатов
    int i, j, n, key;
    int start_time, end_time, search_time;//начальное, конечное и искомое время
    srand(time(NULL));//для рандома
    for (n=0; n<12; n++)//перебирает все размеры вектора
    {
    result[n][0]=size[n];//первый столбец - размер сортируемого вектора
    cout<<endl;
    //cout<<"Длина вектора = "<<size[n]<<":\n";
    for (i=0; i<size[n]; i++)//вывод неупорядоченного вектора
    {
    mas[i]=rand() % 4000 + 1000;//генерирует числа от 1000 до 5000
    /*if (i % 10 == 0)//в одной строке 10 чисел(чтоб красиво было)
    cout<<endl;
    cout<<setw(7)<<mas[i];*/
    }
    //getch();
    cout<<endl;
    cout<<"Производится сортировка вектора длиной "<<size[n]<<":\n";
    start_time=clock();//запуск таймера - фиксируем начальное время
        for (int i=0; i<size[n]; i++)//сортировка
    for (int j=size[n]-1; j>i; j--)
    {
    Sleep(1);//задержа на 1млс
    if (mas[j]<mas[j-1])
    {
    swap (mas[j], mas[j-1]);
    }
    }
     
    end_time=clock();//фиксируем конечное время
    /*for (int i=0; i<size[n]; i++)//вывод отсортированного вектора
    {
    if (i % 10 == 0)
    cout<<endl;
    cout<<setw(7)<<mas[i];
    }*/
    cout<<"Сортировка произведена";
    search_time=end_time - start_time;//расчет времени работы алгоритма
    result[n][1]=search_time;//второй столбец - затраченное время (в миллисекундах)
    getch();
    cout<<endl;
    }
    cout<<endl<<"Время работы алгоритма:"<<endl;
    for (i=0; i<12; i++)//вывод результатов
    {
    cout<<endl;
    for (j=0; j<2; j++)
    cout<<setw(8)<<result[i][j]<<"  ";
    }
     
     
     
     
    Посмотри, пожалуйста. В этом случае прога выдает нули изначально. И время не очень совпадает со сложностью алгоритма..
     
  6. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    а можно узнать задачу\условие лабы\цель\требования хоть что-нибудь?
     
  7. Gemini

    Gemini Member

    Регистрация:
    17 мар 2015
    Сообщения:
    6
    Симпатии:
    0
    Анализ и сравнение временной сложности различных алгоритмов сортировки при различных значениях параметра сложности
    Код (C++):
    #include <iostream>
    #include <iomanip>
    #include <conio.h>
    #include <cstdio>
    #include <cstring>
    #include <fstream>
    #include <Windows.h>
    #include <cstdlib>
    #include <ctime>
     
     
     
     
    using namespace std;
    int a[1000];
    void Sort1()
    {
    int mas[1000];//сортируемый вектор
    int size[12]={25, 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000};//размер вектора
    int result[12][2];//массив результатов
    int i, j, n, key;
    int start_time, end_time, search_time;//начальное, конечное и искомое время
    srand(time(NULL));//для рандома
    for (n=0; n<12; n++)//перебирает все размеры вектора
    {
    result[n][0]=size[n];//первый столбец - размер сортируемого вектора
    cout<<endl;
    //cout<<"Длина вектора = "<<size[n]<<":\n";
    for (i=0; i<size[n]; i++)//вывод неупорядоченного вектора
    {
    mas[i]=rand() % 4000 + 1000;//генерирует числа от 1000 до 5000
    /*if (i % 10 == 0)//в одной строке 10 чисел(чтоб красиво было)
    cout<<endl;
    cout<<setw(7)<<mas[i];*/

    }
    //getch();
    cout<<endl;
    cout<<"Производится сортировка вектора длиной "<<size[n]<<":\n";
    start_time=clock();//запуск таймера - фиксируем начальное время
        for (int i=0; i<size[n]; i++)//сортировка
    for (int j=size[n]-1; j>i; j--)
    {
    Sleep(1);//задержа на 1млс
    if (mas[j]<mas[j-1])
    {
    swap (mas[j], mas[j-1]);
    }
    }
     
    end_time=clock();//фиксируем конечное время
    /*for (int i=0; i<size[n]; i++)//вывод отсортированного вектора
    {
    if (i % 10 == 0)
    cout<<endl;
    cout<<setw(7)<<mas[i];
    }*/

    cout<<"Сортировка произведена";
    search_time=end_time - start_time;//расчет времени работы алгоритма
    result[n][1]=search_time;//второй столбец - затраченное время (в миллисекундах)
    getch();
    cout<<endl;
    }
    cout<<endl<<"Время работы алгоритма:"<<endl;
    for (i=0; i<12; i++)//вывод результатов
    {
    cout<<endl;
    for (j=0; j<2; j++)
    cout<<setw(8)<<result[i][j]<<"  ";
    }
     
     
     
     
     
     
     
     
     
     
     
     
    }
    void BSort(int m, int r)
    {
    int x = a[m + (r - m) / 2];
        int i = m;
        int j = r;
     
     
     
     
        while(i <= j)
        {
            while(a[i] < x) i++;
            while(a[j] > x) j--;
    { Sleep(1);
            if(i <= j)
            {
     
                swap(a[i], a[j]);
                i++;
                j--;
            }
    }
        }
        if (i<r)
    BSort(i, r);
       
        if (m<j)  
            BSort(m, j);  
    }
    void Sort2()
    {
    int size[12]={25, 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000};//размер вектора
    int result[12][2];//массив результатов
    int i, j, n, key;
    int start_time, end_time, search_time;//начальное, конечное и искомое время
    srand(time(NULL));//для рандома
    for (n=0; n<12; n++)//перебирает все размеры вектора
    {
    result[n][0]=size[n];//первый столбец - размер сортируемого вектора
    cout<<endl;
    cout<<"Длина вектора = "<<size[n]<<":\n";
    for (i=0; i<size[n]; i++)//вывод неупорядоченного вектора
    {
    a[i]=rand() % 4000 + 1000;//генерирует числа от 1000 до 5000
    if (i % 10 == 0)//в одной строке 10 чисел
    cout<<endl;
    cout<<setw(7)<<a[i];
    }
    getch();
    cout<<endl;
    cout<<"Сортировка вектора длиной "<<size[n]<<":\n";
    start_time=clock();//запуск таймера - фиксируем начальное время
            BSort(0, size[n]-1);
    end_time=clock();//фиксируем конечное время
    for (int i=0; i<size[n]; i++)//вывод отсортированного вектора
    {
    if (i % 10 == 0)
    cout<<endl;
    cout<<setw(7)<<a[i];
    }
    search_time=end_time - start_time;//расчет времени работы алгоритма
    result[n][1]=search_time;//второй столбец - затраченное время (в миллисекундах)
    getch();
    cout<<endl;
    }
    cout<<endl<<"Время работы алгоритма:"<<endl;
    for (i=0; i<12; i++)//вывод результатов
    {
    cout<<endl;
    for (j=0; j<2; j++)
    cout<<setw(8)<<result[i][j]<<"  ";
    }
    }
     
     
     
     
    void Sort3()
    {
    int mas[1000];//сортируемый вектор
    int size[12]={25, 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000};//размер вектора
    int result[12][2];//массив результатов
    int i, j, n, key;
    int start_time, end_time, search_time;//начальное, конечное и искомое время
    srand(time(NULL));//для рандома
    for (n=0; n<12; n++)//перебирает все размеры вектора
    {
    result[n][0]=size[n];//первый столбец - размер сортируемого вектора
    cout<<endl;
    cout<<"Длина вектора = "<<size[n]<<":\n";
    for (i=0; i<size[n]; i++)//вывод неупорядоченного вектора
    {
    mas[i]=rand() % 4000 + 1000;//генерирует числа от 1000 до 5000
    if (i % 10 == 0)//в одной строке 10 чисел(чтоб красиво было)
    cout<<endl;
    cout<<setw(7)<<mas[i];
    }
    getch();
    cout<<endl;
    cout<<"Сортировка вектора длиной "<<size[n]<<":\n";
    start_time=clock();//запуск таймера - фиксируем начальное время
    for (int i=0; i<size[n]; i++)
    {
     
     
     
     
    int min=i; //минимальный элемент на промежутке индексов [i; size[k]]
    for (int j=i+1; j<size[n]; j++)
    {
    Sleep(1);
    if (mas[j] < mas[min])
    min=j;
    }
    swap (mas[i], mas[min]);
    }
    end_time=clock();//фиксируем конечное время
    for (int i=0; i<size[n]; i++)//вывод отсортированного вектора
    {
    if (i % 10 == 0)
    cout<<endl;
    cout<<setw(7)<<mas[i];
    }
    search_time=end_time - start_time;      //времени работы алгоритма
    result[n][1]=search_time;                // затраченное время (в миллисекундах)
    getch();
    cout<<endl;
    }
    cout<<endl<<"Время работы алгоритма:"<<endl;
    for (i=0; i<12; i++)//вывод результатов
    {
    cout<<endl;
    for (j=0; j<2; j++)
    cout<<setw(8)<<result[i][j]<<"  ";
    }
    }
     
     
     
     
    void main()
    {
    setlocale(LC_ALL,"Russian");
    char key1='0';
    cout<<"МЕНЮ:"<<endl;
    cout<<"1 - Пузырьковая сортировка"<<endl;
        cout<<"2 - Быстрая сортировка"<<endl;
    cout<<"3 - Сортировка выбором"<<endl;
    while(key1!='27')
    {
    key1=getch();
    switch(key1)
    {
    case '1':Sort1();break;
    case '2':Sort2();break;
    case '3':Sort3();break;
    }
    }
    _getch();
    }
     
    Вот, если что весь код, все работает, но именно с задержкой траблы. По идее, все, что надо - вывести время, за которое сортируется вектор. Ну и сравнить с другими типами сортировок
     
  8. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    а зачем вам задержка для определения времени ?
     
  9. Gemini

    Gemini Member

    Регистрация:
    17 мар 2015
    Сообщения:
    6
    Симпатии:
    0
    Без задержки выдаются нули..
     
  10. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
  11. Gemini

    Gemini Member

    Регистрация:
    17 мар 2015
    Сообщения:
    6
    Симпатии:
    0
Загрузка...
Похожие Темы - Задержка консоли с++
  1. deeeman
    Ответов:
    2
    Просмотров:
    1.164
  2. Ruslan280
    Ответов:
    3
    Просмотров:
    648
  3. mspSUSE
    Ответов:
    2
    Просмотров:
    902
  4. DNT
    Ответов:
    13
    Просмотров:
    1.302
  5. SevenReg
    Ответов:
    3
    Просмотров:
    1.354

Поделиться этой страницей