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

17.03.2015
6
0
#1
Как сделать задержку консоли меньше, чем на 1 млс? Команда sleep не подходит. Можно ли как-то в тиках? Желательно в одну строку, ибо это важно в коде. Так-то задержка должна быть в самом цикле.
 
W

Whatka

#2
Способ есть.
Ваш преподаватель вероятно очень интересный человек,если это задание при обучении и я не буду
отвечать, чтобы не портить образовательный процесс.Заинтересованный обучаемый при поиске ответа
на этот вопрос очень обогатит свои знания.
Если же это рабочая задача, то вы крайне не точны и наивны.
В одну строку серьёзно?)
 
17.03.2015
6
0
#3
Способ есть.
Ваш преподаватель вероятно очень интересный человек,если это задание при обучении и я не буду
отвечать, чтобы не портить образовательный процесс.Заинтересованный обучаемый при поиске ответа
на этот вопрос очень обогатит свои знания.
Если же это рабочая задача, то вы крайне не точны и наивны.
В одну строку серьёзно?)
Ох, я так надеялась, что здесь будет ответ, ибо обыскалась уже, а преподаватель толком ничего не сказал, сказал только, что раз в млс не получается, попробовать в тиках.. вот и думала, что есть что-то типа команды sleep.. А так задание заключается в расчете времени работы сортировки векторов разных размеров. Например, пузырьковая сортировка. Задержка должна быть в самом внутреннем цикле, но sleep(1) не подходит, ибо вектор размером в 1000 элементов сортируется около полутора часов. Слишком долго.
 
W

Whatka

#4
Это не знание документации sleep (1) не гарантирует задержку в 1 милисекунду
параметром является минимальное время задержки, т.е. может уснуть надолго.
Ознакомтись очень внимательно ссылка
 
17.03.2015
6
0
#5
Это не знание документации sleep (1) не гарантирует задержку в 1 милисекунду
параметром является минимальное время задержки, т.е. может уснуть надолго.
Ознакомтись очень внимательно ссылка
Код:
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]<<"	";
}
Посмотри, пожалуйста. В этом случае прога выдает нули изначально. И время не очень совпадает со сложностью алгоритма..
 
W

Whatka

#6
а можно узнать задачу\условие лабы\цель\требования хоть что-нибудь?
 
17.03.2015
6
0
#7
а можно узнать задачу\условие лабы\цель\требования хоть что-нибудь?
Анализ и сравнение временной сложности различных алгоритмов сортировки при различных значениях параметра сложности
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();
}
Вот, если что весь код, все работает, но именно с задержкой траблы. По идее, все, что надо - вывести время, за которое сортируется вектор. Ну и сравнить с другими типами сортировок
 
W

Whatka

#8
а зачем вам задержка для определения времени ?