Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/58: Рейтинг темы: голосов - 58, средняя оценка - 4.76
21 / 21 / 4
Регистрация: 30.01.2011
Сообщений: 119

Секундомер

30.01.2011, 04:49. Показов 11092. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите исходный код программы для секундомера без всяких кномок без никакого графического интерфейса самый просмотой на языке C++ Builder
 Комментарий модератора 
Дублирование тем ничем хорошим для тебя не закончится!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.01.2011, 04:49
Ответы с готовыми решениями:

Секундомер на С++
Пишу секундомер,проблема в том,что он неккоректно переводит минуты в часы.Что нужно исправить чтобы он правильно переводил минуты в часы? ...

Секундомер!
Написать секундомер в нём должно быть 3 лэйбочки и 2 кнопки

Timer(Секундомер)
Пацаны я создал Секундомер, он у меня работает но немножко не правильно, помогите поправить код программ!!!!!!!!!!

8
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
30.01.2011, 05:21
Timer(Секундомер) <- используете понравившееся из предоставленного ->
Пример программы
Описание программы
Это приложение выполняет функции секундомера. При этом возможен выбор шага, с которым производятся измерения - секунда, одна десятая или одна сотая секунды. При нажатии соответствующих кнопок выполняется запуск/приостановка отсчета, сброс времени на ноль (если отсчет был запущен, то он продолжится, но уже начиная с нулевого значения), выход из приложения. При смене величины шага расчет останавливается, время сбрасывается на ноль.
Никаких особых идей в базовой версии программы не используется, только простейшая работа с компонентами.

Используются следующие компоненты: Button, Edit, RadioButton, Timer.

Расположение компонентов на форме

Свойства компонент, измененные по сравнению со стандартными
Button1:
Caption: "Старт"
Button2:
Caption: "Сброс"
Button3:
Caption: "Выход"
Edit1:
Text: "0"
RadioButton1:
Caption: "1 секунда"
Checked: true
RadioButton2:
Caption: "0,1 секунды"
RadioButton3:
Caption: "0,01 секунды"

Код программы
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
double TotalTime = 0;
 
void RadioButtonClick(int Step)
  {
  Form1 -> Timer1 -> Enabled = false;
  TotalTime = 0.0;
  Form1 -> Edit1 -> Text = "0";
  Form1 -> Timer1 -> Interval = Step;
  Form1 -> Button1 -> Caption = "Старт";
  }
//--------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Timer1 -> Enabled = !(Timer1 -> Enabled);
if (Timer1 -> Enabled == true)
  Button1 -> Caption = "Пауза";
else
  Button1 -> Caption = "Старт";
}
//--------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
TotalTime = 0.0;
}
//--------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
exit(0);
}
//--------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
TotalTime += 0.001 * Timer1 -> Interval;
Edit1 -> Text = TotalTime;
}
//--------------------------------------------------------------------
void __fastcall TForm1::RadioButton1Click(TObject *Sender)
{
RadioButtonClick(1000);
}
//--------------------------------------------------------------------
void __fastcall TForm1::RadioButton2Click(TObject *Sender)
{
RadioButtonClick(100);
}
//--------------------------------------------------------------------
void __fastcall TForm1::RadioButton3Click(TObject *Sender)
{
RadioButtonClick(10);
}
 
Код программы с комментариями
double TotalTime = 0; //Отмеренное время в секундах
 
void RadioButtonClick(int Step) //Функция, вызываемая компонентами
  //RadioButton - при смене величины шага.
  //Аргумент - устанавливаемая величина шага в миллисекундах
  {
  Form1 -> Timer1 -> Enabled = false; //Таймер останавливается
  TotalTime = 0.0; //Время сбрасывается на ноль
  Form1 -> Edit1 -> Text = "0"; //В поле вывода Edit1 отображается
  //сброс на ноль
  Form1 -> Timer1 -> Interval = Step; //Изменяем шаг измерения таймера
  Form1 -> Button1 -> Caption = "Старт"; //Устанавливаем надпись
  //на кнопке - т.к. таймер остановлен
  }
//--------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
  //Если кнопка нажата - событие OnClick
{
Timer1 -> Enabled = !(Timer1 -> Enabled); //Меняем состояние таймера -
  //запущен/остановлен...
if (Timer1 -> Enabled == true)
  //...и соответствующим образом надпись на кнопке
  Button1 -> Caption = "Пауза";
else
  Button1 -> Caption = "Старт";
}
//--------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
TotalTime = 0.0; //Сбрасываем время на ноль
}
//--------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
exit(0); //Выход из приложения
}
//--------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
  //Выполняется каждый раз, когда таймер отсчитывает
  //установленный интервал - событие OnTimer
{
TotalTime += 0.001 * Timer1 -> Interval; //Увеличиваем
  //отмеренное время в секундах на величину шага
Edit1 -> Text = TotalTime; //Выводим в поле вывода текущее время
}
//--------------------------------------------------------------------
void __fastcall TForm1::RadioButton1Click(TObject *Sender)
  //Если выбирается компонент RadioButton - событие OnClick
{
RadioButtonClick(1000); //Вызываем функцию установки шага - на 1000 мс
}
//--------------------------------------------------------------------
void __fastcall TForm1::RadioButton2Click(TObject *Sender)
{
RadioButtonClick(100); //Вызываем функцию установки шага - на 100 мс
}
//--------------------------------------------------------------------
void __fastcall TForm1::RadioButton3Click(TObject *Sender)
{
RadioButtonClick(10); //Вызываем функцию установки шага - на 10 мс
}
Советы по улучшению и расширению программы
У программы, код которой приведен здесь, есть недостаток, заключающийся в том, что время в ней отображается исключительно в секундах, а перевод в формат часы-минуты-секунды не реализован. Конечно, это не будет иметь особого значения когда вы только пишете программу и делаете тестовый запуск - если вы не заняты нечем другим, то смотреть на секундомер несколько минут не отрываясь вы все равно не будете. Однако если вы уже написали программу, зашли на кухню, поставили вариться пельмени и щелкнули по кнопке "Старт", желая не пропустить момент готовности, то информация о том, что ваш ужин варится уже 1024,32 секунды может вас изрядно озадачить. Поэтому дописать функцию для внятного отображения времени будет полезно для практического использования.
Прежде всего необходимо определить три переменные типа int - назовем их hours, minuts, seconds (да, секунды тоже будут целым числом, а почему - сказано чуть ниже). Затем с помощью несложных арифметических действий из числа секунд получаются отдельно число часов, минут и секунд. Округление при этом производится функцией floor из библиотеки math. После чего остается лишь преобразовать три отдельных числа в пригодную для вывода строку. Выглядит это следующим образом:
Edit1 -> Text = AnsiString(hours) + ":" + AnsiString(minuts) + ":" + AnsiString(seconds);
AnsiString - строковой тип (точнее - класс), а AnsiString() - функция-конструктор, возвращающая значение типа AnsiString на основании переданных аргументов. Оператор сложения в данном случае означает объединение двух или более строк.
Вставив соответствующий код в функцию Timer1Timer, получаем то, что хотели - вывод будет производить в формате чч:мм:сс.

Теперь о том, почему же секунды должны содержаться в целой переменной.
Во-первых, не настолько уж часто вам вообще могут понадобиться доли секунды, и если уж имеет смысл выводить минуты, а то и часы, то вряд ли на таких масштабах одна сотая секунды будет важна. Во-вторых, и это здесь главное - при маленьких значениях шага время выполнения программой инструкций, указанных в функции таймера, становится сравнимыи с величиной этого шага, что может внести существенные поправки и, следовательно, значительно повлиять на точность измерения.


1
1 / 1 / 1
Регистрация: 29.08.2013
Сообщений: 48
25.09.2013, 15:03
почему так не сделать? на мой взгляд намного проще
на форму кидаем кнопку и эдит. Жмем дважды по кнопке и прописываем.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int min=0, hour=0;
for (;;)
{
Sleep(1000);
min++;
    if (min>59)
    {
    min=0;
    hour++;
    }
Edit1->Text = UnicodeString(hour)+(L":")+min;
Edit1->Refresh();
}
0
Волшебник
 Аватар для Rapsod
65 / 64 / 7
Регистрация: 21.11.2009
Сообщений: 319
25.09.2013, 17:40
Цитата Сообщение от Кирилл2100 Посмотреть сообщение
почему так не сделать? на мой взгляд намного проще
на форму кидаем кнопку и эдит. Жмем дважды по кнопке и прописываем.

int min=0, hour=0;
for (;
{
Sleep(1000);
min++;
if (min>59)
{
min=0;
hour++;
}
Edit1->Text = UnicodeString(hour)+(L":")+min;
Edit1->Refresh();
}
Хотя оно и будет работать, но так нельзя писать)

