Методы решения транспортных задач

Автор работы: Пользователь скрыл имя, 16 Января 2013 в 17:09, курсовая работа

Описание работы

Транспортная задача (классическая) — задача об оптимальном плане перевозок однородного продукта из однородных пунктов наличия в однородные пункты потребления на однородных транспортных средствах (предопределённом количестве) со статичными данными и линеарном подходе (это основные условия задачи)

Файлы: 1 файл

Отчет.doc

— 1.20 Мб (Скачать файл)

 

 

5.2. Электронные ресурсы

5.2.1. www.window.edu.ru

5.2.2. www.exponenta.ru

 

 

5.3. Нормативные документы

5.3.1. Стандарт организации  СТО НГТИ-1-2008. Курсовое проектирование. Новоуральск. Изд-во НГТИ, 2009. – 44 с.

5.3.2. Стандарт организации  СТО НГТИ-2-2007. Требования к оформлению  текстовой документации. Новоуральск.  Изд-во НГТИ, 2007. – 147 с.

5.3.3. ЕСПД ГОСТ 19.001-77, ГОСТ 19.002-80, ГОСТ 19.101-77, ГОСТ 19.102-77, ГОСТ 19.103-77.

5.3.4. Методические указания  к выполнению курсового проекта  по дисциплине «Математические  методы». Новоуральск. Изд-во УрПК  НГТИ, 2008. – 34 с.

 

6.Приложение A (обязательное). Блок-схема решения задачи

6.1 Функциональная  блок-схема.



 

 

 

 

 


 



 

 

 

 

 

 

 

 

 

6.2.Блок-схема метода северо-западного угла.



 


 



 



 


  


Да Нет


                  


                Да     Нет

 




 

 

 

 

 


 


 





Да            Нет



 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 


 


 


 


 

 

 

 

 

 

6.3.Блок-схема метода минимального элемента.


 

 



 

 

 

 


 

 

 


 




 


 

 

 

 

Да

 

 

 

Нет

 

 

Да

 

 

 

 

 

 Нет


 


 

 

 

 

 

 

 

 

 




 

 

 

 

 

 

 

 

 

 

 

 

 

       Да

 

7.Приложение Б (обязательное) Листинг программы

 

7.1. Листинг модуля menu

 

//---------------------------------------------------------------------------

 

#include <vcl.h>

#pragma hdrstop

 

#include "menu.h"

#include "about.h"

#include "help1.h"

#include "sevzap1.h"

#include "minimal1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

Tmenu1 *menu1;

//---------------------------------------------------------------------------

__fastcall Tmenu1::Tmenu1(TComponent* Owner)

        : TForm(Owner)

{///////Заполнение таблицы  (Потребители)

StringGrid1->Cells[1][0]="B1";

StringGrid1->Cells[2][0]="B2";

StringGrid1->Cells[3][0]="B3";

StringGrid1->Cells[4][0]="B4";

StringGrid1->Cells[5][0]="B5";

StringGrid1->Cells[6][0]="B6";

StringGrid1->Cells[7][0]="Запасы";

///////Заполнение таблицы  (Поставщики)

StringGrid1->Cells[0][1]="A1";

StringGrid1->Cells[0][2]="A2";

StringGrid1->Cells[0][3]="A3";

StringGrid1->Cells[0][4]="A4";

StringGrid1->Cells[0][5]="Потребности";

///////Заполнение таблицы значениями  по столбцам

///1

StringGrid1->Cells[1][1]=12;

StringGrid1->Cells[1][2]=8;

StringGrid1->Cells[1][3]=6;

StringGrid1->Cells[1][4]=10;

///2

StringGrid1->Cells[2][1]=14;

StringGrid1->Cells[2][2]=10;

StringGrid1->Cells[2][3]=8;

StringGrid1->Cells[2][4]=18;

 

///3

StringGrid1->Cells[3][1]=32;

StringGrid1->Cells[3][2]=12;

StringGrid1->Cells[3][3]=12;

StringGrid1->Cells[3][4]=4;

///4

StringGrid1->Cells[4][1]=20;

StringGrid1->Cells[4][2]=24;

StringGrid1->Cells[4][3]=24;

StringGrid1->Cells[4][4]=8;

///5

StringGrid1->Cells[5][1]=3;

StringGrid1->Cells[5][2]=12;

StringGrid1->Cells[5][3]=18;

StringGrid1->Cells[5][4]=9;

 

///6

StringGrid1->Cells[6][1]=0;

StringGrid1->Cells[6][2]=0;

StringGrid1->Cells[6][3]=0;

StringGrid1->Cells[6][4]=0;

StringGrid1->Cells[6][5]=38;

/////////////Заполнение потребности  значениями

StringGrid1->Cells[1][5]=100;

StringGrid1->Cells[2][5]=70;

StringGrid1->Cells[3][5]=30;

StringGrid1->Cells[4][5]=45;

StringGrid1->Cells[5][5]=50;

/////////////Заполнение запасов значениями

StringGrid1->Cells[7][1]=54;

StringGrid1->Cells[7][2]=32;

StringGrid1->Cells[7][3]=85;

StringGrid1->Cells[7][4]=162;

////////////////////////////////////////////////////////////

stb=0;str=0;

}

