Скачиваний:
9
Добавлен:
01.05.2014
Размер:
6 Кб
Скачать
unit types;

interface
const
   MaxStations=20;
   MaxLines=10; {зЁб«® бва®Є а бЇЁб ­Ёп ¤«п Є ¦¤®© ўҐвЄЁ. ЋЈа ­ЁзҐ­ЁҐ бўп§ ­®
                 в®«мЄ® б® б«®¦­®бвмо Їа®б¬®ва  Ёб室­ле ¤ ­­ле}
   MaxLength=25;{¬ ЄбЁ¬ «м­ п ¤«Ё­  ­ §ў ­Ёп бв ­жЁЁ.
                 „«п Є®а४⭮© а Ў®вл ­Ґ ¤®«¦­® ЇаҐўли вм 25}

type

   ArrString=array[1..MaxLength] of char; {Ё¬п ўҐаиЁ­л - ¬ ббЁў бЁ¬ў®«®ў}
   Timestr=string[5]; {бва®Є , ЇаҐ¤бв ў«пой п ўаҐ¬п ў д®а¬ вҐ ——:ЊЊ}
   TimeTableString=string[17]; {бва®Є  в Ў«Ёжл а бЇЁб ­Ёп}

   TTime=word; {ўаҐ¬п - зЁб«® ¬Ё­гв Їа®иҐ¤иҐҐ б 00:00}

   TRoute=record     {¬ аиагв:}
      DepTime:TTime; {ўаҐ¬п ®вЇа ў«Ґ­Ёп}
      ArrTime:TTime; {ўаҐ¬п ЇаЁЎлвЁп}
      Price:word     {бв®Ё¬®бвм ЎЁ«Ґв }
   end;

   {бва®Є  а бЇЁб ­Ёп - бЇЁб®Є Ї®Ґ§¤®ў ¬Ґ¦¤г ¤ўг¬п бв ­жЁп¬Ё}
   PTimeTableElem=^TTimeTableElem;
   TTimeTableElem=record  {н«Ґ¬Ґ­в а бЇЁб ­Ёп:}
      Route:TRoute;       {¬ аиагв}
      Next:PTimeTableElem {гЄ § вҐ«м ­  б«Ґ¤гойЁ© ¬ аиагв}
   end;

   {бЇЁб®Є бв ­жЁ©, ¤® Є®в®але 室пв Ї®Ґ§¤  б нв®© бв ­жЁЁ}
   PDestination=^TDestination;
   TDestination=record    {ॡ஠Ја д }
      Where:byte;         {Єг¤ }
      TimeTable:PTimeTableElem; {Є®Ј¤  Ё бЄ®«мЄ® бв®Ёв}
      TimeTableLines:byte; {зЁб«® бва®Є ў в Ў«ЁжҐ а бЇЁб ­Ёп}
      NextStation:PDestination; {б«Ґ¤гой п бв ­жЁп}
   end;

   {¦Ґ«Ґ§­®¤®а®¦­ п бҐвм - Ја д, ўҐаиЁ­л Є®в®а®Ј® бв ­жЁЁ}
   TVertex=record  {ўҐаиЁ­  - бв ­жЁп}
      Name:ArrString; {­ §ў ­ЁҐ}
      Connections:PDestination; {бЇЁб®Є бв ­жЁ©, ¤® Є®в®але 室пв Ї®Ґ§¤ }
   end;

   TVertices=array[1..MaxStations] of TVertex; {¬ ббЁў ўҐаиЁ­ Ја д }
   TGraph=record
      Number:byte; {зЁб«® ўҐаиЁ­}
      Vertices:TVertices {ўҐаиЁ­л}
   end;

   TAdditionalData=record {ўбЇ®¬®Ј вҐ«м­ п Ё­д®а¬ жЁп ® ўҐаиЁ­Ґ, ¤«п Ї®ЁбЄ }
      VLabel:Integer; {¬ҐвЄ , ᮤҐа¦Ёв ¬Ё­Ё¬ «м­®Ґ ўаҐ¬п, §  Є®в®а®Ґ ¬®¦­® ¤®Ўа вмбп ¤® бв ­жЁЁ}
      VTime:PTimeTableElem; {гЄ § вҐ«м ­  бва®Єг в Ў«Ёжл а бЇЁб ­Ёп}
      Attr:boolean {¬ҐвЄ  ЇаЁ­ ¤«Ґ¦­®бвЁ Є ­ҐЇа®б¬®в७­л¬ ॡࠬ}
   end;
      {¬ ббЁў ¤®Ї®«­ЁвҐ«м­®© Ё­д®а¬ жЁЁ ® ўҐаиЁ­ е}
   TVertexArray=array[1..MaxStations] of TAdditionalData;

   TWayElem=record {н«Ґ¬Ґ­в ЇгвЁ}
      Station:byte; {­®¬Ґа бв ­жЁЁ}
      time:PTimeTableElem; {гЄ § вҐ«м ­  бва®Єг а бЇЁб ­Ёп}
   end;

   TWay=array[1..MaxStations] of TWayElem; {Їгвм}

      {ўлўҐбвЁ ­  нЄа ­ Ё¬п}
   procedure writeStr(const s:ArrString; var l:byte);
      {б®еа ­Ёвм Ё¬п ў д ©«}
   procedure SaveStr(var f:text; const s:ArrString);
      {§ Јаг§Ёвм Ё¬п Ё§ д ©« }
   procedure LoadStr(var f:Text; var s:ArrString; var l:byte);
      {ЇаҐ®Ўа §®ў ­ЁҐ бва®ЄЁ ў® ўаҐ¬п}
   function StrToTime(const s:timestr; var error:boolean):TTime;
      {ўлў®¤ ўаҐ¬Ґ­Ё ­  нЄа ­}
   procedure WriteTime(a:TTime);
      {ЇаҐ®Ўа §®ў ­ЁҐ бва®ЄЁ ў бва®Єг а бЇЁб ­Ёп}
   procedure EncodeTimeTableLine(const s:TimeTableString; var error:boolean; var Line:TRoute);
      {б®еа ­Ґ­ЁҐ бва®ЄЁ а бЇЁб ­Ёп ў д ©«}
   procedure SaveTimeTableLine(var f:text; const r:TRoute);

implementation

procedure writeStr(const s:ArrString; var l:byte);
var i:byte;
begin
   i:=1;
   while (s[i]<>#0) and (i<=MaxLength) do
   begin
      write(s[i]);
      inc(i);
   end;
   l:=i-1 {¤«Ё­ }
end;

procedure SaveStr(var f:text; const s:ArrString);
var i:byte;
begin
   i:=1;
   while (s[i]<>#0) and (i<=MaxLength) do
   begin
      write(f,s[i]);
      inc(i);
   end;
   writeln(f)
end;

procedure LoadStr(var f:Text; var s:ArrString; var l:byte);
var i:byte;
    c:char;
begin
   for i:=1 to MaxLength do s[i]:=#0;
   i:=1;
   while (not eoln(f)) and (i<=MaxLength) do
   begin
      read(f,c);
      s[i]:=c;
      inc(i)
   end;
   l:=i-1 {¤«Ё­ }
end;

{ЇаҐ®Ўа §®ў ­ЁҐ бва®ЄЁ ў® ўаҐ¬п. ‘ва®Є  ¤®«¦­  Ўлвм ўЁ¤  ——:ЊЊ
 ЇаЁзҐ¬ зЁб« , Ґб«Ё ­ ¤®, ¤®«¦­л Ўлвм ¤®Ї®«­Ґ­л 0 ¤® 2-е §­ Є®ў: 02:45}
function StrToTime(const s:timestr; var error:boolean):TTime;
var t2:string[2];
    res:word;
    e:integer;
    c:byte;
begin
   if s[3]=':' then
   begin
      t2:=copy(s,1,2);
      val(t2,c,e);
      if (e=0) and (c<24) then
      begin
         res:=c*60;
         t2:=copy(s,4,2);
         val(t2,c,e);
         if (e=0) and (c<60) then res:=res+c
         else error:=true
      end else error:=true
   end else error:=true;
   StrToTime:=res
end;

procedure WriteTime(a:TTime);
var c:byte;
begin
   c:=(a div 60);
   if c>=10 then write(c) else write('0',c);
   write(':');
   c:=(a mod 60);
   if c>=10 then write(c) else write('0',c);
end;

{ЇаҐ®Ўа §®ў ­ЁҐ бва®ЄЁ ўЁ¤  ——:ЊЊ ——:ЊЊ ••••• ў бва®Єг а бЇЁб ­Ёп
 ўЁ¤  <ўаҐ¬п_®вЇа ў«Ґ­Ёп> <ўаҐ¬п_ЇаЁЎлвЁп> <бв®Ё¬®бвм_ЎЁ«Ґв >.
 ЋЈа ­ЁзҐ­Ёп ­  ўаҐ¬п в ЄЁҐ ¦Ґ Є Є Ё ў StrToTime}
procedure EncodeTimeTableLine(const s:TimeTableString; var error:boolean; var Line:TRoute);
var t:TimeStr;
    e:integer;
begin
   error:=false;
   t:=copy(s,1,5);
   Line.DepTime:=StrToTime(t,error);
   if not error then
   begin
      t:=copy(s,7,11);
      Line.ArrTime:=StrToTime(t,error);
      if not error then
      begin
         t:=copy(s,13,5);
         val(t,Line.price,e);
         if (e<>0) or (Line.Price>65000) then error:=true
      end;
   end;
end;

procedure SaveTimeTableLine(var f:text; const r:TRoute);
var c:byte;
begin
   c:=(r.DepTime div 60);
   if c>=10 then write(f,c) else write(f,'0',c);
   write(f,':');
   c:=(r.DepTime mod 60);
   if c>=10 then write(f,c) else write(f,'0',c);
   write(f,' ');
   c:=(r.ArrTime div 60);
   if c>=10 then write(f,c) else write(f,'0',c);
   write(f,':');
   c:=(r.ArrTime mod 60);
   if c>=10 then write(f,c) else write(f,'0',c);
   write(f,' ');
   writeln(f,r.price:5);
end;

end.
Соседние файлы в папке Информационная система железнодорожной сети