49751

Автоматизация проверки решения задачи

Курсовая

Информатика, кибернетика и программирование

Notepd свободный текстовый редактор с с подсветкой синтаксиса большого количества языков программирования и разметки Во время разработки программы использовались следующие компоненты: Таблица 5 – Компоненты в приложении № п п Компонент Описание 1 EDIT Поле ввода и редактирования информации 2 BUTTON Кнопка с растровым изображением 3 STRINGGRID Таблица для отображения информации 4 COMBOBOX Отображение информации в виде списка строк 5 LBEL Отображение текста на форме Отладка программы Отладка этап разработки компьютерной...

Русский

2014-01-15

259.72 KB

1 чел.

- 3 -

МПТ РГТЭУ.П419-КП.ММ 16 12

СОДЕРЖАНИЕ

ВВЕДЕНИЕ - 3 -

1. ОБЩАЯ ЧАСТЬ - 4 -

1.1. Цель разработки - 4 -

1.2. Средства разработки - 4 -

2. СПЕЦИАЛЬНАЯ ЧАСТЬ - 6 -

2.1. Постановка задачи - 6 -

2.2. Внешняя спецификация - 7 -

2.2.1. Описание задачи - 7 -

2.2.2. Описание входных/выходных данных - 8 -

2.2.3. Методы - 10 -

2.2.4. Тесты - 11 -

2.2.5. Контроль целостности данных - 12 -

2.3. Проектирование - 13 -

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

2.3.2. Структурная схема - 14 -

2.3.3. Схемы пользовательского интерфейса - 15 -

2.3.4. Структура общего окна - 16 -

2.4. Результаты работы программы - 17 -

3. ТЕХНОЛОГИЧЕСКАЯ ЧАСТЬ……………………………………………………………….- 18 -

3.1. Инструментальные средства разработки - 18 -

3.2. Отладка  программы - 18 -

3.3. Защитное программирование - 19 -

3.4. Характеристика программы - 19 -

ЗАКЛЮЧЕНИЕ - 20 -

СПИСОК ИСПОЛЬЗУЕМЫХ МАТЕРИАЛОВ - 21 -

ПРИЛОЖЕНИЕ 1. ТЕКСТ ПРОГРАММЫ - 22 -

ПРИЛОЖЕНИЕ 2 РУКОВОДСТВО  ПОЛЬЗОВАТЕЛЯ. - 46 -

ВВЕДЕНИЕ

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


  1.  ОБЩАЯ ЧАСТЬ
  2.  Цель разработки

Главной целью  приложения «Построение  математических моделей  простейших  экономических  задач» является:

  1.  упростить процесс решения или проверки задачи студенту или преподавателю;
  2.  создание интуитивно понятного интерфейса для преподавателя и студента;  
  3.  иметь представления как данный тип задачи решается и реализуется;
  4.  Средства разработки
    1.  Технические средства

В таблице представлены технические средства, использовавшиеся в процессе разработки.

Таблица 1 – Технические средства

Наименование ТС

Описание

1.

Монитор

Samsung Sync Master S20B300 (LED)

2.

Процессор

Intel Core i5 M460 2.53GHz (AMD64) Famaly 6 Model 37 Stepping 5

3.

Оперативная память

4Gb

4.

Видео память

Intel HD Graphics ; NVidia GeForce 425M

5.

Жесткий диск

Рекомендуемое для Windows XP SP/2 (не менее 10 Гб)

6.

Принтер

Canon MG6200


  1.  Программные средства 

В таблице представлены программные средства, использовавшиеся в процессе разработки.

Таблица 2 – Программные средства

Наименование ПО

Описание

1.

Embarcadero RAD Studio XE2 

Среда разработки программного обеспечения, основной инструмент для разработки программы.

2. 

Notepad++  

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

3.

Microsoft Office Word 2010

текстовый процессор для составления документации.


  1.  СПЕЦИАЛЬНАЯ ЧАСТЬ
  2.  Постановка задачи

Построение  математических моделей  простейших  экономических  задач.

  1.  Входные/выходные данные
  2.  Входными данными являются:
  3.  Ограничения, коэффициенты при свободных переменных в системе ограничений;
  4.  Коэффициенты при свободных переменных в целевой функции:

f(x) min или f(x)  max; 

  1.  Знаки ограничений (переменные после ограничений)
  2.  Выходными данными является:
  3.  Значение целевой функции
  4.  Значения свободных переменных
  5.  Все таблицы решения симплекс-метода
    1.  Требования к проекту
    2.  Функциональные требования

Программа должна содержать следующие части:

  1.  теоретическую часть, поля ввода данных, окна с результатами работы программы;
  2.  в программе должна быть предусмотрено пошаговое выполнение алгоритма с выводами промежуточными результатами
  3.  теоретическая часть должна содержать алгоритмы  решения с примерами решений;
  4.  в программе должно быть предусмотрено контроль ввода данных для корректной работы программы;
  5.  в случае не предвиденных ситуации программа должна выводить окно сообщений с ошибкой и корректно завершить свою работу
  6.  программа должна соответствовать стилю структурного программирования.
  7.  Внешняя спецификация
    1.  Описание задачи

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

АЛГОРИТМ МЕТОДА

  1.  Выбирается максимальное (любое) положительное число в нижней строке симплексной таблицы (кроме столбца ’Bi’).

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

  1.  Допустим, что правило I даёт нижний элемент sk -го столбца (столбец с номером k называется ключевым).

Составляются все неотрицательные отношения элементов первого столбца (столбца свободных членов) к элементам ключевого столбца, другими словами, все отношения , для которых .

Элемент, скажем , который даёт наименьшее отношение , называется разрешающим, а строка с номером называется ключевой.

Если все элементы k-го столбца отрицательны или равны нулю, то задача не имеет оптимального решения (целевая функция L не ограничена снизу).

  1.  Новая таблица строится следующим образом:
  2.  меняются местами обозначения ключевой строки и ключевого столбца (xy и xk), при этом остальные обозначения остаются без изменений;
  3.  разрешающий элемент заменяется обратной величиной

,

где - элементы новой таблицы;

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

 ;

(новая строка получается из старой делением на разрешающий элемент )

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

, , ,  ;

  1.  все остальные элементы таблицы заменяются элементами вида

.

Последнее правило можно записать более коротко:

    .

Далее переходим к п.I алгоритма.

  1.  Описание входных/выходных данных
  2.  Для функции «Условия задачи»:

Таблица 3 – Входные и выходные данные вид операций

Название

Тип

Ограничения

1.

Входные

1.2

Ограничения

Числовой

Цифры

1.3

коэффициенты при свободных переменных в системе ограничений

Числовой

Цифры

2.

Выходные

2.1

Результат

Строка

2.2

Все таблицы решения  симплекс-метода

Числовой

