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

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

03.07.2013, 18:58. Показов 7905. Ответов 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
5499 / 4894 / 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
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 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
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 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
5499 / 4894 / 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
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru