Часть полного текста документа: Мурманский филиал Петровского Колледжа Курсовая по дисциплине "Компьютерное моделирование" на тему "Транспортная задача" Выполнил: Ошкин Е.С. Проверил: Сергеев А.В. Мурманск 2002г. Описание Алгоритма программы ПРОГРАММА НАПИСАНА НА BORLAND С++ версии 3.1 Программа решает Транспортную Задачу (ТЗ) 3 методами: 1. Северо-западным углом 2. Северо-восточным углом 3. Методом минимального элемента в строке. Программа состоит из функций: 1. Main() 2. Data() 3. Opplan() 4. Sohran() 5. Bas() 6. Kost() 7. Potenzial() 8. Optim() 9. Plmi() 10. Abcikl() 11. Cikl() 12. Prpoisk() 13. Levpoisk() 14. Verpoisk() 15. Nizpoisk() 16. Pr() Главная функция main() невелика, но в ней происходит обращение функциям, выполняющим определенные действия в процессе решения ТЗ. Здесь следует обратить особое внимание на строку программы if(!z) break; - если бы не она (она показывает, что после очередной проверки базисного плана, если он оптимален, возвращаемое значение из функции optim() равно 0, что приводит к выходу из бесконечного цикла улучшения базисных планов). Иногда возникает ситуация, когда базисная переменная(одна или несколько) равна нулю, и ее следует отличать от других базисных переменных. В матрице matr() такие элементы я пометил как -2. Основные переменные я описал в комментариях в программе. Функция data() производит ввод данных на ТЗ. Функция opplan() выполняет задачи по составлению первоначального базисного плана методом северо-заподного угла. В этой функции используются следующие переменные: Int *matr указатель на матрицу базисных переменных Int *po указатель на вектор пунктов отправления Int *pn указатель на вектор пунктов назначения Int m количество пунктов отправления Int n количество пунктов назначения Функция kost() производит вывод суммарной стоимости перевозок по текущему базисному плану. Используются следующие переменные: Int *matr, m,n; Int *st указатель на матрицу стоимостей. Функция potenzial() выполняет подсчет потенциалов. Использует следующие переменные: Int *pu указатель на вектор потенциалов строк Int *pv указатель на вектор потенциалов столбцов Int matr, m, n, *st; Первоначально элементы векторов потенциалов *(pu+i) и *(pv+j) заполняются минимальными значениями для целых переменных = 32768, определенных предпроцессорным оператором define MIN - 32768. Далее пологая, что *pu=0, и используя структуру struct poten{...}, элементы векторов потенциалов приобретают свои реальные значения. Работу этого модуля я бы разделил на эти этапы: * Выделение памяти под элемент структуры top = (struct poten*)malloc(sizeof(struct poten)); заполнение полей элемента структуры необходимой информацией; установление связей между элементами структуры; * Вычисление потенциалов строк и столбцов с занесением информации в секторы pu и pv; * Проверка правильности заполнения векторов pu и pv, т.е. установление не содержат ли элементы этих векторов значения MIN. При необходимости, если существуют такие элементы векторов, производятся дополнительные вычисления; * Вывод векторов pu и pv; Функция optim() проверяет план на оптимальность, если он оптимален, то функция отправляет в главную функцию main() значение 0, в противном случае, если он не оптимален, то управление передается функции abcikl() и возврат главной функции main() значение -1. Функция optim() использует переменные: Int m,n,*pu,*pv, *matr, *st. ............ |