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

Тема в разделе "Delphi - Система", создана пользователем vega, 11 апр 2008.

  1. vega

    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]
     
  2. astronom

    astronom Гость

    Можно, например так:
    Код (Text):
    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 и вводить данные по маске. ;)
     
  3. vega

    vega Гость

    Спасибо, попробую!!!
     
  4. astronom

    astronom Гость

    Согласен.
     
  5. vega

    vega Гость

    Друзья огромное спасибо!!!
     
Загрузка...

Поделиться этой страницей