//---------------------------------------------------------------------------

 

void __fastcall Tmenu1::N2Click(TObject *Sender)

{

about1->ShowModal();

}

//---------------------------------------------------------------------------

void __fastcall Tmenu1::N1Click(TObject *Sender)

{

help->Show();

}

//---------------------------------------------------------------------------

 

 

 

void __fastcall Tmenu1::Button1Click(TObject *Sender)

{

x=StringGrid1->ColCount-1;

y=StringGrid1->RowCount-1;

for(i=0;i<x;i++) {

sevzap->StringGrid1->Cells[i][j]=StringGrid1->Cells[i][j];

                                     }

                                    i=0;

for(j=0;j<y;j++){

sevzap->StringGrid1->Cells[i][j]=StringGrid1->Cells[i][j];

                                    }

                                    j=0;

stb=0;

str=0;

while(stb<x){

sevzap->StringGrid1->Cells[stb][y]=StringGrid1->Cells[stb][y];stb++;

        }

while(str<y){

sevzap->StringGrid1->Cells[x][str]=StringGrid1->Cells[x][str];str++;

        }

//////////////////////////////////////////////////////////////////////////////

menu1->Hide();

sevzap->Show();

}

//---------------------------------------------------------------------------

 

void __fastcall Tmenu1::Button2Click(TObject *Sender)

{

x=StringGrid1->ColCount-1;

y=StringGrid1->RowCount-1;

for(i=0;i<x+1;i++){

        for(j=0;j<y+1;j++){

minimal->StringGrid1->Cells[i][j]=StringGrid1->Cells[i][j];

                        }

                }

i=0;j=0;

////////////////////////////////////////////////////////////

for(i=0;i<x;i++) {

minimal->StringGrid2->Cells[i][j]=StringGrid1->Cells[i][j];

                                     }

                                    i=0;

for(j=0;j<y;j++){

minimal->StringGrid2->Cells[i][j]=StringGrid1->Cells[i][j];

                                    }

                                    j=0;

stb=0;

str=0;

while(stb<x){

minimal->StringGrid2->Cells[stb][y]=StringGrid1->Cells[stb][y];stb++;

        }

while(str<y){

minimal->StringGrid2->Cells[x][str]=StringGrid1->Cells[x][str];str++;

        }

//////////////////////////////////////////////////////////////////////////////

menu1->Hide();

minimal->Show();

}

//---------------------------------------------------------------------------

 

void __fastcall Tmenu1::BitBtn1Click(TObject *Sender)

{

Application->Terminate();

}

//---------------------------------------------------------------------------

 

7.2. Листинг модуля sevzap1

//---------------------------------------------------------------------------

 

#include <vcl.h>

#pragma hdrstop

#include "menu.h"

#include "sevzap1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

Tsevzap *sevzap;

//---------------------------------------------------------------------------

__fastcall Tsevzap::Tsevzap(TComponent* Owner)

        : TForm(Owner)

{

//присваиваем значения по умолчанию

stb=1;

str=1;

r=0;

fx=0;

}

//---------------------------------------------------------------------------

void __fastcall Tsevzap::BitBtn2Click(TObject *Sender)