А вот если когда нибудь вам понадобиться использовать очень точный таймер, то есть еще мультимедийные таймеры.
Они в отличии от простого таймера (TTimer), который может работать с минимальным интервалом 15 миллисекунд, мультимедийный может обеспечить до 1 миллисекунды.
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
25.09.2013, 22:39
Как показывает практика, минимальный рабочий интервал у TTimer где-то около 50 мс, а вовсе не то, что заявлено в справке. Плюс к этому количество одновременно работающих таймеров в системе ограничено, а высокая нагрузка на систему может привести к задержкам или пропускам сообщений WM_TIMER. Вот мультимедийные - это вещь.

Кирилл2100, ты отвечаешь на вопрос почти трехлетней выдержки. Это не то, чтобы порицается, но и не приветствуется. Даже иногда обзывают некропостингом это дело.
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
25.09.2013, 23:06
Цитата Сообщение от BRcr Посмотреть сообщение
Это не то, чтобы порицается, но и не приветствуется.
Верно ведь! к тому же совет... так себе. Использовать Sleep в одну секунду - это практически подвесить приложение.
0
27 / 20 / 1
Регистрация: 26.02.2013
Сообщений: 135
26.09.2013, 07:09
Нашел очень интересный вариант минимальной работающей программы, по работе с таймером. Как программа-секундомер, она работает неплохо, при этом на форму ничего кидать не надо. В моем примере есть две кнопки, но они - чисто для демонстрации.

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
38
39
40
41
42
//---------------------------------------------------------------------------
 
#include <vcl.h>
#include <windows.h>
#include <iostream.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
#pragma argsused
#include <mmsystem.h>
int a=1;
UINT  timerId=10;
 
void CALLBACK TimerProc(UINT uTimerId, UINT uMessage, DWORD_PTR dwUser, DWORD_PTR dw1, DWORD_PTR dw2)
{
//if (a>5) {Form1->Caption=a;}
a++;
}
 
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
  timerId=timeSetEvent(1000, 0, TimerProc, 0, TIME_PERIODIC);
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Form1->Caption=a;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button2Click(TObject *Sender)
{
timeKillEvent(timerId);
}
//---------------------------------------------------------------------------
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
26.09.2013, 10:20
Действительно, занятная штучка. Я попробовал в функцию CallBack вставить модификацию трэкбара (на некоторых других контролах сваливает на эксцэпшн...) и уже на его изменение - вывод на лэйбл, и получился неплохой секундомер.
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
26.09.2013, 10:53
вот такая игрушка получилась...
Кликните здесь для просмотра всего текста
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
38
39
40
41
42
43
44
45
46
47
48
//---------------------------------------------------------------------------
 
#include <vcl.h>
#include <mmsystem.h>
#pragma hdrstop
 
#include "Unit1.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
 
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
    UINT  timerId ;
//---------------------------------------------------------------------------
void CALLBACK TimerProc(UINT uTimerId, UINT uMessage, DWORD_PTR dwUser,
                              DWORD_PTR dw1, DWORD_PTR dw2)
{
   Form1->TrackBar1->Position += 1;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   TrackBar1->Position=0;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
   Form1->DoubleBuffered = true;
   if (!timerId) timerId=timeSetEvent(10 , 0, TimerProc, 0, TIME_PERIODIC);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
   timeKillEvent(timerId);
   timerId = NULL;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::TrackBar1Change(TObject *Sender)
{
   double dt = TrackBar1->Position/100.000 ;
   Label1->Caption = FormatFloat("0.00",dt);
}
//---------------------------------------------------------------------------
Миниатюры
Секундомер  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.09.2013, 10:53
Помогаю со студенческими работами здесь

Секундомер с базой данных
Помогите для C++ Builder написать секундомер для соревнований с общим стартом и для раздельного старта (спустя какое-то время, а именно 30...

Двухпоточный секундомер
Есть задание написать секундомер с двумя окнами, в одном считает 0.1 секунду, в другом 1. Обязательно двухпоточный и с использованием...

Простой секундомер. На Button1 запускается, на Button2 сбрасывается.
Здравствуйте уважаемые программисты. Хочу написать простой секундомер. Что-то вроде нажимаеш на Button1 и он запускается?...

Аналоговый секундомер
Здравствуйте, форумчане) у кого-нибудь есть проект готового оконного аналогового секундомера на С++ написанного в qt, visualstudio или...

Секундомер(и только секундомер).
Да,я в гугле рылся,и там всё в усложнённом варианте.Мне нужно только по простому,поскольку я в JS только 2 день.вот я написал,но не...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
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
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru