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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.04.2015, 12:15   #1
benzema
Новичок
Джуниор
 
Регистрация: 03.04.2015
Сообщений: 2
По умолчанию просьба помочь с задачей по delphi

Вот текст самой программы:type время = record час: 0..23;
мин, сек: 0..59;
end;
Описать логическую функцию Раньше (t1,t2) для проверки: предшествует ли время t1 времени t2 (в рамках суток).
код программы ниже.Вопрос в том,когда я в Edit'ы ввожу часы,минуты и секунды и нажимаю на кнопку "добавить время" время добавляется в таблицу.Но мне нужно ввести 2 времени,и вопрос заключается в том,как сделать так,чтобы при повторном нажатии на кнопку "добавить время",время добавлялось уже во вторую строку.
вот код:
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Button1: TButton;
    st: TStringGrid;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  st.Cells[0,0]:='№';
  st.Cells[0,1]:='1 время';
  st.Cells[0,2]:='2 время';
  st.Cells[1,0]:='Часы';
  st.Cells[2,0]:='Минуты';
  st.Cells[3,0]:='Секунды';
end;

procedure TForm1.Button1Click(Sender: TObject);
type
  vremya=record
            chas:0..23;
            min,sec:0..59;
         end;
var
  z:vremya;
  i:integer;
begin
i:=0;
i:=i+1;
  z.chas:=strtoint(Edit1.Text);
  z.min:=strtoint(Edit2.Text);
  z.sec:=strtoint(Edit3.Text);
  st.Cells[1,i]:=Edit1.Text;
  st.Cells[2,i]:=Edit2.Text;
  st.Cells[3,i]:=Edit3.Text;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin

end;

end.

Последний раз редактировалось Stilet; 03.04.2015 в 13:24.
benzema вне форума Ответить с цитированием
Старый 03.04.2015, 12:23   #2
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

i объявляем глобально

Код:
var
Form1: TForm1;
i: Integer;
и инициализируем нулем

Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
i := 0;
st.Cells[0,0]:='№';
st.Cells[0,1]:='1 время';
st.Cells[0,2]:='2 время';
st.Cells[1,0]:='Часы';
st.Cells[2,0]:='Минуты';
st.Cells[3,0]:='Секунды';
end;

a) в итоге на каждый нечетный клик будет добавляться время в первую строку, на четный клик - во вторую
Код:
procedure TForm1.Button1Click(Sender: TObject);
type
vremya=record
chas:0..23;
min,sec:0..59;
end;
var
z:vremya;
begin
i:=i+1;
if i > 2 then
  i := i - 2;
z.chas:=strtoint(Edit1.Text);
z.min:=strtoint(Edit2.Text);
z.sec:=strtoint(Edit3.Text);
st.Cells[1,i]:=Edit1.Text;
st.Cells[2,i]:=Edit2.Text;
st.Cells[3,i]:=Edit3.Text;
end;
б) или же только во вторую строку вставлять все последующие клики
Код:
procedure TForm1.Button1Click(Sender: TObject);
...
i:=i+1;
if i > 1 then
  i := 2;
...
p.s. полагаю Z позже вы сохраняете куда-то, иначе после выхода из функции оно у вас исчезнет за его границами. или же брать уже из грида время для сравнения дальнейшего

Код:
procedure TForm1.Button1Click(Sender: TObject);
...
var
z:vremya;
...
пишу код не только за печеньки

Последний раз редактировалось VIK_aka_TOR; 03.04.2015 в 12:28.
VIK_aka_TOR вне форума Ответить с цитированием
Старый 03.04.2015, 12:31   #3
benzema
Новичок
Джуниор
 
Регистрация: 03.04.2015
Сообщений: 2
Радость

Цитата:
Сообщение от VIK_aka_TOR Посмотреть сообщение
i объявляем глобально

Код:
var
Form1: TForm1;
i: Integer;
и инициализируем нулем

Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
i := 0;
st.Cells[0,0]:='№';
st.Cells[0,1]:='1 время';
st.Cells[0,2]:='2 время';
st.Cells[1,0]:='Часы';
st.Cells[2,0]:='Минуты';
st.Cells[3,0]:='Секунды';
end;

a) в итоге на каждый нечетный клик будет добавляться время в первую строку, на четный клик - во вторую
Код:
procedure TForm1.Button1Click(Sender: TObject);
type
vremya=record
chas:0..23;
min,sec:0..59;
end;
var
z:vremya;
begin
i:=i+1;
if i > 2 then
  i := i - 2;
z.chas:=strtoint(Edit1.Text);
z.min:=strtoint(Edit2.Text);
z.sec:=strtoint(Edit3.Text);
st.Cells[1,i]:=Edit1.Text;
st.Cells[2,i]:=Edit2.Text;
st.Cells[3,i]:=Edit3.Text;
end;
б) или же только во вторую строку вставлять все последующие клики
Код:
procedure TForm1.Button1Click(Sender: TObject);
...
i:=i+1;
if i > 1 then
  i := 2;
...
p.s. полагаю Z позже вы сохраняете куда-то, иначе после выхода из функции оно у вас исчезнет за его границами. или же брать уже из грида время для сравнения дальнейшего

Код:
procedure TForm1.Button1Click(Sender: TObject);
...
var
z:vremya;
...
Спасибо вам большое!!!
benzema вне форума Ответить с цитированием
Старый 04.04.2015, 03:22   #4
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Описать логическую функцию Раньше (t1,t2) для проверки: предшествует ли время t1 времени t2 (в рамках суток).
О!!!
Код:
// Вычисление попадания времени суток ATime в период между AFrom и ATo
function TimeInPeriod(const ATime, AFrom, ATo: TTime): Boolean;
var
  X, F, T: TTime;
begin
  X:= Frac(ATime); // На всякий случай
  F:= Frac(AFrom); // На всякий случай
  T:= Frac(ATo);   // На всякий случай

  if T >= F
    then Result:= (X >= F) and (X <= T)
    else Result:= (X >= F) and (X < 1.0) or (X >= 0.0) and (X <= T);
end;

// Вычисление длительности периода между временами суток AFrom и ATo
function TimeSpan(const AFrom, ATo: TTime): TTime;
var
  F, T: TTime;
begin
  F:= Frac(AFrom); // На всякий случай
  T:= Frac(ATo);   // На всякий случай

  if T >= F
    then Result:= Frac(T - F)
    else Result:= Frac(1 - (F - T));
end;

// Вычисление попадания периода вермени суток [ASpanFrom...ASpanTo]
// целиком в период [AFrom...ATo]
function TimeSpanInPeriod(const ASpanFrom, ASpanTo, AFrom, ATo: TTime): Boolean;
begin
  Result:= TimeInPeriod(ASpanFrom, AFrom, ATo) and TimeInPeriod(ASpanTo, AFrom, ATo);
end;
Attention! This code isn't for use!
For example ONLY!!!
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Просьба помочь со взломом Abimeleh Фриланс 1 22.03.2015 22:14
вопросик и просьба помочь Юлясонце Софт 1 25.09.2012 08:58
Просьба помочь! С++/С# Lihoj Фриланс 0 08.12.2011 02:49
Просьба помочь Ditmar Microsoft Office Word 1 28.04.2010 13:11
Просьба помочь с задачей. kry Паскаль, Turbo Pascal, PascalABC.NET 9 11.01.2009 13:53