Новосибирский государственный технический университет Кафедра прикладной математики Курсовая работа по дисциплине Структуры данных и алгоритмы Факультет ПМИ Группа ПМ-71 Студент Гридасов А. Ю. Руководитель Карманов В. С. Дата защиты 05.98 Новосибирск 1998 Оглавление Оглавление 1 1.
Условие задачи 2. Анализ задачи 3. Выбор и обоснование форм представления данных. 4. Алгоритм 5. Текст программы на языке Pascal 6. Выбор и обоснование набора тестов 7. Анализ результатов 8. Литература 9. Приложение 1. Условие задачи Имеется некоторое конечное число городов, которые связаны транспортной сетью, состоящей из авиа, железнодорожных, автомобильных и водных рейсов произвольного
направления и включающих произвольное число городов. Стоимость проезда различна по классам. Рейсы отправляются по недельному расписанию. При пересадки между рейсами должно быть не менее 2-х часов. По заданным начальному и конечному городам, дате желаемого отправления, максимальному времени пути и максимальной стоимости и максимальному числу пересадок выдать все возможные маршруты, так, чтобы маршруты
с меньшей датой и временем прибытия отображались раньше, чем с большим. 2. Анализ задачи Транспортная схема представляет собой направленный взвешенный мультиграф. Каждая дуга характеризуется принадлежностью к рейсу, временем пути, ценой каждого из классов, временем отправления. Входными данными является a Транспортная система. города и все рейсы b Начальный, конечный город, ориентировочная дата и время отправления, максимальное время пути максимальная
цена, максимальное количество пересадок. Причем данные первой группы изменяются крайне редко и задаются разработчиком транспортной системы, а данные второй группы изменяются от задачи к задачи и задаются каждым пользователем. Результатом работы программы является конечное множество маршрутов. Два маршрута мы будем считать различными, если они отличаются хотя бы одним городом следования или хотя бы одним рейсом. После того, как найдены все маршруты они сортируются по времени прибытия.
Метод решения метод последовательных испытаний. Поиск решений будет осуществляться рекурсивно, причем максимальная глубина рекурсии будет равна максимальному количеству пересадок. Так как мы имеем ограничения по некоторым параметрам то мы можем отсечь заведомо ошибочную ветвь поиска решений, сделав проверку на превышение параметров. Это позволит выиграть дополнительное время. о реализации более подробно п.4 3.
Выбор и обоснование форм представления данных. Так как транспортная система включает в себя достаточно большой объем информации, в целях доступа к большему объему памяти, также в целях более рационального использования памяти и по причине недопустимости использования статических объектов в некоторых случаях, в программе для внутреннего представления широко используются динамические объекты. Для объединения большого количества данных в одном объекте, а также для реализации динамических объектов
используется комбинированный тип запись. Для внутреннего хранения информации о рейсах используется цепь однонаправленный список PFlight с 7-ю информационными полями различных типов 1 Для хранения названия компании-перевозчика используется тип string20 так по понятным причинам. 2 Для хранения номера рейса используется тип string10 т.к. в номерах рейса часто используются различные не цифровые шифры, индексы, коды. 3 Общее количество городов интервальный тип.
Автоматическая проверка границ этого типа повышает надежность программы. 4 Таблица отправления представляется своим динамическим типом. Этот динамический тип представляет совой цепь с одним информационным полем , содержащим время отправления в минутах от начала недели например Вт 1742 будет записан числом 12460176042. Такая форма хранения времени сочетает с себе компактность и легкость пересчета пересчет требуется только
при вводе и выводе, а в программе в большинстве случаев пересчет не нужен. Динамический тип использован по причине большого разброса в частоте отправления рейсов могут быть рейсы, отправляющиеся каждый день через час, а могут быть рейсы отправляющиеся раз в неделю. 5 Маршрут рейса также представляется своим динамическим типом однонаправленным динамическим списком. Причина использования списка аналогична полю отправления -разброс.
Так например самолеты обычно не имеют более 4 посадок, а поезда наоборот делают много остановок. Информационное поле содержит информацию не об одной а о 4-х станциях, т.е. представляет собой массив из 4 элементов. Это сделано для экономии памяти на избыточных указателях. При этом усложнение кода программы незначительно. 6 Тип транспорта кодируется числом 1 4. По понятным причинам.
Перечислимый тип не был использован для упрощения ввода данных из внешнего файла. 7 Классы, которые предоставляет рейс, представляется в виде массива индексом является класс, а типом элемента булевский. Внутренне каждый город обозначается своим номером элемент интервального типа, что уменьшает расходы памяти и упрощает вычисление. А для хранения названий городов и их координат для отображения на экране используется свой тип массив, элементами которого являются записи с полями для названия города
и координат. Статический массив используется для простого и быстрого доступа к этим данным. Для хранения времени пути используется тип Integer. Отрицательные числа нужны для контроля за превышением времени пути. Для хранения цены используется тип LongInt. Причины выбора этого типа очевидны. Тип Pattern для хранения исходных параметров поиска представляет собой запись с полями время отправления
относительно понедельника в минутах, начальный и конечный город, допустимые типы транспорта, допустимые классы, максимальное количество пересадок, максимальное время пути, максимальная цена, допустимые классы. Выбор типов для всех полей кроме допустимые типы транспорта обсуждался выше. Для поля допустимые типы транспорта выбран массив где тип индекс это тип транспорта, а тип элемента булевский. Это сделано по причине того что маршрут может включать.
Поездки на разных видах транспорта тех где в значение true. Запись использована чтоб передавать все данные единым объектом в процедуру поиска маршрута. Тип Link предназначен для хранения информации о части маршрута между двумя городами, соединенными одним рейсом. Кроме ссылки на предыдущую такую часть он содержит ссылку на рейс, коды начального и конечного города, общую цену участка , время отправления, относительно заданного пользователем время отправления,
общее время пути по участку. Типы полей и обоснования их выбора обсуждались выше. В совокупности цепочка таких элементов задает один маршрут. Тип AnswerList предназначен для ответа - множества всех допустимых маршрутов. Представляет из себя однонаправленный список, в каждом элементе которого кроме ссылки на следующий имеется поле типа маршрут Link, общее время пути, общая максимальная и минимальная цена, количество
пересадок. Типы полей и обоснование обсуждались выше. Внешнее представление Транспортная система хранится во внешнем текстовом файле. Файл может быть создан любым текстовым редактором. В файле указывается следующее Количество городов. Со следующей строки начинается информация о городах название города, на следующей строчке координаты.
После всех городов начинается информация о рейсах компания, номер, тип, классы, количество станций номер города, время пути, время стоянки цена по классам, для каждого города время отправления от начальной станции. Так как эта информация редактируется крайне редко, причем разработчиком сети, то такой способ является наиболее приемлемым. Название городов вводятся как строки, дата в любом формате дд-мм-гг, дд-мм-гггг, дд-мес-гг и т.п. время ччмм. По умолчанию полагается дата текущий день, время 000.
Максимальное время пути, максимальное число пересадок, максимальная цена вводятся как числа. 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 MaxCity100 MClass6 Type CityCode1 maxcity Внутрений код города Week0 10079 Тип время в минутак с 000 понедельника DayTableIDayTable Таблица отправлений от начальной станции IDayTablerecord
TimeWeek NextDayTable end WayKind1 4 Тип пути аэро, море, ж.д, авто WayClass1 MClass Класс или тип перевозки CitiesarrayCityCode of Названия и координаты городов record namestring20 x,yword end mcostarraywayclass of longint Таблица стоимости по классам Wayrecord CityCitycode Delay,ReboardWord Costmcost end WayPway PWayWay1 Информация о городах следования рейса
Way1record Wayarray 1 4 of way nextPWay end wclassarray WayClass of boolean PFlightFlight Flightrecord Информация о рейсе companystring20 numberstring10 totalstationCityCode tableDayTable pathPWay kindWayKind classWClass nextPFlight end Blankrecord Шаблон для поиска пути delayWeek BCity,ECityCityCode Kindarray WayKind of boolean ReBoadingCityCode
WayTimeInteger CostLongint ClassWClass end LinkCityList Цепочка рейсов для проезда от начала до конца CityListrecord Информация о проезде между двумя пунктами одним рейсом DDelayWord waytimeword costmcost Bcity,TargetCityCode FlightPFlight LastLink end AnswerListIAnswer Список всех возможных маршрутов следования
IAnswerrecord pathlink reboardcitycode mincost,maxcostlongint waytimeword nextAnswerList end var LanswerAnswerList глобальная переменная - начало списка маршрутов Добавления нового найденного маршрута Procedure AnswerALinkcostlongint var P,QLink d,s1,s2word W,PAnsweranswerlist rcitycode function minamcostlongint Минимальная стоимость по классам var iinteger mlongint begin m10 for i1 to
Mclass do if m ai and ai 0 then mai minm end function maxamcostlongint Максимальная стоимость по классам var iinteger mlongint begin ma1 for i2 to Mclass do if m ai then mai maxm end begin newPAnswer Panswer.pathnil PA s10 s20 верхняя и нижняя границы цены r1 количество пересадок d0 время пути Repeat s1s1minP.cost Подсчет суммы параметров по рейсам в маршруте s2s2maxP.cost ddP.ddelayP.waytime
PP.last Переход к следующему рейсу в маршруте incr Until Pnil if s1 cost then begin Если соответствует цена PA Repeat newQ Сборка цепочки рейсов маршрута QP Q.lastPanswer.path Panswer.pathQ PP.last Переход к следующему рейсу в маршруте Until pnil Panswer.mincosts1 Panswer.maxcosts2 Сохранение сумарных цен и времени
Panswer.waytimed Panswer.reboardr и числа пересадок в элементе маршрута WLAnswer While W.next nil and W.next.waytime d do WW.next Поиск места в соответствии времени пути While W.next nil and W.next.reboard r and W.next.waytimed do WW.next Поиск места по кол-ву пересадок Panswer.nextW.next Добавление маршрута в найденное место
W.nextPanswer end end Возвращает ссылку на информацию об I-ой станции следования Function CityInPathAPway IcitycodeWayP var PPway Begin PA While I 4 do begin II-4 PP.next end Поиск четверки в которой данная станция CityInPathP.WayI Результат end const ReBoadingDelay120 Минимальное время пересадки
Возвращает время до следещего после указанного времени time отоправление от станции номер N рейса A Function DepartureDelayAPFlight NCityCode timeweek word var Sword I1 4 PPWay QDayTable begin PA.path S0 While N 4 do begin NN-4 For I1 to 4 do SSP.WayI.delayP.WayI.reboard подсчет времени пути по полным четверкам PP.next end For I1 to N do SSP.WayI.delayP.WayI.reboard
Подсчет по неполной четверке time10080time-S mod 10080 mod 10080 Время отправления этого рейса от начальной станции QA.Table while Q nil and Q.time timeReboadingDelay do QQ.next Поиск ближайшего времени на текущей неделе If Q nil then DeparturedelayQ.time-time else Если на текущей неделе не найден
DepartureDelay10080-timeA.Table.time Поиск ближайщего времени на следующей неделе end Поиск всех возможных маршрутов, удовлетворяющих Pattern Procedure Search FlightListPflight const PatternBlank PathLink Var PPflight I,JCityCode D,DDelayWord KWayClass B1,B2Boolean NPatternBlank NPathLink cLongint Проверка допустимости маршрута проверка дублирования города
Function Posible PLink LCityCodeBoolean Var bboolean icitycode Qpway Begin btrue While P nil and b do begin Просмотр всех предидущих пересадок QP.flight.path i1 while Q.wayi.city P.bcity do begin Поиск города отправления ii mod 41 if i1 then QQ.next end repeat bQ.wayi.city L Проверка города на дублирование ii mod 41 if i1 then
QQ.next until Q.wayi.cityP.target or not b переход к следующему пока не город назначения pp.last end Posibleb End begin NewNPath NPath.lastPath PFlightList While P nil do begin Просмотр всех рейсов if Pathnil or P Path.Flight and Pattern.KindP.Kind then не повторяется рейс и сответствует тип перевозки begin I1 Поиск среди городов следования начальный пункт While
I P.TotalStation-1 and CityInPathP.path, I.city Pattern.BCity do inc I If CityInPathP.path, I.cityPattern.BCity then begin Если начальный найден NPatternPattern Подготовка нового шаблона и новой пересадки if Npattern.reboading 1 then decNpattern.reboading Npath.flightP For K1 to Mclass do Npath.costk0 Npath.bcitypattern.bcity
Npath.DdelayDepartureDelayP,I,Pattern.de lay Npath.waytime0 JI Repeat просмотр следующих городов IncJ Внесение исправлений в шаблон и элемент маршрута о цене и времени For K1 to MClass do If Pattern.ClassK and P.classK then Npath.costkNpath.costkCityInPathP.path,J .CostK Npath.waytimeNpath.waytimeCityInPathP.pa th,J.delay Npath.targetCityInPathP.path,J.City NPattern.
BcityCityInPathP.path,J.City Npattern.WayTimePattern.WayTime-Npath.dd elay-Npath.waytime Npattern.Delaypattern.DelayNpath.DdelayN path.wayTime mod 10080 B1PosiblePath,CityInPathP.path,J.City and NPattern.WayTime 0 Проверка не превышены лимиты времени и стоимости и нет повтора пути B2CityInPathP.path,J.cityPattern.ECity приехали
Если не приехали и лимиты не превышены то делаем рассмотроим маршруты от текущего до конечного городов if B1 and not B2 and Pattern.reboading 1 then SearchFlightList,Npattern,Npath Npath.waytimeNpath.waytimeCityInPathP.pa th,J.reboard Until not B1 or B2 or J P.totalStation Выходим, если есть нарушения или рейс закончился или прехали If B2 and B1 then AnswerNpath,pattern.cost
Если приехали, добавить маршрут в список end найден начальный город end маршрут подходит по типу PP.next переход к следущему циклу end DisposeNPath end Загрузка исходных данных из файла Function Load APFlight FNameStringvar CitycitiesPFlight Var SourceText PPflight IWayClass J,MCCityCode Kbyte Cchar QPway G,LDayTable
Dstring8 Begin AssignSource,FName ResetSource readlnSource,MC Количество городов Считывание название городов и координат на карте For J1 to MC do begin ReadLnsource,Cityj.name readlnsource,cityj.x,cityj.y end While Not EOFSource do begin NewP P.NextA AP Общая информация о рейсе ReadLnSource, P.company ReadLnSource, P.number ReadLnSource,
P.kind Стоимость каждого из классов For I1 to MClass do begin ReadSource,C P.classiCX end ReadLnSource, P.TotalStation NewP.path QP.path информация о городах следования времени пути, стоянках For J1 to P.TotalSTation do begin KJ-1 mod 41 ReadSource,Q.WayK.City,Q.WayK.Delay,Q.Wa yK.Reboard For I1 to
MClass do If P.classI then ReadSource,Q.WayK.costI else Q.WayK.costI0 If J mod 40 then begin If J P.TotalStation then begin NewQ.Next QQ.next end else Q.nextnil end ReadLnSource end NewP.Table GP.Table LG Информация о отправлении из начального пункта While Not EOLnSource do begin ReadSource,D G.TimeordD1-ord0-11440ordD3-ord010ordD4- ord060 ordD6-ord010ordD7-ord0
if L.time G.time then writeWrong data If not EOLnSource then begin NewG.next GG.next end else G.nextnil end ReadLnSource end LoadA end const line procedure graphoutconst citycities var grDriver Integer grMode Integer pcitycode begin grDriver Detect InitGraphgrDriver, grMode, setcolor12 outtextxy200,0,Карта транспортной схемы p1 while p maxcity and
cityp.name do begin setcolor5 fillellipse4cityp.x,380-3cityp.y,2,2 setcolor11 outtextxy4cityp.x5,376-3cityp.y,cityp.na me incp end end var ListPFLight patternblank ststring panswerlist citycities adat Procedure Inputvar Patternblank var adat var icitycode ststring bdat wreal begin with pattern do begin GotoXY30,1 WriteLnВвод исходных данных writeline repeat writeНачальный город readlnst Bcity1 while BCity Maxcity and CityBCity.name st do incBCity until
BCity MaxCity repeat writeКонечный город readlnst Ecity1 while ECity Maxcity and CityECity.name st do incECity until Ecity MaxCity repeat gotoxy1,5 WriteLnДата отправление DTInputa delaya.Dweek1440a.time WriteМаксимальное время пути сутки readlnw waytimeround1440w until waytime 0 writeМаксимальная стоимость ReadLncost writeМаксимальное число пересадок readlnreboading writeТип перевозки
авиа,ж.д авто,водн. readlnst if st then for i1 to 4 do kinditrue else for i1 to 4 do kindistiY or stiy or stiX or stix writeДопустимые классы 123456 readlnst if st then for i1 to 4 do classitrue else for i1 to 4 do classistiY or stiy or stiX or stix end end procedure outrespAnswerlist adat var kword qlink bdat icitycode ypway cbyte begin k0 while P nil do begin inck writep.path.bcity QP.path ba while Q nil do begin writecityq.bcity.name
Writeln ,q.flight.company,q.Flight.Number, ,cityQ.Target.name newdatb,Q.ddelay,b writeОтправление writedatb newdatb,Q.waytime,b write Прибытие writedatb writeln QQ.last end newdata,p.waytime,b writeln цена ,P.mincost ,p.maxcost readlnst if stp then begin graphoutcity qp.path c2 while q nil do begin i1 yq.flight.path while y.wayi.city q.bcity do begin ii mod 41 if i1 then yy.next end setcolorc moveto4cityq.bcity.
x,380-3cityq.bcity.y repeat ii mod 41 if i1 then yy.next lineto4cityy.wayi.city.x,380-3cityy.wayi .city.y until y.wayi.cityq.target QQ.last incc end repeat until keypressed CloseGraph end PP.next end if k0 then writeПри данных условиях добраться нельзя else writelnВсего ,k, маршшрутов end Begin ListLoadnil,trafic,city graphoutcity repeat until keypressed closegraph Inputpattern,a newlanswer lanswer.nextnil SearchList,pattern,nil outresLanswer.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 Пт Время 00 Максимальное время пути сутки3 Максимальная стоимость 200 Максимальное число пересадок 3 Тип перевозки авиа,ж.д авто,водн.
Допустимые классы 123456 Tropic Port GoldenAirBridge004 Palace Of The Dream Отправление 1429 8.5.1998 Пт Прибытие 1914 8.5.1998 Пт Palace Of The Dream GoldenAirBridge009 Diamond World Отправление 215 9.5.1998 Пт Прибытие 515 9.5.1998 Пт Diamond World DiamondAirlines003 Beatiful Отправление 1720 9.5.1998
Пт Прибытие 1920 9.5.1998 Пт цена 195 250 Tropic Port GoldenAirBridge004 Lakes Land Отправление 1429 8.5.1998 Пт Прибытие 1629 8.5.1998 Пт Lakes Land DiamondAirlines006 Diamond World Отправление 025 9.5.1998 Пт Прибытие 325 9.5.1998 Пт Diamond World DiamondAirlines003 Beatiful Отправление 1720 9.5.1998
Пт Прибытие 1920 9.5.1998 Пт цена 165 - 195 Tropic Port DeepWater02 Oil City Отправление 120 8.5.1998 Пт Прибытие 440 9.5.1998 Пт Oil City TransExpress002 Beatiful Отправление 120 9.5.1998 Пт Прибытие 1610 10.5.1998 Пт цена 75 105 2. Тест с урезанием бюджета Начальный город
Tropic Port Конечный город Beatiful Дата отправление Дата 8.5.1998 Пт Время 00 Максимальное время пути сутки3 Максимальная стоимость 180 Максимальное число пересадок 3 Тип перевозки авиа,ж.д авто,водн. Допустимые классы 123456 Tropic Port GoldenAirBridge004 Lakes Land Отправление 1429 8.5.1998
Пт Прибытие 1629 8.5.1998 Пт Lakes Land DiamondAirlines006 Diamond World Отправление 025 9.5.1998 Пт Прибытие 325 9.5.1998 Пт Diamond World DiamondAirlines003 Beatiful Отправление 1720 9.5.1998 Пт Прибытие 1920 9.5.1998 Пт цена 165 - 195 Tropic Port DeepWater02 Oil City Отправление 120 8.5.1998
Пт Прибытие 440 9.5.1998 Пт Oil City TransExpress002 Beatiful Отправление 120 9.5.1998 Пт Прибытие 1610 10.5.1998 Пт цена 75 105 3. Уменьшение числа пересадок Начальный город Tropic Port Конечный город Beatiful Дата отправление Дата 8.5.1998 Пт Время 00 Максимальное время пути сутки3
Максимальная стоимость 200 Максимальное число пересадок 2 Тип перевозки авиа,ж.д авто,водн. Допустимые классы 123456 Tropic Port DeepWater02 Oil City Отправление 120 8.5.1998 Пт Прибытие 440 9.5.1998 Пт Oil City TransExpress002 Beatiful Отправление 120 9.5.1998 Пт Прибытие 1610 10.5.1998
Пт цена 75 105 4. Нереальные условия Начальный город Tropic Port Конечный город Beatiful Дата отправление Дата 8.5.1998 Пт Время 00 Максимальное время пути сутки3 Максимальная стоимость 200 Максимальное число пересадок 1 Тип перевозки авиа,ж.д авто,водн. Допустимые классы 123456
При данных условиях добраться нельзя 7. Анализ результатов 1. Время пути зависит от дня оправления. 2. По причине ожидания рейса можно с меньшим числом пересадок добраться позже, чем с большим 3. Дороже не значит быстрее 4. Для нормальной транспортной системы нужно как можно больше больших транспортных узлов 8. Литература 9. Приложение Unit Date interface Var DTErrboolean
Type Datrecord day1 31 month1 12 yearinteger dweek0 6 timeword end Const EWeekarray0 6 of string2Mo,Tu,We,Th,Fr,Sa,Sa Const RWeekarray0 6 of string2,в, а, в,в, ,б procedure newdatadat delayword var bdat procedure writedatbdat Function DayDifferA,BdatInteger Function STimeststringword Function dweek adatbyte Procedure DTInputvar ddat Procedure
SDateStstring var adat Implementation uses dos,crt Function DayInMonthmbyte yintegerbyteforward procedure SDateStstring var adat const mthearray1 12 of string3 JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT, NOV,DEC const mthruarray1 12 of string3 , const mthrlarray1 12 of string3 п,д, а, а, ,о,о, ,б,в,п, var i,j,ebyte modebyte
Sword errboolean D,M,Y,wdword cshortint Procedure addmodebyteswordvar adat begin case mode of 1if s 0 and s 31 then A.dayS else DTErrtrue 3if s 0 and s 12 then A.monthS else DTErrtrue 5if s 100 then A.yearS else A.yearS100Y div 100 end end begin DTErrfalse GetDateY,M,D,wd elengthst i1 mode0 while i e do begin cordsti-ord0 if mode mod 20 and c 0 and c 9 then begin
Sc incmode end else if c 9 and c 0 then SS10c else if mode mod 21 then begin Addmode,S,a Incmode end if mode2 then for j1 to 12 do if mthej,1upcasesti and mthej,2upcasesti1 and mthej,3upcasesti2 or mthruj,1sti or mthrlj,1sti and mthruj,2sti1 or mthrlj,2sti1 and mthruj,3sti2 or mthrlj,3sti2 then begin add3,j,a mode4 end inci end if mode mod 21 then addmode,S,a if mode 1 then add1,D,a if mode 3 then add3,M,a if mode 5 then add5,Y,a if not
DTErr then DTErra.day DayInMontha.month,a.year if not DTErr then a.dweekdweeka end function dweek adatbyte var n,m,yword begin DTErrfalse ya.year if a.month 2 then begin ma.month12 decy end else ma.month nA.day2mtrunc0.6m1yy div 4-y div 100y div 400 mod 7 dweekn end Function STime ststringWord var i,e,modebyte a,sword cshortint begin DTErrfalse elengthst i1 mode0 a0 while i e do begin cordsti-ord0 if mode mod 20 and c 0 and c 9 then
begin Sc incmode end else if c 9 and c 0 then SS10c else if mode1 then begin AS incmode end else if mode3 then begin AA60S incmode end inci end if mode3 then Aa60s if a 1440 then Stimea else DTErrtrue end Function DayInMonthmbyte yintegerbyte const DayInMarray1 12 of byte31,29,31,30,31,30,31,31,30,31,30,31 begin If M 2 then DayInMonthDayInMM else if y mod 4 0 then
DayInMonth28 else if y mod 100 0 then DayInMonth29 else if y mod 400 0 then DayInMonth28 else DayInMonth29 end Function DayDifferA,BdatInteger Var m1,m2,y1,y2Integer Begin DTErrfalse y1A.year y2B.year if a.month 2 then begin m1a.month12 decy1 end else m1a.month if b.month 2 then begin m2b.month12 decy2 end else m2b.month DayDiffer-A.day30m1trunc0.6m11365y1y1 div 4-y1 div 100y1 div 400
B.day30m2trunc0.6m21365y2y2 div 4-y2 div 100y2 div 400 End Procedure DTInputvar ddat var ststring ybyte const empty begin ywherey repeat GotoXY1,y Write в ,empty GotoXY10,y ReadLnSt SDatest,d Until not DTErr GotoXY10,y writelnd.day d.month d.year, ,RweekDweekd repeat gotoxy1,y1 writeап ,empty gotoxy11,y1 readlnst d.timestimest until not
DTErr gotoxy11,y1 writelnstimest div 60 stimest mod 60 end procedure writedatbdat begin writeb.time div 60 b.time mod 60, ,b.day b.month b.year, ,Rweekb.dweek end procedure newdatadat delayword var bdat var cword begin BA B.timea.timedelay mod 1440 mod 1440 delaydelay div 1440a.timedelay mod 1440 div 1440 while delayb.day DayInMonthb.month,b.year do begin delaydelay-1-DayInMonthb.month,b.yearb.d ay b.day1 b.monthb.month mod 121 if b.month1 then incb.year end b.daydelayb.day end begin end.
! |
Как писать рефераты Практические рекомендации по написанию студенческих рефератов. |
! | План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом. |
! | Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач. |
! | Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты. |
! | Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ. |
→ | Виды рефератов Какими бывают рефераты по своему назначению и структуре. |