{

///присваиваем количество строк и столбцов для x y

x=StringGrid1->ColCount-1; ///столбец

y=StringGrid1->RowCount-1; ///строка

///ограничиваем решение цикла  для вывода результата

if((StringGrid1->Cells[x-1][y]!=0)&&(StringGrid1->Cells[x][y-1]!=0)){

///цикл для подсчета, когда запасы  больше потребностей

  if(StringGrid1->Cells[x][str].ToDouble()>StringGrid1->Cells[stb][y].ToDouble())

   {//присвоим минимальное из значений в целевую ячейку

   StringGrid1->Cells[stb][str]=StringGrid1->Cells[stb][y];

   //из большего вычитаем меньшее и присваиваем большей ячейке

   StringGrid1->Cells[x][str]=StringGrid1->Cells[x][str]-StringGrid1->Cells[stb][y];

   StringGrid1->Cells[stb][y]=0;//обнуляем  минимальный элемент

   //считаем F(x)

   r=StringGrid1->Cells[stb][str]*menu1->StringGrid1->Cells[stb][str];

   fx=fx+r;

   r=0;//сбрасываем результат

   //

   stb++;//сдвигаемся на столбец

   return;//останавливаем выполнение

   }

///цикл для подсчета, когда запасы  меньше потребностей

  if(StringGrid1->Cells[x][str].ToDouble()<StringGrid1->Cells[stb][y].ToDouble())

   {//присвоим минимальное из значений в целевую ячейку

   StringGrid1->Cells[stb][str]=StringGrid1->Cells[x][str];

   //из большего вычетаем меньшее и присваеваем большей ячейке

   StringGrid1->Cells[stb][y]=StringGrid1->Cells[stb][y]-StringGrid1->Cells[x][str];

   StringGrid1->Cells[x][str]=0;//обнуляем минемальный элемент

   //считаем F(x)

   r=StringGrid1->Cells[stb][str]*menu1->StringGrid1->Cells[stb][str];

   fx=fx+r;

   r=0;//сбрасываем результат

   //

   str++;//сдвигаемся на строку

   return;//останавливаем выполнение

   }

///цикл для подсчета, когда запасы равны потребностям

  if(StringGrid1->Cells[x][str].ToDouble()==StringGrid1->Cells[stb][y].ToDouble())

   {//присвоим любое из значений в целевую ячейку

   StringGrid1->Cells[stb][str]=StringGrid1->Cells[x][str];

   StringGrid1->Cells[stb][y]=0;//обнуляем сравневаемые ячейки

   StringGrid1->Cells[x][str]=0;

   //считаем F(x)

   r=StringGrid1->Cells[stb][str]*menu1->StringGrid1->Cells[stb][str];

   fx=fx+r;

   r=0;//сбрасываем результат

   //

   stb++;str++;//перемещаемся на стб и стр по таблице

   return;//останавливаем выполнение

   }

          }

/////////////////////////////////////////////////////////////

else{///включаем кнопку для вывода результата,вкл эту

BitBtn2->Visible=false;

BitBtn3->Visible=true;

    }

}

//---------------------------------------------------------------------------

 

void __fastcall Tsevzap::BitBtn3Click(TObject *Sender)

{///убираем кнопки - выводим результат

Label2->Caption=fx;

Label2->Visible=true;

BitBtn3->Visible=false;

}

//---------------------------------------------------------------------------

 

 

 

void __fastcall Tsevzap::BitBtn1Click(TObject *Sender)

{

x=StringGrid1->ColCount-1;

y=StringGrid1->RowCount-1;

for(i=0;i<x+1;i++){

        for(j=0;j<y+1;j++){

StringGrid1->Cells[i][j]="";

                        }

                }

Label2->Visible=false;

stb=1;

str=1;

r=0;

fx=0;

BitBtn2->Visible=true;

menu1->Show();

sevzap->Close();

}

//---------------------------------------------------------------------------

 

 

7.3. Листинг модуля minimal1

//---------------------------------------------------------------------------

 

#include <vcl.h>

#pragma hdrstop

 

#include "minimal1.h"

#include "menu.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

Tminimal *minimal;

//---------------------------------------------------------------------------

__fastcall Tminimal::Tminimal(TComponent* Owner)

        : TForm(Owner)

{

//присваиваем значения по умолчанию

stb=1;

str=1;

r=0;

fx=0;

i=1;

j=1;

}

//---------------------------------------------------------------------------

void __fastcall Tminimal::BitBtn1Click(TObject *Sender)

