Разработка программы «Определение оптимального срока замены оборудования»

В ряде реальных экономических и производственных задач необходимо учитывать изменение моделируемого процесса во времени и влиянии времени на критерий оптимальности. Для решения указанных задач используется метод динамического планирования (динамическое планирование).

2014-06-18

876.01 KB

100 чел.


Поделитесь работой в социальных сетях

Если эта работа Вам не подошла внизу страницы есть список похожих работ. Так же Вы можете воспользоваться кнопкой поиск


Разработка программы «Определение оптимального срока замены оборудования»

Курсовой проект

По дисциплине: «Математические методы»


Содержание

Введение

1 .Постановка задачи 

2 Составление математической модели динамического программирования.

3 Оптимизация

Выбор оптимальной стратегии замены оборудования как задача динамического программирования

Алгоритм решения задачи

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

Заключение

Приложение А, формы программы

Приложение В, листинг программы

Введение

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


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

Пусть рассматриваемая задача, распадающаяся на m шагов или этапов, например планирование деятельности предприятия на несколько лет, поэтапное планирование инвестиций, управление производственными мощностями в течение длительного срока. Показатель эффективности задачи в целом обозначим через W, а показатели эффективности на отдельных шагахчерез φi, i=1,m. Если W обладает свойством аддитивности, т.е.

m

W=∑ φi ,

I=1

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

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

Переменная хi, от которой зависят выигрыш на i-м шаге и, следовательно,     

выигрыш в целом, называется шаговым управлением, i=.

Управлением процесса в целом (х) называется последовательность шаговых управлений х=(х1, х2,,хi,m).

Оптимальное управление х* - это значение управления х, при котором значение W (х*) является максимальным (или минимальным, если требуется уменьшить проигрыш)

W*=W (х*)=max{W (х)}, x€X,

где Xобласть допустимых управлений. 

Оптимальное управление х* определяется последовательностью оптимальных шаговых управлений

х*=(х*1,х*2,,х*i,   ,х*m).

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

При решении задачи динамического программирования на каждом шаге выбирается управление, которое должно привести к оптимальному выигрышу. Если считать все шаги независимыми друг от друга, то оптимальным шаговым управлением будет то управление, которое приносит максимальный выигрыш именно на этом шаге. Но, например, при покупке новой техники взамен устаревшей на ее приобретение затрачиваются определенные средства. Поэтому прибыль от ее эксплуатации, вначале может быть небольшой. Однако в следующие годы новая техника будет приносить большую прибыль. И, наоборот, если руководитель примет решение оставить старую технику для получения прибыли в текущем году, то в дальнейшем это приведет к значительным убыткам. Данный пример демонстрирует следующий факт: в многошаговых процессах все шаги зависят друг от друга, и, следовательно, управление на каждом конкретном шаге надо выбирать с учетом его будущих воздействий на весь процесс.

Другой момент, который следует учитывать при выборе управления на данном шаге, - это возможные варианты окончания предыдущего шага. Эти варианты определяют состояние процесса. Например, при определении количества средств, вкладываемых в предприятие в i-м году, необходимо знать, сколько средств осталось в наличии к этому году, какая прибыль получена в предыдущем (i-м) году. Таким образом, при выборе шагового управления необходимо учитывать:

1) возможные исходы предыдущего шага

2) влияние управления на все оставшиеся до конца процесса шаги.

В задачах динамического программирования первый пункт учитывают, делая на каждом шаге условные предположения о возможных вариантах окончания предыдущего шага и проводя для каждого из вариантов условную оптимизацию. Выполнение второго пункта обеспечивается тем, что в задачах динамического программирования условная оптимизация проводится от конца процесса к началу. Сперва оптимизируется последний m-й шаг, на котором не надо учитывать возможные воздействия выбранного управления xm на все последующие шаги, так как эти шаги просто отсутствуют. Делая предположения об условиях окончания (m-1)-го шага, для каждого из них проводят условную оптимизацию m-го шага и определяют условное оптимальное управление xm. Аналогично поступают для (m-1)-го шага, делая предположения о исходах окончания (m-2)-го шага и определяя условное оптимальное управление на (m-1)-м шаге, приносящее оптимальный выигрыш на двух последних шагах –(m-1)-м и m-м. Так же действуют на всех остальных шагах до первого. На первом шаге, как правило, не надо делать условных предположений, так, как состояние системы перед первым шагом обычно известно.

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

2 Составление математической модели динамического программирования.

Дополнительно введем следующие условные обозначения:

SСостояние процесса;

Si - множество возможных состояний процесса перед i-м шагом;

 Wiвыигрыш с i-го шага до конца процесса,  i= 

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

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

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

3.Определение множества шаговых управлений xi,  i= и налагаемых на них ограничений, т.е. области допустимых управлений x.

4. Определение выигрыша

φi(s, xi),       (1.1)

который принесет на i-м шаге управление xi, если система перед этим находилась в состоянии s.

5.Определение состояния s, в которое переходит система из состояния s под влиянием управления  xi,

 s’=fi(s, xi),  (1.2)

где fi  - функция перехода на i-м шаге из состояния s в состояние s.

6. Составление уравнения, определяющего условный оптимальный выигрыш на последнем шаге, для составления s моделируемого процесса

                       Wm(S)=max{φm(s,xm)}.             (1.3)

                                                                xm€X

7. Составление основного функционального управления динамического программирования, определяющего условный оптимальный выигрыш для данного состояния s с i-го шага и до конца процесса через уже известный условный оптимальный выигрыш с (i+1)-го шага и до конца:

                          Wi(S) = max{ φi(s,xi)+ Wi+1(fi(s,xi))}. (1.4)

                                              xm€X

В это уравнение в уже известную функцию Wi+1(s), характеризующую условный оптимальный выигрыш с (i+1)-го шага до конца процесса, вместо состояния s подставлено новое состояние s’=fi (s,xi), в которое система переходит на i-м шаге под влиянием управления xi.

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

 Этапы решения задачи динамического программирования. 

После того как выполнены пункты 1-7, и математическая модель составлена, приступают к ее расчету.

Основные этапы решения задачи динамического программирования:

1. Определение множества возможных состояний Sm для последнего шага.

2. Проведение условной оптимизации для каждого состояния s€ Sm на последнем m-м шаге по формуле (1.3) и определение условного оптимального управления x(s), s€ Sm     

3. Определение  множества возможных состояний Si для i-го шага, i=2,3,m-1.

4. Проведение условной оптимизации i-го шага, i=2,3,m-1 для каждого состояния s€ Sm  по формуле (1.4) и определение условного оптимального управления xi (s), s€ Sm ,   i=2,3,m-1. 

5. Определение начального состояния системы s1, оптимального выигрыша W1(S1) и оптимального управления x1(S1) по формуле (1.4) при i=1. Это есть оптимальный выигрыш для всей задачи W* =W1(x1*).

6. Проведение безусловной оптимизации управления. Для проведения безусловной оптимизации необходимо найденное на первом шаге оптимальное управление x1*=x1(s1) подставить в формулу (1.2) и определить следующее состояние системы s1=f1(s1,x1). Для измененного состояния найти оптимальное управление x2*=x2(s2), подставить в формулу (1.2) и т.д. Для i-го состояния s1 найти si+1=fi+1(si,xi*) и x*i+1(si+1) и т.д.

3 Оптимизация

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

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

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

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

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

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

Метод ДП обеспечивает единый подход к решению всех видов задач о замене.

При составлении модели ДП мы рассматриваем процесс замены как n-шаговый, разбив весь плановый период на n промежутков. Тка как в начале каждого из этих промежутков принимается решение либо о сохранении оборудования, либо о его замене, то управление на k-м шаге (k=1,,n) содержит всего лишь две альтернативные переменные. Одна выражает условную прибыль (условные затраты) при управлении uc, другая тот же показатель при управлении uз. Условная оптимизация на каждом шаге состоит в вычислении двух величин и в выборе из них наибольшей (наименьшей).

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

4 Выбор оптимальной стратегии замены оборудования как задача динамического программирования

В общем виде проблема ставится следующим образом: определить оптимальную стратегию использования оборудования в период времени длительностью m лет, причем прибыль за каждые I лет,  i= от использования оборудования возраста t лет должна быть максимальной.

Известны: r(t) –выручка от реализации продукции, произведенной за год на оборудовании возраста t лет, l(t) –годовые затраты, зависящие от возраста оборудования t, c(t) –остаточная стоимость оборудования возраста t лет, Pстоимость нового оборудования. Под возрастом оборудования понимается период эксплуатации оборудования после последней замены, выраженный в годах.

Для построения математической модели последовательно выполняются этапы, сформулированные ниже.

1. Определение числа шагов. Число шагов равно числу лет, в течение которых эксплуатируется оборудование.

2. Определение состояний системы. Состояние системы характеризуется возрастом оборудования t; t=.

3. Определение управлений. В начале i-го шага,  i= может быть выбрано одно из двух управлений: заменять или не заменять оборудование. Каждому варианту управления приписывается число

                                                  Xi =  

uс –если оборудование не заменяется;

uзесли оборудование заменяется.     

4. Определение функции выигрыша на i-м шаге. Функция выигрыша на на i-м шагеэто прибыль от использования оборудования к концу на i-го года эксплуатации, t=, i=.

                            φi (t)=

u1= uсесли оборудование в начале i-го года не заменяется;

u2= uзесли оборудование заменяется.     

Таким образом, если оборудование не продается, то прибыль от его использованияэто разность между стоимостью произведенной продукции и эксплуатационными издержками. При замене оборудования прибыль составляет разность между остаточной стоимость оборудования и стоимостью нового оборудования, к которой прибавляе6тся разность между стоимостью продукции и эксплуатационными издержками для нового оборудования, возраст которого в начале i-го шага составляет 0 лет.

5. Определение функции изменения состояния.

                                      fi (t)=

u1 uсесли Xi=0

u2= uзесли Xi=1

6. Составление функционального уравнения для i=m.

Wm(t)= max       

xm{0.1}   

7. Составление основного функционального уравнения 

Wi(t)= max        

Xi{0.1}   

Где Wi(t) –прибыль от использования оборудования возраста t лет с i-го шага (с конца i-го года) до конца периода эксплуатации.

Wi+1(t+1) –прибыль от использования оборудования возраста t+1год с (i+1)-го шага до конца периода эксплуатации;

Таким образом, математическая модель задачи построена.   


5 Алгоритм решения задачи

Введём обозначения:

t- возраст оборудования.

L(t) - производство продукции на оборудовании, возраст которого t лет.

R(t) - расходы на содержание оборудования.

P(t) - остаточная стоимость оборудования.

Р - стоимость нового оборудования

Fn(t)- прибыль от старого оборудования возраст которого t лет.

n-последний год.

 на старом оборудовании     (1)

Это функциональное уравнение

                          (2)

        

                      (3)

Форма входного документа

Данные могут быть занесены с помощью таблицы:

Таблица1 . Данные входной информация.

R(t)

L(t)

Где,

L(t)   - производство продукции на оборудовании, возраст которого t лет.

R(t) -   расходы на содержание оборудования.

Р=40

1=1,2,3,4. 

Форма выходного документа

На основании входной информации получим следующую таблицу: Таблица2

0

1

2

3

4

5

F(tl)

20

50/oc m

35/o cm

25/oc m

20/o cm

F(t2)

70

85/oc m

70/o cm

70/oc m

F(t3)

105

120/o cm

105/ ост

F(t4)

140

155/o cm

F(tS)

175

R-L

60

50

35

25

15

0

      (4)

                    (5)

n=3.     t=1,2.

                                                                                            (6)

       (7)

найдём максимальную прибыль при замене оборудования через 2 года:

По формуле 

Вывод: Максимальную прибыль в размере 215 единиц мы получим, если поменяем оборудование через 2 года на третий.

Описание программно-технических средств

Разработка программы производилась на языке программирования Borland

Delphi 7.0 при помощи операционной системы Microsoft Windows XP Professional

При разработке программы, использовались компоненты Delphi:

  •  String Grid - для заполнения справочников и отображения результатов
  •  Edit - для ввода значений
  •  Button - для создания кнопки
  •  Label - создание меток, для удобства использования
  •  Image - изображения
  •  MainMenu - Меню программы
  •  SaveDialog - сохранить диалог
  •  OpenDialog - открыть диалог
  •  GroupBox

При    разработки    программного    обеспечения    так    же    использовались следующие системные утилиты:

  •  Антивирусные программа (Dr.Web 4.44)
  •  Программы архиваторы (WinRar v3.45).
  •  утилиты Microsoft Office (Microsoft Word, Excel).
  •  графические редакторы (PhotoShop v CS3)

При    разработке    программного    обеспечения     использовался     ПК     со следующими характеристиками:

Процессор: Intel Pentium(R)   3.00 GHz

Оперативная память:     1Gb DDR2 PC 533

Видео карта: NVIDIA Gee Force FX 6600 128Mb

Жесткий диск: 200 Gb

Монитор: "   1280x1025@75Hz

Отладочный пример

0

1

2

3

4

5

F(tl)

20

50/oc m

35/o cm

25/oc m

20/o cm

F(t2)

70

85/oc m

70/o cm

70/oc m

F(t3)

105

120/o cm

105/ ост

F(t4)

140

155/o cm

F(tS)

175

R-L

60

50

35

25

15

0

      (4)

                    (5)

n=3.     t=1,2.

                                                                                            (6)

       (7)

найдём максимальную прибыль при замене оборудования через 2 года:

По формуле 

Вывод: Максимальную прибыль в размере 215 единиц мы получим, если поменяем оборудование через 2 года на третий.

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

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

 Для разработки программы «Решение задач о замене оборудования» был использован язык программирования Delphi 6. В настоящее время эта среда объектно-ориентированного программирования очень популярна, ее основой является язык Object Pascal. Она позволяет создавать приложения различной степени сложности - от простейших программ до профессиональных, предназначенных для работы с базами данных. Кроме того, помощь по программе оформлена в виде HTML-страниц с помощью программы Arachnophilia.

Вся работа с программой основана на работе с меню, с его описанием можно ознакомиться в пункте меню Помощь/Содержание/Работа с меню.

Данная программа создана при выполнении курсового проекта по предмету «Математические методы», на данную тему.


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

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

характеристики:

Процессор MHz

Оперативная память 16 Mb

Объем свободного места на жестком диске Mb

Разрешение экрана                                             не менее 800x600

Операционная система Windows

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

Установка программы

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

  1.  Вставить компакт диск в привод CD-ROM;
  2.  Открыть для просмотра содержимое компакт диска;
  3.  Распаковать архив в свою папку и запустить Project.exe после этого можно начать работу с программой.

Структурное содержание меню программы

В   корневом  каталоге  программы  содержатся  следующие файлы  и подкаталоги:

  •  Projectl .exe - Файл программы;
  •  Программное меню

                          1 .Новый

2.Открыть

                 3.Сохранить

4.Закрыть                     

5.Выход

Операции

     1.Оптимизация            

     2.Расчет

Визуализация

                     1.Сетка

Отчёт

  1.Сохранить

  2.Редактор

Помощь

1 .Справка 2.Содержание

                    3.О программе...


Заключение

При решении задачи динамического программирования на каждом шаге выбирается управление, которое должно привести к оптимальному выигрышу. Если считать все шаги независимыми друг от друга, то оптимальным шаговым управлением будет то управление, которое приносит максимальный выигрыш именно на этом шаге. Но, например, при покупке новой техники взамен устаревшей на ее приобретение затрачиваются определенные средства. Поэтому прибыль от ее эксплуатации, вначале может быть небольшой. Однако в следующие годы новая техника будет приносить большую прибыль. И, наоборот, если руководитель примет решение оставить старую технику для получения прибыли в текущем году, то в дальнейшем это приведет к значительным убыткам. Данный пример демонстрирует следующий факт: в многошаговых процессах все шаги зависят друг от друга, и, следовательно, управление на каждом конкретном шаге надо выбирать с учетом его будущих воздействий на весь процесс.

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


Список используемой литературы

1.  Калихман И.Л., Войтенко М.А. Динамическое программирование в примерах и задачах: Учеб. пособие.М.:Высш.шк., 2009-125с.,ил.  

2. Хазанова Л.Э. Математическое моделирование в экономике:

Учебное пособие.- М.:Издательство БЕК,2008-141с. 

3. Экономико-математические методы и модели: учебное пособие  Н. И. Холод, А. В. Кузнецов, Я.Н. Жихар и другие; Под общей редакцией А. В. Кузнецова. 2-е издание - Мн.: БГЭУ, 2010.-412с.

.   «Компьютер для менеджера» Вершинин О.  Е. учебное пособие для экон. спец. вузов. -М.:высш. Шк., 1990.- 240 с.:ил. Изд «Москва» 1990 год.

Приложение А, формы программы.

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

Код первой формы

unit Unit1;

interface

uses

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

Grids, StdCtrls, ExtCtrls, Menus, ComCtrls, ToolWin, ImgList, jpeg;

type

TForm1 = class(TForm)

StringGrid1: TStringGrid;

StringGrid2: TStringGrid;

StringGrid3: TStringGrid;

StringGrid4: TStringGrid;

StringGrid5: TStringGrid;

Label2: TLabel;

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

N5: 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;

SaveDialog1: TSaveDialog;

OpenDialog1: TOpenDialog;

GroupBox1: TGroupBox;

Label1: TLabel;

Label3: TLabel;

Edit1: TEdit;

Edit2: TEdit;

ImageList1: TImageList;

N22: TMenuItem;

N9: TMenuItem;

N24: TMenuItem;

N25: TMenuItem;

N26: TMenuItem;

StringGrid6: TStringGrid;

StringGrid7: TStringGrid;

procedure FormCreate(Sender: TObject);

procedure N14Click(Sender: TObject);

procedure N12Click(Sender: TObject);

procedure N17Click(Sender: TObject);

procedure N13Click(Sender: TObject);

procedure N5Click(Sender: TObject);

procedure N16Click(Sender: TObject);

procedure N22Click(Sender: TObject);

procedure N10Click(Sender: TObject);

procedure N11Click(Sender: TObject);

procedure N4Click(Sender: TObject);

procedure N9Click(Sender: TObject);

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

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

procedure Edit1Exit(Sender: TObject);

procedure Edit2Exit(Sender: TObject);

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

procedure N26Click(Sender: TObject);

procedure N25Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

keyo:Boolean;

implementation

uses Unit2, Unit3, Unit4, Unit5, Unit6;

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);

begin

StringGrid7.Options:=StringGrid3.Options;

Groupbox1.Visible:=False;

Label1.Visible:=False;

Edit1.Visible:=False;

Label2.Visible:=False;

Edit2.Visible:=False;

N16.Enabled:=False;

N17.Enabled:=False;

N25.Enabled:=False;

N13.Enabled:=False;

N4.Enabled:=False;

N5.Enabled:=False;

N22.Enabled:=False;

End;

procedure TForm1.N14Click(Sender: TObject);

begin

If MessageDlg('Закончить работу с программой?',mtConfirmation,[mbYes,mbNo],0)=mrYes then

Halt(0);

end;

procedure TForm1.N12Click(Sender: TObject);

Begin

keyo:=True;

StringGrid1.Options:=StringGrid7.Options;

StringGrid2.Options:=StringGrid7.Options;

StringGrid3.Options:=StringGrid7.Options;

StringGrid4.Options:=StringGrid7.Options;

StringGrid5.Options:=StringGrid7.Options;

StringGrid1.Color:=clmenu;

StringGrid2.Color:=clmenu;

StringGrid3.Color:=clmenu;

Groupbox1.Visible:=True;

Label1.Visible:=True;

Label2.Visible:=True;

Label3.Visible:=True;

Edit2.Visible:=True;

Edit1.Visible:=True;

Edit1.SetFocus;

N12.Enabled:=False;

End;

procedure TForm1.N17Click(Sender: TObject);

Var

d,er,x,i,j,n,y,y1,y2,m,z,P,o,w,zero,q:integer;

begin

keyo:=false;

n:=StrToInt(Edit1.Text);

P:=StrToInt(Edit2.Text);

m:=0;

StringGrid1.RowCount:=3;

StringGrid3.RowCount:=2;

StringGrid4.Hide;

StringGrid5.Hide;

For i:=0 to n do

For j:=0 to n do

Begin

x:=StrToInt(StringGrid3.Cells[j,0])-StrToInt(StringGrid3.Cells[j,1]);

StringGrid3.Cells[j,2]:=IntToStr(x);

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

StringGrid1.Cells[0,4]:='f'+IntToStr(n)+'(t)';

StringGrid3.Height:=3*25;

StringGrid4.Cells[0,i]:='f'+IntToStr((n-1)-i)+'(t)';

StringGrid4.Colcount:=2;

StringGrid4.Width:=2*41;

StringGrid4.Rowcount:=n-1;

StringGrid4.Height:=(n*25)+i;

StringGrid5.Colcount:=n+1;

StringGrid5.Width:=((n+1)*41)+i;

StringGrid5.Rowcount:=n;

StringGrid5.Height:=(n*25)+i;

StringGrid5.Cells[j,0]:=StringGrid3.Cells[j,2];

o:=StrToInt(StringGrid3.Cells[0,2])-P;

StringGrid5.Cells[0,0]:=IntToStr(o);

StringGrid5.Cells[n,0]:='';

End;

// Основные расчеты

For j:=0 to n-2 do

Begin

If StrToInt(StringGrid5.Cells[j+1,0])<StrToInt(StringGrid5.Cells[0,0]) then

StringGrid5.Cells[j+1,0]:=StringGrid5.Cells[0,0];

q:=StrToInt(StringGrid5.Cells[1,0])+StrToInt(StringGrid5.Cells[0,0]);

StringGrid5.Cells[0,1]:=IntToStr(q);

y:=StrToInt(StringGrid5.Cells[j+1,0])+StrToInt(StringGrid3.Cells[j,2]);

StringGrid5.Cells[j,1]:=IntToStr(y);

If y<StrToInt(StringGrid5.Cells[0,1]) then

StringGrid5.Cells[j,1]:=StringGrid5.Cells[0,1];

End;

// Далее

For i:=2 to n-2 do

For j:=0 to (n-1)-i do

Begin

w:=StrToInt(StringGrid5.Cells[1,i-1])+StrToInt(StringGrid5.Cells[0,0]);

StringGrid5.Cells[0,i]:=IntToStr(w);

y1:=StrToInt(StringGrid5.Cells[j+1,i-1])+StrToInt(StringGrid3.Cells[j,2]);

StringGrid5.Cells[j,i]:=IntToStr(y1);

If y1<StrToInt(StringGrid5.Cells[0,i]) then

StringGrid5.Cells[j,i]:=StringGrid5.Cells[0,i];

End;

y2:=StrToInt(StringGrid5.Cells[1,n-2])+StrToInt(StringGrid5.Cells[0,0]);

StringGrid5.Cells[0,n-1]:=IntToStr(y2);

// Подсчет количества лет

For i:=n-2 downto 1 do

Begin

er:=StrToInt(StringGrid5.Cells[0,i-1]);

z:=StrToInt(StringGrid5.Cells[0,i]);

If er<>StrToInt(StringGrid5.Cells[n-i,i-1]) then

Begin

If z<>StrToInt(StringGrid5.Cells[n-1-i,i]) then m:=m+1;

End;

End;

//  Error

zero:=StrToInt(StringGrid5.Cells[0,0]);

If zero<0 then

Begin

MessageDlg('Неверно введены параметры. Повторите ввод.',mtError,[MbOk],0);

For i:=0 to n do

For j:=0 to n do

Begin

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

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

End;

StringGrid3.RowCount:=2;

N22.Checked:=False;

StringGrid1.Height:=0;

StringGrid1.Width:=0;

StringGrid2.Height:=0;

StringGrid2.Width:=0;

StringGrid3.Height:=0;

StringGrid3.Width:=0;

StringGrid4.Height:=0;

StringGrid4.Width:=0;

StringGrid5.Height:=0;

StringGrid5.Width:=0;

Edit1.Text:='';

Edit2.Text:='';

N17.Enabled:=False;

N13.Enabled:=False;

N5.Enabled:=False;

N22.Enabled:=False;

N25.Enabled:=False;

N4.Enabled:=False;

N16.Enabled:=False;

Label2.Caption:='';

Edit1.SetFocus;

End

else

Begin

Label2.Caption:='';

Label2.Font.Color:=clTeal;

Label2.Font.Size:=14;

If Stringgrid5.Cells[0,n-2]=StringGrid5.Cells[1,n-2] then d:=m+1

else d:=m+2;

Label2.Caption:='Чтобы получить максимальную прибыль, оборудование нужно сменить через '+IntToStr(d)+' года (год/лет).';

N16.Enabled:=False;

N17.Enabled:=False;

N25.Enabled:=True;

N13.Enabled:=True;

StringGrid1.Options:=StringGrid6.Options;

StringGrid2.Options:=StringGrid6.Options;

StringGrid3.Options:=StringGrid6.Options;

StringGrid4.Options:=StringGrid6.Options;

StringGrid5.Options:=StringGrid6.Options;

StringGrid1.Color:=clActiveBorder;

StringGrid2.Color:=clActiveBorder;

StringGrid3.Color:=clActiveBorder;

If n<=3 then

Begin

N22.Enabled:=False;

End

else

Begin

If MessageDlg('Показать расчеты ?'+#10#13, MtConfirmation, [mbYes, mbNo],0)=mrYes then

Begin

N22.Enabled:=true;

StringGrid1.RowCount:=5;

StringGrid3.RowCount:=3;

StringGrid4.Show;

StringGrid5.Show;

End

Else

Begin

N22.Enabled:=true;

End;

End;

End;

end;

procedure TForm1.N13Click(Sender: TObject);

var

f:System.Text;

i,j:integer;

begin

SaveDialog1.Filter:='Файлы задачи о замене оборудования (*.zzo)|*.zzo';

If SaveDialog1.Execute then Begin

AssignFile(f, SaveDialog1.FileName);

Rewrite(F);

For i:=0 to 1 do

For j:=0 to StringGrid3.ColCount+1 do

Begin

Write (f, StringGrid3.Cells[j,i]);

End;

Closefile(f);

End;

end;

procedure TForm1.N5Click(Sender: TObject);

Var

i,j,n:integer;

f:System.Text;

Label VIC;

begin

n:=StrToInt(Edit1.Text);

If MessageDlg('Сохранить файл ?'+#10#13, MtConfirmation, [mbYes, mbNo],0)=mrYes then

Begin

SaveDialog1.Filter:='Файлы задачи о замене оборудования (*.zzo)|*.zzo';

If SaveDialog1.Execute then

Begin

AssignFile(f, SaveDialog1.FileName);

Rewrite(F);

For i:=0 to 1 do

For j:=0 to StringGrid3.ColCount+1 do

Begin

Writeln (f, StringGrid3.Cells[j,i]);

End;

Closefile(f);

End;

VIC:For i:=0 to n do

For j:=0 to n do

Begin

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

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

End;

StringGrid3.RowCount:=2;

N22.Checked:=False;

N25.Enabled:=False;

Label2.Caption:='';

StringGrid1.Height:=0;

StringGrid1.Width:=0;

StringGrid2.Height:=0;

StringGrid2.Width:=0;

StringGrid3.Height:=0;

StringGrid3.Width:=0;

StringGrid4.Height:=0;

StringGrid4.Width:=0;

StringGrid5.Height:=0;

StringGrid5.Width:=0;

GroupBox1.Visible:=False;

Label1.Visible:=False;

Label2.Visible:=False;

Label3.Visible:=False;

Edit1.Text:='';

Edit2.Text:='';

N16.Enabled:=False;

N17.Enabled:=False;

N12.Enabled:=True;

N13.Enabled:=False;

N5.Enabled:=False;

N22.Enabled:=False;

N4.Enabled:=False;

End

Else

goto VIC;

end;

procedure TForm1.N16Click(Sender: TObject);

Var

i,j,n:integer;

begin

n:=StrToInt(Edit1.Text);

StringGrid1.Cells[0,0]:='Годы';

StringGrid1.Cells[0,1]:='R(t)';

StringGrid1.Cells[0,2]:='L(t)';

StringGrid1.Cells[0,3]:='R-L';

For i:=0 to n do

For j:=0 to n do

Begin

StringGrid2.ColCount:=n+1;

StringGrid2.Width:=((n+1)*48)+i;

StringGrid2.RowCount:=3;

StringGrid2.Height:=27*3;

StringGrid3.ColCount:=n+1;

StringGrid3.Width:=((n+1)*48)+i;

StringGrid2.Cells[j,0]:=IntToStr(j);

End;

StringGrid3.Height:=2*27;

StringGrid1.ColCount:=2;

StringGrid1.Width:=2*48;

StringGrid1.RowCount:=3;

StringGrid1.Height:=3*27;

N17.Enabled:=True;

StringGrid3.SetFocus;

N5.Enabled:=True;

N4.Enabled:=True;

Label2.Caption:='';

End;

procedure TForm1.N22Click(Sender: TObject);

begin

If N22.Checked then

Begin

N22.Checked:=false;

StringGrid1.RowCount:=3;

StringGrid3.RowCount:=2;

StringGrid4.Hide;

StringGrid5.Hide;

End

else

Begin

N22.Checked:=true;

StringGrid1.RowCount:=5;

StringGrid3.RowCount:=3;

StringGrid4.Show;

StringGrid5.Show;

End;

end;

procedure TForm1.N10Click(Sender: TObject);

begin

Form3.Show;

end;

procedure TForm1.N11Click(Sender: TObject);

begin

AboutBox.ShowModal;

end;

procedure TForm1.N4Click(Sender: TObject);

var

f:Textfile;

i,j:integer;

t:string;

Begin

OpenDialog1.Filter:='Файлы задачи о замене оборудования *.zzo';

If OpenDialog1.Execute then

Begin

AssignFile(f,OpenDialog1.FileName);

Reset(f);

While Not Eof(f) do

Begin

For i:=0 to StringGrid3.RowCount+1 do

For j:=0 to StringGrid3.ColCount+1 do

Begin

Readln(f,t);

StringGrid3.Cells[j,i]:=t;

End;

End;

CloseFile(f);

End;

End;

procedure TForm1.N9Click(Sender: TObject);

begin

Form5.Show;

end;

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

begin

If (Key<'0') or(Key>'9') then Key:=#0;

end;

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

begin

If (Key<'0') or(Key>'9') then Key:=#0;

N16.Enabled:=True;

Label2.Font.Color:=clBlue;

Label2.Font.Size:=12;

Label2.Caption:='Для продолжения нажмите клавишу F8, либо воспользуйтесь пунктом меню ОПЕРАЦИИ\ОПТИМИЗАЦИЯ.';

end;

procedure TForm1.Edit1Exit(Sender: TObject);

begin

If Edit1.Text='' then

Begin

MessageDlg('Должно быть введено какое-либо значение!',mtError,[mbOK],0);

Edit1.SetFocus;

End;

end;

procedure TForm1.Edit2Exit(Sender: TObject);

begin

If Edit2.Text='' then

Begin

MessageDlg('Должно быть введено какое-либо значение!',mtError,[mbOK],0);

Edit2.SetFocus;

End;

end;

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

Var

n:Integer;

begin

If (Key<'0') or(Key>'9') then Key:=#0;

n:=StrToInt(Edit1.Text);

If (StringGrid3.Cells[n,1]<>'')and(keyo) then

Begin

Label2.Font.Color:=clBlue;

Label2.Font.Size:=12;

Label2.Caption:='Чтобы увидеть результат нажмите кнопку F9, либо выберите пункт меню ОПЕРАЦИИ\РАСЧЕТ.';

End;

end;

procedure TForm1.N26Click(Sender: TObject);

begin

Form6.Show;

end;

procedure TForm1.N25Click(Sender: TObject);

var

f:System.Text;

i,j:integer;

g:string;

begin

SaveDialog1.Filter:='Файлы отчета (*.zoo)|*.zoo';

If SaveDialog1.Execute then Begin

AssignFile(f, SaveDialog1.FileName);

Rewrite(F);

g:=InputBox ('Работа с отчетом','Введите заголовок отчета:','');

Writeln(f,g);

Writeln (f);

Write (f,Label1.Caption);

Writeln (f,Edit1.Text);

Write (f,Label3.Caption);

Writeln (f,Edit2.Text);

For i:=0 to 1 do

Begin

Writeln (f);

For j:=0 to StringGrid5.ColCount+1 do

Begin

Write (f, StringGrid3.Cells[j,i],' ');

End;

End;

Writeln (f);

For i:=0 to StringGrid5.RowCount+1 do

Begin

Writeln (f);

For j:=0 to StringGrid5.ColCount+1 do

Begin

Write (f, StringGrid5.Cells[j,i],' ');

End;

End;

Writeln (f);

Write (f,Label2.Caption);

Closefile(f);

End;

End;

End.

Код второй формы

unit Unit2;

interface

uses

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

StdCtrls, jpeg, ExtCtrls;

type

TForm2 = class(TForm)

Image1: TImage;

Timer1: TTimer;

procedure Timer1Timer(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form2: TForm2;

implementation

uses Unit1, Unit5;

{$R *.DFM}

procedure TForm2.Timer1Timer(Sender: TObject);

begin

Form1.Show;

// Form5.Show;

Form2.Hide;

Timer1.Enabled:=False;

end;

end.

Код третьей формы

unit Unit3;

interface

uses

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

OleCtrls, SHDocVw, ExtCtrls;

type

TForm3 = class(TForm)

WebBrowser1: TWebBrowser;

Panel1: TPanel;

procedure FormCreate(Sender: TObject);

procedure FormKeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

procedure Panel1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form3: TForm3;

implementation

{$R *.DFM}

procedure TForm3.FormCreate(Sender: TObject);

begin

Webbrowser1.Navigate(ExtractFilePath(Application.EXEName) + 'Help\Index.htm');

end;

procedure TForm3.FormKeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

begin

if key = VK_Escape then Form3.Hide;

end;

procedure TForm3.Panel1Click(Sender: TObject);

begin

Form3.Hide;

end;

end.

Код четвертой формы

unit Unit4;

interface

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

Buttons, ExtCtrls;

type

TAboutBox = class(TForm)

Panel1: TPanel;

Copyright: TLabel;

OKButton: TButton;

ProductName: TLabel;

Label1: TLabel;

private

{ Private declarations }

public

{ Public declarations }

end;

var

AboutBox: TAboutBox;

implementation

{$R *.DFM}

end.

Код пятой формы

unit Unit5;

interface

uses

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

OleCtrls, SHDocVw, StdCtrls, Buttons;

type

TForm5 = class(TForm)

WebBrowser1: TWebBrowser;

BitBtn1: TBitBtn;

procedure FormCreate(Sender: TObject);

procedure FormKeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

procedure BitBtn1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form5: TForm5;

implementation

uses Unit3;

{$R *.DFM}

procedure TForm5.FormCreate(Sender: TObject);

begin

Webbrowser1.Navigate(ExtractFilePath(Application.EXEName) + 'Help\Tip.htm');

end;

procedure TForm5.FormKeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

begin

if key = VK_Escape then Form5.Hide;

end;

procedure TForm5.BitBtn1Click(Sender: TObject);

begin

Close;

end;

end.

Код шестой формы

unit Unit6;

interface

uses

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

StdCtrls, Buttons, Printers;

type

TForm6 = class(TForm)

OpenDialog1: TOpenDialog;

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

BitBtn3: TBitBtn;

PrintDialog1: TPrintDialog;

Memo1: TMemo;

procedure BitBtn1Click(Sender: TObject);

procedure BitBtn3Click(Sender: TObject);

procedure FormShow(Sender: TObject);

procedure BitBtn2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form6: TForm6;

implementation

{$R *.DFM}

procedure TForm6.BitBtn1Click(Sender: TObject);

var

f:Textfile;

t:string;

Begin

Memo1.Lines.Clear;

OpenDialog1.Filter:='Файлы отчета (*.zoo)|*.zoo';

If OpenDialog1.Execute then

Begin

AssignFile(f,OpenDialog1.FileName);

Reset(f);

While Not Eof(f) do

Begin

Readln(f,t);

Memo1.Lines.Add(t);

End;

CloseFile(f);

End;

end;

procedure TForm6.BitBtn3Click(Sender: TObject);

begin

Close;

end;

procedure TForm6.FormShow(Sender: TObject);

begin

Memo1.Lines.Clear;

end;

procedure TForm6.BitBtn2Click(Sender: TObject);

Var

i,x,y:longint;

begin

If PrintDialog1.Execute then

Begin

Printer.Canvas.Font:=Memo1.Font;

Printer.BeginDoc;

x:=0;

y:=0;

For i:=0 to Memo1.Lines.Count-1 do

Begin

Printer.Canvas.TextOut(x,y,Memo1.Lines[i]);

y:=y+Printer.Canvas.TextExtent(Memo1.Lines[i]).cy;

End;

Printer.EndDoc;

End;

end;

end.


Рецензия



 

Другие похожие работы, которые могут вас заинтересовать.
1848. Денежные потоки и обобщающие показатели эффективности замены оборудования 32.92 KB
  Эффективность деятельности одного работника или трудового коллектива характеризуется производительностью труда. Такой показатель как производительность труда определяется для того чтобы увеличить выпуск продукции...
15826. Определение оптимального размера заказа 190.86 KB
  Определение оптимального размера заказа. Определение оптимального размера заказа Оптимальный размер партии поставляемых товаров и соответственно оптимальная частота завоза зависят от следующих факторов: - объем спроса оборота; - транспортно-заготовительные расходы; - расходы на хранение запаса. Транспортно-заготовительные расходы при увеличении размера заказа уменьшаются так как закупки и перевозки товаров осуществляются более крупными партиями и следовательно реже. Расходы по хранению растут прямо пропорционально размеру заказа.
3612. Разработка проекта мультисервисной сети, выбор технологии сети, разработка ее структуры, установка оборудования и расчет его комплектации 6.93 MB
  В данном дипломном проекте решена задача построения мультисервисной сети широкополосной передачи данных для предоставления услуги Triple Play, на основе технологии FTTB. Проведен анализ исходных данных. Предложено обоснование выбранной технологии и топологии сети, проведен расчет оборудования а также подбор его комплектации, расчет нагрузки на сеть, приведены технико-экономические показатели, разработаны мероприятия по безопасности жизнедеятельности.
11338. Разработка тормозного оборудования четырехосной цистерны модели 15 – 1443 2.16 MB
  Тормоза железнодорожного подвижного состава являются одним из основных узлов железнодорожной техники от уровня развития конструкции параметров и состояния которой в значительной степени зависит безопасность движения поездов допускаемая и привозная способность железных дорог...
17696. Разработка электрической части подстанции 220/110/10 кВ с выбором основного оборудования 3.36 MB
  Расчетно-пояснительная записка содержит четыре главы и три приложения в которых отражены следующие вопросы: Разработка электрической части подстанции 220 110 10 кВ с выбором основного оборудования. Релейная защита подстанции 220 110 10 кВ и прилегающей сети высшего напряжения. Требования по охране труда при проведении работ в электроустановках 35-220 кВ.
19459. Разработка программы для получения развертки 519.16 KB
  Описание формул для выкроек используемых в разработке. Разработка программы для получения развертки. Целью данной курсовой работы является проектирование и разработка программы для построения изменения и распечатки разверток. Исходя из поставленной цели определим следующие задачи: Рассмотреть уже существующие альтернативы разрабатываемой программы частично имеющие схожие функции; проанализировать их выделить для себя имеющиеся плюсы и минусы.
1505. Разработка программы на языке assembler 10.91 KB
  Просмотрщик текстов. При старте программы вводим имя текстового файла либо передаем его в виде аргумента командной строки и количество строк/символов и распечатываем содержимое на экран. Просмотр текста с начала файла.
20713. Разработка рекомендаций по выбору оборудования для диагностирования тормозной системы автомобилей 412.16 KB
  Конструкции автомобилей постоянно совершенствуется, но неизменным остаётся наличие тормозной системы, которая способствует при необходимости остановить авто, что сохраняет жизни пешеходов, водителей и пассажиров, а также остальных участников дорожного движения. Ремонт тормозной системы необходим на всех автомобилях,
19882. Разработка программы повышения конкурентоспособности учреждения 333.42 KB
  В работе решены следующие задачи: - изучены теоретические аспекты разработки и реализации программы повышения конкурентоспособности учреждения; - проанализированы результаты финансово-хозяйственной деятельности и маркетинговую деятельность МБДОУ Детский сад № 48 Солнечный Зайчик; - обоснована комплексная маркетинговая программа повышения конкурентоспособности МБДОУ Детский сад № 48 Солнечный Зайчик; - оценена экономическая эффективность предложенного для МБДОУ Детский сад № 48 Солнечный Зайчик комплекса маркетинговых мероприятий. Сама...
15631. Разработка туристической программы «Родники России» 791.66 KB
  Теоретические основы паломнического и религиозного туризма.1 Религиозный туризм как элемент культурно-познавательного туризма 5 1. Святые родники и источники как объект культурно-познавательного туризма. Религиозный туризм является составной частью современной индустрии туризма.
© "REFLEADER" http://refleader.ru/
Все права на сайт и размещенные работы
защищены законом об авторском праве.