Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.94
Даниил
67 / 40 / 7
Регистрация: 14.05.2013
Сообщений: 383
#1

Программа-таймер (отсчитывает определенное время) - C++

03.07.2013, 18:58. Просмотров 2134. Ответов 26
Метки нет (Все метки)

Нужно написать программу, вот задача:

Программа должна отсчитывать определённое количество времени(это время мы будем вводить)
Программа задаёт вопрос сколько времени отсчитать
допустим мы вводим 50 (в секундах)
И программа будет отсчитывать 50 секунд

Помогите написать пожалуйста!

Добавлено через 15 минут
Спасибо (хз кому), но я уже сам написал Вот исходник, вдруг кому нужен будет:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <cstdlib>
 
using namespace std;
 
int main()
{
double x;
cout << "Введи время в секундах: " << endl;
cin >> x;
for (x = 1; x <= 60; ++x) {
cout << "Секунды: " << x
<< endl;
}
system ("pause");
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.07.2013, 18:58     Программа-таймер (отсчитывает определенное время)
Посмотрите здесь:

Программа подачи компьютеру сигнала shutdown в определенное системное время - C++
Доброго времени суток) Прошу помощи в написании маленькой программки. Программа должна подавать ПК сигнал shutdown в определенное...

Нажатие клавиш за определенное время - C++
Всем доброго времени суток. Возник такой вопрос... как в С++ возможно описать такое &quot;дело&quot;: пользователю даеться определенный интервал...

Выполнение функции в определенное системное время - C++
Привет. Как реализовать вызов функции, в строго определенные моменты времени? Конкретнее: вызывать функцию каждую секунду. Синхронно с...

Подсчитать количество за определенное прошедшее время - C++
Помогите с алгоритмом для такой задачи. Код не нужен, но можно описать словами. Представим одностороннюю дорогу, по которой постоянно...

Завершение бесконечного цикла через определенное время - C++
Есть бесконечный цикл for( ; ; ), который обрабатывает событие нажатия кнопки в игре. Если на кнопку не нажали в течении двух секунд,...

Создать цикл, повторяющийся раз в определенное время - C++
Здравствуйте, подскажите, как создать цикл, который выполняется раз в определенное время( к примеру раз в секунду).

Изменить значение переменной через определенное время - C++
Всем доброго времени суток. Допустим есть значение a=10; Надо его изменить на a=15 и что бы оно так держалось допустим в течени часа,...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.07.2013, 19:51     Программа-таймер (отсчитывает определенное время) #2
Ввёл 60, а программа за 3.2 секунды закончилась.
Миниатюры
Программа-таймер (отсчитывает определенное время)  
Croessmah
03.07.2013, 20:04
  #3

Не по теме:

Цитата Сообщение от alsav22 Посмотреть сообщение
за 3.2 секунды закончилась
3 из которых вводил x, который не нужен )))

DiffEreD
1429 / 766 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
03.07.2013, 20:05     Программа-таймер (отсчитывает определенное время) #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <chrono>
#include <thread>
#include <windows.h>
 
int main(int argc, char** argv)
{
    SetConsoleCP (1251); SetConsoleOutputCP (1251);
    
    std::cout << "Введи время в секундах: ->";
    size_t seconds;
    std::cin>>seconds;
    while (seconds)
    {
       std::this_thread::sleep_for(std::chrono::seconds(1));
       std::cout << "Секунды: " << --seconds << '\n';
    }
    
    return 0;
}
bgm123
39 / 39 / 16
Регистрация: 29.01.2013
Сообщений: 277
03.07.2013, 20:15     Программа-таймер (отсчитывает определенное время) #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <ctime>
#include <iostream>
using namespace std;
 
#define FACTOR 1000
 
int main(void)
{
    long sec;
 
    cout << "Enter seconds: ";
    cin >> sec;
 
    cout << "Timer is enabled" << endl;
    _sleep(sec * FACTOR);
    cout << "Timer off" << endl;
 
    return 0;
}
Добавлено через 4 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <ctime>
#include <iostream>
using namespace std;
 
#define FACTOR 1000
 
int main(void)
{
    long sec;
 
    cout << "Enter seconds: ";
    cin >> sec;
 
    cout << "Timer is enabled" << endl;
    for(int i = sec; i >= 1; i--){
        cout << "second: " << i << endl;
        _sleep(1 * FACTOR); 
    }
 
    cout << "Timer off" << endl;
    return 0;
}
xtorne21st
интересующийся
303 / 274 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
03.07.2013, 20:22     Программа-таймер (отсчитывает определенное время) #6
DiffEreD, а можно как-то без chrono обойтись?

Не по теме:

Любопытства ради