Цифры

  1.  Методы 

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


  1.  Тесты

Тестирование - процесс исследования программного обеспечения с целью получения информации о качестве продукта.

Приложение

Проверка режимов программы

Проверка настроек пользователя

Проверка ядра программы

Интерфейс

 

Рисунок 1 – Схема тестирования приложения

Проверка решения задачи

Вывод результата задачи

Ввод данных

Сообщение о некорректном вводе

Все таблицы решения симплекс-метода

Рисунок 2 – Схема тестирования модуля решение задачи


  1. Контроль целостности данных

В программе обеспечивается защита от некорректного ввода средствами RAD Studio XE2.

Таблица 4 – Контроль целостности данных

№ п/п

Входная ситуация

Аномалия

Реакция программы

1

!»№»»;%:?*(

Некорректный ввод

Запрет некорректного ввода

2

Не правильные условия задачи

Используется более 5 таблиц для решения

Сообщение о неверном условии задачи.

3

Не введены условия задачи

Не правильность решения

Ошибка условия задачи

4

Символы

Некорректный ввод

Запрет некорректного ввода


  1. Проектирование
    1.  Функциональная схема

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

Программа

Ядро

Решение

Теория

Рисунок 3 – Схема доступных информаций

  1.  Структурная схема

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

UMain

Simple

 

Рисунок 4 – Структурная схема приложения


  1.  Схемы пользовательского интерфейса

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

Главное окно приложения

Теория

Решение задачи

Рисунок 5 – Общая схема пользовательского интерфейса


  1.  Структура общего окна

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

Рисунок 6 – Структура общего окна программы


  1.  Результаты работы программы

Проверка работы программы проводилась по тестам и п. 2.2.4. и  п. 2.2.5.

Иллюстрацию работы программы:

Рисунок 7 –  Начальные условия работы программы

Рисунок 8 –  Проверка правильность выполнения

Рисунок 9 –  Проверка правильность ввода данных

Проверка программы показала, что она соответствует предъявленным требованиям.

Более подробно работа программы представлено см. Приложение 2 (Руководство пользователя).

  1.  ТЕХНОЛОГИЧЕСКАЯ ЧАСТЬ
  2.  Инструментальные средства разработки
  3.  Microsoft Office Word 2010 – текстовый процессор для составления документации.

  1.  Embarcadero RAD Studio XE2 - интегрированная среда разработки программного обеспечения, основной инструмент для разработки программы.
  2.  Notepad++  свободный текстовый редактор с  с подсветкой синтаксиса большого количества языков программирования и разметки

 Во время разработки программы использовались следующие компоненты:

Таблица 5 – Компоненты в  приложении

№ п/п

Компонент

Описание

1

EDIT

Поле ввода и редактирования информации

2

BUTTON

Кнопка с растровым изображением

3

STRINGGRID

Таблица для отображения информации

4

COMBOBOX

Отображение информации в виде списка строк

5

LABEL

Отображение текста на форме

  1.  Отладка  программы

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

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

Программные инструменты, использовавшиеся для поиска ошибок

  1.  if() – Условный оператор для проверки правильности решения;
  2.  showmessage() – Выводит информацию о переменной;
  3.  tryexcept – Пытается выполнить действие, в случае ошибки проводит действия после except. В случае успешного выполнения действий, операции после except не выполняются.
  4.  Защитное программирование

 Защитное программирование  – это такой стиль программирования, при использовании которого ошибки легко идентифицируются и обнаруживаются программистом.

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

  1.  Характеристика программы

Таблица 6 – Список модулей

Наименование модуля

Назначение

Размер в строках

1.

UnitMain.pas

Главная форма программы

611

Всего:

611


ЗАКЛЮЧЕНИЕ

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

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

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


СПИСОК ИСПОЛЬЗУЕМЫХ МАТЕРИАЛОВ

  1.  Методический материал по выполнению курсового проектирования, составитель Варламова Л.А. 2009г.
  2.  Единая система программной документации М.: Издательство стандартов, 1985-128 с.
  3.  Лекции по предмету “Математические методы”, преподаватель Волкова Г.Ю.


ПРИЛОЖЕНИЕ 1.

ТЕКСТ ПРОГРАММЫ

ВВЕДЕНИЕ

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

При разработке программы использовалась среда разработки Embarcadero Rad Studio XE2 (Delphi XE2)

  1.  Перечень используемых библиотек

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

Dialogs, StdCtrls, ActnList, Grids, ComCtrls;

  1.  Перечень модулей

№ п/п

Имя модуля

Назначение

1

UnitMain.pas

Главная форма программы

Таблица 7 – Список модулей

  1.  Листинг модулей

//---------------UnitMain.pas---------------//

// Главная форма страницы, решение задачи   //

//               а так же форма с теорией   //

// Дата разработки 25.12.2012               //

// Разработал: Кривяков А.С.                //

// Группа: П-419                            //

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

unit UnitMain;

interface

uses

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

 Dialogs, StdCtrls, ActnList, Grids, ComCtrls;

type

 TFormMain = class(TForm)

   PageControl1: TPageControl;

   TabSheet1: TTabSheet;

   Standart_Text_1: TLabel;

   Label1: TLabel;

   Label2: TLabel;

   Label4: TLabel;

   Label3: TLabel;

   Label5: TLabel;

   Label6: TLabel;

   Label7: TLabel;

   Label8: TLabel;

   Label9: TLabel;

   Label10: TLabel;

   Label11: TLabel;

   Label12: TLabel;

   Label13: TLabel;

   Label17: TLabel;

   Label14: TLabel;

   Label15: TLabel;

   Label16: TLabel;

   Label18: TLabel;

   Label19: TLabel;

   Label20: TLabel;

   Label21: TLabel;

   Label22: TLabel;

   Label23: TLabel;

   Label24: TLabel;

   Label25: TLabel;

   Label26: TLabel;

   Label27: TLabel;

   Label28: TLabel;

   Edit1: TEdit;

   Edit2: TEdit;

   Edit3: TEdit;

   ComboBox1: TComboBox;

   Edit4: TEdit;

   Edit5: TEdit;

   Edit6: TEdit;

   Edit7: TEdit;

   Edit8: TEdit;

   Edit9: TEdit;

   Edit10: TEdit;

   Edit11: TEdit;

   Edit12: TEdit;

   Edit13: TEdit;

   Edit14: TEdit;

   Edit15: TEdit;

   ComboBox2: TComboBox;

   ComboBox3: TComboBox;

   ComboBox4: TComboBox;

   Button1: TButton;

   Edit16: TEdit;

   Edit17: TEdit;

   Edit18: TEdit;

   ComboBox5: TComboBox;

   Edit19: TEdit;

   Button2: TButton;

   StringGrid1: TStringGrid;

   Button3: TButton;

   Button4: TButton;

   StringGrid2: TStringGrid;

   TabSheet2: TTabSheet;

   procedure FormCreate(Sender: TObject);

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

   procedure Button1Click(Sender: TObject);

   procedure Button2Click(Sender: TObject);

   procedure Button3Click(Sender: TObject);

   procedure Button4Click(Sender: TObject);

 private

   indicator: boolean;

   Answer: string;

   NoAnswer: integer;

 public

   { Public declarations }

 end;

var

 FormMain: TFormMain;

implementation

{$R *.dfm}

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

procedure TFormMain.FormCreate(Sender: TObject);

begin

end;

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

procedure TFormMain.Edit1KeyPress(Sender: TObject;

 var Key: Char);

begin

if (not((Sender as TEdit).Text='')) then

  begin

  if (key='-') then

     if (((pos (',', (Sender as TEdit).Text))<(pos('-', (Sender as TEdit).Text))) and (pos (',', (Sender as TEdit).Text)<>0)) then

        begin

        MessageBox (Handle, PChar('Неверный формат числа, действие невозможно'), PChar('Ошибка'), MB_ICONERROR+MB_OK);

        Key:=#0;

        end else (Sender as TEdit).Text:=FloatToStr(StrToFloat((Sender as TEdit).Text)*(-1));

  if (key=',') then

     if (pos(',', (Sender as TEdit).Text)<>0) then key:=#0;

  if (not(key in ['0'..'9', #8, ','])) then key:=#0;

  end else if (not(key in ['0'..'9', #8, ','])) then key:=#0;

end;

//////////////Переход к ОЗЛП///////////////////////////////

procedure TFormMain.Button1Click(Sender: TObject);

begin

Label17.Visible:=true;

case ComboBox1.ItemIndex of

    0: begin

       Label18.Caption:='F= '+Edit1.Text+'x1';

       if (StrToFloat(Edit2.Text)<0) then

          Label18.Caption:=Label18.Caption+Edit2.Text+'x2 '

          else Label18.Caption:=Label18.Caption+'+'+Edit2.Text+'x2 ';

       if (StrToFloat(Edit3.Text)<0) then

          Label18.Caption:=Label18.Caption+Edit3.Text+'x3 '

          else Label18.Caption:=Label18.Caption+'+'+Edit3.Text+'x3 ';

       Label18.Caption:=Label18.Caption+'->min';

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

       Label20.Caption:=Edit8.Text+'x1 ';

       if (StrToFloat(Edit9.Text)<0) then

          Label20.Caption:=label20.Caption+Edit9.Text+'x2 '

          else Label20.Caption:=label20.Caption+'+'+Edit9.Text+'x2 ';

       if (StrToFloat(Edit10.Text)<0) then

          Label20.Caption:=label20.Caption+Edit10.Text+'x3 '

          else Label20.Caption:=label20.Caption+'+'+Edit10.Text+'x3 ';

       if (ComboBox3.ItemIndex=0) then

          Label20.Caption:=label20.Caption+'-x5 ='+Edit11.Text

          else Label20.Caption:=label20.Caption+'+x5 ='+Edit11.Text;

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

       Label19.Caption:=Edit4.Text+'x1 ';

       if (StrToFloat(Edit5.Text)<0) then

          Label19.Caption:=label19.Caption+Edit5.Text+'x2 '

          else Label19.Caption:=label19.Caption+'+'+Edit5.Text+'x2 ';

       if (StrToFloat(Edit6.Text)<0) then

          Label19.Caption:=label19.Caption+Edit6.Text+'x3 '

          else Label19.Caption:=label19.Caption+'+'+Edit6.Text+'x3 ';

       if (ComboBox2.ItemIndex=0) then

          Label19.Caption:=label19.Caption+'-x4 ='+Edit7.Text

          else Label19.Caption:=label19.Caption+'+x4 ='+Edit7.Text;

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

       Label21.Caption:=Edit12.Text+'x1 ';

       if (StrToFloat(Edit13.Text)<0) then

          Label21.Caption:=label21.Caption+Edit13.Text+'x2 '

          else Label21.Caption:=label21.Caption+'+'+Edit13.Text+'x2 ';

       if (StrToFloat(Edit14.Text)<0) then

          Label21.Caption:=label21.Caption+Edit14.Text+'x3 '

          else Label21.Caption:=label21.Caption+'+'+Edit14.Text+'x3 ';

       if (ComboBox4.ItemIndex=0) then

          Label21.Caption:=label21.Caption+'-x6 ='+Edit15.Text

          else Label21.Caption:=label21.Caption+'+x6 ='+Edit15.Text;

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

       Label22.Caption:=Edit16.Text+'x1 ';

       if (StrToFloat(Edit17.Text)<0) then

          Label22.Caption:=label22.Caption+Edit17.Text+'x2 '

          else Label22.Caption:=label22.Caption+'+'+Edit17.Text+'x2 ';

       if (StrToFloat(Edit18.Text)<0) then

          Label22.Caption:=label22.Caption+Edit18.Text+'x3 '

          else Label22.Caption:=label22.Caption+'+'+Edit18.Text+'x3 ';

       if (ComboBox5.ItemIndex=0) then

          Label22.Caption:=label22.Caption+'-x7 ='+Edit19.Text

          else Label22.Caption:=label22.Caption+'+x7 ='+Edit19.Text;

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

       end;

    1: begin

       Label18.Caption:='F= '+FloatToStr(StrToFloat(Edit1.Text)*(-1))+'x1 ';

       if (StrToFloat(Edit2.Text)>0) then

          Label18.Caption:=Label18.Caption+FloatToStr(StrToFloat(Edit2.Text)*(-1))+'x2 '

          else Label18.Caption:=Label18.Caption+'+'+FloatToStr(StrToFloat(Edit2.Text)*(-1))+'x2 ';

       if (StrToFloat(Edit3.Text)>0) then

          Label18.Caption:=Label18.Caption+FloatToStr(StrToFloat(Edit3.Text)*(-1))+'x3 '

          else Label18.Caption:=Label18.Caption+'+'+FloatToStr(StrToFloat(Edit3.Text)*(-1))+'x3 ';

       Label18.Caption:=Label18.Caption+'->min';

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

       Label19.Caption:=FloatToStr(StrToFloat(Edit4.Text)*(-1))+'x1';

       if (StrToFloat(Edit5.Text)>0) then

          Label19.Caption:=Label19.Caption+FloatToStr(StrToFloat(Edit5.Text)*(-1))+'x2 '

          else Label19.Caption:=Label19.Caption+'+'+FloatToStr(StrToFloat(Edit5.Text)*(-1))+'x2 ';

       if (StrToFloat(Edit6.Text)>0) then

          Label19.Caption:=Label19.Caption+FloatToStr(StrToFloat(Edit6.Text)*(-1))+'x3 '

          else Label19.Caption:=Label19.Caption+'+'+FloatToStr(StrToFloat(Edit6.Text)*(-1))+'x3 ';

       if (ComboBox2.ItemIndex=0) then

          Label19.Caption:=label19.Caption+'-x4 ='+Edit7.Text

          else Label19.Caption:=label19.Caption+'+x4 ='+Edit7.Text;

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

       Label20.Caption:=FloatToStr(StrToFloat(Edit8.Text)*(-1))+'x1';

       if (StrToFloat(Edit9.Text)>0) then

          Label20.Caption:=Label20.Caption+FloatToStr(StrToFloat(Edit9.Text)*(-1))+'x2 '

          else Label20.Caption:=Label20.Caption+'+'+FloatToStr(StrToFloat(Edit9.Text)*(-1))+'x2 ';

       if (StrToFloat(Edit10.Text)>0) then

          Label20.Caption:=Label20.Caption+FloatToStr(StrToFloat(Edit10.Text)*(-1))+'x3 '

          else Label20.Caption:=Label20.Caption+'+'+FloatToStr(StrToFloat(Edit10.Text)*(-1))+'x3 ';

       if (ComboBox3.ItemIndex=0) then

          Label20.Caption:=label20.Caption+'-x5 ='+Edit11.Text

          else Label20.Caption:=label20.Caption+'+x5 ='+Edit11.Text;

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

       Label21.Caption:=FloatToStr(StrToFloat(Edit12.Text)*(-1))+'x1';

       if (StrToFloat(Edit13.Text)>0) then

          Label21.Caption:=Label21.Caption+FloatToStr(StrToFloat(Edit13.Text)*(-1))+'x2 '

          else Label21.Caption:=Label21.Caption+'+'+FloatToStr(StrToFloat(Edit13.Text)*(-1))+'x2 ';

       if (StrToFloat(Edit14.Text)>0) then

          Label21.Caption:=Label21.Caption+FloatToStr(StrToFloat(Edit14.Text)*(-1))+'x3 '

          else Label21.Caption:=Label21.Caption+'+'+FloatToStr(StrToFloat(Edit14.Text)*(-1))+'x3 ';

       if (ComboBox4.ItemIndex=0) then

          Label21.Caption:=label21.Caption+'-x6 ='+Edit15.Text

          else Label21.Caption:=label21.Caption+'+x6 ='+Edit15.Text;

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

       Label22.Caption:=FloatToStr(StrToFloat(Edit16.Text)*(-1))+'x1';

       if (StrToFloat(Edit17.Text)>0) then

          Label22.Caption:=Label22.Caption+FloatToStr(StrToFloat(Edit17.Text)*(-1))+'x2 '

          else Label22.Caption:=Label22.Caption+'+'+FloatToStr(StrToFloat(Edit17.Text)*(-1))+'x2 ';

       if (StrToFloat(Edit18.Text)>0) then

          Label22.Caption:=Label22.Caption+FloatToStr(StrToFloat(Edit18.Text)*(-1))+'x3 '

          else Label22.Caption:=Label22.Caption+'+'+FloatToStr(StrToFloat(Edit18.Text)*(-1))+'x3 ';

       if (ComboBox5.ItemIndex=0) then

          Label22.Caption:=label22.Caption+'-x7 ='+Edit19.Text

          else Label22.Caption:=label22.Caption+'+x7 ='+Edit19.Text;

       end;

    end;

Button2.Enabled:=true;

end;

/////////////////Получение базисных переменных///////////////////////////////////////

procedure TFormMain.Button2Click(Sender: TObject);

begin

Label23.Visible:=true;

Label24.Caption:='F= 0 - (';

Label25.Caption:='x4= ';

Label26.Caption:='x5= ';

Label27.Caption:='x6= ';

Label28.Caption:='x7= ';

case ComboBox1.ItemIndex of

    0: begin

       Label24.Caption:=Label24.Caption+Edit1.Text+'x1 ';

       if (StrToFloat(Edit2.Text)<0) then

          Label24.Caption:=Label24.Caption+Edit2.Text+'x2 '

          else Label24.Caption:=Label24.Caption+'+'+Edit2.Text+'x2 ';

       if (StrToFloat(Edit3.Text)<0) then

          Label24.Caption:=Label24.Caption+Edit3.Text+'x3)'

          else Label24.Caption:=Label24.Caption+'+'+Edit3.Text+'x3)';

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

       if (ComboBox2.ItemIndex=0) then

          begin

          Label25.Caption:=Label25.Caption+FloatToStr(StrToFloat(Edit7.Text)*(-1))+'- (';

          Label25.Caption:=Label25.Caption+FloatToStr(StrToFloat(Edit4.Text)*(-1))+'x1 ';

          end else begin

                   Label25.Caption:=Label25.Caption+Edit7.Text+'- (';

                   Label25.Caption:=Label25.Caption+Edit4.Text+'x1 ';

                   end;

       if (StrToFloat(Edit5.Text)<0) then Label25.Caption:=Label25.Caption+Edit5.Text+'x2 '

          else Label25.Caption:=Label25.Caption+'+'+Edit5.Text+'x2 ';

       if (StrToFloat(Edit6.Text)<0) then Label25.Caption:=Label25.Caption+Edit6.Text+'x3)'

          else Label25.Caption:=Label25.Caption+'+'+Edit6.Text+'x3)';

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

       if (ComboBox3.ItemIndex=0) then

          begin

          Label26.Caption:=Label26.Caption+FloatToStr(StrToFloat(Edit11.Text)*(-1))+'- (';

          Label26.Caption:=Label26.Caption+FloatToStr(StrToFloat(Edit8.Text)*(-1))+'x1 ';

          end else begin

                   Label26.Caption:=Label26.Caption+Edit11.Text+'- (';

                   Label26.Caption:=Label26.Caption+Edit8.Text+'x1 ';

                   end;

       if (StrToFloat(Edit9.Text)<0) then Label26.Caption:=Label26.Caption+Edit9.Text+'x2 '

          else Label26.Caption:=Label26.Caption+'+'+Edit9.Text+'x2 ';

       if (StrToFloat(Edit10.Text)<0) then Label26.Caption:=Label26.Caption+Edit10.Text+'x3)'

          else Label26.Caption:=Label26.Caption+'+'+Edit10.Text+'x3)';

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

       if (ComboBox4.ItemIndex=0) then

          begin

          Label27.Caption:=Label27.Caption+FloatToStr(StrToFloat(Edit15.Text)*(-1))+'- (';

          Label27.Caption:=Label27.Caption+FloatToStr(StrToFloat(Edit12.Text)*(-1))+'x1 ';

          end else begin

                   Label27.Caption:=Label27.Caption+Edit15.Text+'- (';

                   Label27.Caption:=Label27.Caption+Edit12.Text+'x1 ';

                   end;

       if (StrToFloat(Edit13.Text)<0) then Label27.Caption:=Label27.Caption+Edit13.Text+'x2 '

          else Label27.Caption:=Label27.Caption+'+'+Edit13.Text+'x2 ';

       if (StrToFloat(Edit14.Text)<0) then Label27.Caption:=Label27.Caption+Edit14.Text+'x3)'

          else Label27.Caption:=Label27.Caption+'+'+Edit14.Text+'x3)';

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

       if (ComboBox5.ItemIndex=0) then

          begin

          Label28.Caption:=Label28.Caption+FloatToStr(StrToFloat(Edit19.Text)*(-1))+'- (';

          Label28.Caption:=Label28.Caption+FloatToStr(StrToFloat(Edit16.Text)*(-1))+'x1 ';

          end else begin

                   Label28.Caption:=Label28.Caption+Edit19.Text+'- (';

                   Label28.Caption:=Label28.Caption+Edit16.Text+'x1 ';

                   end;

       if (StrToFloat(Edit17.Text)<0) then Label28.Caption:=Label28.Caption+Edit17.Text+'x2 '

          else Label28.Caption:=Label28.Caption+'+'+Edit17.Text+'x2 ';

       if (StrToFloat(Edit18.Text)<0) then Label28.Caption:=Label28.Caption+Edit18.Text+'x3)'

          else Label28.Caption:=Label28.Caption+'+'+Edit18.Text+'x3)';

       end;

    1: begin

       Label24.Caption:=Label24.Caption+FloatToStr(StrToFloat(Edit1.Text)*(-1))+'x1 ';

       if (StrToFloat(Edit2.Text)<=0) then

          Label24.Caption:=Label24.Caption+'+'+FloatToStr(StrToFloat(Edit2.Text)*(-1))+'x2 '

          else Label24.Caption:=Label24.Caption+FloatToStr(StrToFloat(Edit2.Text)*(-1))+'x2 ';

       if (StrToFloat(Edit3.Text)<=0) then

          Label24.Caption:=Label24.Caption+'+'+FloatToStr(StrToFloat(Edit3.Text)*(-1))+'x3)'

          else Label24.Caption:=Label24.Caption+FloatToStr(StrToFloat(Edit3.Text)*(-1))+'x3)';

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

       if (ComboBox2.ItemIndex=0) then

          begin

          Label25.Caption:=Label25.Caption+FloatToStr(StrToFloat(Edit7.Text)*(-1))+'- (';

          Label25.Caption:=Label25.Caption+Edit4.Text+'x1 ';

          end else begin

                   Label25.Caption:=Label25.Caption+Edit7.Text+'- (';

                   Label25.Caption:=Label25.Caption+FloatToStr(StrToFloat(Edit4.Text)*(-1))+'x1 ';

                   end;

       if (StrToFloat(Edit5.Text)<=0) then Label25.Caption:=Label25.Caption+'+'+FloatToStr(StrToFloat(Edit5.Text)*(-1))+'x2 '

          else Label25.Caption:=Label25.Caption+FloatToStr(StrToFloat(Edit5.Text)*(-1))+'x2 ';

       if (StrToFloat(Edit6.Text)<=0) then Label25.Caption:=Label25.Caption+'+'+FloatToStr(StrToFloat(Edit6.Text)*(-1))+'x3)'

          else Label25.Caption:=Label25.Caption+FloatToStr(StrToFloat(Edit6.Text)*(-1))+'x3)';

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

       if (ComboBox3.ItemIndex=0) then

          begin

          Label26.Caption:=Label26.Caption+FloatToStr(StrToFloat(Edit11.Text)*(-1))+'- (';

          Label26.Caption:=Label26.Caption+Edit8.Text+'x1 ';

          end else begin

                   Label26.Caption:=Label26.Caption+Edit11.Text+'- (';

                   Label26.Caption:=Label26.Caption+FloatToStr(StrToFloat(Edit8.Text)*(-1))+'x1 ';

                   end;

       if (StrToFloat(Edit9.Text)<=0) then Label26.Caption:=Label26.Caption+'+'+FloatToStr(StrToFloat(Edit9.Text)*(-1))+'x2 '

          else Label26.Caption:=Label26.Caption+FloatToStr(StrToFloat(Edit9.Text)*(-1))+'x2 ';

       if (StrToFloat(Edit10.Text)<=0) then Label26.Caption:=Label26.Caption+'+'+FloatToStr(StrToFloat(Edit10.Text)*(-1))+'x3)'

          else Label26.Caption:=Label26.Caption+FloatToStr(StrToFloat(Edit10.Text)*(-1))+'x3)';

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

       if (ComboBox4.ItemIndex=0) then

          begin

          Label27.Caption:=Label27.Caption+FloatToStr(StrToFloat(Edit15.Text)*(-1))+'- (';

          Label27.Caption:=Label27.Caption+Edit12.Text+'x1 ';

          end else begin

                   Label27.Caption:=Label27.Caption+Edit15.Text+'- (';

                   Label27.Caption:=Label27.Caption+FloatToStr(StrToFloat(Edit12.Text)*(-1))+'x1 ';

                   end;

       if (StrToFloat(Edit13.Text)<=0) then Label27.Caption:=Label27.Caption+'+'+FloatToStr(StrToFloat(Edit13.Text)*(-1))+'x2 '

          else Label27.Caption:=Label27.Caption+FloatToStr(StrToFloat(Edit13.Text)*(-1))+'x2 ';

       if (StrToFloat(Edit14.Text)<=0) then Label27.Caption:=Label27.Caption+'+'+FloatToStr(StrToFloat(Edit14.Text)*(-1))+'x3)'

          else Label27.Caption:=Label27.Caption+FloatToStr(StrToFloat(Edit14.Text)*(-1))+'x3)';

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

       if (ComboBox5.ItemIndex=0) then

          begin

          Label28.Caption:=Label28.Caption+FloatToStr(StrToFloat(Edit19.Text)*(-1))+'- (';

          Label28.Caption:=Label28.Caption+Edit16.Text+'x1 ';

          end else begin

                   Label28.Caption:=Label28.Caption+Edit19.Text+'- (';

                   Label28.Caption:=Label28.Caption+FloatToStr(StrToFloat(Edit16.Text)*(-1))+'x1 ';

                   end;

       if (StrToFloat(Edit17.Text)<=0) then Label28.Caption:=Label28.Caption+'+'+FloatToStr(StrToFloat(Edit17.Text)*(-1))+'x2 '

          else Label28.Caption:=Label28.Caption+FloatToStr(StrToFloat(Edit17.Text)*(-1))+'x2 ';

       if (StrToFloat(Edit18.Text)<=0) then Label28.Caption:=Label28.Caption+'+'+FloatToStr(StrToFloat(Edit18.Text)*(-1))+'x3)'

          else Label28.Caption:=Label28.Caption+FloatToStr(StrToFloat(Edit18.Text)*(-1))+'x3)';

       end;

    end;

Button3.Enabled:=true;

end;

////////////////////Составление симлексной таблицы/////////////////////////////

procedure TFormMain.Button3Click(Sender: TObject);

var i:integer;

begin

indicator:=false;

NoAnswer:=0;

StringGrid1.Visible:=true;

StringGrid1.Cells[1, 0]:='Bi';

StringGrid1.Cells[2, 0]:='x1';

StringGrid1.Cells[3, 0]:='x2';

StringGrid1.Cells[4, 0]:='x3';

StringGrid1.Cells[0, 1]:='x4';

StringGrid1.Cells[0, 2]:='x5';

StringGrid1.Cells[0, 3]:='x6';

StringGrid1.Cells[0, 4]:='x7';

StringGrid1.Cells[0, 5]:='F*';

case ComboBox1.ItemIndex of

    0: begin

       StringGrid1.Cells[1, 5]:='0';

       StringGrid1.Cells[2, 5]:=Edit1.Text;

       StringGrid1.Cells[3, 5]:=Edit2.Text;

       StringGrid1.Cells[4, 5]:=Edit3.Text;

       StringGrid1.Cells[3, 1]:=Edit5.Text;

       StringGrid1.Cells[4, 1]:=Edit6.Text;

       StringGrid1.Cells[3, 2]:=Edit9.Text;

       StringGrid1.Cells[4, 2]:=Edit10.Text;

       StringGrid1.Cells[3, 3]:=Edit13.Text;

       StringGrid1.Cells[4, 3]:=Edit14.Text;

       StringGrid1.Cells[3, 4]:=Edit17.Text;

       StringGrid1.Cells[4, 4]:=Edit18.Text;

       case ComboBox2.ItemIndex of

            0: begin

               StringGrid1.Cells[2, 1]:=FloatToStr(StrToFloat(Edit4.Text)*(-1));

               StringGrid1.Cells[1, 1]:=FloatToStr(StrToFloat(Edit7.Text)*(-1));

               end;

            1: begin

               StringGrid1.Cells[2, 1]:=Edit4.Text;

               StringGrid1.Cells[1, 1]:=Edit7.Text;

               end;

            end;

       case ComboBox3.ItemIndex of

            0: begin

               StringGrid1.Cells[2, 2]:=FloatToStr(StrToFloat(Edit8.Text)*(-1));

               StringGrid1.Cells[1, 2]:=FloatToStr(StrToFloat(Edit11.Text)*(-1));

               end;

            1: begin

               StringGrid1.Cells[2, 2]:=Edit8.Text;

               StringGrid1.Cells[1, 2]:=Edit11.Text;

               end;

            end;

       case ComboBox4.ItemIndex of

            0: begin

               StringGrid1.Cells[2, 3]:=FloatToStr(StrToFloat(Edit12.Text)*(-1));

               StringGrid1.Cells[1, 3]:=FloatToStr(StrToFloat(Edit15.Text)*(-1));

               end;

            1: begin

               StringGrid1.Cells[2, 3]:=Edit12.Text;

               StringGrid1.Cells[1, 3]:=Edit15.Text;

               end;

            end;

       case ComboBox5.ItemIndex of

            0: begin

               StringGrid1.Cells[2, 4]:=FloatToStr(StrToFloat(Edit16.Text)*(-1));

               StringGrid1.Cells[1, 4]:=FloatToStr(StrToFloat(Edit19.Text)*(-1));

               end;

            1: begin

               StringGrid1.Cells[2, 4]:=Edit16.Text;

               StringGrid1.Cells[1, 4]:=Edit19.Text;

               end;

            end;

       end;

    1: begin

       StringGrid1.Cells[1, 5]:='0';

       StringGrid1.Cells[2, 5]:=FloatToStr(StrToFloat(Edit1.Text)*(-1));

       StringGrid1.Cells[3, 5]:=FloatToStr(StrToFloat(Edit2.Text)*(-1));

       StringGrid1.Cells[4, 5]:=FloatToStr(StrToFloat(Edit3.Text)*(-1));

       StringGrid1.Cells[3, 1]:=FloatToStr(StrToFloat(Edit5.Text)*(-1));

       StringGrid1.Cells[4, 1]:=FloatToStr(StrToFloat(Edit6.Text)*(-1));

       StringGrid1.Cells[3, 2]:=FloatToStr(StrToFloat(Edit9.Text)*(-1));

       StringGrid1.Cells[4, 2]:=FloatToStr(StrToFloat(Edit10.Text)*(-1));

       StringGrid1.Cells[3, 3]:=FloatToStr(StrToFloat(Edit13.Text)*(-1));

       StringGrid1.Cells[4, 3]:=FloatToStr(StrToFloat(Edit14.Text)*(-1));

       StringGrid1.Cells[3, 4]:=FloatToStr(StrToFloat(Edit17.Text)*(-1));

       StringGrid1.Cells[4, 4]:=FloatToStr(StrToFloat(Edit18.Text)*(-1));

       case ComboBox2.ItemIndex of

            0: begin

               StringGrid1.Cells[2, 1]:=Edit4.Text;

               StringGrid1.Cells[1, 1]:=FloatToStr(StrToFloat(Edit7.Text)*(-1));

               end;

            1: begin

               StringGrid1.Cells[2, 1]:=FloatToStr(StrToFloat(Edit4.Text)*(-1));

               StringGrid1.Cells[1, 1]:=Edit7.Text;

               end;

            end;

       case ComboBox3.ItemIndex of

            0: begin

               StringGrid1.Cells[2, 2]:=Edit8.Text;

               StringGrid1.Cells[1, 2]:=FloatToStr(StrToFloat(Edit11.Text)*(-1));

               end;

            1: begin

               StringGrid1.Cells[2, 2]:=FloatToStr(StrToFloat(Edit8.Text)*(-1));

               StringGrid1.Cells[1, 2]:=Edit11.Text;

               end;

            end;

       case ComboBox4.ItemIndex of

            0: begin

               StringGrid1.Cells[2, 3]:=Edit12.Text;

               StringGrid1.Cells[1, 3]:=FloatToStr(StrToFloat(Edit15.Text)*(-1));

               end;

            1: begin

               StringGrid1.Cells[2, 3]:=FloatToStr(StrToFloat(Edit12.Text)*(-1));

               StringGrid1.Cells[1, 3]:=Edit15.Text;

               end;

            end;

       case ComboBox5.ItemIndex of

            0: begin

               StringGrid1.Cells[2, 4]:=Edit16.Text;

               StringGrid1.Cells[1, 4]:=FloatToStr(StrToFloat(Edit19.Text)*(-1));

               end;

            1: begin

               StringGrid1.Cells[2, 4]:=FloatToStr(StrToFloat(Edit16.Text)*(-1));

               StringGrid1.Cells[1, 4]:=Edit19.Text;

               end;

            end;

       end;

    end;

for i:=2 to 4 do

   if StrToFloat(StringGrid1.Cells[i, 5])>0 then indicator:=true;

if (indicator=false) and (StrToFloat(StringGrid1.Cells[1, 5])=0) then MessageBox (Handle, PChar('Задача решена, исходная функция является оптимальной'), PChar('Ответ'), MB_ICONINFORMATION+MB_OK)

                  else Button4.Enabled:=true;

end;

///////////////////Зацикленное решение симплексной таблицы/////////////////////////////////

procedure TFormMain.Button4Click(Sender: TObject);

var i, j, SelCol, SelRow: integer;

   ValCol, ValRow: real;

begin

try    //пробуем выполнить действия по решению задачи

indicator:=false;

StringGrid2.Visible:=true;

SelCol:=2;

ValCol:=StrToFloat(StringGrid1.Cells[2, 5]);

for i:=3 to 4 do

   if (StrToFloat(StringGrid1.Cells[i, 5])>0)and(StrToFloat(StringGrid1.Cells[i, 5])>ValCol) then

      begin

      SelCol:=i;               //поиск опорного столбца

      ValCol:=StrToFloat(StringGrid1.Cells[i, 5]);

      end;

SelRow:=1;

ValRow:=StrToFloat(StringGrid1.Cells[1, 1])/StrToFloat(StringGrid1.Cells[SelCol, 1]);

for i:=2 to 4 do

   if (StrToFloat(StringGrid1.Cells[1, i])/StrToFloat(StringGrid1.Cells[SelCol, i]))<ValRow then

      begin

      ValRow:=StrToFloat(StringGrid1.Cells[1, i])/StrToFloat(StringGrid1.Cells[SelCol, i]);        //поиск опорной строки

      SelRow:=i;

      end;

/////////////////Составление второй таблицы/////////////////

for i:=0 to SelCol-1 do

   StringGrid2.Cells[i, 0]:=StringGrid1.Cells[i, 0];

StringGrid2.Cells[SelCol, 0]:=StringGrid1.Cells[0, SelRow];

for i:=SelCol+1 to StringGrid1.ColCount-1 do

   StringGrid2.Cells[i, 0]:=StringGrid1.Cells[i, 0];

for i:=0 to SelRow-1 do

   StringGrid2.Cells[0, i]:=StringGrid1.Cells[0, i];

StringGrid2.Cells[0, SelRow]:=StringGrid1.Cells[SelCol, 0];

for i:=SelRow+1 to StringGrid1.RowCount-1 do

   StringGrid2.Cells[0, i]:=StringGrid1.Cells[0, i];

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

StringGrid2.Cells[SelCol, SelRow]:=FloatToStr(1/StrToFloat(StringGrid1.Cells[SelCol, SelRow]));

for i:=1 to SelRow-1 do

   StringGrid2.Cells[SelCol, i]:=FloatToStr(StrToFloat(StringGrid1.Cells[SelCol, i])/StrToFloat(StringGrid1.Cells[SelCol, SelRow])*(-1));

for i:=SelRow+1 to StringGrid1.RowCount-1 do

   StringGrid2.Cells[SelCol, i]:=FloatToStr(StrToFloat(StringGrid1.Cells[SelCol, i])/StrToFloat(StringGrid1.Cells[SelCol, SelRow])*(-1));

for i:=1 to SelCol-1 do

   StringGrid2.Cells[i, SelRow]:=FloatToStr(StrToFloat(StringGrid1.Cells[i, SelRow])/StrToFloat(StringGrid1.Cells[SelCol, SelRow]));

for i:=SelCol+1 to StringGrid1.ColCount-1 do

   StringGrid2.Cells[i, SelRow]:=FloatToStr(StrToFloat(StringGrid1.Cells[i, SelRow])/StrToFloat(StringGrid1.Cells[SelCol, SelRow]));

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

for i:=1 to SelRow-1 do

   for j:=1 to SelCol-1 do

       StringGrid2.Cells [j, i]:=FloatToStr(StrToFloat(StringGrid1.Cells[j, i])-StrToFloat(StringGrid1.Cells[SelCol, i])*StrToFloat(StringGrid1.Cells[j, SelRow])/StrToFloat(StringGrid1.Cells[SelCol, SelRow]));

for i:=SelRow+1 to StringGrid1.RowCount-1 do

   for j:=1 to SelCol-1 do

       StringGrid2.Cells [j, i]:=FloatToStr(StrToFloat(StringGrid1.Cells[j, i])-StrToFloat(StringGrid1.Cells[SelCol, i])*StrToFloat(StringGrid1.Cells[j, SelRow])/StrToFloat(StringGrid1.Cells[SelCol, SelRow]));

for i:=1 to SelRow-1 do

   for j:=SelCol+1 to StringGrid1.ColCount-1 do

       StringGrid2.Cells [j, i]:=FloatToStr(StrToFloat(StringGrid1.Cells[j, i])-StrToFloat(StringGrid1.Cells[SelCol, i])*StrToFloat(StringGrid1.Cells[j, SelRow])/StrToFloat(StringGrid1.Cells[SelCol, SelRow]));

for i:=SelRow+1 to StringGrid1.RowCount-1 do

   for j:=SelCol+1 to StringGrid1.ColCount-1 do

       StringGrid2.Cells [j, i]:=FloatToStr(StrToFloat(StringGrid1.Cells[j, i])-StrToFloat(StringGrid1.Cells[SelCol, i])*StrToFloat(StringGrid1.Cells[j, SelRow])/StrToFloat(StringGrid1.Cells[SelCol, SelRow]));

//////////////////Проверка решения/////////////////

for i:=1 to 4 do

   if StrToFloat(StringGrid2.Cells[i, 5])>0 then indicator:=true;

if indicator=true then

                 begin

                 NoAnswer:=NoAnswer+1;

                 if NoAnswer=5 then

        begin

        MessageBox (Handle, PChar('Ответ не найден'), PChar('Сообщение'), MB_ICONINFORMATION+MB_OK);

        exit;

        end;

                 MessageBox(Handle, PChar('Решение не найдено, необходим ещё один шаг'), PChar('Уведомление'), MB_ICONINFORMATION+MB_OK);

                 for i:=0 to StringGrid1.RowCount-1 do

                     for j:=0 to StringGrid1.ColCount-1 do

  StringGrid1.Cells[j, i]:=StringGrid2.Cells[j, i];

                 FormMain.Button4Click(Sender);

                 end

                 else begin

Answer:='Задача решена. Ответ:  F=';

if StrToFloat(StringGrid2.Cells[1, 5])>0 then Answer:=Answer+StringGrid2.Cells[1, 5]

                 else Answer:=Answer+FloatToStr(StrToFloat(StringGrid2.Cells[1, 5])*(-1));

if StringGrid2.Cells[0, 1]='x1' then Answer:=Answer+', x1='+StringGrid2.Cells[1, 1];

if StringGrid2.Cells[0, 1]='x2' then Answer:=Answer+', x2='+StringGrid2.Cells[1, 1];

if StringGrid2.Cells[0, 1]='x3' then Answer:=Answer+', x3='+StringGrid2.Cells[1, 1];

if StringGrid2.Cells[0, 2]='x1' then Answer:=Answer+', x1='+StringGrid2.Cells[1, 2];

if StringGrid2.Cells[0, 2]='x2' then Answer:=Answer+', x2='+StringGrid2.Cells[1, 2];

if StringGrid2.Cells[0, 2]='x3' then Answer:=Answer+', x3='+StringGrid2.Cells[1, 2];

if StringGrid2.Cells[0, 3]='x1' then Answer:=Answer+', x1='+StringGrid2.Cells[1, 3];

if StringGrid2.Cells[0, 3]='x2' then Answer:=Answer+', x2='+StringGrid2.Cells[1, 3];

if StringGrid2.Cells[0, 3]='x3' then Answer:=Answer+', x3='+StringGrid2.Cells[1, 3];

if StringGrid2.Cells[0, 4]='x1' then Answer:=Answer+', x1='+StringGrid2.Cells[1, 4];

if StringGrid2.Cells[0, 4]='x2' then Answer:=Answer+', x2='+StringGrid2.Cells[1, 4];

if StringGrid2.Cells[0, 4]='x3' then Answer:=Answer+', x3='+StringGrid2.Cells[1, 4];

MessageBox(Handle, PChar(Answer), PChar('Ответ'), MB_ICONINFORMATION+MB_OK);

end;

Except     //в случае, если задача изначально введена с ошибкой будет выдано сообщение об ошибке.

 showmessage('Ввелены некорректные данные.');

end;

end;

end.


ПРИЛОЖЕНИЕ 2.

РУКОВОДСТВО  ПОЛЬЗОВАТЕЛЯ

ВВЕДЕНИЕ 

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


  1.  УСЛОВИЯ РАБОТЫ ПРОГРАММЫ
  2.  Системные требования

Минимальные технические требования:

  1.  Процессор Pentium 4 и выше;
  2.  Оперативная память: 64Мб. и выше;
  3.  Жесткий диск: 30Мб (минимальное свободное пространство);
  4.  Операционная система: Windows 2000 и выше;
  5.  Внешние устройства: клавиатура, манипулятор типа «мышь».

Рекомендуемые технические требования:

  1.  Процессор Intel Core 2 duo  и выше;
  2.  Оперативная память: 128Мб. И выше;
  3.  Жесткий диск: 50Мб (минимальное свободное пространство);
  4.  Операционная система: Windows 7 и выше;
  5.  Внешние устройства: клавиатура, манипулятор типа «мышь».
  6.  Состав эксплуатационного пакета
  7.  Application – приложение, размер ~ 28 Мб
  8.  ReadMe


  1.  ВЫЗОВ И ЗАГРУЗКА
  2.  Установка программы

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

Для установки приложения  выполните следующие действия:

  1.  Открыть папку  и запустить файл Setup.exe
  2.  Выполнить все требования в процессе установки (в том числе создание ярлыка на рабочем столе)

  1.  Запуск программы

  1.  После установки на рабочем столе появиться ярлык: “ Построение  математических моделей  простейших  экономических  задач” - нажав на ярлык, можно начать приступать к работе с программой.


  1.  ОПИСАНИЕ РАБОТЫ ПРОГРАММЫ

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

При использовании данной программой особых сложностей вызывать не должно.

Для начала вводим начальные условия задачи в виде симплексной системы:

Рисунок 10 –  Ввод условия

После чего можно приступать к вычислению:

Рисунок 11 –  Иллюстрация процесса решения


Если условия даны такие что используется более 5 таблиц,  то программа выдает сообщение, что условие задачи введено не верно.

Ответ задачи выдается в удобном для преподавателя виде:

Рисунок 12 –  Вывод ответа решения


  1.  ВХОДНЫЕ/ВЫХОДНЫЕ ДАННЫЕ
  2.  Для функции «Условия задачи»:

Таблица 8 – Список модулей

Название

Тип

Ограничения

1.

Входные

1.2

Ограничения

Числовой

Цифры

1.3

Коэффициенты при свободных переменных в системе ограничений

Числовой

Цифры

2.

Выходные

2.1

Результат

Строка

2.2

Все таблицы решения  симплекс-метода

Числовой

Цифры


  1.  СООБЩЕНИЯ

Таблица 9сообщения об ошибках

№ п/п

Входная ситуация

Аномалия

Реакция программы

1

!»№»»;%:?*(

Некорректный ввод

Запрет некорректного ввода

2

Не правильные условия задачи

Используется более 5 таблиц для решения

Сообщение о неверном условии задачи.

3

Не введены условия задачи

Не правильность решения

Ошибка условия задачи

4

Символы

Некорректный ввод

Запрет некорректного ввода


 

А также другие работы, которые могут Вас заинтересовать

57411. The World We Live In - Мир, в котором мы живем. Урок–конференция 55.5 KB
  Председатель жюри: критерии оценки выработаны предварительно: оценивается глубина научность и актуальность проектной работы объем материала наличие продукта работы презентация и др.
57412. Образ берёзы в творчестве Есенина 52.5 KB
  Цель: Знакомство со стихами С. Есенина и фактами из его биографии; совершенствование умения учащихся анализировать поэтический текст на примере произведений Есенина...
57413. Нравственная проблематика сцены «Ночь. Келья в Чудовом монастыре из трагедии А. С. Пушкина «Борис Годунов» 899 KB
  Цель: опираясь на анализ сцены, её образов, добиться целостного осмысления данного эпизода трагедии под углом зрения выбранной проблемы; повторить понятие нравственной проблемы произведения; работать над выразительным чтением.
57414. С. Козлов «Снежный цветок» 1010.5 KB
  Цель Анализ пьесы. Задачи урока Повторение основных особенностей пьесы как жанра; Совершенствование навыка чтения; Обогащение словарного запаса, расширение кругозора учащихся; Воспитание дружеского отношения, чувства товарищества и взаимопомощи.
57415. Пушкин, о Пушкине, с Пушкиным 184 KB
  Пушкина; воспитание эстетического вкуса у учащихся. Пушкина; мультимедийный проектор с экраном; презентация; музыкальное оформление: романс Метнера на слова Пушкина Цветок на мультимедийном компакт-диске Очарование романса...