Курсовая работа наименование курса: мдк



Скачать 400.25 Kb.
страница14/14
Дата14.02.2020
Размер400.25 Kb.
Название файлаZLP.docx
ТипКурсовая
1   ...   6   7   8   9   10   11   12   13   14

СПИСОК ЛИТЕРАТУРЫ


  1. Боровский А. Н.

Программирование в Delphi 7

  1. И. Ю. Баженова. Delphi 7.

Самоучитель программиста.

  1. Соммервилл, Иан

  2. Шпак Ю. А.

Delphi 7 на примерах.

  1. Marco Cantu.

Delphi7 для профессионалов.

  1. Печерских И. А., Семенов А. Г. Математические модели в экономике: учебное пособие. — Кемерово: КемТИПП, 2011

  2. Красс М. С., Чупрынов Б. П. Математические методы и модели для магистрантов экономики. — СПб.: Питер, 2010. (Серия «Учебное пособие»).


Приложение. Листинг программы


procedure TMainForm.SolveTask;

var


x, y: Double;

i, j: Integer;

LLine1: TVector;

LLine2: TVector;

LMinMaxValue: Double;
procedure GetLine(ALine1: TVector; Andex: Integer);

begin


ALine1[0] := A[Andex, 0];

ALine1[1] := A[Andex, 1];

ALine1[2] := B[Andex];

end;
begin

TaskRichEdit.Clear;

WriteInRichEd(TaskRichEdit, 'Уравнения ограничений: ', clNavy, 12, [fsBold]);

TaskRichEdit.Lines.Add('');

TaskRichEdit.Lines.Add('');


for i := 0 to FM - 1 do

begin


if A[i, 0] <> 0 then

begin


WriteInRichEd(TaskRichEdit, CheckOne(A[i, 0]), clNavy, 12, []);

WriteInRichEd(TaskRichEdit, 'x1', clBlack, 12, []);

if A[i, 1] <> 0 then

begin


WriteInRichEd(TaskRichEdit, CheckMinusPlus(A[i, 1]), clNavy, 12, []);

WriteInRichEd(TaskRichEdit, 'x2', clBlack, 12, []);

end;

end else


begin

if A[i, 1] <> 0 then

begin

WriteInRichEd(TaskRichEdit, CheckOne(A[i, 1]), clNavy, 12, []);



WriteInRichEd(TaskRichEdit, 'x2', clBlack, 12, []);

end;


end;
WriteInRichEd(TaskRichEdit, GetSignStr(i), clNavy, 12, []);

WriteInRichEd(TaskRichEdit, FloatToStr(B[i]), clNavy, 12, []);


if (A[i, 0] <> 0) and (A[i, 1] <> 0) then

begin


WriteInRichEd(TaskRichEdit, ' (' + Chr(Ord('A') + i) + '1', clRed, 8, [fsBold]);

WriteInRichEd(TaskRichEdit, Chr(Ord('A') + i) + '2)', clRed, 8, [fsBold]);

end else

begin


if (A[i, 0] <> 0) then

begin


WriteInRichEd(TaskRichEdit, ' (' + Chr(Ord('A') + i) + '2)', clRed, 8, [fsBold]);

end;


if (A[i, 1] <> 0) then

begin


WriteInRichEd(TaskRichEdit, ' (' + Chr(Ord('A') + i) + '1)', clRed, 8, [fsBold]);

end;


end;
TaskRichEdit.Lines.Add('');

end;
TaskRichEdit.Lines.Add('');

WriteInRichEd(TaskRichEdit, 'x1>=', clBlack, 12, []);

WriteInRichEd(TaskRichEdit, '0', clNavy, 12, []);

WriteInRichEd(TaskRichEdit, '; x2>=', clBlack, 12, []);

WriteInRichEd(TaskRichEdit, '0', clNavy, 12, []);

WriteInRichEd(TaskRichEdit, ';', clBlack, 12, []);

TaskRichEdit.Lines.Add('');


TaskRichEdit.Lines.Add('');

WriteInRichEd(TaskRichEdit, 'Целевая функция: ', clNavy, 12, [fsBold]);

TaskRichEdit.Lines.Add('');

TaskRichEdit.Lines.Add('');


if C[0] <> 0 then

begin


WriteInRichEd(TaskRichEdit, CheckOne(C[0]), clNavy, 12, []);

WriteInRichEd(TaskRichEdit, 'x1', clBlack, 12, []);

if C[1] <> 0 then

begin


WriteInRichEd(TaskRichEdit, CheckMinusPlus(C[1]), clNavy, 12, []);

