NahPuti (664080)

Файл №664080 NahPuti (Нахождение пути от одного населённого пункта к другому)NahPuti (664080)2016-07-31СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла

Цель работы:

Разработать программу, осуществляющую нахождение пути от одного населённого пункта к другому.

Введение

В настоящее время индустрия производства компьютеров и программного обеспечения для них является одной из наиболее важных сфер экономики развитых стран. Ежегодно в мире продаются десятки миллионов компьютеров. Только в США объем продаж компьютеров составляет десятки миллионов долларов и постоянно продолжает расти.

В чем же причины такого стремительного роста индустрии персональных компьютеров и их сравнительная выгодность для многих деловых применений?

  • Простота использования, обеспеченная с помощью диалогового способа взаимодействия с компьютером.

  • Относительно высокие возможности по переработке информации, наличие программного обеспечения, а так же мощных систем для разработки нового программного обеспечения.

Использованная в отчёте программа может использоваться для решения задач, связанных с проложением маршрута дороги любого типа.

Определение достижимости населённых пунктов.

1.1 Анализ требований.

В списке задаются города (населённые пункты), а также дороги между ними (есть или нет), необходимо разработать программу с использованием модульного программирования, осуществляющую нахождение кратчайшего пути между населёнными пунктами, задаваемыми пользователем в процессе работы программы.

Решение поставленной задачи осуществляется следующим методом:

Cтроится граф, вершины которого - населённые пункты, а ребра - дороги между ними.

В процессе работы программы в данном графе с помощью рекуррентной процедуры находятся пути из одной вершины в другую. Данная процедура в качестве параметров получает массив пройденных вершин, текущую вершину и количество уже пройденных вершин. На каждом этапе процедура проверяет все, не пройденные достигнутые вершины, и либо находит заданный путь, если достигнута конечная вершина, либо вызывает саму себя для всех, не пройденных вершин.

Для организации данного алгоритма используется две процедуры: процедура нахождения всего пути и рекурсивная процедура поиска единичного маршрута.

Процедура нахождения всего пути осуществляет перебор всех населённых пунктов и вызов рекурсивной процедуры, которая осуществляет поиск маршрута между этими населёнными пунктами.

Средства решения задачи: используются средства логического программирования языка Turbo Pascal 7.0.

1.2 Проектирование.

Для реализации поставленной задачи программа должна выполнять следующие функции:

  • Ввод данных пользователем с клавиатуры - вводятся названия населённых пунктов и дороги, соединяющие их;

  • Вывод данных - вывод на экран списка населённых пунктов и дорог, соединяющий их.

  • Запись в файл - запись в файл, имя которого указывает пользователь в диалоговом режиме, названия населённых пунктов и существующих дорог между ними в виде текстовой информации;

  • Считывание файла с диска, с именем, которое указывает пользователь в диалоговом режиме

  • Вывод результата - пользователь задаёт начальный и конечный населённый пункт, между которыми необходимо проложить путь, на экране появляется маршрут, либо сообщение: "маршрут не найден".

Данная программа реализована с использованием принципа модульного программирования, главным преимуществом которого является простота использования, возможность подключения программой разных модулей, которые могли быть разработаны ранее, быстрое нахождение основного текста программы, а также исправление и отладка процедур при использовании другой программы или специальной программы-отладчика, которая подключает к себе данный модуль.

Все процедуры, используемые данной программой, находятся в unit-модуле ph.tpu и предназначены для использования основной программой, которая находится в файле path.pas.

Основная программа осуществляет вывод меню на экран, опрос клавиатуры и вызов процедуры, соответствующей нажатой клавише.

Для реализации ввода данных используется процедура InputData, которая осуществляет ввод имён городов с клавиатуры, если вместо названия города был нажат ввод, то процедура выводит список городов на экран и пользователь, передвигая курсор и, нажимая ввод, составляет список дорог, соединяющие эти города между собой, при нажатии клавиши Esc процедура прекращает свою работу и выходит в главное меню.

Для реализации вывода данных на экран используется процедура OutputData, которая осуществляет чтение в цикле массива городов и вывод его на экран, а также массива дорог, соединяющие эти города и выводит из на экран.

Для реализации запроса имени файла и записи данных в файл используется процедура Save, которая сначала выводит запрос на экран, осуществляет ввод имени файла, открывает файл, имя которого вводится пользователем с клавиатуры в текущем каталоге, в цикле из массива городов записывает на диск список городов, затем также список дорог, соединяющих их.

Для реализации запроса имени файла и чтения данных из файла в массив используется процедура load, которая сначала выводит запрос имени файла на экран, осуществляет ввод имени файла, открывает файл, имя которого вводится пользователем, считывает данные в массив городов, затем в массив дорог.

Для поиска пути между городами используется процедура FindPath, которая осуществляет вывод списка городов на экран, опрос клавиатуры, при этом пользователь может выбрать курсором начальный и конечный населённый пункт в своём пути, процедура FindPath вызывает с параметрами рекурсивную процедуру, которая производит поиск оптимального маршрута между выбранными городами.

Для поиска маршрута используется рекурсивная процедура findnext, которой при её вызове передаются следующие параметры:

a(vec) - вектор, каждому городу соответствует номер в маршруте или ноль, если города нет в маршруте;

tv(integer) - город, следующий в маршруте;

nv(integer) - город, в который необходимо добраться;

lv(integer) - количество пройденных городов.

На каждом этапе процедура проверяет все, не пройденные достигнутые вершины, и либо находит заданный путь, если достигнута конечная вершина, либо вызывает саму себя для всех, не пройденных вершин.

1.3 Кодирование

Краткая функциональная спецификация.

Процедура InputData

Назначение: Осуществляет ввод исходных данных пользователем с клавиатуры.

Входные данные: нет.

Выходные данные: нет.

Не вызывает никаких процедур.

Вызывается из основной программы.

Процедура OutputData

Назначение: Осуществляет вывод данных на экран.

Входные данные: нет.

Выходные данные: нет.

Не вызывает никаких процедур.

Вызывается из основной программы.

Процедура Load

Назначение: Осуществляет запрос имени, чтение файла данных с этим именем в массив городов и в массив дорог.

Входные данные: нет.

Выходные данные: нет.

Не вызывает никаких процедур.

Вызывается из основной программы.

Процедура Save

Назначение: Осуществляет запрос имени, запись в файл данных с этим именем массива городов и в массива дорог.

Входные данные: нет.

Выходные данные: нет.

Не вызывает никаких процедур.

Вызывается из основной программы.

Процедура FindPath

Назначение: Осуществляет поиск пути между городами.

Входные данные: нет.

Выходные данные: нет.

Вызывает findnext.

Вызывается из основной программы.

Процедура FindNext

Назначение: Осуществляет поиск маршрута.

Входные данные:

a(vec) - вектор, каждому городу соответствует номер в

маршруте или ноль, если города нет в маршруте;

tv(integer) - город, следующий в маршруте;

nv(integer) - город, в который необходимо добраться;

lv(integer) - количество пройденных городов.

Выходные данные: нет.

Вызывает findnext.

Вызывается из FindPath.

Основная программа

Осуществляет оформление экрана, вывод и обработку меню, опрос клавиатуры, вызов процедуры, соответствующей выбранному пункту меню.

1.4 Тестирование

Разработанное программное средство было протестировано методом функционального тестирования.

Введённые в программу данные показали, что результаты работы совпадают с вычисленными вручную.

Программы разработки.

Программа path

program path;

uses crt,ph;

var

t:town; {Данные о городах}

nt:integer; {Число городов}

r:road; {Данные о дорогах}

nr:integer; {Число дорог}

sl:integer; {Выбранный пункт меню}

c:char; {Нажатый символ}

i:integer; {Счетчик}

fv:vec; {Вектор пройденных городов}

nfv:integer; {Количество городов}

Const

KItems = 6; {Количество пунктов меню}

mas: array[1..KItems] of string =

{Инициализация пунктов меню}

('¦ Ввод данных ¦',

'¦ Вывод данных ¦',

'¦ Запись в файл ¦',

'¦ Считывание файла ¦',

'¦ Вывод результата ¦',

'L------ Выход -------');

{Основная программа}

begin

sl:=1;

{Городов и дорог нет}

nt:=0;

nr:=0;

repeat

textattr:=7; {Основной цвет меню}

clrscr;

for i:=1 to KItems do begin

gotoxy (25,i+3);

write (mas[i]); {Вывод пунктов меню}

end;

textattr:= 77; {Цвет активного пункта}

gotoxy (25,sl+3);

write (mas[sl]); {Вывод активного пункта}

c:=readkey; {Ввод символа с клавиатуры}

textattr:=7;

case c of {Определить код нажатой клавиши}

#13: case sl of {Клавиша Enter}

1: InputData;

2: OutputData;

3: Save;

4: Load;

5: FindPath;

end;

#0: begin {Анализ функциональных клавиш}

c:=readkey;

case c of

#80: if sl

#72: if sl>1 then sl:=sl-1 else sl:=KItems;

end

end

end;

until ((c=#13) and (sl=6) or (c=#27));

textattr:=7;

clrscr;

end.

Модуль ph

unit ph;

interface

uses crt;

type

town= array [1..20] of string; {Данные о городах}

road= array [1..200] of record {Данные о дорогах}

a:integer;

b:integer;

end;

vec=array [1..20] of integer; {Данные о пройденных городах}

var

t:town; {Данные о городах}

nt:integer; {Число городов}

r:road; {Данные о дорогах}

nr:integer; {Число дорог}

fv:vec; {Вектор пройденных городов}

nfv:integer; {Количество городов}

procedure InputData;

procedure OutputData;

procedure Save;

procedure Load;

procedure findnext(a:vec; tv:integer; nv:integer; lv:integer);

procedure FindPath;

implementation

{Ввод данных}

procedure InputData;

var

i:integer; {Счетчик}

n:integer; {Выбранный начальный город}

sl:integer; {Выбранный город}

c:char; {Нажатый символ}

begin

{Считывание данных о городах}

clrscr;

nt:=1;

writeln('Введите название города (Пустая строка - закончить: ');

repeat

write(' >');

readln(t[nt]);

nt:=nt+1;

until (t[nt-1]='');

nt:=nt-2;

{Проверка, вводились ли города}

if (nt>0) then begin

{Да, ввод дорог}

nr:=0;

n:=0;

sl:=1;

repeat

textattr:=7;

clrscr;

for i:=1 to nt do begin

gotoxy (25,i+3);

write (t[i]); {Вывод городов}

end;

textattr := 77; {Цвет активного города}

gotoxy (25,sl+3);

write (t[sl]); {Вывод активного города}

if (n<>0) then begin

textattr:=66; {Цвет отмеченного города}

gotoxy (25,n+3);

write (t[n]); {Вывод отмеченного города}

end;

textattr:=7;

gotoxy(1,20);

write('Дороги: ');

for i:=1 to nr do write(' {',r[i].a,',',r[i].b,'}');

c:=readkey; {Ввод символа с клавиатуры}

case c of

#13: begin {Нажат ENTER}

{Либо помечается начальный город}

if n=0 then n:=sl else

{Либо происходит попытка добавить дорогу}

if (n=sl) then n:=0 else begin

nr:=nr+1;

if (n>sl) then begin

i:=n;

n:=sl;

sl:=i;

end;

{Проверяется, нет ли такой?}

for i:=1 to nr-1 do

if ((r[i].a=n)and(r[i].b=sl)) then n:=0;

{Если нет - добавляется}

if n<>0 then begin

r[nr].a:=n;

r[nr].b:=sl;

end else nr:=nr-1;

n:=0;

sl:=1;

end;

end;

#0: begin {Анализ функциональных клавиш}

c:=readkey;

case c of

#80: if sl

#72: if sl>1 then sl:=sl-1 else sl:=nt;

end

end

end;

until (c=#27);

end;

end;

{Вывод данных}

Характеристики

Тип файла
Документ
Размер
88,5 Kb
Тип материала
Учебное заведение
Неизвестно

Тип файла документ

Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.

Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.

Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.

Список файлов реферата

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6524
Авторов
на СтудИзбе
301
Средний доход
с одного платного файла
Обучение Подробнее