Скачиваний:
7
Добавлен:
01.05.2014
Размер:
5.78 Кб
Скачать
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.
Соседние файлы в папке Информационная система железнодорожной сети