Моделирование транспортной задачи

Автор: Пользователь скрыл имя, 25 Февраля 2013 в 20:55, курсовая работа

Краткое описание

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

Файлы: 1 файл

Копия ОТЧЕТ Курсова2я.doc

— 7.27 Мб (Скачать)

 

 

Техническое щзадание с практики ТРПО

  ТЕХНИЧЕСКОЕ ЗАДАНИЕ

Введение

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

2.1.                    Основания для разработки

Основанием для разработки программного продукта служит приказ ректора Брянского государственного технического университета (БГТУ)

проф. Лагерева А.В. за номером № ........ от 2007 г. о назначении темы дипломной работы студентке очного отделения группы 03--ПО1 Сазоновой А.С. Тема дипломной работы: “Разработка автоматизированной обучающей системы по дисциплине «Структуры и алгоритмы обработки данных»”.

2.2.                    Назначение разработки

Назначением разработки автоматизированной обучающей системы является предоставление обучающей системы для обучения студентов по дисциплине «Структуры и алгоритмы обработки данных».

В процессе работы с обучающей программой обучаемый должен получить:

знания по данной предметной области;

умения применять применять полученные знания на;

умение применять различные методы и алгоритмы;

умение строить алгоритмы самостоятельно;

навыки написания программ;

навыки решения задач;

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

оценку своих знаний в виде отчета по выполнению практических и тестовых заданий.

2.3.          Требования к программному изделию

2.3.1.        Требования к функциональным характеристикам

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

1)    Администратор:

·        добавление/редактирование/удаление данных о пользователе;

·        добавление/редактирование/удаление материала;

·        изменение базы данных системы.

2)    Преподаватель:

·        добавление/редактирование/удаление материала;

·        добавление/редактирование/удаление практического материала;

·        добавление/редактирование/удаление тестового материала;

·        просмотр статистики выполнения тестов:

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

·        формирование отчета.

3)    Обучаемый:

·        изучение теоретического материала;

·        выполнение практических заданий;

·        выполнение тестов;

·        просмотр результатов своего обучения.

Требования к теоретическому курсу.

 

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

Приложение Б

 

(информационное)

Руководство пользователя

 

 

 

 

Рисунок 1 - программа расчета задач методом потенциалов.

          Рисунок 2 - Количество колонок и строк.

Для того чтобы установить программу на ваш компьютер вам нужно вставить диск с программой CD-ROM, затем нажать ПКМ на папку «Программа», появится контекстное меню и нажмите ЛКМ на строку копировать. Далее следует на рабочем столе нажать ПКМ и выбрать строку вставить. После того когда вы скопируете программу двойным щелчком мыши нажмите на папку с программой. Затем выбрать файл с под названием «pm.exe».

При запуске программы открывается окно «Form1» (рисунок 1), далее нажимаете кнопку «Задать размер» появляется окно «Количество» (рисунок 2). Затем задаете количество строк и столбцов с помощью клавиатуры. Затем заполняете таблицу этим же способом и нажимаете кнопку «Расчитать». Далее ведется расчет который можно увидеть на окне (рисунок 1) в нижней части.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Приложение В

(справочное)

 

Листинг программы

unit p1;

interface

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls, Grids, Math, ComCtrls, ExtCtrls;

const

  fFigSize: integer = 10; // half size

type

  TFigure = class

    public

      x,y: integer;

      num: integer;

      flag: integer; // type

      val: integer;

      p: integer; // при выводе в стринггрид

  end;

  TLine = class

    public

      i1, i2: integer;

      val: integer;

  end;

  TData = class

    public

      Width, Height: integer;

      Arr: array [0..99, 0..99] of integer;

      Left, Top: array[0..99] of integer;

      constructor Create;

      procedure Reset;

      procedure Assign( data: TData );

      procedure AssignLT( data: TData );

      function NoNulls: integer;

      function Min: integer;

  end;

  TEquation = record

    p1, p2: integer;

    sum: integer;

    solved: boolean;

  end;

  TVar = record

    v: integer;

    solved: boolean;

  end;

  TEqSolve = class

    public

      Eq: array [0..100] of TEquation;

      fV: array [0..100] of TVar;

      fEqCount, fVarCount, fH: integer;

      function GetU( index: integer ): TVar;

      function GetV( index: integer ): TVar;

      procedure AddEq( p1, p2, s: integer );

      // Количество уравнений динамическое.Количество переменных можно узнать

      // сразу.

      constructor Create( h, v_c: integer );

      procedure Solve;

      property U[index: integer]: TVar read GetU;

      property V[index: integer]: TVar read GetV;

  end; {}

  TForm1 = class(TForm)

    Memo1: TMemo;

    PageControl1: TPageControl;

    TabSheet1: TTabSheet;

    TabSheet2: TTabSheet;

    Button1: TButton;

    Button3: TButton;

    Button4: TButton;

    Button5: TButton;

    StringGrid1: TStringGrid;

    Button2: TButton;

    Panel1: TPanel;

    PaintBox1: TPaintBox;

    Button6: TButton;

    Button7: TButton;

    Button8: TButton;

    procedure Button1Click(Sender: TObject);

    procedure StringGrid1KeyPress(Sender: TObject; var Key: Char);

    procedure FormCreate(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    procedure Button3Click(Sender: TObject);

    procedure Button4Click(Sender: TObject);

    procedure Button5Click(Sender: TObject);

    procedure Button6Click(Sender: TObject);

    procedure Button8Click(Sender: TObject);

    procedure PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;

      Shift: TShiftState; X, Y: Integer);

    procedure PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,

      Y: Integer);

    procedure PaintBox1MouseUp(Sender: TObject; Button: TMouseButton;

      Shift: TShiftState; X, Y: Integer);

    procedure PaintBox1Paint(Sender: TObject);

    procedure Button7Click(Sender: TObject);

  private

    { Private declarations }

  public

    fData: TData;

    fFigures: TList;

    fLines: TList;

    fMouseState : integer;

    fMouseInd: integer;

    { Public declarations }

    function Check( data: TData ): boolean;

    procedure CalcNorthWest( data: TData; var plan: TData );

    procedure CalcMinEl( data: TData; var plan: TData );

    procedure CalcPotential( data: TData; var plan, x: TData );

    procedure Dump( data: TData; fl: integer );

    function CalcSum( data, plan: TData ): integer;

    procedure ShiftPlan( var data, plan, potential: TData );

    // graphics

    procedure Redraw;

    function IsOver( x,y: integer ): integer;

    procedure AddRemoveLine( i1, i2: integer );

  end;

