Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Секундомер на С++, Секундомер на С++ 
:(
    Опции темы
Garik1995
Дата 23.10.2014, 04:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 15.10.2014

Репутация: нет
Всего: нет



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

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit6.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm6 *Form6;
//---------------------------------------------------------------------------
__fastcall TForm6::TForm6(TComponent* Owner)
    : TForm(Owner)
{
Timer1->Enabled = false;
Timer1->Interval = 10;
}
//---------------------------------------------------------------------------
void __fastcall TForm6::Button1Click(TObject *Sender)
{
Timer1->Enabled = true;
Button1->Enabled = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm6::Button3Click(TObject *Sender)
{
hours = 0;
min = 0;
sec = 0;
msec = 0;
Label1->Caption = "00";
Label2->Caption = "00";
Label3->Caption = "00";
Label4->Caption = "00";
}
//---------------------------------------------------------------------------
void __fastcall TForm6::Button2Click(TObject *Sender)
{
Timer1->Enabled = false;
Button1->Enabled = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm6::Timer1Timer(TObject *Sender)
{
if ( msec < 99 )
msec++;
else
{
msec = 0;
if ( sec < 59)
sec++;
else
{
sec = 0;
min++;
Label2->Caption = "0" + IntToStr(min);
}
if ( min < 59)
min++;
else
{
min = 0;
hours++;
Label1->Caption = "0" + IntToStr(hours);
}
if (sec <= 9)
Label3->Caption = "0" + IntToStr(sec);
else
Label3->Caption = IntToStr(sec);
}
if (msec <=9)
Label4->Caption = "0" + IntToStr(msec);
else
Label4->Caption = IntToStr(msec);
}

//---------------------------------------------------------------------------

PM MAIL   Вверх
baldman88
Дата 23.10.2014, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 18.1.2009

Репутация: 1
Всего: 7



Странно, что оно у Вас все остальное (кроме часов) нормально переводит smile 
PM MAIL   Вверх
Garik1995
Дата 23.10.2014, 09:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 15.10.2014

Репутация: нет
Всего: нет



Цитата(baldman88 @ 23.10.2014,  08:52)
Странно, что оно у Вас все остальное (кроме часов) нормально переводит smile

у меня выводится дата типа 01:060:45:13
PM MAIL   Вверх
baldman88
Дата 23.10.2014, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 18.1.2009

Репутация: 1
Всего: 7



Попробуйте так (с Builder не знаком, но если что-то не так, то поправьте сами):
Код

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit6.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm6 *Form6;
//---------------------------------------------------------------------------
__fastcall TForm6::TForm6(TComponent* Owner)
    : TForm(Owner)
{
    Timer1->Enabled = false;
    Timer1->Interval = 10;
}
//---------------------------------------------------------------------------
void __fastcall TForm6::Button1Click(TObject *Sender)
{
    Timer1->Enabled = true;
    Button1->Enabled = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm6::Button3Click(TObject *Sender)
{
    hours = 0;
    min = 0;
    sec = 0;
    msec = 0;
    Label1->Caption = "00";
    Label2->Caption = "00";
    Label3->Caption = "00";
    Label4->Caption = "00";
}
//---------------------------------------------------------------------------
void __fastcall TForm6::Button2Click(TObject *Sender)
{
    Timer1->Enabled = false;
    Button1->Enabled = true;
}
//---------------------------------------------------------------------------
void  update_caption(TObject *Label, int value)
{
    if (value <= 9)
    {
        Label->Caption = "0" + IntToStr(value);
    }
    else
    {
        Label->Caption = IntToStr(value);
    }
}
//---------------------------------------------------------------------------
void __fastcall TForm6::Timer1Timer(TObject *Sender)
{
    if ( msec < 99 )
    {
        msec++;
    }
    else
    {
        msec = 0;
        if ( sec < 59)
        {
            sec++;
        }
        else
        {
            sec = 0;
            if ( min < 59)
            {
                min++;
            }
            else
            {
                min = 0;
                hours++;
                update_caption(Label1, hours);
            }
            update_caption(Label2, min);
        }
        update_caption(Label3, sec);
    }
    update_caption(Label4, msec);
}
//---------------------------------------------------------------------------

Вариант, конечно, не самый оптимальный, но работать должно.

Это сообщение отредактировал(а) baldman88 - 23.10.2014, 09:21
PM MAIL   Вверх
maint
Дата 23.10.2014, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 12.5.2008

Репутация: 1
Всего: 2



Цитата(Garik1995 @ 23.10.2014,  04:11)
Пишу секундомер,проблема в том,что он неккоректно переводит минуты в часы.Что нужно исправить чтобы он правильно переводил минуты в часы?
Код

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit6.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm6 *Form6;
//---------------------------------------------------------------------------
__fastcall TForm6::TForm6(TComponent* Owner)
    : TForm(Owner)
{
Timer1->Enabled = false;
Timer1->Interval = 10;
}
//---------------------------------------------------------------------------
void __fastcall TForm6::Button1Click(TObject *Sender)
{
Timer1->Enabled = true;
Button1->Enabled = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm6::Button3Click(TObject *Sender)
{
hours = 0;
min = 0;
sec = 0;
msec = 0;
Label1->Caption = "00";
Label2->Caption = "00";
Label3->Caption = "00";
Label4->Caption = "00";
}
//---------------------------------------------------------------------------
void __fastcall TForm6::Button2Click(TObject *Sender)
{
Timer1->Enabled = false;
Button1->Enabled = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm6::Timer1Timer(TObject *Sender)
{
if ( msec < 99 )
msec++;
else
{
msec = 0;
if ( sec < 59)
sec++;
else
{
sec = 0;
min++;
Label2->Caption = "0" + IntToStr(min);
}
if ( min < 59)
min++;
else
{
min = 0;
hours++;
Label1->Caption = "0" + IntToStr(hours);
}
if (sec <= 9)
Label3->Caption = "0" + IntToStr(sec);
else
Label3->Caption = IntToStr(sec);
}
if (msec <=9)
Label4->Caption = "0" + IntToStr(msec);
else
Label4->Caption = IntToStr(msec);
}

//---------------------------------------------------------------------------

минуты делить на 60, как целое число. Оставшиеся минуты получать с помощью остатка от деления  (операция %). 
И не городить все эти if использовать форматирование с помощью sprintf.  "%.2d" сам нолик пририсует если нужно
PM   Вверх
Garik1995
Дата 23.10.2014, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 15.10.2014

Репутация: нет
Всего: нет



Цитата(maint @ 23.10.2014,  10:02)
Цитата(Garik1995 @ 23.10.2014,  04:11)
Пишу секундомер,проблема в том,что он неккоректно переводит минуты в часы.Что нужно исправить чтобы он правильно переводил минуты в часы?
Код

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit6.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm6 *Form6;
//---------------------------------------------------------------------------
__fastcall TForm6::TForm6(TComponent* Owner)
    : TForm(Owner)
{
Timer1->Enabled = false;
Timer1->Interval = 10;
}
//---------------------------------------------------------------------------
void __fastcall TForm6::Button1Click(TObject *Sender)
{
Timer1->Enabled = true;
Button1->Enabled = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm6::Button3Click(TObject *Sender)
{
hours = 0;
min = 0;
sec = 0;
msec = 0;
Label1->Caption = "00";
Label2->Caption = "00";
Label3->Caption = "00";
Label4->Caption = "00";
}
//---------------------------------------------------------------------------
void __fastcall TForm6::Button2Click(TObject *Sender)
{
Timer1->Enabled = false;
Button1->Enabled = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm6::Timer1Timer(TObject *Sender)
{
if ( msec < 99 )
msec++;
else
{
msec = 0;
if ( sec < 59)
sec++;
else
{
sec = 0;
min++;
Label2->Caption = "0" + IntToStr(min);
}
if ( min < 59)
min++;
else
{
min = 0;
hours++;
Label1->Caption = "0" + IntToStr(hours);
}
if (sec <= 9)
Label3->Caption = "0" + IntToStr(sec);
else
Label3->Caption = IntToStr(sec);
}
if (msec <=9)
Label4->Caption = "0" + IntToStr(msec);
else
Label4->Caption = IntToStr(msec);
}

//---------------------------------------------------------------------------

минуты делить на 60, как целое число. Оставшиеся минуты получать с помощью остатка от деления  (операция %). 
И не городить все эти if использовать форматирование с помощью sprintf.  "%.2d" сам нолик пририсует если нужно

Спасибо большое,попробую)
PM MAIL   Вверх
baldman88
Дата 23.10.2014, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 18.1.2009

Репутация: 1
Всего: 7



Цитата(maint @ 23.10.2014,  10:02)
И не городить все эти if использовать форматирование с помощью sprintf.  "%.2d" сам нолик пририсует если нужно

Что-то профит от применения sprintf, в данном сулчае, выглядит весьма сомнительно.
PM MAIL   Вверх
borisbn
Дата 24.10.2014, 00:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Вот, что предлагает maint:

Код
void __fastcall TForm6::Timer1Timer(TObject *Sender)
{
    AnsiString s;
    msec++;
    int ms = msec;
    Label4->Caption = s.sprintf( "%02d", ms % 100 );    ms /= 100;
    Label3->Caption = s.sprintf( "%02d", ms % 60 );     ms /= 60
    Label2->Caption = s.sprintf( "%02d", ms % 60 );     ms /= 60
    Label1->Caption = s.sprintf( "%d", ms );
}


ИМХО проще некуда. Нет ?


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Garik1995
Дата 24.10.2014, 01:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 15.10.2014

Репутация: нет
Всего: нет



Цитата(borisbn @ 24.10.2014,  00:29)
Вот, что предлагает maint:

Код
void __fastcall TForm6::Timer1Timer(TObject *Sender)
{
    AnsiString s;
    msec++;
    int ms = msec;
    Label4->Caption = s.sprintf( "%02d", ms % 100 );    ms /= 100;
    Label3->Caption = s.sprintf( "%02d", ms % 60 );     ms /= 60
    Label2->Caption = s.sprintf( "%02d", ms % 60 );     ms /= 60
    Label1->Caption = s.sprintf( "%d", ms );
}


ИМХО проще некуда. Нет ?

Согласен)Я уже разобрался,теперь у меня всё работает как нужно)Спасибо вам большое)
PM MAIL   Вверх
baldman88
Дата 25.10.2014, 01:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 18.1.2009

Репутация: 1
Всего: 7



Цитата(borisbn @  24.10.2014,  00:29 Найти цитируемый пост)
ИМХО проще некуда. Нет ? 

Это да. Признаю, был не прав. Все в микроконтроллерах мыслю  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0874 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.