WriteInRichEd(TaskRichEdit, 'x2', clBlack, 12, []);

end;

end else


begin

if C[1] <> 0 then

begin

WriteInRichEd(TaskRichEdit, CheckOne(C[1]), clNavy, 12, []);



WriteInRichEd(TaskRichEdit, 'x2', clBlack, 12, []);

end;


end;
if FTaskType = 0 then

begin


WriteInRichEd(TaskRichEdit, '->Max', clBlack, 12, []);

end else


begin

WriteInRichEd(TaskRichEdit, '->Min', clBlack, 12, []);

end;
// Находим решение задачи

FTaskSolved := false;


LMinMaxValue := 1.7e308;

case FTaskType of

0: LMinMaxValue := -1.7e308;

1: LMinMaxValue := 1.7e308;

end;
SetLength(LLine1, 3);

SetLength(LLine2, 3);


Maxsx := 0;

Maxsy := 0;


for i := 0 to FM - 1 do

begin


for j := 0 to FM - 1 do

begin


if i <> j then

begin


// Находим точку пересечения двух прямых (ограничений)

if LineToPoint(A[i, 0], A[i, 1], B[i], A[j, 0], A[j, 1], B[j], x, y) then

begin

// Проверяем эту точку на принадлежность области определения ограничений



if PointBelongsRestDomain(x, y, FX1X2Positive) then

begin


// находим значение целевой фугкции в этой точке

if ((LMinMaxValue < (x * C[0] + y * C[1])) and (FTaskType = 0)) or

((LMinMaxValue > (x * C[0] + y * C[1])) and (FTaskType = 1)) then

begin


sx := x;

sy := y;


FTaskSolved := true;

LMinMaxValue := x * C[0] + y * C[1];


GetLine(LLine1, i);

GetLine(LLine2, j);


if abs(x) > Maxsx then

begin


Maxsx := abs(x);

end;
if abs(y) > Maxsy then

begin

Maxsy := abs(y);



end;

end;


end;

end;


end;

end;
for j := 0 to FM - 1 do

begin
// Находим точку пересечения прямой (ограничения) с осями координат

x := 0;


if A[j, 1] <> 0 then

begin


y := B[j] / CheckForNil(A[j, 1]);

// Проверяем эту точку на принадлежность области определения ограничений

if PointBelongsRestDomain(x, y, FX1X2Positive) then

begin
// находим значение целевой фугкции ф этой точке

if ((LMinMaxValue < (x * C[0] + y * C[1])) and (FTaskType = 0)) or

((LMinMaxValue > (x * C[0] + y * C[1])) and (FTaskType = 1)) then

begin

sx := x;


sy := y;

FTaskSolved := true;

LMinMaxValue := x * C[0] + y * C[1];
GetLine(LLine1, j);

LLine2[0] := 1;

LLine2[1] := 0;

LLine2[2] := 0;


if abs(x) > Maxsx then

begin


Maxsx := abs(x);

end;
if abs(y) > Maxsy then

begin

Maxsy := abs(y);



end;

end;


end;

end;
// Находим точку пересечения прямой (ограничения) с осями координат

x := B[j] / CheckForNil(A[j, 0]);

y := 0;


if A[j, 0] <> 0 then

begin


// Проверяем эту точку на принадлежность области определения ограничений

if PointBelongsRestDomain(x, y, FX1X2Positive) then

begin
// находим значение целевой фугкции ф этой точке

if ((LMinMaxValue < (x * C[0] + y * C[1])) and (FTaskType = 0)) or

((LMinMaxValue > (x * C[0] + y * C[1])) and (FTaskType = 1)) then

begin


sx := x;

sy := y;


FTaskSolved := true;

LMinMaxValue := x * C[0] + y * C[1];


GetLine(LLine1, j);

LLine2[0] := 0;

LLine2[1] := 1;

LLine2[2] := 0;


if abs(x) > Maxsx then

begin


Maxsx := abs(x);

end;
if abs(y) > Maxsy then

begin

Maxsy := abs(y);



end;

end;


end;

end;


end;

end;
// Проверяем точку (0, 0) на минимальное значение

x := 0;

y := 0;


if PointBelongsRestDomain(x, y, FX1X2Positive) then

begin


// находим значение целевой функции ф этой точке

if ((LMinMaxValue < (x * C[0] + y * C[1])) and (FTaskType = 0)) or

((LMinMaxValue > (x * C[0] + y * C[1])) and (FTaskType = 1)) then

begin


sx := x;

sy := y;


FTaskSolved := true;

LMinMaxValue := x * C[0] + y * C[1];


LLine1[0] := 1;

LLine1[1] := 0;

LLine1[2] := 0;
LLine2[0] := 0;

LLine2[1] := 1;

LLine2[2] := 0;

end;


end;
// Проверяем на бесконечность решений

FTaskInfinite := TestForInfinite(LLine1, LLine2, LMinMaxValue);


Finalize(LLine2);

Finalize(LLine1);


if (C[0] = 0) and (C[1] = 0) then

begin


TaskRichEdit.Lines.Add('');

TaskRichEdit.Lines.Add('-------------------------');

WriteInRichEd(TaskRichEdit, 'Целевая функция не задана!', clMaroon, 12, [fsBold]);

end else


begin

if FTaskSolved then

begin

// Проверяем задачу на бесконечное кол-во решений



if FTaskInfinite then

begin


FTaskSolved := false;

TaskRichEdit.Lines.Add('');

TaskRichEdit.Lines.Add('-------------------------');

WriteInRichEd(TaskRichEdit, 'Задача имеет бесконечное множество решений! Т.к. ее ограничения не замкнуты и область их определения уходит в бесконечность.', clMaroon, 12, [fsBold]);

end else

begin


TaskRichEdit.Lines.Add('');

TaskRichEdit.Lines.Add('-------------------------');

WriteInRichEd(TaskRichEdit, 'Задача решена!', clNavy, 12, [fsBold]);

TaskRichEdit.Lines.Add('');

TaskRichEdit.Lines.Add('');
if FTaskType = 0 then

begin


WriteInRichEd(TaskRichEdit, 'Целевая функция достигает своего максимального значения в точке:', clNavy, 10, [fsBold]);

end else


begin

WriteInRichEd(TaskRichEdit, 'Целевая функция достигает своего минимального значения в точке:', clNavy, 10, [fsBold]);

end;
TaskRichEdit.Lines.Add('');

TaskRichEdit.Lines.Add('');

WriteInRichEd(TaskRichEdit, 'x1', clBlack, 12, []);

WriteInRichEd(TaskRichEdit, '=' + FloatToStr(sx), clNavy, 12, []);

TaskRichEdit.Lines.Add('');

WriteInRichEd(TaskRichEdit, 'x2', clBlack, 12, []);

WriteInRichEd(TaskRichEdit, '=' + FloatToStr(sy), clNavy, 12, []);

TaskRichEdit.Lines.Add('');

TaskRichEdit.Lines.Add('');

WriteInRichEd(TaskRichEdit, 'Значение целевой функции:', clNavy, 10, [fsBold]);

TaskRichEdit.Lines.Add('');

TaskRichEdit.Lines.Add('');

WriteInRichEd(TaskRichEdit, 'f(x1, x2) = ', clBlack, 12, []);

WriteInRichEd(TaskRichEdit, FloatToStr(LMinMaxValue), clNavy, 12, []);

end;

end else


begin

TaskRichEdit.Lines.Add('');

TaskRichEdit.Lines.Add('-------------------------');

WriteInRichEd(TaskRichEdit, 'Задача не имеет допустимого решения! Т.к. ее ограничения несовместны.', clMaroon, 12, [fsBold]);



end;

end;

end;



Поделитесь с Вашими друзьями:
1   ...   6   7   8   9   10   11   12   13   14


База данных защищена авторским правом ©genew.ru 2020
обратиться к администрации

    Главная страница
Контрольная работа
Курсовая работа
Лабораторная работа
Рабочая программа
Методические указания
Практическая работа
Методические рекомендации
Теоретические основы
Пояснительная записка
Общая характеристика
Учебное пособие
История развития
Общие сведения
Физическая культура
Теоретические аспекты
Практическое задание
Федеральное государственное
Направление подготовки
Техническое задание
Теоретическая часть
Самостоятельная работа
Дипломная работа
Общие положения
Методическая разработка
государственное бюджетное
Образовательная программа
квалификационная работа
Выпускная квалификационная
Техническое обслуживание
Технологическая карта
Решение задач
учебная программа
История возникновения
Методическое пособие
Краткая характеристика
Рабочая учебная
Исследовательская работа
Общая часть
Общие требования
Метрология стандартизация
Основная часть
Рабочая тетрадь
История создания
Название дисциплины
Техническая эксплуатация
Экономическая теория
Математическое моделирование
Организация работы
Информационная безопасность
Государственное регулирование
Современное состояние