Математические модели информационных процессов управления
Выбор наиболее эффективного метода и решение задачи. Разработка алгоритма и программы для решения задачи в общем виде. Применение программа "TabSimMethod". Решение задачи табличным симплекс-методом. Создание, ввод формул и форматирование таблиц.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 26.12.2014 |
Размер файла | 509,7 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Курсовая работа
Математические модели информационных процессов управления
1. Условие задачи на выполнение курсовой работы
Вариант №1
1. Выбрать и обосновать наиболее эффективный метод решения задачи.
2. Разработать алгоритм и программу для решения задачи в общем виде.
3. Проверить правильность алгоритма на предлагаемой задаче.
4. Задача:
Из пункта А в пункт В ежедневно отправляются пассажирские и скорые поезда. Данные об организации перевозок следующие:
Поезда |
Количество вагонов в поезде |
|||||
багажный |
почтовый |
плацкарт |
купейный |
мягкий |
||
Скорый |
1 1 - 12 |
1 - - 8 |
5 8 58 81 |
6 4 40 70 |
3 1 32 26 |
|
Пассажирский |
||||||
Число пассажиров |
||||||
Парк вагонов |
Сколько должно быть сформировано скорых и пассажирских поездов, чтобы перевезти наибольшее количество пассажиров?
2. Выбор наиболее эффективного метода и решение задачи
Наиболее эффективный метод решения предлагаемой задачи - табличный симплекс -метод. Задача на максимизацию.
Решение задачи начтем с записи уравнения по предлагаемой задаче.
x1 + x2 ? 12
x1 ? 8
5x1 + 8x2 ? 81
где переменные Х1 и Х2 - скорые и пассажирские поезда.
6x1 + 4x2 ? 70
3x1 + x2 ? 26
Целевое уравнение : 626x1 + 656x2 = Zmax
x1 + x2 + S1 ? 12
x1 + S2 ? 8
5x1 + 8x2 + S3 ? 81
6x1 + 4x2 + S4 ? 70
3x1 + x2+ S5 ? 26
Z -626x1 - 656x2 = 0
Заполним таблицу таб. 1. согласно полученным уравнениям.
Найдем ведущую строку и ведущий столбец.
Таб. 1. Исходная симплекс-таблица.
Базисные переменные |
z |
x1 |
x2 |
S1 |
S2 |
S3 |
S4 |
S5 |
Решение |
|
Z |
1 |
-626 |
-656 |
0 |
0 |
0 |
0 |
0 |
0 |
|
S1 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
12 |
|
S2 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
8 |
|
S3 |
0 |
5 |
8 |
0 |
0 |
1 |
0 |
0 |
81 |
|
S4 |
0 |
6 |
4 |
0 |
0 |
0 |
1 |
0 |
70 |
|
S5 |
0 |
3 |
1 |
0 |
0 |
0 |
0 |
1 |
26 |
Произведём перерасчет таблицы.
Найдём в таблице ведущий столбец: им является столбец с X2, т. к. в строке Z именно в этом столбце минимальный коэффициент. Теперь определим ведущую строку. Таковой является строка S3, т. к. в этой строке минимальное отношение столбца “решение” к соответствующим значениям ведущего столбца.
Произведём перерасчет значений в таблице. Новую ведущую строку получаем, разделив её на ведущий элемент, в данном случае это 8, запишем полученный результат в таб. 2.
Для перерасчета строк Z , S1 ,S2 ,S4 ,S5 воспользуемся формулой:
[новая строка] = [старая строка] - [новая ведущая строка] Ч ai j, где
i - номер строки (Z - первая, S1 - вторая);
j - номер ведущего столбца;
ai j - число, записанное в ячейке с индексами i, j.
Запишем полученный результат в таб. 2.
z
0 |
5/8 |
1 |
0 |
0 |
1/8 |
0 |
0 |
81/8 |
|
-656 |
|||||||||
0 |
-410 |
-656 |
0 |
0 |
-82 |
0 |
0 |
-6642 |
1 |
-626 |
-656 |
0 |
0 |
0 |
0 |
0 |
0 |
|
0 |
-410 |
-656 |
0 |
0 |
-82 |
0 |
0 |
-6642 |
|
1 |
-216 |
0 |
0 |
0 |
82 |
0 |
0 |
6642 |
S1
0 |
5/8 |
1 |
0 |
0 |
1/8 |
0 |
0 |
81/8 |
|
1 |
|||||||||
0 |
5/8 |
1 |
0 |
0 |
1/8 |
0 |
0 |
81/8 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
12 |
|
0 |
5/8 |
1 |
0 |
0 |
1/8 |
0 |
0 |
81/8 |
|
0 |
3/8 |
0 |
1 |
0 |
-1/8 |
0 |
0 |
15/8 |
S2
0 |
5/8 |
1 |
0 |
0 |
1/8 |
0 |
0 |
81/8 |
|
0 |
|||||||||
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
8 |
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
0 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
8 |
S4
0 |
5/8 |
1 |
0 |
0 |
1/8 |
0 |
0 |
81/8 |
|
4 |
|||||||||
0 |
5/2 |
4 |
0 |
0 |
1/2 |
0 |
0 |
81/2 |
0 |
6 |
4 |
0 |
0 |
0 |
1 |
0 |
70 |
|
0 |
5/2 |
4 |
0 |
0 |
1/2 |
0 |
0 |
81/2 |
|
0 |
7/2 |
0 |
0 |
0 |
-1/2 |
1 |
0 |
59/2 |
S5
0 |
5/8 |
1 |
0 |
0 |
1/8 |
0 |
0 |
81/8 |
|
1 |
|||||||||
0 |
5/8 |
1 |
0 |
0 |
1/8 |
0 |
0 |
81/8 |
0 |
3 |
1 |
0 |
0 |
0 |
0 |
1 |
26 |
|
0 |
5/8 |
1 |
0 |
0 |
1/8 |
0 |
0 |
81/8 |
|
0 |
19/8 |
0 |
0 |
0 |
-1/8 |
0 |
1 |
127/8 |
Таб. 2. Промежуточные значения симплекс-таблицы.
Базисные переменные |
z |
x1 |
x2 |
S1 |
S2 |
S3 |
S4 |
S5 |
Решение |
|
Z |
1 |
-216 |
0 |
0 |
0 |
82 |
0 |
0 |
6642 |
|
S1 |
0 |
3/8 |
0 |
1 |
0 |
-1/8 |
0 |
0 |
15/8 |
|
S2 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
8 |
|
X2 |
0 |
5/8 |
1 |
0 |
0 |
1/8 |
0 |
0 |
81/8 |
|
S4 |
0 |
7/2 |
0 |
0 |
0 |
-1/2 |
1 |
0 |
59/2 |
|
S5 |
0 |
19/8 |
0 |
0 |
0 |
-1/8 |
0 |
1 |
127/8 |
Так как в строке Z есть отрицательное число, проделываем ещё 1 раз пересчет таблицы, результаты приведены ниже таб. 3.
Таб. 3 Оптимальная симплекс-таблица.
Базисные переменные |
z |
x1 |
x2 |
S1 |
S2 |
S3 |
S4 |
S5 |
Решение |
|
Z |
1 |
0 |
0 |
576 |
0 |
10 |
0 |
0 |
7722 |
|
x1 |
0 |
1 |
0 |
8/3 |
0 |
-1/3 |
0 |
0 |
5 |
|
S2 |
0 |
0 |
0 |
-8/3 |
1 |
1/3 |
0 |
0 |
3 |
|
x2 |
0 |
0 |
1 |
-5/3 |
0 |
1/3 |
0 |
0 |
7 |
|
S4 |
0 |
0 |
0 |
-28/3 |
0 |
2/3 |
1 |
0 |
12 |
|
S1 |
0 |
0 |
0 |
-19/3 |
0 |
2/3 |
0 |
1 |
4 |
В строке Z нет отрицательных чисел, значит найдено оптимальное решение:
Z = 7722 ; X1 =5; X2 =7.
3. Алгоритм программы
4. Процедуры и переменные
Таблица с описание процедур:
Вызов |
Название процедуры |
Предназначение |
|
Кнопка «Записать уравнение» |
TForm1.Button1Click |
Составление и вывод ур-ний в ListBox1. |
|
Кнопка «Создать таблицу» |
TForm1.Button2Click |
Открывает таблицу для расчетов, заполняет ее, определяет ведущую стоку, столбец выделяя их цветом. |
|
Кнопка «Рассчитать» |
TForm1.Button3Click |
Производятся решение задачи с выводом результата в ListBox1. |
|
Кнопка «Сброс» |
TForm1.BitBtn1Click |
Возвращает программу в исходное состояние. |
|
При запуске программы |
TForm1.FormActivate |
Заполнение таблицы значениями по умолчанию. |
|
При заполнении таблицы “original” |
TForm1.originalKeyPress |
Запрет на ввод запрещённых символов |
|
Свойство таблицы StringGrid2 |
TForm1.StringGrid2DrawCell |
Выделяет цветом ведущие строку и столбец |
|
col(NStolbez) |
procedure col |
Поиск ведущей колонки |
|
row(NStroka) |
procedure row |
Поиск ведущего столбца |
Таблица с описанием объектов:
Название элемента |
Предназначение |
|
ListBox1 |
Вывод промежуточных и конечных значений. |
|
StringGrid1 |
Таблица с исходными данными. |
|
StringGrid2 |
Таблица с решением задачи. |
|
CheckBox1 |
Условие для выполнения «быстрого» расчета. |
|
Label1 Label2 Label3 Label4 Label5 |
Информационные текстовые сообщения. |
|
Panel1 |
Информационные текстовые сообщения. |
Список используемых переменных и их назначение:
Имя |
Назначение переменной |
|
Formul |
Переменная формулы |
|
FormulZ |
Переменная формулы Z |
|
i, j |
Переменные для организации счетчиков |
|
NStroka |
Переменная - ведущей строки |
|
NStolbez |
Переменная - ведущего столбца |
|
CurCol |
Переменная колонки для определения цвета |
|
CurRow |
Переменная строки для определения цвета |
|
g, f |
Х1 и Х2 - присваиваются значения |
|
r |
Промежуточная переменная |
|
Velement |
Переменная - ведущего элемента |
|
rMax |
Промежуточная переменная при поиске максимального значения |
5. Справка для работы пользователя с программой
Проверка программы на примере задачи.
Для работы с программой запускаем файл TabSimMethod.exe рис.1.
Рис.1 Файл TabSimMethod.exe
Запустится программа «TabSimMethod» - табличный симплекс-метод рис.2.
Рис.2. Начало решения программы.
решение задача таблица программа
По умолчанию, в исходную таблицу, заносятся исходные данные проверяемой задачи, которые можно с легкостью поменять. Выставляем условие для быстрого решения задачи (если необходимо), по умолчанию условие «Быстрого расчета» отключено.
Нажимаем кнопку «Записать уравнение» , будут составлены и записаны уравнения в окно сообщений для дальнейшего расчета задачи рис.3.
Рис.3. ListBox - вывод уравнений.
Следующий шагом выполняем действие «Создать таблицу» нажав на кнопку . Будет сформирована новая таблица с записанными в ее данными и с выделением ведущей строки и ведущего столбца рис. 4.
Рис.4. Таблица.
Далее нажиме кнопку «Рассчитать» и если стоит условие «Быстрое решение», получим готовое решение поставленной задачи рис.5. Если условие на «Быстрое решение» не стоит, тогда решение будет выполняться пошагово, каждый раз при нажатии на кнопку «Рассчитать» до получения готового решения.
Рис.5. Завершение решения программы.
В разделе «Выбор наиболее эффективного метода и решение задачи» был произведен расчет задачи. Результат вычислений: Z = 7722 ; X1 =1; X2 =7.
При заполнении таблицы, в разработанной программе, данными из задачи рис.2 и выполнив процедуру вычислений, получаем результаты рис.5.
Z = 7722 ; X1 =1; X2 =7, что соответствует результатам ручного вычисления.
В любой из моментов работы программы, можно перейти к началу расчетов, нажав на кнопку «Сброс».
Приложение А
Программный код.
unit Progect;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Grids, Buttons;
type
TForm1 = class(TForm)
ListBox1: TListBox;
StringGrid1: TStringGrid;
StringGrid2: TStringGrid;
Panel1: TPanel;
Button1: TButton;
Button2: TButton;
Button3: TButton;
BitBtn1: TBitBtn;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
CheckBox1: TCheckBox;
procedure FormActivate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure StringGrid2DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
procedure StringGrid1KeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Formul, FormulZ : string[100] ;
i, j, NStroka, NStolbez,CurCol, CurRow : integer;
g, f , r, rMax, Velement, speede : real;
implementation
{$R *.dfm}
procedure col( NStolbez:integer); // поиск ведущей колонки
begin
rMax:= 99999;
For i:=1 to 7 do
begin
r:= StrToFloat(form1.StringGrid2.Cells[i,1]);
if r < rMax Then
begin
rMax := r;
yv:= i;
end;
end;
end;
procedure row( NStroka:integer); // поиск ведущей стрки
Label qwer ;
begin
rMax := 99999;
For i:=2 to 6 do
begin
r:= StrToFloat(form1.StringGrid2.Cells[8, i]);
if StrToFloat(form1.StringGrid2.Cells[NStolbez, i]) <= 0 then
goto qwer;
if (r/StrToFloat(form1.StringGrid2.Cells[NStolbez, i]) < rMax) Then
begin
rMax := r/StrToFloat(form1.StringGrid2.Cells[NStolbez, i]);
yx:= i;
qwer:
end;
end;
end;
// --- Процедура открытии Form1- заполняется таблица StringGrid1\\
procedure TForm1.FormActivate(Sender: TObject);
begin
StringGrid1.cells[0,0]:= 'Поезда \ Вагоны'; StringGrid1.cells[0,1]:= 'Скорый';
StringGrid1.cells[0,2]:= 'Пассажирский'; StringGrid1.cells[0,3]:='Число пассажиров';
StringGrid1.cells[0,4]:= 'Парк вагонов';
StringGrid1.cells[1,0]:= 'Багажный';StringGrid1.cells[2,0]:= 'Почтовый';
StringGrid1.cells[3,0]:= 'Плацкарт'; StringGrid1.cells[4,0]:= 'Купейный';
StringGrid1.cells[5,0]:= 'Мягкий';
StringGrid1.cells[1,1]:= '1';StringGrid1.cells[1,2]:= '1';
StringGrid1.cells[1,3]:= '0';StringGrid1.cells[1,4]:= '12';
StringGrid1.cells[2,1]:= '1';StringGrid1.cells[2,2]:= '0';
StringGrid1.cells[2,3]:= '0';StringGrid1.cells[2,4]:= '8';
StringGrid1.cells[3,1]:= '5';StringGrid1.cells[3,2]:= '8';
StringGrid1.cells[3,3]:= '58'; StringGrid1.cells[3,4]:= '81';
StringGrid1.cells[4,1]:= '6';StringGrid1.cells[4,2]:= '4';
StringGrid1.cells[4,3]:= '40';StringGrid1.cells[4,4]:= '70';
StringGrid1.cells[5,1]:= '3';StringGrid1.cells[5,2]:= '1';
StringGrid1.cells[5,3]:= '32';StringGrid1.cells[5,4]:= '26';
ListBox1.Items.Add('ВЫВОД ЗНАЧЕНИЙ');
ListBox1.Items.Add(' ');
end;
// -- При нажатии на Button1, составляем формулы и выводим в ListBox1--\\
procedure TForm1.Button1Click(Sender: TObject); // кнопка составить уравнения //
begin
For i:=1 to 5 do // колонки
begin
For j:=1 to 2 do // строки
begin
if StrToFloat(StringGrid1.Cells[i, j]) <> 0 Then
begin IF Formul <> '' Then Formul := Formul +'+';
if StrToFloat(StringGrid1.Cells[i, j])= 1 Then
Formul := Formul + 'X' + IntToStr(j)
else
Formul := Formul + StringGrid1.Cells[i, j] + 'X' + IntToStr(j);
end; end;
Formul := Formul + '<=' + StringGrid1.Cells[i, j+1] ;
ListBox1.Items.Add(Formul);
Formul := '';
end;
g := StrToFloat(StringGrid1.Cells[3, 1]) * StrToFloat(StringGrid1.Cells[3, 3]) ; // составляем
g := g + StrToFloat(StringGrid1.Cells[4, 1]) * StrToFloat(StringGrid1.Cells[4, 3]) ; // целевое
g := g + StrToFloat(StringGrid1.Cells[5, 1]) * StrToFloat(StringGrid1.Cells[5, 3]) ; // уравнение
FormulZ := FloatToStr(g) + ' X1 ' + ' + ' ;
f := StrToFloat(StringGrid1.Cells[3, 2]) * StrToFloat(StringGrid1.Cells[3, 3]) ;
f := f + StrToFloat(StringGrid1.Cells[4, 2]) * StrToFloat(StringGrid1.Cells[4, 3]) ;
f := f + StrToFloat(StringGrid1.Cells[5, 2]) * StrToFloat(StringGrid1.Cells[5, 3]) ;
FormulZ := FormulZ + FloatToStr(f) + ' X2 ' + ' = Zmax' ; // готовое ур-ние
g := g * (-1); // принимает отрицательное цначение
f := f *(-1);
ListBox1.Items.Add('Целевое ур-ние');
ListBox1.Items.Add(FormulZ);
Button1.Visible := False;
Button2.Visible := True;
end;
// --- Button2 «Создать таблицу». В ListBox1записать ур-ние, StringGrid2- сформировать и заполнить--\\
procedure TForm1.Button2Click(Sender: TObject); // создать таблицу \\
Label qwer ; // метка возврата
begin
StringGrid2.Visible := True; // показать таблицу
ListBox1.Items.Add( 'Z ' + FloatToStr(g) + ' X1 ' + FloatToStr(f) + 'X2 = 0');
With StringGrid2 do // запись в «0»-ю колонку/столбец переменных
begin
cells[0,1]:= 'Z'; cells[1,0]:= 'X1'; cells[6,0]:= 'S4';
cells[0,2]:= 'S1'; cells[2,0]:= 'X2'; cells[7,0]:= 'S5';
cells[0,3]:= 'S2'; cells[3,0]:= 'S1'; cells[8,0]:= 'Решение';
cells[0,4]:= 'S3'; cells[4,0]:= 'S2'; cells[0,6]:= 'S5';
cells[0,5]:= 'S4'; cells[5,0]:= 'S3';
cells[1,1]:= FloatToStr(g); cells[2,1]:= FloatToStr(f);
end;
For i:=3 to 8 do
StringGrid2.cells[i,1]:= FloatToStr(0); // остальные нули
With StringGrid2 do // заполнение таблицы
begin
cells[1,2]:= StringGrid1.cells[1,1]; cells[2,2]:= StringGrid1.cells[1,2]; cells[8,2] := StringGrid1.cells[1,4];
cells[1,3]:= StringGrid1.cells[2,1]; cells[2,3]:= StringGrid1.cells[2,2]; cells[8,3] := StringGrid1.cells[2,4];
cells[1,4]:= StringGrid1.cells[3,1]; cells[2,4]:= StringGrid1.cells[3,2]; cells[8,4] := StringGrid1.cells[3,4];
cells[1,5]:= StringGrid1.cells[4,1]; cells[2,5]:= StringGrid1.cells[4,2]; cells[8,5] := StringGrid1.cells[4,4];
cells[1,6]:= StringGrid1.cells[5,1]; cells[2,6]:= StringGrid1.cells[5,2]; cells[8,6] := StringGrid1.cells[5,4];
cells[3,2]:= '1'; cells[4,2]:= '0'; cells[3,3]:= '0'; cells[3,4]:= '0';
cells[4,3]:= '1'; cells[5,2]:= '0'; cells[5,3]:= '0'; cells[4,4]:= '0';
cells[5,4]:= '1'; cells[6,2]:= '0'; cells[6,3]:= '0'; cells[6,4]:= '0';
cells[6,5]:= '1'; cells[7,2]:= '0'; cells[7,3]:= '0'; cells[7,4]:= '0';
cells[7,6]:= '1'; cells[3,5]:= '0'; cells[4,5]:= '0'; cells[5,5]:= '0';
cells[7,5]:= '0'; cells[6,6]:= '0'; cells[3,6]:= '0'; cells[4,6]:= '0'; cells[5,6]:= '0';
end;
Button2.Visible := False; //закрываем кнопку
Button3.Visible := True; //открываем кнопку
// Поиск ведущей колонк
col(NStolbez);
NStolbez:=yv;
//Поиск ведущей строки
row(NStroka);
NStroka:=yx;
// нахождение вед. элемента
Velement:= StrToFloat(StringGrid2.Cells[NStolbez, NStroka]);
end;
// -- КНОПКА СБРОСА --\\
procedure TForm1.BitBtn1Click(Sender: TObject);
// кнопк сброса
begin
Button1.Visible := True;
Button2.Visible := False;
Button3.Visible := False;
ListBox1.Clear; // очистка
StringGrid2.Visible := False;
ListBox1.Items.Add('ВЫВОД ЗНАЧЕНИЙ'); // вывод
ListBox1.Items.Add(' ');
NStolbez := 10; // просто за предел таблицы (касается этой задачи)
NStroka := 10;
CheckBox1.Checked := false;
end;
// -- Кнопка «Рассчитать»-- основной метод расчета--\\
procedure TForm1.Button3Click(Sender: TObject);
Label qwer, speed ;
begin
speed: // метка возврата
StringGrid2.Cells[0, NStroka] := StringGrid2.Cells[NStolbez, 0];
//Пересчет ведущей строки
For i:= 1 to 8 do
// округление
StringGrid2.Cells[i, NStroka]:= formatfloat('0.#####',(StrToFloat(StringGrid2.Cells[i, NStroka])/Velement));
// Запись в лист
ListBox1.Items.Add('Столбец № ' + FloatToStr(NStolbez) + ' Строка № '+ FloatToStr(NStroka));
ListBox1.Items.Add('Ведущий элемент ' + FloatToStr(Velement));
// Пересчет строк
For j:= 1 to 6 do
Begin
if j <> NStroka then
begin
Velement:= StrToFloat(StringGrid2.Cells[NStolbez, j]);
For i:=1 to 8 do
begin
// округление // заполнение таблицы
StringGrid2.Cells [i, j] := formatfloat('0.#####',(StrToFloat(StringGrid2.Cells[i, j]) - StrToFloat(StringGrid2.Cells[i, NStroka])* Velement));
end; end; end;
// Поиск ведущей колонк
col(NStolbez);
NStolbez:=yv;
//Поиск ведущей строки
row(NStroka);
NStroka:=yx;
// нахождение вед. элемента
Velement:= StrToFloat(StringGrid2.Cells[NStolbez, NStroka]);
rMax := 0; // проверка на «0» конец решения
For i:=1 to 7 do
begin
r:= StrToFloat(StringGrid2.Cells[i,1]);
if r < 0 Then
begin
rMax := rMax + 1;
end;
end;
// конец расчета
If rMax = 0 then
begin
Button3.Visible := False;
ListBox1.Items.Add('');
ListBox1.Items.Add('Решение найдено');
NStolbez := 10;
NStroka := 10;
For i:=1 to 6 do // ВЫВОДИМ результат в лист бокс по кол-ву циклов
begin
if StringGrid2.Cells[0, i] = 'X1' then
ListBox1.Items.Add(StringGrid2.Cells[0, i] + ' = ' + StringGrid2.Cells[8, i]);
if StringGrid2.Cells[0, i] = 'X2' then
ListBox1.Items.Add(StringGrid2.Cells[0, i] + ' = ' + StringGrid2.Cells[8, i]);
if StringGrid2.Cells[0, i] = 'Z' then
ListBox1.Items.Add(StringGrid2.Cells[0, i] + ' = ' + StringGrid2.Cells[8, i]);
end;
end;
// выполнение быстрого расчета
for i:= 1 to 7 do
if (StrToFloat(StringGrid2.Cells[i, 1]) <0) and (CheckBox1.Checked = true) then
GOTO speed; //возврат в начало
end;
procedure TForm1.StringGrid2DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
// Выделяем цветом ведущие строку и стобец
Const // определяем цвет.
clPaleGreen = TColor($00CCFF); // розовый лучше CCCCFF
begin
if ACol = NStolbez //ведущая колонка будет РОЗОВОЙ (PING)
then
StringGrid2.Canvas.Brush.color := clPaleGreen ;
if ARow = NStroka
then
StringGrid2.Canvas.Brush.color := clPaleGreen ;
If (ACol >0)and (ARow>0) then
begin
//Закрашиваем бэкграунд
StringGrid2.canvas.fillRect(Rect);
//Закрашиваем текст : ( можно добавить выравнивание и т.д.)
StringGrid2.canvas.TextOut(Rect.Left,Rect.Top,StringGrid2.Cells[ACol,ARow]);
end;
end;
// разрешение ввода только цифр
procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
case key of
'0'..'9': ; //только цифры
#8: ; //забой
'.', ',': //точка и запятая
if Pos(DecimalSeparator, StringGrid1.Cells[CurCol,CurRow]) = 0 then
Key := DecimalSeparator
else
Key := #0;
else
key := #0;
end;
end;
end.
Список литературы
1. Бородич Ю.С. и др. Паскаль для персональных компьютеров: Справ. пособие / Ю.С. Бородич, А.Н. Вальвачев, А.И. Кузьмич.-Мн.: Выш.шк.: БФ ГИТМП «Ника», 1991.-365с.
2. Мануйлов В.Г.Разработка программного обеспечения на Паскале.: “Приор”., 1996. -238 с.
3. Вальвачев А.Н. Графическое программирование на языке Паскаль: Справ.пособие. - Мн.: Выш.шк.,1992. -143 с.
Размещено на Allbest.ru
Подобные документы
Обзор алгоритмов методов решения задач линейного программирования. Разработка алгоритма табличного симплекс-метода. Составление плана производства, при котором будет достигнута максимальная прибыль при продажах. Построение математической модели задачи.
курсовая работа [266,4 K], добавлен 21.11.2013Определение наиболее выгодного соотношения сортов сырой нефти, используемой для производства бензина. Математическая постановка задачи. Выбор метода решения задачи. Описание алгоритма решения задачи (симплекс-метода) и вычислительного эксперимента.
курсовая работа [1,1 M], добавлен 08.12.2010Создание и реализация алгоритма решения транспортной задачи методом наименьших стоимостей. Схема алгоритма основной программы. Основные шаги алгоритма решения транспортной задачи. Инструкция по эксплуатации программы и обзор результатов ее выполнения.
курсовая работа [2,0 M], добавлен 12.02.2013Сущность симплекс-метода. Общая характеристика задачи о смесях. Разработка основных алгоритмов решения задачи. Решение задачи в среде визуального программирования Delphi. Проектирование интерфейса пользователя. Разработка форм ввода-вывода информации.
курсовая работа [476,6 K], добавлен 22.05.2012Постановка задачи линейного программирования. Решение системы уравнений симплекс-методом. Разработка программы для использования симплекс-метода. Блок-схемы основных алгоритмов. Создание интерфейса, инструкция пользователя по применению программы.
курсовая работа [1,7 M], добавлен 05.01.2015Построение математической модели. Выбор, обоснование и описание метода решений прямой задачи линейного программирования симплекс-методом, с использованием симплексной таблицы. Составление и решение двойственной задачи. Анализ модели на чувствительность.
курсовая работа [100,0 K], добавлен 31.10.2014Описание симплекс метода решения задачи линейного программирования. Решение задачи методом Литла на нахождение кратчайшего пути в графе, заданном графически в виде чертежа. Из чертежа записываем матрицу расстояний и поэтапно находим кратчайший путь.
задача [390,4 K], добавлен 10.11.2010Описание алгоритма решения транспортной задачи по планированию перевозки зерна. Ход решения задачи вручную, в программе TORA методом наименьшего элемента, с помощью MS Excel. Разработка программы для решения задачи в общем виде средствами Delphi.
курсовая работа [2,5 M], добавлен 22.11.2012Краткий обзор решения транспортных задач. Экономическая интерпретация поставленной задачи. Разработка и описание алгоритма решения задачи. Построение математической модели. Решение задачи вручную и с помощью ЭВМ. Анализ модели на чувствительность.
курсовая работа [844,3 K], добавлен 16.06.2011Алгоритм решения задач линейного программирования симплекс-методом. Построение математической модели задачи линейного программирования. Решение задачи линейного программирования в Excel. Нахождение прибыли и оптимального плана выпуска продукции.
курсовая работа [1,1 M], добавлен 21.03.2012