Курсовая: Задача про транспортную систему. Подбор вариантов проезда с учетом кол-ва пересадок, длительности, видов транспорта (самолет, авто, поезд, водн.) и класса - текст курсовой. Скачать бесплатно.
Банк рефератов, курсовых и дипломных работ. Много и бесплатно. # | Правила оформления работ | Добавить в избранное
 
 
   
Меню Меню Меню Меню Меню
   
Napishem.com Napishem.com Napishem.com

Курсовая

Задача про транспортную систему. Подбор вариантов проезда с учетом кол-ва пересадок, длительности, видов транспорта (самолет, авто, поезд, водн.) и класса

Банк рефератов / Программирование

Рубрики  Рубрики реферат банка

закрыть
Категория: Курсовая работа
Язык курсовой: Русский
Дата добавления:   
 
Скачать
Microsoft Word, 226 kb, скачать бесплатно
Заказать
Узнать стоимость написания уникальной курсовой работы

Узнайте стоимость написания уникальной работы

Новосибирский государственный технический ун иверситет Ка федр а прикладной математики Курсовая работа по дисциплине «Структуры данных и алг оритмы» Факультет : ПМИ Группа : ПМ -71 Студент : Гридасов А . Ю. Руководитель : Карманов В . С. Дата защиты : 15.05.98 Новосибирск 1998 Огла вление Оглавление 1 1. Условие задачи 3 2. Анализ задачи 3 3. Выбор и обоснование форм представлени я данных. 3 4. Алгоритм 4 5. Текст программы на языке Pascal 5 6. Выбор и обоснование набора тестов 12 7. Анализ результатов 14 8. Литература 14 9. Приложение 15 1. Условие з адачи Имеется некоторое конечное число городов , кот орые связа ны транспортной сетью , состоящей из авиа , железнодорожных , автомобильных и водных рейсов произвольного направления и включающих произво льное число городов . Стоимость проезда различ на по классам . Рейсы отправляются по недел ьному расписанию . При п е ресадки ме жду рейсами должно быть не менее 2-х ча сов . По заданным начальному и конечному г ородам , дате желаемого отправления , максимальному времени пути и максимальной стоимости и максимальному числу пересадок выдать все возможные маршруты , так , чтобы ма р шруты с меньшей датой и временем прибытия отображались раньше , чем с большим. 2. Анализ задачи Транспортная схема представляет собо й направленный взвешенный мультиграф . Каждая дуга характеризуется принадлежностью к рейсу , времен ем пути , ценой каждого из класс ов , временем отправления . Входными данными является : a) Транспортная система . (города и все рейсы ) b) Начальный , конечный город , ориентировочная дата и врем я отправления , максимальное время пути максим альная цена , максим альное количество пере садок. Причем данные первой группы изменяются крайне редко и задаются разработчиком транспортной системы , а данные второй группы изменяются от задач и к задачи и задаются каждым пользователе м. Результатом работы программы является кон е чное множество маршрутов . Два маршрута мы будем считать различными , если они о тличаются хотя бы одним городом следования или хотя бы одним рейсом . После того , как найдены все маршруты они сортируются по времени прибытия. Метод решения – метод последователь ных испытаний . Поиск решений будет осу ществляться рекурсивно , причем максимальная глуби на рекурсии будет равна максимальному количес тву пересадок . Так как мы имеем ограничени я по некоторым параметрам то мы можем отсечь заведомо ошибочную ветвь поиска реш е н ий , сделав проверку на превышени е параметров . Это позволит выиграть дополните льное время . (о реализации более подробно п .4) 3. Выбор и обосно вание форм представления данных. Так как транспортная система вкл ючает в себя достаточно большой объем информации , в целях доступа к большему объему памяти , также в целях более рациона льного использования памяти и по причине недопустимости использования статических объектов в некоторых случаях , в программе для вн утреннего представления широк о использу ются динамические объекты. Для объединения большого количества данны х в одном объекте , а также для реализа ции динамических объектов используется комбиниро ванный тип (запись ). Для внутреннего хранения информации о рейсах используется цепь (однонап равленный список ) PFlight с 7-ю информационными полями различных типов : 1) Для хранения названия компании-перевозчика используется тип string [20] так по понятным причинам. 2) Для хранения номера рейса используется тип string [10] т.к . в номерах рейса част о испо льзуются различные не цифровые шифры , индексы , коды . 3) Общее количе ство городов – интервальный тип . Автоматичес кая проверка границ этого типа повышает н адежность программы. 4) Таблица отпр авления представляется своим динамическим типом . Этот дин амический тип представляет с овой цепь с одним информационным полем , с одержащим время отправления в минутах от начала недели ( например Вт 17:42 будет записан числом 1*24*60+17*60+42). Такая форма хранения времени с очетает с себе компактность и легкость п е ресчета (пересчет требуется только при вводе и выводе , а в программе в большинстве случаев пересчет не нужен . Ди намический тип использован по причине большог о разброса в частоте отправления рейсов (м огут быть рейсы , отправляющиеся каждый день через час , а могут быть рейсы отправляющиеся раз в неделю ). 5) Маршрут рейс а также представляется своим динамическим тип ом – однонаправленным динамическим списком . Причина использования списка аналогична полю отправления -разброс . Так например самолеты об ычно не имеют более 4 посадок , а поезд а наоборот делают много остановок . Информацио нное поле содержит информацию не об одной а о 4-х станциях , т.е . представляет собо й массив из 4 элементов . Это сделано для экономии памяти на избыточных указателях . П ри этом усложнение кода программы незначительно . 6) Тип транспор та кодируется числом 1..4. По понятным причинам . Перечислимый тип не был использован для упрощения ввода данных из внешнего файла. 7) Классы , котор ые предоставляет рейс , представляется в виде массива индексо м является класс , а типом элемента – булевский. Внутренне кажды й город обозначается своим номером (элемент интервального типа ), что уменьшает расходы п амяти и упрощает вычисление . А для хранени я названий городов и их координат для отображения на экране исп ользуется сво й тип – массив , элементами которого являю тся записи с полями для названия города и координат . Статический массив используется для простого и быстрого доступа к этим данным. Для хранения времени пути используется тип Integer . Отрицательные числ а нужны для контроля за превышением времени пути . Для хранения цены используется тип LongInt . Причины выбо ра этого типа очевидны. Тип Pattern для хранения исходных пар аметров поиска представляет собой запись с полями : время отправления относительно понеде льника в минутах , начальный и конечный город , допустимые типы транспорта , допустимые классы , максимальное количество пересадок , ма ксимальное время пути , максимальная цена , допу стимые классы . Выбор типов для всех полей кроме «допустимые типы транспорта» об с уждался выше . Для поля «допустим ые типы транспорта» выбран массив где тип индекс – это тип транспорта , а тип элемента – булевский . Это сделано по п ричине того что маршрут может включать . По ездки на разных видах транспорта (тех где в значение true ) . Запись использов ана чтоб передавать все данные единым объ ектом в процедуру поиска маршрута. Тип Link предназначен для хранения информации о части маршрута между двумя городами , соединенными одним рейсом . Кроме с сылки на предыдущую такую часть он содерж ит ссылку на рейс , коды начального и конечного города , общую цену участка , вре мя отправления , относительно заданного пользовате лем время отправления , общее время пути по участку . Типы полей и обоснования их выбора обсуждались выше . В совокупности цепоч ка таких э л ементов задает один маршрут. Тип AnswerList предназначен для ответа - множества всех доп устимых маршрутов . Представляет из себя однон аправленный список , в каждом элементе которог о кроме ссылки на следующий имеется поле типа маршрут ( Link ), общее время пут и , общая максим альная и минимальная цена , количество пересад ок . Типы полей и обоснование обсуждались выше. Внешнее представление : Транспортная система хранится во внешнем текстовом файле . Файл может быть создан любым текстовым редактором . В файле указы вае тся следующее : Количество городов . Со следующей строки начинается информация о городах : название г орода , на следующей строчке координаты . После всех городов начинается информация о рей сах : компания , номе р , тип , классы , количество станций ; номер го рода , вре мя пути , время стоянки цена по классам , для каждого города ; время от правления от начальной станции . Так как эта информация редактируется крайне редко , причем разработчиком сети , то такой способ является наиболее приемлемым. Название городов вводятся как строк и , дата – в любом формате (дд-мм-гг , дд- мм-гггг , дд-мес-гг и т.п .) время чч :мм . По умолчанию полагается дата – текущий ден ь , время 0:00. Максимальное время пути , максимальное чис ло пересадок , максимальная цена – вводятся как числа. 4. Алгоритм Begin Загрузка транспортной схемы ; Ввод исходных данных и заполнение шаблона ; Вызов процедуры поиска с введенным шаблоном , построенная часть маршру та - пустая ; Вывод полученного множества маршрутов End Процедура пои ска маршрута с данным шаблоном и уже построенной ча стью маршрута Begin While просмотрены не все рейсы do begin If соответствует тип транспорта and Текущий рейс не равен предыдущему then Begin If город отправления присутству е т в рейсе , причем раньше конечной станции then begin Рассчитать время отправле ния ближайшего следующего рейса Repeat Перейти к следующему городу ; Рассчитать время дороги с у четом нового участка If текущий город еще не про езжали and время пути не превышает максимального and количество пересадок не превышает максимального and не прие хали Текущий город – есть пункт назнач ения. then Добавить к маршруту проеханный участок . Вызвать процедуру поис ка маршрута от текущего города до конечного с новыми значениями времени Until текущий город проезжали or время исчерпано or приехали or конец рейса ; If приехали and время не превышено and минимальная цена рейса не в ыше допусти мой then Добавить построенный маршрут в мно-во ответов на нужное мест о end ; end ; Перейти к следующему ре йсу end; end 5. Текст программы на языке Pascal uses Crt, Date, Graph; Const MaxCity= 100; MClass=6; Type CityCode=1..maxcity; Внутрений код города Week=0..10079; Тип время в минутак с 0:00 понеде льника DayTable=^IDayTable; Таблица отправлений от начальной станции IDayTable=record Time:Week; Next:DayTable ; end; WayKind=1..4; Тип пути ( аэро , море , ж . д , авто ) WayClass=1..MClass; Класс или тип перевозки Cities=array[CityCode] of Названия и координаты городов record name:string[20]; x,y:word; end; mcost=array[wayclass] of longint; Таблица стоимости по классам Way=record City:Citycode; Delay,Reboard:Word; Cost:mcost; end; WayP=^way; PWay=^Way1; Информация о город ах следования рейса Way1=record Way:ar ray [1..4] of way; next:PWay; end; wclass=array [WayClass] of boolean; PFlight=^Flight; Flight=record Информация о рейсе company:string[20]; number:string[10]; totalstation:CityCode; table:DayTable; path:PWa y; kind:WayKind; class:WClass; next:PFlight; end; Blank=record Шаблон для поиска пути delay:Week; BCity,ECity:CityCode; Kind:array [WayKind] of boolean; ReBoading:CityCode; WayTime:Integer; Cost:Longint; Class:WClass; end; Link=^CityList; Цепочка рейсов для проезда от начала до конца CityList=record Информация о проезде между двумя пунктами одним рейсом DDelay:Word; waytime:word; cost:mcost; Bcity,Target :CityCode; Flight:PFlight; Last:Link; end; AnswerList=^IAnswer; Список всех возможных маршрутов следования IAnswer=record path:link; reboard:citycode; mincost,maxcost:longint; waytime:word; next:AnswerList; end; var Lanswer:AnswerList; глобальная переменная - начало списка маршрутов Добавления нового найденного маршрута Procedure Answer(A:Link;cost:longint); var P,Q:Link; d,s1,s2:word; W,PAnswer:answerlist; r:citycode; function min(a:mcost):longint; Минима льная стоимость по к лассам var i:integer; m:longint; begin m:=1000000000; for i:=1 to Mclass do if (m>a[i]) and (a[i]>0) then m:=a[i]; min:=m end; function max(a:mcost):longint; Максимальная стоимость по классам var i:integer; m:lo ngint; begin m:=a[1]; for i:=2 to Mclass do if mnil) and ((W^.next)^.waytimenil) and ((W^.next)^.reboard4 do begin I:=I-4; P:=P^.next end; Поиск четверки в которой д анная станция CityInPath:=@P^.Way[I]; Результат end; const ReBoadingDelay=120; Минимальное время пересадки Возвращает время до следещего после указанного времени time отоправление от станции номер N рейса A Function DepartureDelay(A:PFlight; N:CityCode; time:week ):word; var S:word; I:1..4; P:PWay; Q :DayTable; begin P:=A^.path; S:=0; While N>4 do begin N:=N-4; For I:=1 to 4 do S:=S+P^.Way[I].delay+P^.Way[I].reboard; подсчет времени пути по полным четверкам P:=P^.next; end; For I:=1 to N do S:=S+P^.Way[I].delay+P^.Way[I].reb oard; Подсчет по неполной четверке time:=(10080+time-(S mod 10080)) mod 10080; Время отправления этого рейса от начальной станции Q:=A^.Table; while (Q<>nil) and (Q^.timenil then Departuredelay:=Q^.time-time else Если на текущей неделе не найден DepartureDelay:=10080-time+(A^.Table)^.time; Поиск ближайщего времени на следующей неделе end; Поиск всех возможных маршрутов , удовлетво ряющих Pattern Proc edure Search (FlightList:Pflight; const Pattern:Blank; Path:Link); Var P:Pflight; I,J:CityCode; D,DDelay:Word; K:WayClass; B1,B2:Boolean; NPattern:Blank; NPath:Link; c:Longint; Проверка допустимости маршрута (проверка дублирования города ) Function Posible (P:Link; L:CityCode):Boolean; Var b:boolean; i:citycode; Q:pway; Begin b:=true; While (P<>nil) and b do begin Просмотр всех предидущих пересад ок Q:=P^.flight^.path; i:=1; while Q^.way[i].cit y<>P^.bcity do begin Поиск города отправления i:=(i mod 4)+1; if i=1 then Q:=Q^.next; end; repeat b:=Q^.way[i].city<>L; Проверка города на дублирование i:=(i mod 4)+1; if i=1 then Q:=Q^.next unt il (Q^.way[i].city=P^.target) or not b; переход к следующему пока не город назначения p:=p^.last end; Posible:=b; End; begin New(NPath); NPath^.last:=Path; P:=FlightList; While P<>nil do begin Просмотр всех рейсов if ((Path=nil) or (P<>Path^.Flight)) and Pattern.Kind[P^.Kind] then не повторяется рейс и сответствует тип перевозки begin I:=1; Поиск среди городов следования нач альный пункт While (IPattern.BCity) do inc (I); If CityInPath(P^.path, I)^.city=Pattern.BCity then begin Если начальный найден NPattern:=Pattern; Подготовка нового шаблона и нов ой перес адки if Npattern.reboading>1 then dec(Npattern.reboading); Npath^.flight:=P; For K:=1 to Mclass do Npath^.cost[k]:=0; Npath^.bcity:=pattern.bcity; Npath^.Ddelay:=DepartureDelay(P,I,Pattern.delay); Npath^.waytime:=0; J:=I; Repeat просмотр следующих городов Inc(J); Внесение исправлений в шаблон и элемент маршрута о цене и времени For K:=1 to MClass do If Pattern.Class[K] and P^.class[K] th en 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]; Begi n 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 begi n 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'') 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:city code; st:string; b:dat; w:real; begin with pattern do begin GotoXY(30,1); WriteLn('Ввод исходных данных '); write(line); repeat write('Начальный город ... '); readln(st); Bcity:=1; while (BCityst) do inc(BCity); until BCity<>MaxCity; repeat write('Конечный город ... '); readln(st); Ecity:=1; while (ECityst) do inc(ECity); until Ecity<>MaxCity; repeat gotoxy(1,5); Wri teLn('Дата отправление :'); DTInput(a); delay:=a.Dweek*1440+a.time; Write('Максимальное время пути (сутки ):'); readln(w); waytime:=round(1440*w); until waytime>0; write('Максимальная стоимость ... '); ReadLn(cost); write( 'Максимальное число пересадок ... '); readln(reboading); write('Тип перевозки (авиа,ж.д.,авто,водн .) ... '); readln(st); if st='' then for i:=1 to 4 do kind[i]:=true else for i:=1 to 4 do kind[i]:=(st[i]='Y') or (st[i]='y') or (st[i]='X') or (st[i]='x'); write('Допустимые классы 123456 ... '); readln(st); if st='' then for i:=1 to 4 do class[i]:=true else for i:=1 to 4 do class[i]:=(st[i]='Y') or (st [i]='y') or (st[i]='X') or (st[i]='x'); end; end; procedure outres(p:Answerlist; a:dat); var k:word; q:link; b:dat; i:citycode; y:pway; c:byte; begin k:=0; while P<>nil do begin inc(k); write(p^.path^.bcity); Q:=P^.path; b:=a; while Q<>nil do begin write(city[q^.bcity].name); Writeln(' <',q^.flight^.company,q^.Flight^.Number,'> ',city[Q^.Target].name); newdat(b,Q^.ddelay,b); write('Отправление : '); writedat(b); newdat(b,Q^.wa ytime,b); write(' Прибытие : '); writedat(b); writeln; Q:=Q^.last; end; newdat(a,p^.waytime,b); writeln (' цена : ',P^.mincost,' - ',p^.maxcost); readln(st); if st='p' then begin graphout(city); q:=p^.path; c:=2; while q<>nil do begin i:=1; y:=q^.flight^.path; while y^.way[i].city<>q^.bcity do begin i:=(i mod 4)+1; if i=1 then y:=y^.next; end; setcolor(c); moveto(4*ci ty[q^.bcity].x,380-3*city[q^.bcity].y); repeat i:=(i mod 4)+1; if i=1 then y:=y^.next; lineto(4*city[y^.way[i].city].x,380-3*city[y^.way[i].city].y); until (y^.way[i].city=q^.target); Q:=Q^.last; inc(c); en d; repeat until keypressed; CloseGraph; end; P:=P^.next; end; if k=0 then write('При данных условиях добраться нел ьзя ') else writeln('Всего ',k,' маршшрутов '); end; Begin List:=Load(nil,'trafic',city); graphout(city); repe at until keypressed; closegraph; Input(pattern,a); new(lanswer); lanswer^.next:=nil; Search(List,pattern,nil); outres(Lanswer^.next,a); end. 6. Выбор и обосно вание набора тестов В качестве тран спортной системы бала в зята система , с остоящая из 23 городов , соединенных 19 прямыми и таким же числом обратных рейсами . Название городов и перевозчиков вымышленные . Рейсы были разработаны так , что имеется несколько крупных транспортных развязок : Palace of Dream, Diamond World , Golden River, Seaside City; и несколько «удаленных» го родов : Far Star City, Oil City, North Star City . Разные рейсы отправляются от 3 до 18 раз в неделю. 1. Общий тест Начальный город ... Tropic Port Конечный город ... Beatiful Дата отправление : Дата ... 8.5.1998 Пт Время ... 0:0 Максимальное время пути (сутки ):3 Максимальная стоимость ... 200 Максимальное число пересадок ... 3 Тип перевозки (авиа,ж.д.,авто,водн .) ... Допустимые классы 123456 ... Tropic Port Palace Of The Dream Отправление : 14:29 8.5.1998 Пт Прибытие : 19:14 8.5.1998 Пт Palace Of The Dream Diamond World Отправление : 2:15 9.5.1998 Пт Прибытие : 5:15 9.5.1998 Пт Diamond World Beatiful Отправление : 17:20 9.5.1998 Пт Прибы тие : 19:20 9.5.1998 Пт цена : 195 – 250 Tropic Port Lakes Land Отправление : 14:29 8.5.1998 Пт Прибытие : 16:29 8.5.1998 Пт Lakes Land Diamond World Отправление : 0:25 9.5.1998 Пт Прибытие : 3:25 9.5.1998 Пт Diamond World Beatiful Отправление : 17:20 9.5.1998 Пт Прибытие : 19:20 9.5.1998 Пт цена : 165 - 195 Tropic Port Oil City Отправление : 12:0 8.5.1998 Пт Прибытие : 4:40 9.5.1998 Пт Oil City Beatiful От правление : 12:0 9.5.1998 Пт Прибытие : 16:10 10.5.1998 Пт цена : 75 – 105 2. Тест с «урез анием бюджета» Начальный город ... Tropic Port Конечный город ... Beatiful Дата отправление : Дата ... 8.5.1998 Пт Время ... 0:0 Максимальное время пути (сутки ):3 Максимальная стоимость ... 180 Максимальное число пересадок ... 3 Тип перевозки (авиа,ж.д.,авто,водн .) ... Допустимые классы 123456 ... Tropic Port Lakes Land Отправление : 14:29 8.5.1998 Пт Прибытие : 16:29 8.5.1998 Пт Lakes Land Diamond World Отправление : 0:25 9.5.1998 Пт Прибытие : 3:25 9.5.1998 Пт Diamond World Beatiful Отправление : 17:20 9.5.1998 Пт Прибытие : 19:20 9.5.1998 Пт цена : 165 - 195 Tropic Port Oil City Отправл ение : 12:0 8.5.1998 Пт Прибытие : 4:40 9.5.1998 Пт Oil City Beatiful Отправление : 12:0 9.5.1998 Пт Прибытие : 16:10 10.5.1998 Пт цена : 75 – 105 3. Уменьшение числа пересадок Начальный город ... Tropic Port Конечный город ... Beatifu l Дата отправление : Дата ... 8.5.1998 Пт Время ... 0:0 Максимальное время пути (сутки ):3 Максимальная стоимость ... 200 Максимальное число пересадок ... 2 Тип перевозки (авиа,ж.д.,авто,водн .) ... Допустимые классы 123456 ... Tropic Port Oil City Отправление : 12:0 8.5.1998 Пт Прибытие : 4:40 9.5.1998 Пт Oil City Beatiful Отправление : 12:0 9.5.1998 Пт Прибытие : 16:10 10.5.1998 Пт цена : 75 – 105 4. Нереальные услов ия Начальный город ... Tropic Port Конечный город ... Beatiful Дата отправление : Дата ... 8.5.1998 Пт Время ... 0:0 Максимальное время пути (сутки ):3 Максимальная стоимость ... 200 Максимальное число пересадок ... 1 Тип перевозки (авиа,ж.д.,авто,водн .) ... Допустимые классы 123456 ... При данных услови ях добраться нел ьзя 7. Анализ результатов 1. Время пути зависит от дня оправления. 2. По причине ожидания рейса можно с меньшим числом пересадок добраться позже , чем с большим 3. Дороже – не значит быстрее 4. Для нормальн ой т ранспортной системы нужно как мож но больше больших транспортных узлов 8. Литература 9. Прил ожение Unit Date; interface Var DTErr:boolean; Type Dat=record day:1..31; month:1..12; y ear:integer; dweek:0..6; time:word; end; Const EWeek:array[0..6] of string[2]=('Mo','Tu','We','Th','Fr','Sa','Sa'); Const RWeek:array[0..6] of string[2]=('Џ­ ','‚в ',' ‘ а ',' — в ','Џв ',' ‘ Ў ','‚б '); procedure newdat(a:dat; delay:word; var b:dat); procedure writedat(b:dat); Function DayDiffer(A,B:dat):Integer; Function STime(st:string):word; Function dweek (a:dat):byte; Procedure DTInput(var d:dat); Procedure SDate(St:string; var a:dat); Implementati on uses dos,crt; Function DayInMonth(m:byte; y:integer):byte;forward; procedure SDate(St:string; var a:dat); const mthe:array[1..12] of string[3] =('JAN','FEB','MAR','APR','MAY','JUN','JUL','AUG','SEP','OCT','NOV','DEC'); const mthru:array[1..12] of s tring[3] =('џЌ‚ ','”…‚ ','ЊЂђ ','ЂЏђ ','ЊЂ ‰ ',' ?'88 ћЌ ',' ?'88 ћ‹ ','Ђ‚ѓ ',' ‘ …Ќ ','ЋЉ’ ',' ЌЋџ ','„…Љ '); const mthrl:array[1..12] of string[3] =('п­ў ','䥢 ','¬ а ',' Їа ','¬ © ','Ёо­ ','Ёо« ',' ўЈ ','ᥭ ','®Єв ','­®п ','¤ҐЄ '); var i,j,e:byte; mode:byte; S:word; err:boolean; D,M,Y ,wd:word; c:shortint; Procedure add(mode:byte;s:word;var a:dat); begin case mode of 1:if (s>0) and (s<=31) then A.day:=S else DTErr:=true; 3:if (s>0) and (s<=12) then A.month:=S else DTErr:=true; 5:if s>=100 then A.year: =S else A.year:=S+100*(Y div 100); end; end; begin DTErr:=false; GetDate(Y,M,D,wd); e:=length(st); i:=1; mode:=0; while (i<=e) do begin c:=ord(st[i])-ord('0'); if ((mode mod 2)=0) and (c>=0) and (c<=9) then begin S:=c; inc(mode) end else if (c<=9) and (c>=0) then S:=S*10+c else if (mode mod 2)=1 then begin Add(mode,S,a); Inc(mode) end; if (mode=2) then for j:=1 to 12 do if (mth e[j,1]=upcase(st[i])) and (mthe[j,2]=upcase(st[i+1])) and (mthe[j,3]=upcase(st[i+2])) or ((mthru[j,1]=st[i]) or (mthrl[j,1]=st[i])) and ((mthru[j,2]=st[i+1]) or (mthrl[j,2]=st[i+1])) and ((mthru[j,3]=st[i+2]) or (mthrl[j,3]=st[i+2])) then begin add(3,j,a); mode:=4 end; inc(i); end; if (mode mod 2)=1 then add(mode,S,a); if mode<1 then add(1,D,a); if mode<3 then add(3,M,a); if mode<5 then add(5,Y,a); if not DTErr then DTErr:=a.day>DayInMonth(a.month,a.year); if not DTErr then a.dweek:=dweek(a); end; function dweek (a:dat):byte; var n,m,y:word; begin DTErr:=false; y:=a.year; if a.month<=2 then begin m:=a.month+12; dec(y) end else m:=a.month; n:=(A.day+2*m+trunc(0. 6*(m+1))+y+(y div 4)-(y div 100)+(y div 400)) mod 7; dweek:=n; end; Function STime (st:string):Word; var i,e,mode:byte; a,s:word; c:shortint; begin DTErr:=false; e:=length(st); i:=1; mode:=0; a:=0; while (i<=e) do begin c:=ord(st[i])-ord(' 0'); if ((mode mod 2)=0) and (c>=0) and (c<=9) then begin S:=c; inc(mode) end else if (c<=9) and (c>=0) then S:=S*10+c else if mode=1 then begin A:=S; inc(mode) end else if mode=3 then begin A:=A*60+S; inc(mode) end; inc(i) end; if mode=3 then A:=a*60+s; if a<1440 then Stime:=a else DTErr:=true; end; Function DayInMonth(m:byte; y:integer):byte; const DayInM:array[1..12] of byte=(31,29,31,30,31,30,31,31,30,31,30,31); begin If M<>2 then DayInMonth:=DayInM[M] else if (y mod 4)<>0 then DayInMonth:=28 else if (y mod 100)<>0 then DayInMonth:=29 else if (y mod 400)<>0 then DayInMonth:=28 else DayInMonth:=29 end; Function DayDiffer(A,B:dat):Integer; Var m1,m2,y1,y2:Integer; Begin DTErr:=false; y1:=A.year; y2:=B.year; if a.month<=2 then begin m1:=a.month+12; dec(y1) end else m1:=a.month; if b.month<=2 then begin m2:=b.month+12; dec(y2) end else m2:=b.month; DayDiffer:=-(A.day+30*m1+trunc(0.6*(m1+1))+365*y1+(y1 div 4)-(y1 div 100)+(y1 div 400))+ (B.day+30*m2+trunc(0.6*(m2+1))+365*y2+(y2 div 4)-(y2 div 100)+(y2 div 400)); End; Procedure DTInput(var d:dat); var st:string; y:byte; const empty=' '; begin y:=wherey; repe at GotoXY(1,y); Write('„ в ... ',empty); GotoXY(10,y); ReadLn(St); SDate(st,d); Until not DTErr; GotoXY(10,y); writeln(d.day,'.',d.month,'.',d.year,' ',Rweek[Dweek(d)]); repeat gotoxy(1,y+1); write('‚६п ... ',empty); gotoxy(11,y+1); readln(st); d.time:=stime(st); until not DTErr; gotoxy(11,y+1); writeln(stime(st) div 60,':',stime(st) mod 60); end; procedure writedat(b:dat); begin write(b.time div 60,':',b.time mod 60,' ',b.day,'.',b .month,'.',b.year,' ',Rweek[b.dweek]); end; procedure newdat(a:dat; delay:word; var b:dat); var c:word; begin B:=A; B.time:=(a.time+(delay mod 1440)) mod 1440; delay:=(delay div 1440)+((a.time+(delay mod 1440)) div 1440); while delay+b.day>DayInM onth(b.month,b.year) do begin delay:=delay-1-DayInMonth(b.month,b.year)+b.day; b.day:=1; b.month:=(b.month mod 12)+1; if b.month=1 then inc(b.year); end; b.day:=delay+b.day; end; begin end.
1Архитектура и строительство
2Астрономия, авиация, космонавтика
 
3Безопасность жизнедеятельности
4Биология
 
5Военная кафедра, гражданская оборона
 
6География, экономическая география
7Геология и геодезия
8Государственное регулирование и налоги
 
9Естествознание
 
10Журналистика
 
11Законодательство и право
12Адвокатура
13Административное право
14Арбитражное процессуальное право
15Банковское право
16Государство и право
17Гражданское право и процесс
18Жилищное право
19Законодательство зарубежных стран
20Земельное право
21Конституционное право
22Конституционное право зарубежных стран
23Международное право
24Муниципальное право
25Налоговое право
26Римское право
27Семейное право
28Таможенное право
29Трудовое право
30Уголовное право и процесс
31Финансовое право
32Хозяйственное право
33Экологическое право
34Юриспруденция
 
35Иностранные языки
36Информатика, информационные технологии
37Базы данных
38Компьютерные сети
39Программирование
40Искусство и культура
41Краеведение
42Культурология
43Музыка
44История
45Биографии
46Историческая личность
47Литература
 
48Маркетинг и реклама
49Математика
50Медицина и здоровье
51Менеджмент
52Антикризисное управление
53Делопроизводство и документооборот
54Логистика
 
55Педагогика
56Политология
57Правоохранительные органы
58Криминалистика и криминология
59Прочее
60Психология
61Юридическая психология
 
62Радиоэлектроника
63Религия
 
64Сельское хозяйство и землепользование
65Социология
66Страхование
 
67Технологии
68Материаловедение
69Машиностроение
70Металлургия
71Транспорт
72Туризм
 
73Физика
74Физкультура и спорт
75Философия
 
76Химия
 
77Экология, охрана природы
78Экономика и финансы
79Анализ хозяйственной деятельности
80Банковское дело и кредитование
81Биржевое дело
82Бухгалтерский учет и аудит
83История экономических учений
84Международные отношения
85Предпринимательство, бизнес, микроэкономика
86Финансы
87Ценные бумаги и фондовый рынок
88Экономика предприятия
89Экономико-математическое моделирование
90Экономическая теория

 Анекдоты - это почти как рефераты, только короткие и смешные Следующий
Если жена спросила тебя "Ты меня любишь?", помни, утвердительный ответ - платный.
Anekdot.ru

Узнайте стоимость курсовой, диплома, реферата на заказ.

Обратите внимание, курсовая по программированию "Задача про транспортную систему. Подбор вариантов проезда с учетом кол-ва пересадок, длительности, видов транспорта (самолет, авто, поезд, водн.) и класса", также как и все другие рефераты, курсовые, дипломные и другие работы вы можете скачать бесплатно.

Смотрите также:


Банк рефератов - РефератБанк.ру
© РефератБанк, 2002 - 2016
Рейтинг@Mail.ru