Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.80/40: Рейтинг темы: голосов - 40, средняя оценка - 4.80
68 / 41 / 1
Регистрация: 14.05.2013
Сообщений: 383

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

03.07.2013, 18:58. Показов 7945. Ответов 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;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.07.2013, 18:58
Ответы с готовыми решениями:

Программа - экзаменатор (тест за определенное время) С++
Здравствуйте! Есть такая задумка - создать простую программу - тест, которая будет выводить на экран вопросы, а пользователь должен на них...

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

Запустить таймер на определенное время
Здравствуйте, у меня есть кнопка, таймер и NumericUoDown. Нужно указать время в NumericUpDown на которое запускается таймер.

26
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
03.07.2013, 19:51
Ввёл 60, а программа за 3.2 секунды закончилась.
Миниатюры
Программа-таймер (отсчитывает определенное время)  
0
03.07.2013, 20:04

Не по теме:

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

0
 Аватар для DiffEreD
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
03.07.2013, 20:05
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;
}
1
42 / 42 / 27
Регистрация: 29.01.2013
Сообщений: 277
03.07.2013, 20:15
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;
}
1
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
03.07.2013, 20:22
DiffEreD, а можно как-то без chrono обойтись?

Не по теме:

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

0
 Аватар для DiffEreD
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
03.07.2013, 20:27
Ну, std::this_thread::sleep_for принимает std::chrono::duration, так что по другому не знаю. sleep_for
1
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
03.07.2013, 21:20
Цитата Сообщение от Даниил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);
   }
0
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,029
Записей в блоге: 1
03.07.2013, 21:26
Цитата Сообщение от Van111 Посмотреть сообщение
юзайте SetTimer
так же не даст точных результатов
Цитата Сообщение от Van111 Посмотреть сообщение
Вот получение дескриптора консоли, какие заглав файлы подключить сами разберитесь
Есть еще функция GetConsoleWindow
http://msdn.microsoft.com/en-u... 85%29.aspx
0
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
03.07.2013, 23:37
DiffEreD, забавно получается: если в конце строчки std::cout << "Секунды: " << --seconds << '\n'; убрать переход на новую строку, то программа напечатает только один раз всё сразу по завершении цикла:
Bash
1
2
Введи время в секундах: ->5
Секунды: 4Секунды: 3Секунды: 2Секунды: 1Секунды: 0
Добавлено через 36 секунд
почему так происходит?

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

Не по теме:

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

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

0
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,029
Записей в блоге: 1
04.07.2013, 01:24
Цитата Сообщение от DiffEreD Посмотреть сообщение
(в одну строчку если уж перевод строки убрали
Цитата Сообщение от xtorne21st Посмотреть сообщение
убрать переход на новую строку, то программа напечатает только один раз всё сразу по завершении цикла
собственно вот буферизация имеет место быть
0
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
04.07.2013, 03:08
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 минуты
П.С. Если быть точнее - допустим, но выкидывает исключение
0
04.07.2013, 03:09

Не по теме:

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

0
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
04.07.2013, 04:05
Цитата Сообщение от Croessmah Посмотреть сообщение
кто Вам сказал про удивление? если внимательно прочитаете, то можете и ответ найти

Не по теме:

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

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

Не по теме:

На линукс, подобного эффекта можно добиться используя заголовок <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;
}

0
45 / 48 / 5
Регистрация: 24.06.2013
Сообщений: 677
08.07.2013, 00:50
Цитата Сообщение от Croessmah Посмотреть сообщение
так же не даст точных результатов
А Sleep даст точный результат?
0
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,029
Записей в блоге: 1
08.07.2013, 00:55
Цитата Сообщение от Retyrn0 Посмотреть сообщение
А Sleep даст точный результат?
Нет.
0
45 / 48 / 5
Регистрация: 24.06.2013
Сообщений: 677
08.07.2013, 01:25
Если нужна точность, то 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 секунд прошло аж за пол секунды ;-)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.07.2013, 01:25
Помогаю со студенческими работами здесь

Таймер на запуск программы через определенное время и зациклить выполнение
Помогите советом как реализовать следующую задачу. В условно бесплатной программе через определенное время выскакивает кнопка которую...

Таймер который отсчитывает количество пройденного времени.
Здравствуйте есть ли у кого из вас код: таймер который отсчитывает количество пройденного времени. Допустим запущена прога, а внизу...

Секундомер. Запустить второй таймер через определенное время после старта первого
Начал делать секундомер на VB. Основа выглядит вот так: Dim Time As New DateTime Private Sub Button1_Click(ByVal sender As...

Нужен таймер в Simulinkе, который бы запускался при появлении сигнала и отключался через определенное время
Нужен таймер в Simulinkе, который бы запускался при появлении на нем сигнала и отключался (разрывал цепь) через определенное время. ...

Timer отсчитывает время, но не выполняет действий
Здравствуйте, проверяю в таймере условие, и если это условие выполняется, то все таймеры должны остановиться, если нет - то на форме...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru