Автор работы: Пользователь скрыл имя, 21 Мая 2013 в 12:04, курсовая работа
Актуальность использования метода обусловлена высокой востребованность экономического образования в современных условиях, важностью повышения уровня математической подготовки экономистов и недостатком доступных методов, сочетающих систематизированное изложение теоретических основ метода динамического программирования с последовательным обучением решению данным методом типовых экономических задач.
Введение 4
1 Постановка задачи 6
1.1 Требования к системе и ее структуре 6
1.2 Требования к функциям, выполняемым системой 6
1.3 Требования к программно-аппаратному обеспечению 7
1.4 Требования к техническому обеспечению 7
1.5 Требования к эргономике и технической эстетике 7
1.6 Требования к надежности и хранению информации 8
2 Основная часть 9
2.1 Математическая модель 9
2.2 Метод решения задачи 10
2.3 Структурная схема программы 12
2.4 Схема взаимодействия модулей 12
3 Руководство программисту 13
4 Руководство пользователя 13
4.1 Общие сведения 13
4.2 Работа с помощью 13
4.3 Наиболее вероятные ошибки 13
Заключение 15
Список использованных источников 16
4.2 Работа с помощью
При запуске приложения пользователю предлагается выбрать размерность матрицы, после чего заполнить ее и нажать кнопку «ОК». После заполнения матрицы и нужно нажать кнопку «Рассчитать» открывается новое окно, в котором представлены этапы решения задачи, кратчайший путь и длина выбранного пути. Чтобы вывести отчет, в котором будет отображен конечный ответ и кратчайший путь необходимо, нажать кнопку «Составить отчет». Отчет будет сформирован в MS Word, после чего его можно распечатать.
4.3 Наиболее вероятные ошибки
Результат ошибки, при заполнении размерности матрицы отрицательными числами или оставив поле пустым, представлен на рисунке 5:
Рисунок 5 - Ошибка при заполнении размерности матрицы
Результат ошибки при заполнении матрицы представлен на рисунке 6:
Рисунок 6 - Ошибка при заполнении матрицы
Заключение
При написании курсовой
работы, передо мной стояла цель - выявить
наилучший способ решения задач
динамического
Во второй части курсовой
работы мной была изучена основная
идея и особенности вычислительного
метода динамического
В третьей части курсовой
работы мной была создана программа,
предназначающаяся для решения
задач динамического
Динамическое программирование
хорошо приспособлено для решения
задач оптимизации
Именно благодаря данной
программе можно облегчить труд
человека, решающего задачи методом
динамического
Список использованных источников
САЙТЫ (добавить)
Приложение А - Текст программы
Program
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, Buttons, ComCtrls, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
UpDown1: TUpDown;
SpeedButton1: TSpeedButton;
StringGrid1: TStringGrid;
SpeedButton2: TSpeedButton;
Label1: TLabel;
SpeedButton3: TSpeedButton;
Label2: TLabel;
SpeedButton4: TSpeedButton;
procedure SpeedButton1Click(Sender: TObject);
procedure StringGrid1KeyPress(Sender: TObject; var Key: Char);
procedure StringGrid1Click(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
procedure SpeedButton3Click(Sender: TObject);
procedure SpeedButton4Click(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
i,j:integer;
k,c,i1,j1,a,b,l,a1,b1,c1,r,f,
h,n,m,min,v,g:array [1..10] of integer;
min1,mal:array [1..10] of string;
y:boolean;
implementation
uses Unit2;
{$R *.dfm}
procedure TForm1.SpeedButton1Click(
begin
if StrToInt(Edit1.Text)<=0 then ShowMessage('Размерность матрицы не может быть меньше или равной нулю')
else begin
Label2.Visible:=true;
StringGrid1.Visible:=true;
SpeedButton2.Visible:=true;
StringGrid1.RowCount:=
StringGrid1.ColCount:=
StringGrid1.Width:=32*(
StringGrid1.Height:=26*(
for i:=1 to StrToInt(Edit1.Text) do
with stringgrid1 do begin
Cells[0,i]:='с'+IntToStr(i);
Cells[i,0]:='с'+IntToStr(i);
procedure TForm1.StringGrid1KeyPress(
begin
if not (key in ['0'..'9',#8])then key :=#0;
end;
procedure TForm1.StringGrid1Click(
begin
for i:=1 to StrToInt(Edit1.Text) do
for j:=1 to StrToInt(Edit1.Text) do
with stringgrid1 do
if j>=i then
cells[i,j]:='0';
end;
procedure TForm1.SpeedButton2Click(
begin
for i:=1 to StrToInt(Edit1.Text) do
for j:=1 to StrToInt(Edit1.Text) do
if StringGrid1.Cells[i,j]=''
then begin ShowMessage('Заполните
for i:=1 to StrToInt(Edit1.Text) do
for j:=1 to StrToInt(Edit1.Text) do
with stringgrid1 do
if cells[i,j]='' then cells[i,j]:='0';
k:=0;
i1:=0;
a:=1;
c:=1;
for j:=1 to StrToInt(Edit1.Text) do
with stringgrid1 do
if cells[StrToInt(Edit1.Text),j]<
k:=k+1;
i1:=i1+1;
n[i1]:=j;end;
c:=k+c;
b:=k;
a:=a+1;
repeat
k:=0; i1:=0;
for i:=1 to StrToInt(Edit1.Text) do
for j:=1 to b do begin
if (StringGrid1.Cells[n[j],i]<> '0') and (i1=0) then begin
k:=k+1;
i1:=i1+1;
m[i1]:=i;end;
if (StringGrid1.Cells[n[j],i]<> '0') and (i1>0) and (m[i1]<>i) then begin
k:=k+1;
i1:=i1+1;
m[i1]:=i;end;
end;
b:=k;
c:=c+k;
a:=a+1;
n:=m;
until c=StrToInt(Edit1.Text);
for i:=1 to StrToInt(Edit1.Text)-1 do begin k:=0;
for j:=1 to StrToInt(Edit1.Text) do
if StringGrid1.Cells[j,i]<>'0' then k:=k+1;
h[i]:=k;
end;
SpeedButton3.Visible:=true;
end;
procedure TForm1.SpeedButton3Click(
begin
SpeedButton2.Enabled:=false;
with form2 do begin
tabl[1]:=TStringGrid.Create(
tabl[1].Parent:=Form2;
tabl[1].FixedCols:=0;
tabl[1].Top:=50;
tabl[1].Left:=32;
tabl[1].DefaultColWidth:=30;
tabl[1].ColCount:=4;
tabl[1].Width:=32*4;
tabl[1].Cells[0,0]:='X'+
tabl[1].Cells[1,0]:='U'+
tabl[1].Cells[2,0]:='X'+
tabl[1].Cells[3,0]:='F'+
k:=0;
i1:=0;
b1:=0;
c:=1;
q:=0;
for j:=1 to StrToInt(Edit1.Text) do
if StringGrid1.Cells[StrToInt(
k:=k+1;
i1:=i1+1;
b1:=b1+1;
n[i1]:=j;
tabl[1].RowCount:=b1+1;
tabl[1].Height:=26*(b1+1);
tabl[1].Cells[0,b1]:=
tabl[1].Cells[1,b1]:='('+
tabl[1].Cells[2,b1]:=
tabl[1].Cells[3,b1]:=
min[j]:=StrToInt(tabl[1].
end;
q:=q+1;
for i:=1 to b1 do
if tabl[1].Cells[3,i]<>'-' then begin
min2:=strtoint(tabl[1].Cells[
min1[q]:=tabl[1].Cells[0,i];
for i:=1 to b1 do
if min2>strtoint(tabl[1].Cells[3,
min2:=strtoint(tabl[1].Cells[
min1[q]:=tabl[1].Cells[0,i];
end;
a1:=1;
c:=k+c;
b:=k;
c1:=50;
j1:=50;
repeat
k:=0;
i1:=0;
j1:=j1+26*(b1+1)+c1;
b1:=0;
a:=a-1;
a1:=a1+1;
with form2 do begin
tabl[a1]:=TStringGrid.Create(
tabl[a1].Parent:=Form2;
tabl[a1].FixedCols:=0;
tabl[a1].DefaultColWidth:=30;
tabl[a1].Top:=j1;
tabl[a1].Left:=32;
tabl[a1].ColCount:=7;
tabl[a1].Width:=32*7;
tabl[a1].Cells[0,0]:='X'+
tabl[a1].Cells[1,0]:='U'+
tabl[a1].Cells[2,0]:='X'+
tabl[a1].Cells[3,0]:='Z'+
tabl[a1].Cells[4,0]:='F'+
tabl[a1].Cells[5,0]:='Z'+
tabl[a1].Cells[6,0]:='F'+
for i:=1 to StrToInt(Edit1.Text) do begin
x:=0;
for j:=1 to b do begin
if (StringGrid1.Cells[n[j],i]<> '0') and (i1>0) then begin
b1:=b1+1;
tabl[a1].RowCount:=b1+1;
tabl[a1].Height:=26*(b1+1);
tabl[a1].Cells[0,b1]:=
tabl[a1].Cells[1,b1]:='('+
tabl[a1].Cells[2,b1]:=
tabl[a1].Cells[3,b1]:=
r:=StrToInt(StringGrid1.Cells[
tabl[a1].Cells[4,b1]:=
f:=(min[n[j]]);
tabl[a1].Cells[5,b1]:=
tabl[a1].Cells[6,b1]:=
if h[i]=1 then min[i]:=strtoint(tabl[a1].
if h[i]>1 then begin
x:=x+1;
v[x]:=strtoint(tabl[a1].Cells[
if (m[i1]<>i) then begin
k:=k+1;
i1:=i1+1;
m[i1]:=i; end;end;
if (StringGrid1.Cells[n[j],i]<> '0') and (i1=0) then begin
k:=k+1;
i1:=i1+1;
b1:=b1+1;
m[i1]:=i;
tabl[a1].RowCount:=b1+1;
tabl[a1].Height:=26*(b1+1);
tabl[a1].Cells[0,b1]:=
tabl[a1].Cells[1,b1]:='('+
tabl[a1].Cells[2,b1]:=
tabl[a1].Cells[3,b1]:=
r:=StrToInt(StringGrid1.Cells[
tabl[a1].Cells[4,b1]:=
f:=(min[n[j]]);
tabl[a1].Cells[5,b1]:=
tabl[a1].Cells[6,b1]:=
if h[i]=1 then min[i]:=strtoint(tabl[a1].
if h[i]>1 then begin
x:=x+1;
v[x]:=strtoint(tabl[a1].Cells[
if h[i]>1 then begin
min[i]:=v[1];
for x:=1 to h[i]-1 do begin
if min[i]>v[x+1] then begin
min[i]:=v[x+1];
tabl[a1].Cells[6,g[x]]:='-';
if min[i]<v[x+1] then
tabl[a1].Cells[6,g[x+1]]:='-';
end;end;end;
b:=k;
c:=c+k;
n:=m;
q:=q+1;y:=false;
for i:=1 to b1 do begin
if tabl[a1].Cells[6,i]<>'-' then begin
min2:=strtoint(tabl[a1].Cells[
min1[q]:=tabl[a1].Cells[0,i];
if y=true then Break;end;
for i:=1 to b1 do
if (tabl[a1].Cells[6,i]<>'-') and (min2>strtoint(tabl[a1].Cells[
min2:=strtoint(tabl[a1].Cells[
min1[q]:=tabl[a1].Cells[0,i];
end;
until c=StrToInt(Edit1.Text);
x:=1;
mal[1]:=StringGrid1.Cells[
for i:=1 to a1 do begin
x:=x+1;
mal[x]:=min1[i];end;
for i:=a1+1 downto 1 do
Form2.Memo1.Lines.Add(mal[i]);
Form2.Visible:=True;
Form2.Label3.Caption:='Длина
крайчайшего пути ='+tabl[a1].Cells[tabl[a1].
end;
procedure TForm1.SpeedButton4Click(Sende
begin
close;
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if StrToInt(Edit1.Text)>10 then Edit1.Text:='10';end;end.
Приложение Б - Формы программы