Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Информационная система железнодорожной сети / TYPES
.PAS 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.
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.
Соседние файлы в папке Информационная система железнодорожной сети