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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.04.2015, 10:45   #1
Johny58
Пользователь
 
Регистрация: 15.12.2014
Сообщений: 17
Восклицание вопрос по коду (отладка)

Ребят, есть код, он работает, но процедура при вызове не выполняет свое предназначение. Она должна прибавлять первоначальным минутам +1, если минут < 59 и учитывать смену суток (23:59 - 00:00).

Код:

Код:
unit Unit1;

interface

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

type
    time=record
            h:0..23;
            m:0..59;
          end;
    TForm1 = class(TForm)
    st: TStringGrid;
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Button2: TButton;
    Label1: TLabel;
    Label2: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1; i: integer; tm: time;

implementation

{$R *.dfm}

procedure sledmin(t: time; var t1: time);
var
  tm: time;
begin
  tm.h:=t.h;
  tm.m:=t.m;

  if t.m <> 59 then t1.m := t.m + 1
  else begin
    t1.m:=0;
  if tm.h <> 23 then t1.h := tm.h + 1
  else begin
    t1.h := 0;
       end;
    end;
  t1.h:=tm.h;
  t1.m:=tm.m;
  end;


procedure TForm1.FormCreate(Sender: TObject);
begin
  i:=0;
  st.Cells[0,0]:='№';
  st.Cells[1,0]:='Часы';
  st.Cells[2,0]:='Минуты';
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
  i:=i+1;
  st.Cells[0,i]:=inttostr(i);
  st.Cells[1,i]:=Edit1.Text;
  st.Cells[2,i]:=Edit2.Text;
  tm.h:=strtoint(Edit1.Text);
  tm.m:=strtoint(Edit2.Text);
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  t11, t111: time;
begin
  sledmin(t11, t111);
  i:=i+1;
  st.Cells[0,i]:=inttostr(i);
  st.Cells[1,i]:=inttostr(tm.h);
  st.Cells[2,i]:=inttostr(tm.m);
end;

end.
Johny58 вне форума Ответить с цитированием
Старый 21.04.2015, 10:50   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ну так возьмите отладчик, поставьте breakpoint в том месте, и смотрите что там происходит, раз речь об отладке.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 21.04.2015, 11:00   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

0) избавьтесь от глобальных переменных (в особенности если есть ТАКИЕ же но локальные) путаница невообразимая.
Сделайте все tm: time; локальными.

1) расставляем комментарии
Код:
tm:=...// запомнили исходные данные
  tm.h:=t.h;
  tm.m:=t.m;

t1:= ... //посчитали новые значения
  if t.m <> 59 then t1.m := t.m + 1
  else begin
    t1.m:=0;
  if tm.h <> 23 then t1.h := tm.h + 1
  else begin
    t1.h := 0;
       end;
    end;
t1:=tm; //вернули запомненное
  t1.h:=tm.h;
  t1.m:=tm.m;
2) Оставляем только комментарии
Код:
tm:=...// запомнили исходные данные
t1:= ... //посчитали новые значения
t1:=tm; //вернули запомненное
4) дальше продолжать или все ясно?
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 21.04.2015, 11:05   #4
Johny58
Пользователь
 
Регистрация: 15.12.2014
Сообщений: 17
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
0) избавьтесь от глобальных переменных (в особенности если есть ТАКИЕ же но локальные) путаница невообразимая.
Сделайте все tm: time; локальными.

1) расставляем комментарии
Код:
tm:=...// запомнили исходные данные
  tm.h:=t.h;
  tm.m:=t.m;

t1:= ... //посчитали новые значения
  if t.m <> 59 then t1.m := t.m + 1
  else begin
    t1.m:=0;
  if tm.h <> 23 then t1.h := tm.h + 1
  else begin
    t1.h := 0;
       end;
    end;
t1:=tm; //вернули запомненное
  t1.h:=tm.h;
  t1.m:=tm.m;
2) Оставляем только комментарии
Код:
tm:=...// запомнили исходные данные
t1:= ... //посчитали новые значения
t1:=tm; //вернули запомненное
4) дальше продолжать или все ясно?
Если Вас не затруднит, то хорошо бы было продолжить. Заранее спасибо.
Johny58 вне форума Ответить с цитированием
Старый 21.04.2015, 12:31   #5
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Все что вы так долго и упорно считали двумя последними строчками кода процедуры
а именно
Код:
 t1.h:=tm.h;
 t1.h:=tm.m;
свели на нет.
Ранее вычисленное значение затерли старым значением.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 22.04.2015, 08:52   #6
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Чем тебе плох тип TDateTime? Нахрена кривой велосипед с квадратными колёсами?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по коду Dmitri446 Помощь студентам 0 30.10.2014 12:26
Вопрос по коду. Алексей deb Общие вопросы C/C++ 9 10.06.2014 19:33
Вопрос по коду Alexey_68 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 02.03.2013 00:19
Вопрос по коду игры pavelvolkov73 Gamedev - cоздание игр: Unity, OpenGL, DirectX 2 21.11.2012 15:42
Вопрос по коду BeZone Помощь студентам 10 28.12.2009 13:21