Графическое решение задач линейного программирования

Требования к функциям, выполняемым системой, программно-аппаратному и техническому обеспечению, к эргономике и технической эстетике, надежности и хранению информации. Схема взаимодействия модулей. Структурная схема программы. Наиболее вероятные ошибки.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 19.05.2014
Размер файла 541,3 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

finally

LResourceStream.Free;

end;

end;

procedure TMainForm.tbScaleChange(Sender: TObject);

begin

Repaint;

end;

procedure TMainForm.FormResize(Sender: TObject);

begin

FPaintBuffer.Width := PaintBox.Width;

FPaintBuffer.Height := PaintBox.Height;

FWidthdiv2 := FPaintBuffer.Width div 2;

FHeightdiv2 := FPaintBuffer.Height div 2;

end;

function TMainForm.GetGraphScale: Double;

begin

Result := FGraphScale + (tbScale.Position - 25) / (25 / FGraphScale);

end;

procedure TMainForm.FormDestroy(Sender: TObject);

begin

FPaintBuffer.Free;

end;

end.

unit AboutFormUnit;

interface

uses

Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,

Buttons, ExtCtrls, ShellApi;

type

TAboutForm = class(TForm)

Panel1: TPanel;

ProgramIcon: TImage;

ProductName: TLabel;

OKButton: TButton;

Label1: TLabel;

Bevel1: TBevel;

Label2: TLabel;

Memo1: TMemo;

procedure AuthorEmailLabelClick(Sender: TObject);

procedure ProgramHomepageLabelClick(Sender: TObject);

procedure Label4Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

implementation

{$R *.dfm}

procedure TAboutForm.AuthorEmailLabelClick(Sender: TObject);

begin

ShellExecute(0, 'open', PChar('mailto: ' + AuthorEmailLabel.Caption), nil, nil, SW_SHOW);

end;

procedure TAboutForm.Label4Click(Sender: TObject);

begin

ShellExecute(0, 'open', PChar(Label4.Caption), nil, nil, SW_SHOW);

end;

procedure TAboutForm.ProgramHomepageLabelClick(Sender: TObject);

begin

ShellExecute(0, 'open', PChar(ProgramHomepageLabel.Caption), nil, nil, SW_SHOW);

end;

end.

unit NewTaskFormUnit;

interface

uses

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

Dialogs, StdCtrls, Grids, Contnrs, MSimplexMath, ExtCtrls;

type

TNewTaskForm = class(TForm)

MatrixNGrid: TStringGrid;

VectorbGrid: TStringGrid;

OKButton: TButton;

CancelButton: TButton;

VectorCGrid: TStringGrid;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Bevel1: TBevel;

cbTaskType: TComboBox;

xiLabel: TLabel;

procedure FormShow(Sender: TObject);

procedure VectorbGridDrawCell(Sender: TObject; ACol, ARow: Integer;

Rect: TRect; State: TGridDrawState);

procedure MatrixNGridDrawCell(Sender: TObject; ACol, ARow: Integer;

Rect: TRect; State: TGridDrawState);

procedure VectorCGridDrawCell(Sender: TObject; ACol, ARow: Integer;

Rect: TRect; State: TGridDrawState);

