Задача про транспортную систему. Подбор вариантов проезда с учетом кол-ва пересадок, длительности, видов транспорта (самолет, авто, поезд, водн.) — страница 6
городов} Inc(J); {Внесение исправлений в шаблон и элемент маршрута о цене и времени} For K:=1 to MClass do If Pattern.Class[K] and P^.class[K] then Npath^.cost[k]:=Npath^.cost[k]+CityInPath(P^.path,J)^.Cost[K]; Npath^.waytime:=Npath^.waytime+CityInPath(P^.path,J)^.delay; Npath^.target:=CityInPath(P^.path,J)^.City; NPattern.Bcity:=CityInPath(P^.path,J)^.City; Npattern.WayTime:=Pattern.WayTime-Npath^.ddelay-Npath^.waytime; Npattern.Delay:=(pattern.Delay+Npath^.Ddelay+Npath^.wayTime) mod 10080; B1:=Posible(Path,CityInPath(P^.path,J)^.City) and (NPattern.WayTime>=0); {Проверка: не превышены лимиты времени и стоимости и нет повтора пути} B2:=CityInPath(P^.path,J)^.city=Pattern.ECity; {приехали?} {Если не приехали и лимиты не превышены то делаем рассмотроим маршруты от текущего до конечного городов} if B1 and (not B2) and (Pattern.reboading>1) then Search(FlightList,Npattern,Npath); Npath^.waytime:=Npath^.waytime+CityInPath(P^.path,J)^.reboard; Until (not B1) or B2 or (J>=P^.totalStation); {Выходим, если есть нарушения или рейс закончился или прехали} If B2 and B1 then Answer(Npath,pattern.cost); {Если приехали, добавить маршрут в список} end {найден начальный город} end; {маршрут подходит по типу} P:=P^.next; {переход к следущему циклу} end; Dispose(NPath) end; {Загрузка исходных данных из файла} Function Load (A:PFlight; FName:String;var City:cities):PFlight; Var Source:Text; P:Pflight; I:WayClass; J,MC:CityCode; K:byte; C:char; Q:Pway; G,L:DayTable; D:string[8]; Begin Assign(Source,FName); Reset(Source); readln(Source,MC); {Количество городов} {Считывание название городов и координат на карте } For J:=1 to MC do begin ReadLn(source,City[j].name); readln(source,city[j].x,city[j].y) end; While Not EOF(Source) do begin New(P); P^.Next:=A; A:=P; {Общая информация о рейсе} ReadLn(Source, P^.company); ReadLn(Source, P^.number); ReadLn(Source, P^.kind); {Стоимость каждого из классов} For I:=1 to MClass do begin Read(Source,C); P^.class[i]:=C='X' end; ReadLn(Source, P^.TotalStation); New(P^.path); Q:=P^.path; {информация о городах следования времени пути, стоянках} For J:=1 to P^.TotalSTation do begin K:=((J-1) mod 4)+1; Read(Source,Q^.Way[K].City,Q^.Way[K].Delay,Q^.Way[K].Reboard); For I:=1 to MClass do If P^.class[I] then Read(Source,Q^.Way[K].cost[I]) else Q^.Way[K].cost[I]:=0; If (J mod 4)=0 then begin If (J<>P^.TotalStation) then begin New(Q^.Next); Q:=Q^.next end else Q^.next:=nil; end; ReadLn(Source); end; New(P^.Table); G:=P^.Table; L:=G; {Информация о отправлении из начального пункта} While Not EOLn(Source) do begin Read(Source,D); G^.Time:=(ord(D[1])-ord('0')-1)*1440+((ord(D[3])-ord('0'))*10+ord(D[4])-ord('0'))*60 +(ord(D[6])-ord('0'))*10+ord(D[7])-ord('0'); if L^.time>G^.time then write('Wrong data'); If not EOLn(Source) then begin New(G^.next); G:=G^.next end else G^.next:=nil; end; ReadLn(Source); end; Load:=A; end; const line='--------------------------------------------------------------------------------'; procedure graphout(const city:cities); var grDriver: Integer; grMode: Integer; p:citycode; begin grDriver := Detect; InitGraph(grDriver, grMode,''); setcolor(12); outtextxy(200,0,'Карта транспортной схемы'); p:=1; while (p<maxcity) and (city[p].name<>'') do begin setcolor(5); fillellipse(4*city[p].x,380-3*city[p].y,2,2); setcolor(11); outtextxy(4*city[p].x+5,376-3*city[p].y,city[p].name); inc(p) end; end; var List:PFLight; pattern:blank; st:string; p:answerlist; city:cities; a:dat; Procedure Input(var Pattern:blank; var a:dat); var i:citycode; st:string; b:dat; w:real; begin with pattern do begin GotoXY(30,1); WriteLn('Ввод исходных данных'); write(line); repeat write('Начальный город ... '); readln(st); Bcity:=1; while (BCity<Maxcity) and (City[BCity].name<>st) do inc(BCity); until BCity<>MaxCity; repeat write('Конечный город ... '); readln(st); Ecity:=1; while (ECity<Maxcity) and (City[ECity].name<>st) do inc(ECity); until Ecity<>MaxCity; repeat gotoxy(1,5); WriteLn('Дата
Похожие работы
- Практические занятия
- Рефераты
- Рефераты