Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи на Pascal/Object Pascal/Free Pascal (Delphi/Lazarus)

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

{$APPTYPE CONSOLE}
 
const
  MAX_STATIONS = 100;
  MAX_TRAINS   = 100;
 
  MAX_MINUTES  = 1440;
  BAD_MINUTES  = MAX_MINUTES + 1;
 
type
  TTRAINS  = array[1..MAX_TRAINS] of integer;
   
  TSTATION = record
// data
    elapsedMinutes: integer;       // <=1440 = 24 hours
    ntrains: integer;              // per day
    hOrigin, mOrigin: TTRAINS;     // "from" time
 
// calculated    
    hArriving, mArriving: TTRAINS; // "to current" time
    totMinutes: TTRAINS;           // -"- tot minutes
    minMinutes: TTRAINS;           // -"- tot minutes candidate
  end;
 
  TSTATIONS = array[1..MAX_STATIONS] of TSTATION;
 
var
  resultMin: integer = BAD_MINUTES;
  nstations: integer = 0;
  stations: TSTATIONS; // [1..nstations]
  hBasil, mBasil, BasilTime: integer; // Basil arriving
 
  fp: text;
  fname: string;
  strOrigin: string; //-remove
 
procedure runtask;
var
  ns, nt: integer;
begin
// calc
 
  for ns := 1 to nstations do with stations[ns] do
    for nt := 1 to ntrains do begin
      hArriving[nt] := hOrigin[nt];
      mArriving[nt] := mOrigin[nt] + elapsedMinutes;
      if (mArriving[nt] > 60) then begin
        mArriving[nt] := mArriving[nt] - 60;
        inc(hArriving[nt]);
        if (hArriving[nt] > 24) then
          hArriving[nt] := hArriving[nt] - 24;
      end;
      totMinutes[nt] := 60*hArriving[nt] + mArriving[nt];
      minMinutes[nt] := BAD_MINUTES; // fill
    end;//nt
 
// convert to minutes
  BasilTime := 60*hBasil + mBasil;
 
// find...
 
  for ns := 1 to nstations do with stations[ns] do
    for nt := 1 to ntrains do begin
      if (hBasil < hArriving[nt]) then
        minMinutes[nt] := totMinutes[nt] - BasilTime
      else if (hBasil = hArriving[nt]) then begin
        if (mBasil <= mArriving[nt]) then
          minMinutes[nt] := mArriving[nt] - mBasil;
      end
//????????????????????
      else begin // hBasil > hArriving[nt] over day ?
        minMinutes[nt] := MAX_MINUTES - 60*(hBasil - hArriving[nt]);
        if (mBasil < mArriving[nt]) then
          minMinutes[nt] := minMinutes[nt] + (mArriving[nt] - mBasil)
        else if (mBasil > mArriving[nt]) then
          minMinutes[nt] := minMinutes[nt] - (mBasil - mArriving[nt]);
      end;
//????????????????????
    end;//nt
 
// get min from...
 
  for ns := 1 to nstations do with stations[ns] do
    for nt := 1 to ntrains do
      if (resultMin >= minMinutes[nt]) then
        resultMin := minMinutes[nt];
end;//runtask
 
procedure getdata;
var
  ns, nt: integer;
begin
  fname := paramstr(1); //-???
 
  assignfile(fp, fname);
  reset(fp);
 
  readln(fp, hBasil, mBasil);
  readln(fp, nstations);
 
  for ns := 1 to nstations do with stations[ns] do begin
    readln(fp, elapsedMinutes);
    readln(fp, ntrains);
    for nt := 1 to ntrains do
      readln(fp, hOrigin[nt], mOrigin[nt]);
  end;
 
  readln(fp, strOrigin); //-remove
  closefile(fp);
end;//getdata
 
procedure outdata;
begin
  writeln(strOrigin); //-remove
  writeln(resultMin);
end;//outdata
 
begin
  getdata;
  runtask;
  outdata;
end.

Всего записей: 24127 | Зарегистр. 06-12-2002 | Отправлено: 16:58 28-12-2008 | Исправлено: akaGM, 20:00 28-12-2008
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи на Pascal/Object Pascal/Free Pascal (Delphi/Lazarus)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru