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

Символы

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

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


 

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

26884. Морфофункциональная характеристика черепно-мозговых нервов 4.77 KB
  морфофункциональная характеристика черепномозговых нервов Каждый отдел головного мозга человека исторически связан с конкретными дистантными анализаторами хеморецепторами фоторецепторами тактильными или слуховыми системами анализа внешней и внутренней среды организма. Как правило рецепторы расположены на некотором расстоянии от мозга и соединены с ним посредством нервов. Черепные нервы устаревшее название черепномозговые нервы двенадцать пар нервов выходящих из мозгового вещества в основании мозга и иннервирующих структуры...
26885. V-я и VI 1-я пары черепно-мозговых нервов. Общая характеристика, ветвление 2.98 KB
  Двенадцать пар черепномозговых нервов принято делить на 3 чувствительных I пара обонятельный U пара зрительный и VIII пара преддверноулитковый 5 двигательных III пара глазодвигательный IV пара блоковый VI пара отводящий XI пара добавочный и XII пара подъязычный и 4 смешанных V пара тройничный VII пара лицевой IX пара языкоглоточный и X пара блуждающий; в состав последних входят чувствительные двигательные и вегетативные волокна. 5 пара тройничный нервn.
26886. Общие закономерности строения вегетативной нервной системы 2.13 KB
  В симпатической нервной системе преганглионарные нейроны находятся в промежуточном боковом роге спинного мозга от верхнегрудного до среднепоясничного отдела Т1ТЗ. Преганглионарные парасимпатические нейроны залегают в стволе мозга и крестцовом отделе спинного мозга. Постганглионарные нейроны находятся в вертебральных и превертебральных ганглиях в симпатической системе а в парасимпатической они расположены в непосредственной близости от стенки органа который они иннервируют.
26887. Симпатическая часть вегетативной нервной системы. Солнечное сплетение 4.18 KB
  Симпатическая нервная система делится на центральную расположенную в спинном мозге и периферическую включающую многочисленные соединённые друг с другом нервные ветви и узлы. По своему ходу симпатические волокна отделяются от двигательных соматических и далее в виде белых соединительных ветвей вступают в узлы пограничного симпатического ствола. В состав солнечного сплетения входят правый и левый чревные узлы непарный верхний брыжеечный узел большой и малый внутренностные нервы и многие другие которые отходят от узлов в разные стороны...
26888. Парасимпатическая часть вегетативной нервной системы 4.21 KB
  Преганглионарные волокна отходят от центров в составе черепномозговых или спинномозговых нервов. От центров расположенных в среднем мозге преганглионарные волокна доходят до ресничного узла а от него идут постганглионарные волокна к глазу где разветвляются в сфинкторе зрачка и ресничной мышце.Слезоотделительныйпреганглиолярные волокна доходят до клинонёбного ганглия постганглиолярные волокна достигают слёзных желёз желёз неба и носовой полости; 2.Краниальныйоральный слюноотделительный преганглиолярные волокна доходят до...
26889. Блуждающий нерв 4.81 KB
  Направляясь латерально и вниз он покидает череп через переднюю часть яремного отверстия вместе с языкоглоточным и добавочным нервами располагаясь между ними. В области яремного отверстия блуждающий нерв утолщается за счёт верхнего узла лат. ganglion superius а немного ниже через 1015 см имеется ещё один узел несколько больших размеров лат. Спускаясь ниже блуждающий нерв в области шеи ложится на переднюю заднюю поверхность внутренней яремной вены лат.
26891. Защитные и вспомогательные образования глаза 1.53 KB
  Защитные и вспомогательные образования глаза К защитным и вспомогательным приспособлениям глаза относятся орбита глазной жир мышцы глаза веки ресницы конъюнктива слезный аппарат. Орбита является костным остовом глаза и защищает глазное яблоко от механических воздействий. Из коньюнктивального мешка слеза оттекает по носослезному каналу который начинается от слезного мешка во внутреннем углу глаза а заканчивается отверстием на слизистой оболочке носовой полости у входа.
26892. Оболочки и светопреломляющие среды глазного яблока 3.11 KB
  Наружная оболочка глазного яблока соединительнотканного происхождения и делится на две части склеру и роговицу. Склераsclera или белочная оболочка толстая прочная непрозрачная расположена в заднем отделе глазного яблока. Средняя сосудистая оболочка в которой в большом количестве разветвляются сосуды также делится на заднюю собственно сосудистуюchorioidea и переднюю части. В собственной сосудистой оболочке находится отражательная оболочкаtapetum.