var

  Form1: TForm1;

implementation

{$R *.dfm}

uses size;

procedure TForm1.Button1Click(Sender: TObject);

var

  index, s: integer;

begin

  if Size_f1.ShowModal () <> mrOk then

    exit;

  s := StrToInt( Size_f1.Cols_e1.Text );

  StringGrid1.ColCount := s + 2;

  for index := 1 to s do

    StringGrid1.Cells[index+1,0] := IntToStr( index );

  s := StrToInt( Size_f1.Rows_e1.Text );

  StringGrid1.RowCount := s + 2;

  for index := 1 to s do

    StringGrid1.Cells[0, index+1] := IntToStr( index );

end;

procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);

begin

  if (StringGrid1.Col = 1) and (StringGrid1.Row = 1) then

    begin

      Key := #0;

      exit;

    end;

  if (Key < '0') or (Key > '9') then

    Key := #0;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

  StringGrid1.Cells[1,0] := 'Магазины';

  StringGrid1.Cells[0,1] := 'Склады';

  StringGrid1.Cells[1,1] := 'Наличие \ Потребность';

  FillChar( fData, sizeof(fData), 0 );

  fFigures := TList.Create;

  fLines := TList.Create;

  fMouseState := 0;

end;

procedure TForm1.Button2Click(Sender: TObject);

function GetInt( x, y: integer ): integer;

begin

  Result := StrToInt( StringGrid1.Cells[ x, y ] );

end;

var

  index, index2, s, old_s: integer;

  data, plan, potential: TData;

begin

  Memo1.Lines.Clear;

  // Прочитать данные из грида

  data := TData.Create;

  data.Width := StringGrid1.ColCount-2;

  data.Height := StringGrid1.RowCount-2;

  for index := 0 to data.Height-1 do

    for index2 := 0 to data.Width-1 do

      data.Arr[index2,index] := GetInt( index2+2, index+2 );

  for index := 0 to data.Width-1 do

    data.Top[index] := GetInt( index+2, 1 );

  for index := 0 to data.Height-1 do

    data.Left[index] := GetInt( 1, index+2 );

  plan := TData.Create;

  potential := TData.Create;

  Memo1.Lines.Add( 'Data' );

  Dump( data, 7 );

  Memo1.Lines.Add( 'Plan:' );

  CalcNorthWest( data, plan );

  Dump( plan, 1 );

  Memo1.Lines.Add( 'Sum: ' + IntToStr( CalcSum(data, plan) ) ); {}

  { CalcMinEl( data, plan );

  Dump( plan, 7 );

  Memo1.Lines.Add( 'Sum: ' + IntToStr( CalcSum(data, plan) ) ); {}

  old_s := 0;

  while (true) do

    begin

      CalcPotential( data, plan, potential );

      Memo1.Lines.Add( 'Potential:' );

      Dump( potential, 1 ); {}

      if (potential.Min >= 0) then

        begin

          Memo1.Lines.Add( 'Finished' );

          break;

        end;

      ShiftPlan( data, plan, potential );

      s := CalcSum(data, plan);

      Memo1.Lines.Add( 'res:' );

      Dump( plan, 1 );

      Memo1.Lines.Add( 'Sum: ' + IntToStr(s) ); {}

      if (old_s = s) then

        break

      else

        old_s := s;

    end;

end;

{ TData }

procedure TData.Assign(data: TData);

var

  index, index2: integer;

begin

  AssignLT( data );

  for index := 0 to Height-1 do

    for index2 := 0 to Width-1 do

      Arr[index2,index] := data.Arr[index2,index];

end;

procedure TData.AssignLT(data: TData);

var

  index: integer;

begin

  Reset;

  Width := data.Width;

  Height := data.Height;

  for index := 0 to Width-1 do

    Top[index] := data.Top[index];

  for index := 0 to Height-1 do

    Left[index] := data.Left[index];

end;

constructor TData.Create;

begin

  Reset;

end;

function TForm1.Check(data: TData): boolean;

Информация о работе Моделирование транспортной задачи