procedure OKButtonClick(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure FormDestroy(Sender: TObject);

private

FN: Integer;

FM: Integer;

// Матрица коэффициентов ограничений

FNMatrix: TMatrix;

// Вектор коэффициентов свободных членов

FVectorb: TVector;

// Вектор коэффициентов целевой функции

FVectorc: TVector;

FSigns: TObjectList;

function GetSign(Index: Integer): Integer;

function GetSignStr(Index: Integer): string;

public

property N: Integer read FN write FN;

property M: Integer read FM write FM;

property Sign[Index: Integer]: Integer read GetSign;

property SignStr[Index: Integer]: string read GetSignStr;

property Vectorb: TVector read FVectorb write FVectorb;

property Vectorc: TVector read FVectorc write FVectorc;

property NMatrix: TMatrix read FNMatrix write FNMatrix;

end;

implementation

{$R *.dfm}

function ValidateDecimalSeparator(AFloatStr: string): string;

var

LDotPos: Integer;

begin

Result := AFloatStr;

LDotPos := Pos('.', Result);

while LDotPos > 0 do

begin

Result[LDotPos] := ',';

LDotPos := Pos('.', Result);

end;

end;

procedure InitStringGrid(AStringGrid: TStringGrid);

var

i, j: Integer;

begin

for i := 0 to AStringGrid.ColCount - 1 do

for j := 0 to AStringGrid.RowCount - 1 do

begin

AStringGrid.Cells[i, j] := '0';

end;

end;

function GetMatrix(AStringGrid: TStringGrid): TMatrix;

var

i, j: Integer;

begin

SetLength(Result, AStringGrid.RowCount, AStringGrid.ColCount);

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

begin

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

begin

Result[i, j] := StrToFloat(ValidateDecimalSeparator(AStringGrid.Cells[j, i]));

end;

end;

end;

function GetVector(AStringGrid: TStringGrid): TVector;

var

i: Integer;

begin

if AStringGrid.RowCount = 1 then

begin

SetLength(Result, AStringGrid.ColCount);

for i := 0 to AStringGrid.ColCount - 1 do

begin

Result[i] := StrToFloat(ValidateDecimalSeparator(AStringGrid.Cells[i, 0]));

end;

end

else

begin

SetLength(Result, AStringGrid.RowCount);

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

begin

Result[i] := StrToFloat(ValidateDecimalSeparator((AStringGrid.Cells[0, i])));

end;

end;

end;

procedure AdjustStringGrid(AStringGrid: TStringGrid);

var

i: Integer;

LWidth: Integer;

LHeight: Integer;

begin

LWidth := 0;

for i := 0 to AStringGrid.ColCount - 1 do

begin

LWidth := LWidth + AStringGrid.ColWidths[i];

end;

LHeight := 0;

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

begin

LHeight := LHeight + AStringGrid.RowHeights[i];

end;

AStringGrid.Width := LWidth + AStringGrid.ColCount + 1;

AStringGrid.Height := LHeight + AStringGrid.RowCount + 1;

end;

procedure TNewTaskForm.FormCreate(Sender: TObject);

begin

FSigns := TObjectList.Create;

end;

procedure TNewTaskForm.FormDestroy(Sender: TObject);

begin

FSigns.Free;

end;

procedure TNewTaskForm.FormShow(Sender: TObject);

var

i: Integer;

LLeft: Integer;

LComboBox: TComboBox;

begin

MatrixNGrid.RowCount := FM;

MatrixNGrid.ColCount := FN;

InitStringGrid(MatrixNGrid);

AdjustStringGrid(MatrixNGrid);

VectorbGrid.RowCount := FM;

InitStringGrid(VectorbGrid);

AdjustStringGrid(VectorbGrid);

VectorCGrid.ColCount := FN;

InitStringGrid(VectorCGrid);

AdjustStringGrid(VectorCGrid);

for i := 0 to FM - 1 do

begin

LComboBox := TComboBox.Create(Self);

LComboBox.Parent := Self;

LComboBox.Style := csDropDownList;

LComboBox.AddItem('=', nil);

LComboBox.AddItem('>=', nil);

LComboBox.AddItem('<=', nil);

LComboBox.ItemIndex := 0;

LComboBox.Width := 50;

LLeft := MatrixNGrid.Left + MatrixNGrid.Width + 25;

LComboBox.Left := LLeft;

LComboBox.Top := MatrixNGrid.Top + (i * LComboBox.Height);

FSigns.Add(LComboBox);

end;

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

begin

MatrixNGrid.RowHeights[i] := TComboBox(FSigns.Items[i]).Height - 1;

end;

AdjustStringGrid(MatrixNGrid);

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

begin

VectorbGrid.RowHeights[i] := TComboBox(FSigns.Items[i]).Height - 1;

end;

AdjustStringGrid(VectorbGrid);

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

begin

VectorCGrid.RowHeights[i] := TComboBox(FSigns.Items[i]).Height - 1;

end;

AdjustStringGrid(VectorCGrid);

VectorbGrid.Left := LLeft + 70;

Label3.Top := MatrixNGrid.Top + MatrixNGrid.Height + 15;

VectorCGrid.Top := Label3.Top + Label3.Height + 5;

Label2.Left := VectorbGrid.Left;

xiLabel.Top := VectorCGrid.Top + VectorCGrid.Height + 10;

Bevel1.Top := VectorCGrid.Top + VectorCGrid.Height + 30;

Bevel1.Width := CancelButton.Left + CancelButton.Width - Bevel1.Left;

Width := VectorbGrid.Left + VectorbGrid.Width + 100;

ClientHeight := Bevel1.Top + Bevel1.Height + OKButton.Height + 20;

end;

function TNewTaskForm.GetSign(Index: Integer): Integer;

begin

Result := TComboBox(FSigns.Items[Index]).ItemIndex;

end;

function TNewTaskForm.GetSignStr(Index: Integer): string;

begin

case Sign[Index] of

0: Result := '=';

1: Result := '>=';

2: Result := '<=';

end;

end;

procedure TNewTaskForm.MatrixNGridDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);

begin

if Sender = ActiveControl then

Exit;

if not (gdSelected in State) then

Exit;

with Sender as TStringGrid do

begin

Canvas.Brush.Color := Color;

Canvas.Font.Color := Font.Color;

Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2,

Cells[ACol, ARow]);

end;

end;

procedure TNewTaskForm.OKButtonClick(Sender: TObject);

var

i: Integer;

LCanonicalForm: Boolean;

begin

LCanonicalForm := True;

for i:= 0 to FM - 1 do

begin

if TComboBox(FSigns.Items[i]).ItemIndex > 0 then

begin

LCanonicalForm := False;

end;

end;

FNMatrix := GetMatrix(MatrixNGrid);

FVectorb := GetVector(VectorbGrid);

FVectorc := GetVector(VectorcGrid);

if not LCanonicalForm then

begin

for i := 0 to FM - 1 do

begin

case TComboBox(FSigns.Items[i]).ItemIndex of

1: begin

Inc(FN);

SetLength(FVectorc, FN);

FVectorc[FN - 1] := 0;

SetLength(FNMatrix, FM, FN);

FNMatrix[i, FN - 1] := - 1;

end;

end;

end;

end;

ModalResult := mrOk;

end;

procedure TNewTaskForm.VectorbGridDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);

begin

if Sender = ActiveControl then

Exit;

if not (gdSelected in State) then

Exit;

with Sender as TStringGrid do

begin

Canvas.Brush.Color := Color;

Canvas.Font.Color := Font.Color;

Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2,

Cells[ACol, ARow]);

end;

end;

procedure TNewTaskForm.VectorCGridDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);

begin

if Sender = ActiveControl then

Exit;

if not (gdSelected in State) then

Exit;

with Sender as TStringGrid do

begin

Canvas.Brush.Color := Color;

Canvas.Font.Color := Font.Color;

Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2,

Cells[ACol, ARow]);

end;

end;

end.

unit TaskSizeFormUnit;

interface

uses

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

Dialogs, StdCtrls, Spin, Buttons;

const

STR_WRONG_NUMBER_RANGE = 'Число должно быть в диапазоне: 1..10';

STR_WRONG_NUMBER_FORMAT = 'Неправильный формат числа!';

type

TTaskSizeForm = class(TForm)

NLabel: TLabel;

MLabel: TLabel;

OkBitBtn: TBitBtn;

GroupBox: TGroupBox;

CancelBitBtn: TBitBtn;

seM: TSpinEdit;

procedure FormShow(Sender: TObject);

procedure OkBitBtnClick(Sender: TObject);

private

FM: Integer; // Кол-во ограничений

function GetM: Integer;

public

property M: Integer read GetM;

end;

