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

Секундомер

30.01.2011, 04:49. Показов 11137. Ответов 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru