Расчёт параметров сетевого графика

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

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

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

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

ФГОУ СПО Тульский экономический колледж

Пояснительная записка к курсовому проекту

По предмету: Компьютерное моделирование

На тему: Расчёт параметров сетевого графика

Специальность: 230105 программное обеспечение вычислительной техники и автоматизированных систем

Разработал: Вилинский А.П.

Проверил: Юрченко В.Н.

г Щёкино 2009 год

План

Введение

1. Сущность задачи

2. Математическая модель

3. Описание входной и выходной информации

4. Программно-технические средства, необходимые для разработки программы

5. Тестирование программы

6. Описание программы:

6.1. Назначение программы

6.2. Порядок установки

6.3. Завершение работы программы

6.4. Система меню и экранные формы

Заключение

Список сокращений

Приложения

Литература

Введение

Математическое программирование представляет собой математическую дисциплину, занимающуюся изучением экстремальных задач и разработкой методов их решения.

В общем виде математическая постановка экстремальной задачи состоит в определении наибольшего или наименьшего значения целевой функции.

В зависимости от свойств функций f и gi математическое программирование можно рассматривать как ряд самостоятельных дисциплин, занимающихся изучением и разработкой методов решения определённых классов задач.

Прежде всего задачи математического программирования делятся на задачи линейного и нелинейного программирования. Также в математическом программировании широко применяется программирование сетевого графика.

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

Если сетевой график небольшой (около 100 событий), то расчёты можно проводить вручную. При ручном расчёте сетевого графика удобно пользоваться табличным способом расчёта основных показателей сетевого графика.

1. Сущность задачи
Под расчётом параметров сетевого графика понимается сокращение критического пути т.е. уменьшение суммарных затрат на выполнение всего комплекса работ. Под суммарными затратами подразумеваются прямые расходы т.е. расходы на рабочую силу, оборудование и материалы непосредственно расходуемые на проведение работы.

Производится пересмотр топологии сети, т.е. изменение состав последовательности выполнения или взаимосвязи между работами.

Если все работы, включённые в сетевой график выполняются с нормальной продолжительностью, т.е. при нормальных условиях снабжения ресурсами, то общая стоимость разрабатываемого проекта является минимальной. Когда же работы ускоряются, то затраты связанные с их выполнением ,возрастают. Причём в случае когда все работы выполняются с минимальной продолжительностью, стоимость выполнения всего комплекса работ достигнет максимума, а его продолжительность минимума.

К поставленной задаче могут быть два различных методических подхода. С одной стороны, если все работы, включённые в сетевой график, имеют нормальные временные оценки, в результате чего общая стоимость их выполнения будет минимальной, а критический путь достигает максимума, то требуется определить, при ускорении каких работ общая стоимость возрастает в минимальной степени.

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

В этом случае задача сводится к нахождению такого варианта увеличения продолжительности некритических работ, при котором были бы минимизированы суммарные затраты.

2. Математическая модель

Под моделированием понимают изучение объекта не непосредственным, а косвенным путём при помощи изучения вспомогательных объектов которые называются моделями. Модель это образ или прообраз изучаемого объекта.

Для начала работы с расчётом параметра сетевого графика рассмотрим её математическую модель.

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

При определении ранних сроков начала tр.н (i, j) и окончания tр.о (i, j) работы следует помнить, что первый определяется продолжительностью максимального пути от исходного до начального события данной работы, т.е. самый ранний срок наступления начального события данной работы:

tр.н (i, j) = tр (i), (1)

а второй равен сумме раннего срока начала и продолжительности данной работы: tр.о (i, j) = tр.н (i, j) + t (i, j) , где tр (i) - самый ранний из возможных сроков свершения начального сабытия: t (i, j) продолжительность данной работы.

При определении поздних и допустимых сроков начала tп.н (i, j) и окончания tп.о (i, j) работы учитывают, что позднее начало работы может быть определено как разность между поздним окончанием данной работы и её продолжитель-ностью: tп.н (i, j) = tп.о (i, j) - t (i, j), а самый поздний срок окончания работы, при котором продолжительность критического пути неизменится, равенпозд-ниму сроку наступления конечного события данной работы: tп.о (i, j) = tп (j), где tп (j) наиболее поздний из допустимых сроков свершения конечного события.

Для всех работ критического пути

tр.н (i, j) = tп.н (i, j); tр.о (i, j) = tп.о (i, j) . (5)

При определении резервов времени учитывают что, полный резерв времени работы R (i, j) - срок, на который можно передвинуть данную работу, неувели- чивая критический путь, определяется по формуле:

R (i, j) = tп.о (i, j) - tр.о (i, j) = tп (j) - tр (i) - t (i, j). (6)

Частный резерв времени работы r (i, j) - срок, на который можно передвинуть окончание данной работы, не влияя надругие характеристики сети, выражается зависимость:

r (i, j) = tр (i) - tр.о (i, j) = tп (j) - tр (i) - t (i, j), где tр (i, j) - (7)

самый ранний из возможных сроков свершения конечного события, а резерв времени события r (i) - срок, на который можно сдвинуть свершение данного сабытия, не увеличивая продолжительности всей разработки, составит:

r(i) = tп (i) - tр (i). (8)

События критического пути не имеют резервов времени.

3. Описание входной и выходной информации

Основной входной информацией являются данные поставленной задачи, представленные в виде графа (смотрите рис. 1) или таблицы, в которых указаны номера событий и срок выполнения работы.

Рис. 1.

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

Выходная информация представлена в Приложении А. После решения задачи, данные можно сохранить в файл и в дальнейшем распечатать.
4. Программно-технические средства используемые при разработки программы
Аппаратная часть предусматривает использование следующего оборудования:
Компьютер:
Процессор Intel Core2 Duo;
материнская плата ASUS P5K SE;
объём оперативной памяти DDR2 2048Mb;
диагональ монитора 17;
марка монитора Prestigio P171;
видеоадаптер ATI Radeon HD 3800 Series;
объём видеопамяти 1024Mb;
объём жёсткого диска 900Gb;
дисковод Optiarc DVD RW.
При разработке программного продукта использовалась операционная система Windows XP SP2, среда программирования Borland Delphi 7.0.

5. Тестирование программы

При функциональном тестировании существует три этапа:

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

проверка работы программы в экстремальных условиях проводится для данных, находящихся на границе области допустимых значений, такая проверка иногда называется граничным испытанием программы;

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

При тестировании программы вводилось количество поступившей или реализованной продукции. Результаты тестирования приведены в Таблице.

Тестирование программы

Номер теста

Вводимое значение

Реакция программы

1

100

Входит в область допустимых значений,

Программа выполняет расчёты

2

52

Входит в область допустимых значений,

Программа выполняет расчёты

3

0

Находится на границе допустимых значений, программа выполняет расчёты

4

50,04

Входит в область допустимых значений,

Программа выполняет расчёты

5

-640

Не входит в область допустимых значений, программа расчётов не выполняет, выдаёт сообщение об ошибке

6

-5,56

Не входит в область допустимых значений, программа расчётов не выполняет, выдаёт сообщение об ошибке

Путем многочисленных тестов были выявлены недостатки, которые могли привести к порче данных или их потере. Эти недостатки были устранены в ходе последующей доработки программного продукта, в ходе повторного тестирования этих недостатков замечено не было.

6. Описание программы

6.1 Назначение программы

Программа предназначена для расчета параметров сетевого графика, а именно раннего срока наступления события, позднего срока наступления события и критического пути. Может быть использована при проведении практических работ по предмету «Математические методы».

6.2 Порядок установки

Программа курсового проекта находится на диске - CD-R и имеет значёк программы Delphi 7.0. В ней находится Project.exe, чтобы она работала её нужно скопировать на жёсткий диск и запустить. При запуске открывается программа и форма. Листинг программы представлен в приложении Г.

6.3 Завершение работы программы

Завершение работы программы производится кнопкой пункта меню "Файл/Выход" или той же кнопкой только на панели быстрого доступа с пиктограммой (рисунок) дверца. При нажатии на эту кнопку появляется сообщение "Вы действительно хотите выйти?", что делает удобным при случайном нажатии на эту кнопку.

6.4. Система меню и экранных форм

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

Файл

Создать <Ctrl + N>

Расчеты:

Расчет параметров сетевого графика <F9>

Ввод числа вершин <Ctrl + V>

Вернуться <Ctrl + Z>

Примеры <F5>

Сохранить <Ctrl + S>

Выход <F12>

Редактирование

Копировать в буфер <Ctrl + С>

Очистить <Del>

Размер:

Увеличить <Ctrl + Ins>

Уменьшить <ShIFt + Ins>

По умолчанию <Ins>

Шрифт <Ctrl + F>

Цвет <Ctrl + E>

Для начала работы с программой требуется ввести количество событий (обязательно в числовом виде), в окошке и нажать на кнопку "Создать". В появившемся окне ведите продолжительность путей, учитывая направление - от строк к столбцам (обязательно в числовом виде). Для наглядного пособия предварительно было создано несколько примеров, которые можно привести при нажатии на кнопку "Примеры". Эти примеры доступны только при определенном количестве событий, а именно 7, 8 и 14. Если не хотите пользоваться примерами данные можно ввести самостоятельно. При неправильном введении можно вернуться к вводу событий, нажав на кнопку "Ввод числа вершин". После того, как вы ввели продолжительность путей можно и приступить к расчету параметров, что осуществляется нажатием кнопки "Расчет параметров сетевого графика". Выходные данные сохраняются и выводятся на печать. Если вас что-то не устраивает можно вернуться к вводу продолжительности путей, нажав на кнопку "Вернуться". Информацию о проекте можно узнать при нажатии на кнопку "О программе" (Приложение В).

Приложение

unit Unit1;

interface

uses

Clipbrd, Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, Menus, Grids, ComCtrls, Buttons, ToolWin, ExtCtrls;

type

TForm1 = class(TForm)

Edit1: TEdit;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

N5: TMenuItem;

N6: TMenuItem;

N7: TMenuItem;

N8: TMenuItem;

N9: TMenuItem;

N10: TMenuItem;

N11: TMenuItem;

N12: TMenuItem;

N13: TMenuItem;

N14: TMenuItem;

N15: TMenuItem;

N16: TMenuItem;

N17: TMenuItem;

N18: TMenuItem;

N19: TMenuItem;

N20: TMenuItem;

N21: TMenuItem;

N22: TMenuItem;

N23: TMenuItem;

Label3: TLabel;

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

BitBtn3: TBitBtn;

BitBtn4: TBitBtn;

BitBtn5: TBitBtn;

BitBtn6: TBitBtn;

BitBtn7: TBitBtn;

BitBtn8: TBitBtn;

BitBtn9: TBitBtn;

BitBtn10: TBitBtn;

BitBtn11: TBitBtn;

ToolBar1: TToolBar;

MainMenu1: TMainMenu;

PopupMenu1: TPopupMenu;

StringGrid1: TStringGrid;

StringGrid2: TStringGrid;

FontDialog1: TFontDialog;

ToolButton1: TToolButton;

ToolButton2: TToolButton;

ToolButton3: TToolButton;

ColorDialog1: TColorDialog;

procedure N2Click(Sender: TObject);

procedure N3Click(Sender: TObject);

procedure N6Click(Sender: TObject);

procedure N8Click(Sender: TObject);

procedure N10Click(Sender: TObject);

procedure N11Click(Sender: TObject);

procedure N12Click(Sender: TObject);

procedure N13Click(Sender: TObject);

procedure N14Click(Sender: TObject);

procedure N15Click(Sender: TObject);

procedure N16Click(Sender: TObject);

procedure N17Click(Sender: TObject);

procedure N19Click(Sender: TObject);

procedure N20Click(Sender: TObject);

procedure N21Click(Sender: TObject);

procedure N22Click(Sender: TObject);

procedure N23Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure FormActivate(Sender: TObject);

procedure BitBtn1Click(Sender: TObject);

procedure BitBtn2Click(Sender: TObject);

procedure BitBtn3Click(Sender: TObject);

procedure BitBtn4Click(Sender: TObject);

procedure BitBtn5Click(Sender: TObject);

procedure BitBtn6Click(Sender: TObject);

procedure BitBtn7Click(Sender: TObject);

procedure BitBtn8Click(Sender: TObject);

procedure BitBtn9Click(Sender: TObject);

procedure BitBtn10Click(Sender: TObject);

procedure BitBtn11Click(Sender: TObject);

procedure Edit1KeyPress(Sender: TObject; var Key: Char);

procedure StringGrid1KeyPress(Sender: TObject; var Key: Char);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

Pr,x,y,a,b,n,j,i,k,temp,p:integer;

f:textfile;

tempstr:string;

implementation

uses Unit2;

{$R *.DFM}

//Выход

procedure TForm1.N2Click(Sender: TObject);

begin

IF MessageDlg('Вы действительно хотите выйти',mtInformation,mbYesNoCancel,0)=mrYes THEN

Close;

end;

//Вернуться

procedure TForm1.N3Click(Sender: TObject);

begin

BitBtn2.Enabled:=False;

Form1.Height:=StringGrid1.Height+140;

Form1.Width:=StringGrid1.Width+440;

Form1.Position:=poScreenCenter;

StringGrid2.Visible:=false;

StringGrid1.Visible:=true;

Label3.Enabled:=True;

end;

//Очистить

procedure TForm1.N6Click(Sender: TObject);

begin

FOR i:=1 TO StringGrid1.ColCount DO

FOR j:=1 TO StringGrid1.RowCount DO

begin

StringGrid1.Cells[i,j]:='';

end;

end;

//Размер увеличить

procedure TForm1.N8Click(Sender: TObject);

begin

a:=Form1.Height;

b:=Form1.Width;

Form1.Height:=a+10;

Form1.Width:=b+10;

end;

//О программе

procedure TForm1.N10Click(Sender: TObject);

begin

form2.Show;

end;

//Тестирование

procedure TForm1.N11Click(Sender: TObject);

begin

IF n=7 THEN

begin

N11.Enabled:=True;

N17.Enabled:=True;

BitBtn5.Enabled:=True;

StringGrid1.Cells[3,1]:=IntToStr(2);

StringGrid1.Cells[2,1]:=IntToStr(4);

StringGrid1.Cells[4,1]:=IntToStr(6);

StringGrid1.Cells[3,2]:=IntToStr(8);

StringGrid1.Cells[5,3]:=IntToStr(7);

StringGrid1.Cells[5,4]:=IntToStr(18);

StringGrid1.Cells[7,5]:=IntToStr(20);

StringGrid1.Cells[6,4]:=IntToStr(3);

StringGrid1.Cells[7,6]:=IntToStr(11);

end;

IF n=8 THEN begin

N11.Enabled:=True;

N17.Enabled:=True;

BitBtn5.Enabled:=True;

StringGrid1.Cells[2,1]:=IntToStr(12);

StringGrid1.Cells[3,1]:=IntToStr(13);

StringGrid1.Cells[4,2]:=IntToStr(5);

StringGrid1.Cells[5,2]:=IntToStr(7);

StringGrid1.Cells[4,3]:=IntToStr(8);

StringGrid1.Cells[6,3]:=IntToStr(9);

StringGrid1.Cells[5,4]:=IntToStr(1);

StringGrid1.Cells[7,4]:=IntToStr(4);

StringGrid1.Cells[7,5]:=IntToStr(6);

StringGrid1.Cells[7,6]:=IntToStr(11);

StringGrid1.Cells[8,6]:=IntToStr(14);

StringGrid1.Cells[8,7]:=IntToStr(17);

end;

IF n=14 THEN begin

N11.Enabled:=True;

N17.Enabled:=True;

BitBtn5.Enabled:=True;

StringGrid1.Cells[2,1]:=IntToStr(7);

StringGrid1.Cells[3,1]:=IntToStr(4);

StringGrid1.Cells[4,1]:=IntToStr(7);

StringGrid1.Cells[4,2]:=IntToStr(5);

StringGrid1.Cells[6,2]:=IntToStr(5);

StringGrid1.Cells[5,3]:=IntToStr(10);

StringGrid1.Cells[8,3]:=IntToStr(4);

StringGrid1.Cells[5,4]:=IntToStr(6);

StringGrid1.Cells[6,4]:=IntToStr(3);

StringGrid1.Cells[10,4]:=IntToStr(10);

StringGrid1.Cells[7,5]:=IntToStr(7);

StringGrid1.Cells[8,5]:=IntToStr(3);

StringGrid1.Cells[10,6]:=IntToStr(4);

StringGrid1.Cells[11,6]:=IntToStr(9);

StringGrid1.Cells[9,7]:=IntToStr(8);

StringGrid1.Cells[10,7]:=IntToStr(6);

StringGrid1.Cells[9,8]:=IntToStr(5);

StringGrid1.Cells[12,8]:=IntToStr(4);

StringGrid1.Cells[13,9]:=IntToStr(9);

StringGrid1.Cells[11,10]:=IntToStr(7);

StringGrid1.Cells[13,10]:=IntToStr(10);

StringGrid1.Cells[14,11]:=IntToStr(8);

StringGrid1.Cells[13,12]:=IntToStr(9);

StringGrid1.Cells[14,12]:=IntToStr(6);

StringGrid1.Cells[14,13]:=IntToStr(5);

end;

end;

//Размер уменьшить

procedure TForm1.N12Click(Sender: TObject);

begin

a:=Form1.Height;

b:=Form1.Width;

Form1.Height:=a-10;

Form1.Width:=b-10;

end;

//Размер по умолчанию

procedure TForm1.N13Click(Sender: TObject);

begin

Form1.Height:=630;

Form1.Width:=655;

end;

//Создать

procedure TForm1.N14Click(Sender: TObject);

begin

//Количество столбцов и строк в таблице

IF ((Edit1.Text='')or(StrToInt(Edit1.Text)<=4)or(StrToInt(Edit1.Text)>40)) THEN

ShowMessage('Неправильно введены события (min=5, а max=40)')

ELSE

begin

Label3.Caption:='Введите продолжительность путей, учитывая направление - от строк к столбцам';

Label3.Width:=465;

Label3.Alignment:=taCenter;

N18.Enabled:=True;

N17.Enabled:=True;

N6.Enabled:=True;

BitBtn10.Enabled:=True;

BitBtn6.Enabled:=True;

BitBtn4.Enabled:=True;

n:=StrToInt(Edit1.Text);

//Возможность тестирования для графа с 7 вершинами

IF n=7 THEN begin

N11.Enabled:=True;

N17.Enabled:=True;

N6.Enabled:=True;

BitBtn5.Enabled:=True;

end;

IF n=8 THEN begin

N11.Enabled:=True;

N17.Enabled:=True;

N6.Enabled:=True;

BitBtn5.Enabled:=True;

end;

IF n=14 THEN begin

N11.Enabled:=True;

N17.Enabled:=True;

N6.Enabled:=True;

BitBtn5.Enabled:=True;

end;

IF n>25 THEN

Form1.WindowState:=wsMaximized;

StringGrid1.ColCount:=n+1;

StringGrid1.RowCount:=n+1;

StringGrid1.Height:=(n+2)*25;

StringGrid1.Width:=(n+2)*25;

StringGrid1.Visible:=True;

Form1.Height:=StringGrid1.Height+250;

Form1.Width:=StringGrid1.Width+250;

StringGrid1.Cells[0,0]:='i';

Form1.Position:=poScreenCenter;

IF StringGrid1.Left-n*5>0 THEN

StringGrid1.Left:=StringGrid1.Left-n*5

ELSE

StringGrid1.Left:=0;

Label3.Enabled:=True;

Edit1.Visible:=False;

FOR i:=1 TO n DO

begin

StringGrid1.Cells[0,i]:=inttostr(i);

StringGrid1.Cells[i,0]:=inttostr(i);

StringGrid2.Cells[0,i]:=inttostr(i);

end;

end;

end;

//Ввод числа вершин

procedure TForm1.N15Click(Sender: TObject);

begin

//Возможность тестирования для графа с 7 вершинами

Form1.WindowState:=wsNormal;

Form1.Height:=140;

Form1.Width:=440;

IF n=7 THEN begin

N11.Enabled:=True;

N17.Enabled:=True;

BitBtn5.Enabled:=True;

end;

//Возможность тестирования для графа с 8 вершинами

IF n=8 THEN begin

N11.Enabled:=True;

N17.Enabled:=True;

BitBtn5.Enabled:=True;

end;

//Возможность тестирования для графа с 14 вершинами

IF n=14 THEN begin

N11.Enabled:=True;

N17.Enabled:=True;

BitBtn5.Enabled:=True;

end;

StringGrid1.Left:=218;

Form1.Height:=140;

Form1.Width:=440;

Form1.WindowState:=wsNormal;

Form1.Position:=poScreenCenter;

Label3.Height:=24;

Label3.Width:=269;

StringGrid1.Visible:=False;

StringGrid2.Visible:=False;

Label3.Caption:='Введите количество событий';

Edit1.Visible:=True;

Edit1.SetFocus;

Edit1.Text:='';

FOR i:=1 TO StringGrid1.ColCount DO

FOR j:=1 TO StringGrid1.RowCount DO

StringGrid1.Cells[i,j]:='';

FOR i:=1 TO StringGrid2.ColCount DO

FOR j:=1 TO StringGrid2.RowCount DO

StringGrid2.Cells[i,j]:='';

Label3.Enabled:=True;

end;

//Цвет

procedure TForm1.N16Click(Sender: TObject);

begin

WITH ColorDialog1 DO

Begin

IF NOT Execute THEN Exit;

Edit1.Color:=Color;

StringGrid1.Color:=Color;

StringGrid2.Color:=Color

end;

end;

//Расчета параметров сетевого графика

procedure TForm1.N17Click(Sender: TObject);

Var ran: Array[1..100] OF integer;

begin

N3.Enabled:=True;

BitBtn2.Enabled:=True;

//Проверка наличия введенных значений

Pr:=0;

FOR i:=1 TO n DO

FOR j:=1 TO n DO

IF StringGrid1.Cells[i,j]='' THEN

Pr:=Pr+1;

IF Pr=n*n THEN //Если не введено ни одного значения

ShowMessage('Введите продолжительность событий')

ELSE

Begin

IF StringGrid2.Height>StringGrid1.Height THEN

Form1.Height:=StringGrid2.Height;

IF StringGrid2.Width>StringGrid1.Width THEN

Form1.Width:=StringGrid2.Width+10;

StringGrid2.Cells[2,n]:=StringGrid2.Cells[1,n];

StringGrid2.Cells[2,1]:='0';

//Расчет ранних сроков наступления события

FOR j:=1 TO n DO

begin

k:=1;

FOR i:=1 TO n DO

ran[i]:=0;

StringGrid2.Cells[1,j]:='0';//начальное значение

FOR i:=1 TO n DO

begin

IF ((i<j)AND(StringGrid1.Cells[j,i]<>'')) THEN

begin

ran[k]:=StrToInt(StringGrid2.Cells[1,i])+StrToInt(StringGrid1.Cells[j,i]);

IF k=1 THEN StringGrid2.Cells[1,j]:=IntToStr(ran[k]);

//Определение максимального элемента

IF ((k>1)AND(ran[k]>StrToInt(StringGrid2.Cells[1,j]))) THEN

StringGrid2.Cells[1,j]:=IntToStr(ran[k]);

k:=k+1;

end;

end;

end;

StringGrid1.Visible:=False;

StringGrid2.Visible:=True;

//Расчет поздних сроков наступления события

StringGrid2.Cells[2,n]:=StringGrid2.Cells[1,n];

j:=n-1;

WHILE j>1 DO

begin

k:=1;

FOR i:=1 TO n DO

ran[i]:=0;

StringGrid2.Cells[2,j]:='0';

i:=n;

WHILE i>1 DO

begin

IF StringGrid1.Cells[i,j]<>'' THEN

begin

ran[k]:=StrToInt(StringGrid2.Cells[2,i])-StrToInt(StringGrid1.Cells[i,j]);

StringGrid2.Cells[2,j]:=IntToStr(ran[k]);

IF ((k>1)AND(ran[k]<ran[k-1])) THEN

StringGrid2.Cells[2,j]:=IntToStr(ran[k])

else

IF ((k>1)AND(ran[k-1]<ran[k])) THEN

StringGrid2.Cells[2,j]:=IntToStr(ran[k-1]);

k:=k+1;

end;

i:=i-1;

end;

j:=j-1;

end;

k:=1;

FOR i:=1 TO n DO

FOR j:=1 TO n DO

IF StringGrid1.Cells[j,i]<>'' THEN//Если путь имеется на заданном графе

begin

//Путь

StringGrid2.Cells[3,k]:=IntToStr(i)+', '+IntToStr(j);

//Продолжительность пути

StringGrid2.Cells[4,k]:=StringGrid1.Cells[j,i];

//Раннее начало работы

FOR p:=1 TO n DO

if StrToInt(StringGrid2.Cells[0,p])=i THEN

StringGrid2.Cells[5,k]:=StringGrid2.Cells[1,p];

//Раннее окончание работы

StringGrid2.Cells[6,k]:=IntToStr(Strtoint(StringGrid2.Cells[5,k])+StrtoInt(StringGrid2.Cells[4,k]));

//Позднее окончание

FOR p:=1 TO n DO

IF StrToInt(StringGrid2.Cells[0,p])=j THEN

StringGrid2.Cells[8,k]:=StringGrid2.Cells[2,p];

//Позднее начало

StringGrid2.Cells[7,k]:=IntToStr(Strtoint(StringGrid2.Cells[8,k])-StrtoInt(StringGrid2.Cells[4,k]));

//Полный резерв

StringGrid2.Cells[9,k]:=IntToStr(Strtoint(StringGrid2.Cells[8,k])-StrtoInt(StringGrid2.Cells[6,k]));

//Свободный резерв

FOR p:=1 TO n DO

IF StrToInt(StringGrid2.Cells[0,p])=j THEN

StringGrid2.Cells[10,k]:=IntToStr(Strtoint(StringGrid2.Cells[1,p])-StrtoInt(StringGrid2.Cells[6,k]));

k:=k+1;

end;

//Критический путь

Label3.Left:=90;

Label3.Width:=Form1.Width;

Label3.Caption:='Критический путь';

FOR i:=1 TO n DO

IF StrToInt(StringGrid2.Cells[1,i])=StrToInt(StringGrid2.Cells[2,i]) THEN

Label3.Caption:=Label3.Caption+' - '+StringGrid2.Cells[0,i];

Label3.Enabled:=True;

end;

end;

//Копирование в буфер обмена

procedure TForm1.N19Click(Sender: TObject);

var bitmap:tbitmap;

begin

bitmap:=tbitmap.create;

bitmap.width:=clientwidth;

bitmap.height:=clientheight;

TRY

WITH bitmap.Canvas DO

CopyRect (clientrect,canvas,clientrect);

clipboard.Assign(bitmap);

FINALLY

bitmap.free;

end;

end;

//Изменение шрифта

procedure TForm1.N20Click(Sender: TObject);

begin

WITH FontDialog1 DO

begin

IF NOT Execute THEN Exit;

Edit1.Font:=Font;

StringGrid1.Font:=Font;

StringGrid2.Font:=Font;

end;

end;

procedure TForm1.N21Click(Sender: TObject);

begin

N15.Click;

end;

procedure TForm1.N22Click(Sender: TObject);

begin

N3.Click;

end;

procedure TForm1.N23Click(Sender: TObject);

begin

N6.Click;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

Form1.Height:=150;

Form1.Width:=400;

Form1.Color:=clMaroon;

N6.Enabled:=False;

N3.Enabled:=False;

N18.Enabled:=False;

BitBtn2.Enabled:=False;

BitBtn4.Enabled:=False;

BitBtn5.Enabled:=False;

BitBtn6.Enabled:=False;

BitBtn10.Enabled:=False;

StringGrid2.Cells[0,0]:='i';

StringGrid2.Cells[1,0]:='Tp';

StringGrid2.Cells[2,0]:='Tп';

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

StringGrid2.Cells[4,0]:='T(i j)';

StringGrid2.Cells[5,0]:='Tрн';

StringGrid2.Cells[6,0]:='Tро';

StringGrid2.Cells[7,0]:='Tпн';

StringGrid2.Cells[8,0]:='Tпо';

StringGrid2.Cells[9,0]:='Рп';

StringGrid2.Cells[10,0]:='Рсв';

Form1.Caption:='Расчет параметров сетевого графика';

end;

procedure TForm1.FormActivate(Sender: TObject);

begin

N11.Enabled:=False;

N17.Enabled:=False;

Label3.Enabled:=True;

end;

procedure TForm1.BitBtn1Click(Sender: TObject);

begin

N2.Click;

end;

procedure TForm1.BitBtn2Click(Sender: TObject);

begin

N3.Click;

end;

procedure TForm1.BitBtn3Click(Sender: TObject);

begin

N9.Click;

end;

procedure TForm1.BitBtn4Click(Sender: TObject);

begin

N15.Click;

end;

procedure TForm1.BitBtn5Click(Sender: TObject);

begin

N11.Click;

end;

procedure TForm1.BitBtn6Click(Sender: TObject);

begin

N17.Click;

end;

procedure TForm1.BitBtn7Click(Sender: TObject);

begin

N14.Click;

end;

procedure TForm1.BitBtn8Click(Sender: TObject);

begin

N8.Click;

end;

procedure TForm1.BitBtn9Click(Sender: TObject);

begin

N12.Click;

end;

procedure TForm1.BitBtn10Click(Sender: TObject);

begin

N6.Click;

end;

procedure TForm1.BitBtn11Click(Sender: TObject);

begin

N10.Click;

end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);

begin

if not(key in['0'..'9']) then

key:=#27;

end;

procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);

begin

if not(key in['0'..'9']) then

key:=#27;

end;

end.

unit Unit2;

interface

uses

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

Dialogs, StdCtrls, ExtCtrls, ComCtrls;

type

TForm2 = class(TForm)

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Button1: TButton;

Label6: TLabel;

procedure FormCreate(Sender: TObject);

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form2: TForm2;

j,i:integer;

implementation

uses Unit1;

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);

begin

Close;

end;

procedure TForm2.FormCreate(Sender: TObject);

begin

Form2.Caption:='О программе';

end;

end.

Заключение

Программа разработана в среде Delphi 7.0. В ней предусмотрены форма входных и выходных документов, организовано меню, составлена пояснительная записка. Выходные данные предоставлены в наглядном и понятном виде.

Список литературы
1. Сборник задач по основам проектирования машинной обработки экономической информации.
Авторы: Г.А. Титоренко, Г.С. Фёдорова, А.В. Абанина, Г.Н. Бурлак, В.А. Волкова, Г.Н. Смирнова.
2. Экономико-математические методы в планировании материально-технического снабжения.

Автор: Е.А. Хруцкий. Издательство “экономика” Москва - 1976. Математика и кибернетика в экономике. Словарь-справочник. Изд. 2-е, перераб. и доп. М., «Экономика», 1975 г.

3 Акулич И.Л. Математическое программирование в примерах и задачах: Учеб. пособие для студентов эконом. спец. вузов. - М.: Высш. Шк., 1986. - 319 с., ил.Гофман В.Э., Хомоненко А.Д. Delphi 5. - СПб.: БХВ - Санкт

Петербург, 2000. - 800 с.: ил.


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

  • Расчет табличным способом параметров сетевого графика: время раннего и позднего начала и окончания работ, полный и частный (свободный) резерв работ. Определение траектории и длины критического пути. Описание метода решения задачи на математическом языке.

    курсовая работа [710,6 K], добавлен 18.05.2013

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

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

  • Анализ входной, выходной и постоянной информации. Математическая формулировка задачи и выбор метода обработки заданных параметров. Разработка алгоритма и его описание. Инструкция по эксплуатации программы, результаты проведенных расчетов и их анализ.

    курсовая работа [100,2 K], добавлен 11.02.2016

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

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

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

    курсовая работа [761,7 K], добавлен 18.12.2013

  • Математическая модель решения задачи коммивояжера. Поиск кратчайшего замкнутого пути обхода нескольких городов и возвращения в исходную точку. Описание программы и результатов ее тестирования. Основная форма программы после вывода конечных данных.

    курсовая работа [603,3 K], добавлен 21.10.2012

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

    контрольная работа [2,5 M], добавлен 25.12.2013

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

    дипломная работа [448,5 K], добавлен 08.11.2010

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

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

  • Создание баз данных с использованием Database Desktop. Проведение автоматизации рабочего места кассира. Описание входной и выходной информации. Выбор среды реализации, состава и параметров технических средств. Проектирование интерфейса программы.

    курсовая работа [1021,5 K], добавлен 22.01.2015

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