• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Расчет времени маршрута

  • Автор темы vega
  • Дата начала
V

vega

Уважаемые возникла такая проблема.

Условие:
Имеется некий автобусный маршрут №1.
Мы имеем данные по данному маршруту, а именно:

а:=время выхода автобуса на маршрут;
b:=время схода автобуса с маршрута;
с:=время затрачиваемое автобусом на один рейс.

К примеру,
a:=06.00
b:=22.00
с:=00.30

Задача: Составить дневной график движения маршрута.

Т.е. он должен выглядеть так:
06.00 - 06.30
06.30 - 07.00
07.00 - 07.30
07.30 - 08.00
08.00 - 08.30
08.30 - 09.00 и т.д. до 22.00

Начал писать код, совсем запутался.
Подскажите, как лучше решить проблему.

[codebox]function time(a, c: double): double;
var
h1: double;
begin
h1 := (INT(а) + INT(с)) * 60 + (frac(a) + frac(с)) * 100;
result := int(h1 / 60) + (h1 - int(h1 / 60) * 60) / 100;
end;

function time2(w, c: double): double;
var
h1: double;
begin
h1 := (INT(w) + INT(с)) * 60 + (frac(w) + frac(с)) * 100;
result := int(h1 / 60) + (h1 - int(h1 / 60) * 60) / 100;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
a,b,c,w,z,x:double;
begin

a:=StrToFloat(Edit1.Text);
b:=StrToFloat(Edit2.Text);
c:=StrToFloat(Edit3.Text);
w:=time(a,c);
z:=time2(0,c);

while w <= b do
w:=w+z;

ListBox1.Items.Add(FloatToStr(w)+' '+FloatToStr(z));

end;

end.[/codebox]
 
A

astronom

Можно, например так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var 
a, b, c, Stop: TDateTime;
TempStr: String; 
begin
Form1.ListBox1.Clear;
a:= StrToTime(Form1.Edit1.Text);
b:= StrToTime(Form1.Edit2.Text);
c:= StrToTime(Form1.Edit3.Text);
While ((b - a) >= c) Do // Пока до конца "смены" осталось больше времени, чем требуется на преодоление маршрута
Begin
Stop:= a + c;		 
TempStr:= TimeToStr(a) + ' - ' + TimeToStr(Stop);
Form1.ListBox1.Items.Add(TempStr);
a:= Stop;
End;
end;
Естественно, необходимо добавить проверку введенных в поля ввода данных (в данном случае строка должна иметь вид: чч:мм:сс) или использовать MaskEdit и вводить данные по маске. ;)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!