1. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление

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

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

  1. Gemini

    Gemini Member

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

    Whatka Well-Known Member

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

    Gemini Member

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

    Whatka Well-Known Member

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

    Gemini Member

    Репутация:
    0
    Регистрация:
    17 мар 2015
    Сообщения:
    6
    Симпатии:
    0
    Код:
    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

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

    Gemini Member

    Репутация:
    0
    Регистрация:
    17 мар 2015
    Сообщения:
    6
    Симпатии:
    0
    Анализ и сравнение временной сложности различных алгоритмов сортировки при различных значениях параметра сложности
    Код:
    #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

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

    Gemini Member

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

    Whatka Well-Known Member

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

    Gemini Member

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

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