{

///действие вернуться  на главную форму

/////присваиваем переменным значения размера таблицы

x=StringGrid1->ColCount-1;

y=StringGrid1->RowCount-1;

/////очищаем первую  таблицу

for(i=0;i<x+1;i++){

        for(j=0;j<y+1;j++){

StringGrid1->Cells[i][j]="";

                        }

                }

//////очищаем вторую  таблицу

for(i=0;i<x+1;i++){

        for(j=0;j<y+1;j++){

StringGrid2->Cells[i][j]="";

                        }

                }

/////возвращаем начальные  значения переменным

stb=1;str=1;

r=0;fx=0;

i=1;j=1;

BitBtn3->Visible=true;

Label2->Visible=false;

//////////////переходим в  главное меню

menu1->Show();

minimal->Close();

}

//---------------------------------------------------------------------------

 

void __fastcall Tminimal::BitBtn3Click(TObject *Sender)

{

x=StringGrid1->ColCount-1;

y=StringGrid1->RowCount-1;

i=1;j=1;

min=StrToInt(StringGrid1->Cells[i][j]); //принемаем за минимум первый элемент

stb=1;str=1;////

for(int i = 1; i < StringGrid1->ColCount-1; i++) {

  for(int j = 1; j < StringGrid1->RowCount-1; j++) {

    if (min>StringGrid1->Cells[i][j]) {

      min=StringGrid1->Cells[i][j].ToInt();

      stb=i;str=j;///запоминаем координаты минимального элемента

                                      }

                                                   }

                                                 }

////когда минимальный  не равен, тогда выполняем решение

if (min != 999){

 

        if (StringGrid1->Cells[stb][y].ToDouble()<StringGrid1->Cells[x][str].ToDouble())

{///цикл для подсчета, когда запасы больше потребностей

StringGrid2->Cells[stb][str]=StringGrid1->Cells[stb][y];

StringGrid1->Cells[stb][str]=StringGrid1->Cells[stb][y];

StringGrid1->Cells[x][str]=StringGrid1->Cells[x][str]-StringGrid1->Cells[stb][y];

StringGrid2->Cells[x][str]=StringGrid1->Cells[x][str];

///считаем F(x)

r= StringGrid2->Cells[stb][str]*menu1->StringGrid1->Cells[stb][str];

fx=fx+r;r=0; Label2->Caption=fx;

///замещаем столбец

for(int str = 1; str < y ; str++) {StringGrid1->Cells[stb][str]=999;}

StringGrid2->Cells[stb][y]=0;

StringGrid1->Cells[stb][y]=0;

return;

}

 

        if (StringGrid1->Cells[stb][y].ToDouble()>StringGrid1->Cells[x][str].ToDouble())

{/// цикл для подсчета, когда запасы меньше потребностей

StringGrid2->Cells[stb][str]=StringGrid1->Cells[x][str];

StringGrid1->Cells[stb][str]=StringGrid1->Cells[x][str];

StringGrid1->Cells[stb][y]=StringGrid1->Cells[stb][y]-StringGrid1->Cells[x][str];

StringGrid2->Cells[stb][y]=StringGrid1->Cells[stb][y];

///считаем F(x)

r= StringGrid2->Cells[stb][str]*menu1->StringGrid1->Cells[stb][str];

fx=fx+r;r=0; Label2->Caption=fx;

/////замещаем строку

for(int stb = 1; stb < x ; stb++) {StringGrid1->Cells[stb][str]=999;}

StringGrid2->Cells[x][str]=0;

StringGrid1->Cells[x][str]=0;

return;

}

 

        if (StringGrid1->Cells[stb][y].ToDouble()==StringGrid1->Cells[x][str].ToDouble())

{///цикл для подсчета, когда запасы равны потребностям

StringGrid2->Cells[stb][str]=StringGrid1->Cells[x][str];

StringGrid1->Cells[stb][str]=StringGrid1->Cells[x][str];

StringGrid1->Cells[stb][y]=0;

StringGrid2->Cells[stb][y]=0;

StringGrid1->Cells[x][str]=0;

///считаем F(x)

r= StringGrid2->Cells[stb][str]*menu1->StringGrid1->Cells[stb][str];

fx=fx+r;r=0; Label2->Caption=fx;

/////замещаем строку  и столбец

for(int stb = 1; stb < x ; stb++) {StringGrid1->Cells[stb][str]=999;}

for(int str = 1; str < y ; str++) {StringGrid1->Cells[stb][str]=999;}

StringGrid2->Cells[x][str]=0;

return;

}

}

else {BitBtn4->Visible=true;BitBtn3->Visible=false;}

}

//---------------------------------------------------------------------------

Информация о работе Методы решения транспортных задач