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

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

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

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

Программа должна отсчитывать определённое количество времени(это время мы будем вводить)
Программа задаёт вопрос сколько времени отсчитать
допустим мы вводим 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.07.2013, 18:58
Ответы с готовыми решениями:

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

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

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

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

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

Не по теме:

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

0
1458 / 795 / 257
Регистрация: 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;
}
1
42 / 42 / 27
Регистрация: 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;
}
1
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
03.07.2013, 20:22 6
DiffEreD, а можно как-то без chrono обойтись?

Не по теме:

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

0
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
03.07.2013, 20:27 7
Ну, 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 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);
   }
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
03.07.2013, 21:26 9
Цитата Сообщение от 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 10
DiffEreD, забавно получается: если в конце строчки std::cout << "Секунды: " << --seconds << '\n'; убрать переход на новую строку, то программа напечатает только один раз всё сразу по завершении цикла:
Bash
1
2
Введи время в секундах: ->5
Секунды: 4Секунды: 3Секунды: 2Секунды: 1Секунды: 0
Добавлено через 36 секунд
почему так происходит?

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

Не по теме:

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

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

0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
04.07.2013, 01:24 12
Цитата Сообщение от DiffEreD Посмотреть сообщение
(в одну строчку если уж перевод строки убрали
Цитата Сообщение от xtorne21st Посмотреть сообщение
убрать переход на новую строку, то программа напечатает только один раз всё сразу по завершении цикла
собственно вот буферизация имеет место быть
0
интересующийся
311 / 282 / 93
Регистрация: 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 минуты
П.С. Если быть точнее - допустим, но выкидывает исключение
0
Croessmah
04.07.2013, 03:09
  #14

Не по теме:

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

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

Не по теме:

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

0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
04.07.2013, 05:27 16
Дело может и не в этом компиляторе, а в Linux (или в компиляторах для Linux). Там ввод\вывод как-то по другому организован (боюсь сказать: небуферизован, потому что тут спор был на эту тему). Некотроые команды, например sync(), для очистки буфера, в Linux не работают. Но это предположение. Если бы проверить, в Linux, этот код с другим компилятором (не сырым)...
0
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;
}

0
45 / 48 / 5
Регистрация: 24.06.2013
Сообщений: 677
08.07.2013, 00:50 18
Цитата Сообщение от Croessmah Посмотреть сообщение
так же не даст точных результатов
А Sleep даст точный результат?
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
08.07.2013, 00:55 19
Цитата Сообщение от Retyrn0 Посмотреть сообщение
А Sleep даст точный результат?
Нет.
0
45 / 48 / 5
Регистрация: 24.06.2013
Сообщений: 677
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 секунд прошло аж за пол секунды ;-)
0
08.07.2013, 01:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.07.2013, 01:25
Помогаю со студенческими работами здесь

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

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

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

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

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

[WPF] Программа выключения компьютера через определенное время
все облазил и не могу собрать все вместе, помогите новичку, дело обстоит так: пишу программу...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru