Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.02.2018, 08:55   #1
РезедаМуратова
Пользователь
 
Регистрация: 05.12.2017
Сообщений: 69
По умолчанию DELPHI, Электронные часы

Задача:
Текущее показание электронных часов: m ч (0 < m < 23) n мин (0<n<59) k сек (0<k<59). Какое время будут показывать часы че¬рез p ч q мин r с?
помогите пожалуйста с задачей:" Какое время будут показывать часы че¬рез p ч q мин r с?"

Мой код:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    Edit2: TEdit;
    Label3: TLabel;
    Edit3: TEdit;
    Label4: TLabel;
    Label5: TLabel;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Memo1: TMemo;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1.Clear;
Memo1.Lines.Add('Электронные часы');

end;

procedure TForm1.Button1Click(Sender: TObject);
Var m,n,k,z,p,q,r,y,u:extended;
begin
Memo1.Lines.Add('Текущее показания:'+Edit1.Text+'часов'+Edit2.Text+'минут'+Edit3.Text+'секунд');
m:=StrToInt(Edit1.Text);
n:=StrToInt(Edit2.Text);
k:=StrToInt(Edit3.Text);
p:=StrToInt(Edit4.Text);
q:=StrToInt(Edit5.Text);
r:=StrToInt(Edit6.Text);
z:=(m+(n+(k/60))/60)/24;
y:=(n+(k/60))/60;
u:=k/60;
Memo1.Lines.Add('Прибавляем некоторое время:'+IntToStr(z)+'часов'+IntToStr(y)+'минут'+IntToStr(u)+'секунд');

end;

end.
Вложения
Тип файла: zip проектная работа.zip (8.6 Кб, 17 просмотров)

Последний раз редактировалось РезедаМуратова; 28.02.2018 в 08:57. Причина: Уведомление
РезедаМуратова вне форума Ответить с цитированием
Старый 28.02.2018, 09:07   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

задача на mod (остаток от деления) div (целочисленное деление/деление с остатком)
и опыт сложения в столбик
Код:
m n k --текущее время
p q c  --прошло время
=================
x y z  --новое время

z:=(k+c) mod 60;
y:=((n+q) +(k+c) div 60) mod 60;
... остальное самостоятельно
или же все то же но по частям
Код:
z:=0;
z:=z +k+c;
y:=z div 60; //переполнение секунд в полных минутах
z:=z mod 60;//теперь есть секунды
y:=y +n+q; //сложение в столбик(мы учитываем и перенос полных минут из секунд)
....
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 28.02.2018 в 09:17.
evg_m вне форума Ответить с цитированием
Старый 28.02.2018, 09:14   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

DateUtils в uses и без всяких пересчетов (делфи же )
Код:
Memo1.Lines.Add('Новое время: '+FormatDateTime('hh:mm:ss',IncSecond(EncodeTime(m,n,k,0),p*3600+q*60+r)));
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 28.02.2018, 09:17   #4
РезедаМуратова
Пользователь
 
Регистрация: 05.12.2017
Сообщений: 69
По умолчанию

Спасибо, но я уже так делала изначально, но у меня возникла такая проблема и я все заменила на то, что вы уже видели. Знаний по программированию у меня минимальный, помогите пожалуйста почему возникает такая ошибка.
Изображения
Тип файла: jpg Безымянный.jpg (92.8 Кб, 126 просмотров)
РезедаМуратова вне форума Ответить с цитированием
Старый 28.02.2018, 09:36   #5
РезедаМуратова
Пользователь
 
Регистрация: 05.12.2017
Сообщений: 69
По умолчанию

Спасибо большое
РезедаМуратова вне форума Ответить с цитированием
Старый 28.02.2018, 09:36   #6
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Потому что типы должны быть целочисленные а не Extended.
Есть же волшебная кнопочка f1 она открывает хелп по методам и операторам.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 28.02.2018, 09:36   #7
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
Var m,n,k,z,p,q,r,y,u:extended; integer;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 28.02.2018, 12:09   #8
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

у меня завалялось тут...


З.Ы. Delphi 7 на windows 10 в 2018 году - это половое извращение.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 02.03.2018, 07:09   #9
РезедаМуратова
Пользователь
 
Регистрация: 05.12.2017
Сообщений: 69
По умолчанию

А если вычитать в прошедшем времени?
Код:
procedure TForm1.Button1Click(Sender: TObject);
Var m,n,k,p,q,r:word;
begin
Memo1.Lines.Add('Текущее показания: '+Edit1.Text+' часов '+Edit2.Text+' минут '+Edit3.Text+' секунд ');
m:=StrToInt(Edit1.Text);
n:=StrToInt(Edit2.Text);
k:=StrToInt(Edit3.Text);
p:=StrToInt(Edit4.Text);
q:=StrToInt(Edit5.Text);
r:=StrToInt(Edit6.Text);
if (p and q and r)>0 then
Memo1.Lines.Add('Новое время: '+FormatDateTime('hh:mm:ss',IncSecond(EncodeTime(m,n,k,0),p*3600+q*60+r))) else
Memo1.Lines.Add('Новое время: '+FormatDateTime('hh:mm:ss',IncSecond(EncodeTime(m,n,k,0),p*3600-q*60-r))) ;
end;

procedure TForm1.Edit4KeyPress(Sender: TObject; var Key: Char);
begin
 if not(key in ['0'..'9','<','-',#8])then
 begin
 key:=#0; end;
 //if not (key in ['0'..'9','-','.',',',#8]) then key:=#0;
end;

procedure TForm1.Edit5KeyPress(Sender: TObject; var Key: Char);
begin
  if not(key in ['0'..'9','<','-',#8])then
 begin
 key:=#0; end;
 //if not (key in ['0'..'9','-','.',',',#8])then key:=#0;
end;

procedure TForm1.Edit6KeyPress(Sender: TObject; var Key: Char);
begin
 if not(key in ['0'..'9','<','-',#8])then
 begin
 key:=#0;end;
 //if not (key in ['0'..'9','-','.',',',#8]) then key:=#0;
end;
РезедаМуратова вне форума Ответить с цитированием
Старый 02.03.2018, 08:00   #10
РезедаМуратова
Пользователь
 
Регистрация: 05.12.2017
Сообщений: 69
По умолчанию Delphi,Электронные часы, вычисление времени (сколько было)

Здравствуйте.
Задача:
Текущее показание электронных часов: m ч (0 < m < 23) n мин (0<n<59) k сек (0<k<59). Какое время будут показывать часы через p ч q мин r с?
Задача как сделать обратный счет, то есть, вычитание (сколько было).
код:
Хочу сделать вычитание от текущего времени, но он это делает не корректно
так если на часах сейчас 10:10:10 и мы хотим узнать сколько было -3:-15:-70, то он должен по идее вывести 6:54:00, а выводит 5:22:16. Не могу отредактировать правильно :
Код:
procedure TForm1.Button1Click(Sender: TObject);
Var m,n,k,p,q,r:word;
begin
Memo1.Lines.Add('Текущее показания: '+Edit1.Text+' часов '+Edit2.Text+' минут '+Edit3.Text+' секунд ');
m:=StrToInt(Edit1.Text);
n:=StrToInt(Edit2.Text);
k:=StrToInt(Edit3.Text);
p:=StrToInt(Edit4.Text);
q:=StrToInt(Edit5.Text);
r:=StrToInt(Edit6.Text);
if (p and q and r)>0 then
Memo1.Lines.Add('Новое время: '+FormatDateTime('hh:mm:ss',IncSecond(EncodeTime(m,n,k,0),p*3600+q*60+r))) else
Memo1.Lines.Add('Новое время: '+FormatDateTime('hh:mm:ss',IncSecond(EncodeTime(m,n,k,0),p*3600-q*60-r))) ;
end;
 
procedure TForm1.Edit4KeyPress(Sender: TObject; var Key: Char);
begin
 if not(key in ['0'..'9','<','-',#8])then
 begin
 key:=#0; end;
 //if not (key in ['0'..'9','-','.',',',#8]) then key:=#0;
end;
 
procedure TForm1.Edit5KeyPress(Sender: TObject; var Key: Char);
begin
  if not(key in ['0'..'9','<','-',#8])then
 begin
 key:=#0; end;
 //if not (key in ['0'..'9','-','.',',',#8])then key:=#0;
end;
 
procedure TForm1.Edit6KeyPress(Sender: TObject; var Key: Char);
begin
 if not(key in ['0'..'9','<','-',#8])then
 begin
 key:=#0;end;
 //if not (key in ['0'..'9','-','.',',',#8]) then key:=#0;
end;
 
end.
РезедаМуратова вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Электронные часы на с++ torf222 Помощь студентам 2 22.09.2014 06:22
Перепрограммировать наручные электронные часы в таймер с обратным отсчетом efefus Фриланс 12 24.01.2013 19:23
электронные часы Rachel Помощь студентам 2 07.11.2011 21:46
Электронные часы jaxik Общие вопросы Delphi 2 07.04.2010 12:25
электронные часы Багира Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 19.12.2007 23:09