DiffEreD
1429 / 766 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
03.07.2013, 20:27     Программа-таймер (отсчитывает определенное время) #7
Ну, std::this_thread::sleep_for принимает std::chrono::duration, так что по другому не знаю. sleep_for
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,587
Записей в блоге: 12
03.07.2013, 21:20     Программа-таймер (отсчитывает определенное время) #8
Цитата Сообщение от Даниил1991 Посмотреть сообщение
for (x = 1; x <= 60; ++x) {
cout << "Секунды: " << x
<< endl;
}
3.24 ушло на запуск программы).
если хотите сделать приближённо
можете добавить Sleep(1000); перед cout
если вам нужно не побалываться а для дела, юзайте SetTimer

Добавлено через 1 минуту
Вот получение дескриптора консоли, какие заглав файлы подключить сами разберитесь
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
 HWND GetConsoleHwnd(void)
   {
       #define MY_BUFSIZE 1024 // Buffer size for console window titles.
       HWND hwndFound;         // This is what is returned to the caller.
       char pszNewWindowTitle[MY_BUFSIZE]; // Contains fabricated
                                           // WindowTitle.
       char pszOldWindowTitle[MY_BUFSIZE]; // Contains original
                                           // WindowTitle.
 
       // Fetch current window title.
 
       GetConsoleTitle(pszOldWindowTitle, MY_BUFSIZE);
 
       // Format a "unique" NewWindowTitle.
 
       wsprintf(pszNewWindowTitle,"%d/%d",
                   GetTickCount(),
                   GetCurrentProcessId());
 
       // Change current window title.
 
       SetConsoleTitle(pszNewWindowTitle);
 
       // Ensure window title has been updated.
 
       Sleep(40);
 
       // Look for NewWindowTitle.
 
       hwndFound=FindWindow(NULL, pszNewWindowTitle);
 
       // Restore original window title.
 
       SetConsoleTitle(pszOldWindowTitle);
 
       return(hwndFound);
   }
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
03.07.2013, 21:26     Программа-таймер (отсчитывает определенное время) #9
Цитата Сообщение от Van111 Посмотреть сообщение
юзайте SetTimer
так же не даст точных результатов
Цитата Сообщение от Van111 Посмотреть сообщение
Вот получение дескриптора консоли, какие заглав файлы подключить сами разберитесь
Есть еще функция GetConsoleWindow
http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
xtorne21st
интересующийся
303 / 274 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
03.07.2013, 23:37     Программа-таймер (отсчитывает определенное время) #10
DiffEreD, забавно получается: если в конце строчки std::cout << "Секунды: " << --seconds << '\n'; убрать переход на новую строку, то программа напечатает только один раз всё сразу по завершении цикла:
Bash
1
2
Введи время в секундах: ->5
Секунды: 4Секунды: 3Секунды: 2Секунды: 1Секунды: 0
Добавлено через 36 секунд
почему так происходит?

Добавлено через 2 минуты
на всякий случай уточню: компилятор нативный gcc 4.8
DiffEreD
04.07.2013, 00:34
  #11

Не по теме:

xtorne21st, не понял, что вас так удивляет? Тут sleep_for вообще не пределах. Обычное следование операторов в цикле (в одну строчку если уж перевод строки убрали)

C++
1
2
3
4
while (seconds)
    {
       std::cout << "Секунды: " << --seconds;
    }

Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
04.07.2013, 01:24     Программа-таймер (отсчитывает определенное время) #12
Цитата Сообщение от DiffEreD Посмотреть сообщение
(в одну строчку если уж перевод строки убрали
Цитата Сообщение от xtorne21st Посмотреть сообщение
убрать переход на новую строку, то программа напечатает только один раз всё сразу по завершении цикла
собственно вот буферизация имеет место быть
xtorne21st
интересующийся
303 / 274 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
04.07.2013, 03:08     Программа-таймер (отсчитывает определенное время) #13
DiffEreD, Croessmah, я понял почему у вас вызвало удивление. Только что откомпилировал код в 12 студии - всё как и очевидно: через каждую секунду значение отображается далее в этой же строчке. Но в линуксе при компиляции при помощи g++ 4.8 результирующая строка со всеми значениями отображается один раз через 5 секунд, а если поставить символ перевода на новую строку, тогда всё правильно... Не даром компилятор gcc 4.8 находиться в тестовой ветки ppa. Хотя, может быть так и нужно...

Добавлено через 11 минут
А также вот этот код в gcc 4.8 недопустим:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <thread>
#include <string>
 
void say_hello(const std::string& name)
{
   std::cout << "hello " << name << std::endl;
}
 
int main(int argc, char * argv[])
{
   std::thread th(say_hello, "world");
   th.join();
}
Добавлено через 48 секунд
4.8 сырой ещё. Имхо.

Добавлено через 4 минуты
П.С. Если быть точнее - допустим, но выкидывает исключение
Croessmah
04.07.2013, 03:09
  #14

Не по теме:

Цитата Сообщение от xtorne21st Посмотреть сообщение
я понял почему у вас вызвало удивление.
кто Вам сказал про удивление? если внимательно прочитаете, то можете и ответ найти

xtorne21st
интересующийся
303 / 274 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
04.07.2013, 04:05     Программа-таймер (отсчитывает определенное время) #15
Цитата Сообщение от Croessmah Посмотреть сообщение
кто Вам сказал про удивление? если внимательно прочитаете, то можете и ответ найти

Не по теме:

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

alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.07.2013, 05:27     Программа-таймер (отсчитывает определенное время) #16
Дело может и не в этом компиляторе, а в Linux (или в компиляторах для Linux). Там ввод\вывод как-то по другому организован (боюсь сказать: небуферизован, потому что тут спор был на эту тему). Некотроые команды, например sync(), для очистки буфера, в Linux не работают. Но это предположение. Если бы проверить, в Linux, этот код с другим компилятором (не сырым)...
xtorne21st
08.07.2013, 00:22
  #17

Не по теме:

На линукс, подобного эффекта можно добиться используя заголовок <sys/select.h>:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <sys/select.h>
#include <iostream>
 
int main()
{
    int seconds;
    struct timeval t;
    std::cout << "Put seconds: ";
    std::cin >> seconds;
 
    while (seconds) 
    {
        t.tv_sec = 1;
        t.tv_usec = 0;
        select(0, NULL, NULL, NULL, &t);
        std::cout << "seconds: " << --seconds << std::endl;
    }
 
    return 0;
}

Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 675
Завершенные тесты: 1
08.07.2013, 00:50     Программа-таймер (отсчитывает определенное время) #18
Цитата Сообщение от Croessmah Посмотреть сообщение
так же не даст точных результатов
А Sleep даст точный результат?
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
08.07.2013, 00:55     Программа-таймер (отсчитывает определенное время) #19
Цитата Сообщение от Retyrn0 Посмотреть сообщение
А Sleep даст точный результат?
Нет.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.07.2013, 01:25     Программа-таймер (отсчитывает определенное время)
Еще ссылки по теме:

На какой отметке остановится мотоциклист через определенное время? - C++
Длина Московской кольцевой автомобильной дороги —109 километров. Байкер Вася стартует с нулевого километра МКАД и едет со скоростью...

Как сделать обновление текста строки через определенное время? - C++
Здравствуйте. Как сделать обновление текста строки через определенное время? #include &lt;iostream&gt; #include &lt;string&gt; #include...

Использовать время (таймер) в С++ консоль - C++
Добрый вечер! Задача такая: есть несколько сортировок (пузырьком, быстрой, шелл), нужно засечь время работы этих сортировок. Как...

Помогите решить задачу(Гражданин открыл счет в банке. Определить прирост и сумму вклада через определенное время) - C++
Помогите решить задачи через цикл do _ while: 2) Гражданин 1 марта открыл счет в банке вложив 1000 руб. Через каждый месяц размер...

Каким образом переменная отсчитывает выводимые строки? - C++
Добрый день! Я новичок и это мое первое обращение за помощью к опытным программистам. В общем, дело такое. Есть следующий код. Он...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 675
Завершенные тесты: 1
08.07.2013, 01:25     Программа-таймер (отсчитывает определенное время) #20
Если нужна точность, то GetTickCount() или вообще использовать...хотя вряд ли.
Думаю Вам и точности Sleep() хватит) Хотя в данном случае SetTimer() значительно удобней.

Добавлено через 21 минуту
Боюсь спросить как Вы добились здесь:
Цитата Сообщение от Даниил1991 Посмотреть сообщение
Спасибо (хз кому), но я уже сам написал Вот исходник, вдруг кому нужен будет:Код C++
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
double x;
cout << "Введи время в секундах: " << endl;
cin >> x;
for (x = 1; x <= 60; ++x) {
cout << "Секунды: " << x
<< endl;
}
system ("pause");
return 0;
}
Задержки в одну секунду? Процессор такой медленный, не успевает больше раза в секунду выводить строку? Если без лишней точности, нужно добавить ожидание в одну секунду в цикле (можно чуть меньше, с учётом времени выполнения остального кода). Кстати, чтобы не выстраивалось в рядок, можно чистить экран:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
double x;
cout << "Введи время в секундах: " << endl;
cin >> x;
for (x = 1; x <= 60; ++x) {
system("cls");///////////////////////////Чистим экран
cout << "Секунды: " << x
<< endl;
Sleep(1000);/////////////////////////////Эта строка преостановит выполнение на 1 секунду
}
system ("pause");
return 0;
Иначе на разных компьютерах и в зависимости от нагрузки процессора, будет "разная длина секунды". У меня 40 секунд прошло аж за пол секунды ;-)
Yandex
Объявления
08.07.2013, 01:25     Программа-таймер (отсчитывает определенное время)
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru