183657 (629899), страница 2

Файл №629899 183657 (Решение транспортной задачи с правильным балансом) 2 страница183657 (629899) страница 22016-07-30СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 2)

2. Так как Транспортная задача заданна в виде таблицы то удобнее решать ее использую возможности табличного редактора

3 . Это один из языков, в котором я неплохо разбираюсь. Поэтому мне удобнее писать программу с помощью VBA.


Описание алгоритма

1.При запуске программы пользователю предлагается ввести количество запасов и запросов

А) Выполняется проверка на правильность ввода. Если введены числа то

Б) Рисуется таблица

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

А) После подтверждения заполнения пользователем происходи проверка на правильность ввода

Б) Суммируется строка Запросы и столбец Запасы выполняется проверка на равенство. Если равны то

3. Выполняем построение опорного плана методом Северо-западного угла

A) Cтроим нулевую матрицу заданного размера на “листе2”

Б) Затем методом северо-западного угла исходя из данных на листе “Данные”

В) Переносим получившуюся таблицу на лист “Циклы”

4.Используем метод распределения следующим образом

Из приведенного примера уже можно выделить, как алгоритм перебирает пути. Он действует по следующей схеме:

  1. Начальное значение j = 1 (первое место в маршруте).

  2. Мы находимся в городе k.

  3. Для каждого города (i = от 1 до n)

  4. Рассматриваем город i.

  5. Если этот город еще не посещен,

    1. тогда переходим в город i; j увеличиваем на единицу. Добавляем номер города в маршрут на место j. Помечаем город как посещенный. Переходим к пункту 1 (k = i).

    2. иначе идти некуда, т.е. все города мы посетили.

      1. если j = количеству городов (n), т.е мы добрались до последнего пункта в маршруте и наш путь сформирован,
        тогда сравниваем длину пути с длиной минимального маршрута.

      2. Помечаем город как не посещенный и выходим из него. Уменьшаем j на единицу.

  6. Берем следующий город (i=i+1).

Описание основных структур данных

Теперь рассмотрим структуру приложения, опишем классы и процедуры, которые были изменены и наполнены кодом.

Программа состоит из 4 классов:

  1. CAboutDlg связан со встроенным диалоговым окном «О программе».

  2. CKurs_LipinApp управляет запуском приложения и не связан с каким-либо диалоговым окном. [1]

  3. CKurs_LipinDlg связан с окном IDD_KURS_LIPIN_DIALOG. Этот класс организует постановку и решение задачи.

  4. CSetting связан с окном IDD_DIALOG1. В окне вводятся параметры к задаче – расстояния между городами.

Класс CKurs_LipinDlg.

В начале при вызове функции OnInitDialog() переменные заполняются начальными данными. Затем из файла «table.ini» считывается таблица расстояний между городами. И теперь диалоговое окно готово к работе с пользователем.

Функция OnPaint() выводит на экран карту, позволяет выделять города, выбранные пользователем, а также соединяет города линиями-путями, когда задача решена. Кроме того, обеспечивается вывод информации для пользователя: пояснения, длина минимального пути и список расстояний между городами, составляющие минимальный путь.

При нажатии левой кнопкой мыши вызывается функция
OnLButtonDown(). Она определяет по какому городу щелкнул пользователь и ставит/снимает выделение с него. Также здесь осуществляется проверка на количество выделенных городов, т.к. время ожидания решения задачи для количества более 13 городов станет не удовлетворительным (от 1,5 минут и более). Поэтому программа выдаст сообщение, если мы попытаемся выйти за допустимые пределы.

Кнопка «Выбрать стандартные города» выделяет города, которые требуется соединить в условии задачи, а именно Москва, Ярославль, Нижний Новгород, Самара, Саратов, Волгоград, Воронеж, Пенза, Липецк, Тамбов, Орел, Курск, Тула.

Кнопка «Очистить» снимает выделение со всех городов и задает начальные значения ряду необходимых переменных.

Функция OnButton3() связана с кнопкой «Задать пункт отправления». После нажатия кнопки пользователь может щелчком мыши выбрать пункт отправления коммивояжера.

Кнопка «Параметры» вызывает диалоговое окно «Параметры», где пользователь может редактировать таблицу расстояний между городами.

Функция OnOK() обрабатывает нажатие кнопки «Рассчитать путь». Она подготавливает начальные значения для вызова рекурсивной функции: создается таблица расстояний только для выделенных городов, заполняется первоначальный минимальный путь, выводится поясняющая информация. Затем вызывается функция recursiv(), которая перебирает варианты маршрутов, отсекает лишние ветви путей и находит минимальный.

Класс CSetting.

Функция OnInitDialog() программным путем создает и выводит поля ввода, имитируя таблицу расстояний между городами. Затем считывается файл «table.ini», и заполняются поля ввода полученными значениями. Вызывается функция Proverka(), которая сканирует полученные данные на ошибки, т.е. определяет введены ли только цифры, и если нет, тогда удаляет все лишние символы.

По нажатию кнопки «Сохранить» программа передает данные в родительское окно, записывает данные из полей ввода в файл и закрывает диалоговое окно.


Описание интерфейса с пользователем

При загрузке приложения появляется основное диалоговое окно (рис. 3).

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

Чтобы отменить выделение городов нужно щелкнуть по кнопке «Очистить». Нажав кнопку «Рассчитать путь», мы получим результат: города соединены минимальным путем, его длина дана в окне информации, в списке показаны расстояния между городами, входящими в полученный путь (рис. 4).

Кнопка «Выбрать стандартные города» выделяет города, требуемые в задании.

Чтобы выделить пункт отправления коммивояжера нужно выбрать «Задать пункт отправления».

Кнопка «Параметры» вызывает диалоговое окно для ввода расстояний между городами (рис. 5). Это окно является модальным и его особенностью является то, что нет возможности перехода к родительскому окну.

Здесь пользователь может отредактировать расстояния между городами. Для этого нужно щелкнуть в поле ввода, и ввести другое значение. Перемещаться по этой «таблице» можно по строкам при помощи клавиш Tab или Shift+Tab.

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

Кнопка «Отмена» позволяет не сохранять введенные изменения, если пользователь ошибся во введенной информации.

По нажатии любой из кнопок диалоговое окно «Параметры» закрывается и мы возвращаемся к главному окну .

Если в строке заголовка главного окна щелкнуть правой кнопкой мыши и выбрать пункт «О программе», то появится диалоговое окно, содержащее сведения о программе и об авторе (рис. 6). Нажав кнопку «OK» возвращаемся к главному окну.

Заключение

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


Литература

  1. Круглински Д., Программирование на Microsoft Visual C++ 6.0 для профессионалов/Пер.с англ. –СПб:Питер; 2004г. – 861 с.: ил.

  2. Беляев С.П. Курс лекций по «Исследованию операций».

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

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

Список файлов курсовой работы

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