implementation

{$R *.dfm}

procedure TTaskSizeForm.FormShow(Sender: TObject);

begin

if OkBitBtn.CanFocus then

begin

OkBitBtn.SetFocus;

end;

end;

function TTaskSizeForm.GetM: Integer;

begin

Result := FM;

end;

procedure TTaskSizeForm.OkBitBtnClick(Sender: TObject);

var

LValue: Integer;

begin

try

LValue := StrToInt(seM.Text);

if (LValue < 1) or (LValue > 10) then

begin

MessageDlg(STR_WRONG_NUMBER_RANGE, mtError, [mbOK], 0);

end else

begin

FM := LValue;

ModalResult := mrOk;

end;

except

MessageDlg(STR_WRONG_NUMBER_FORMAT, mtError, [mbOK], 0);

end;

end;

end.

информация безопасность программа модуль

Приложение Б

Формы программы

1) Главная форма (рисунок 6).

Рисунок 6 - Главная форма

2) Окно задания размера новой таблицы (рисунок 7).

Рисунок 7 - Окно задания размера новой таблицы

3) Окно заполнения таблицы данными (рисунок 8).

Рисунок 8 - Окно заполнения таблицы данными

Размещено на Allbest.ru


Подобные документы

  • Требования к функциям, выполняемым системой, к программно-аппаратному и техническому обеспечению, к надежности и хранению информации. Схема взаимодействия модулей. Структурная схема программы. Руководство пользователю и программисту, вероятные ошибки.

    курсовая работа [423,1 K], добавлен 24.03.2014

  • Структура взаимодействия входной и выходной информации. Требования к программно-аппаратному окружению, к эргономике и технической эстетике интерфейса пользователя. Эскиз и спецификация типовых объектов управления графического интерфейса, тестирование.

    курсовая работа [2,0 M], добавлен 16.02.2016

  • Проектирование программы для предприятия ООО "Чудо свечи" в среде программирования Borland Delphi. Произведение расчета системы методом аддитивной оптимизации. Требования к функциям, выполняемым системой, к программному и аппаратному обеспечению.

    курсовая работа [2,8 M], добавлен 27.02.2015

  • Особенности задач линейного программирования. Симплексный метод решения задач линейного программирования. Обоснование выбора языка, инструментария программирования, перечень идентификаторов и блок-схема алгоритма. Логическая схема работы программы.

    дипломная работа [2,4 M], добавлен 13.08.2011

  • Структура взаимодействия входной, выходной информации. Требования к программно-аппаратному окружению, эргономике. Эскиз, спецификация типовых объектов управления графического интерфейса. Руководство системного программиста, настройка и проверка программы.

    курсовая работа [2,6 M], добавлен 02.09.2013

  • Практические навыки моделирования задач линейного программирования и их решения графическим и симплекс-методом с использованием прикладной программы SIMC. Моделирование транспортных задач и их решение методом потенциалов с помощью программы TRAN2.

    контрольная работа [199,8 K], добавлен 15.06.2009

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

    курсовая работа [88,9 K], добавлен 11.02.2011

  • Требования к функциям и задачам, выполняемым системой "Подбор кредита ОАО "Россельхозбанк". Проектирование архитектуры программного продукта. Структурная схема программного продукта. Описание компонент программного обеспечения. План менеджмента проекта.

    курсовая работа [684,0 K], добавлен 03.05.2015

  • Постановка задачи нелинейного программирования. Определение стационарных точек и их типа. Построение линий уровней, трехмерного графика целевой функции и ограничения. Графическое и аналитическое решение задачи. Руководство пользователя и схема алгоритма.

    курсовая работа [2,5 M], добавлен 17.12.2012

  • Требования к разрабатываемой программе и к выполняемым ею функциям. Алгоритмы взаимодействия с реестром, поиска, открытия, чтения и удаления ключа. Запросы к исходным кодам и языкам программирования. Проведение экономических расчетов и охрана труда.

    дипломная работа [6,5 M], добавлен 10.10.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.