Hugo-borz™ Понедельник-день тяжелый..., 21.07.2025, 09:34
Приветствую Вас Гость | RSS
Меню сайта

Категории раздела
Мои статьи [150]

Мини-чат

Наш опрос
Оцените мой сайт
Всего ответов: 59

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Форма входа

Главная » Статьи » Мои статьи

ХАРАКТЕРИСТИКА ТА АНАЛІЗ ПІДПРИЄМСТВА «ВАТ ”КРЕМЕНЧУЦЬКИЙ КОЛІСНИЙ ЗАВОД”»
Розглянемо роботу складу, на якому зберігаються товарні запаси, що витрачаються на постачання споживачів [Экономико-математические методы и прикладные модели: Учеб. пособие для вузов/В.В.Федосеев, А.Н. Гармаш и др.; Под ред. В.В. Федосеева. – М.: ЮНИТИ, 2002. – 391 с.]. Робота реального складу супроводжується безліччю відхилень від ідеального режиму: замовлена партія одного обсягу, а прибула партія з іншим обсягом; за планом партія повинна прибути через двох тижнів, а вона прийшла через десять днів; при нормі розвантаження одні доба розвантаження партії тривала троє доби і т.д. Врахувати всі ці відхилення практично неможливо, тому при цьому моделюванні роботи складу звичайно робляться наступні припущення: • швидкість витрати запасів зі складу — постійна величина, що позначимо М (одиниць товарних запасів в одиницю часу); відповідно до цього графік зміни величини запасів у частині витрати є відрізком прямої; • обсяг партії поповнення Q є постійна величина, так що система керування запасами - це система з фіксованим розміром замовлення; • час розвантаження прибулої партії поповнення запасів малий, будемо вважати його рівним нулю; • час від ухвалення рішення про поповнення до приходу замовленої партії є постійна величина t, так що можна вважати, що замовлена партія приходить як би миттєво: якщо потрібно, щоб вона прийшла точно у визначений момент, те її варто замовити в момент часу на t раніше; • на складі не відбувається систематичного нагромадження чи перевитрати запасів. Якщо через Т позначити час між двома послідовними постачаннями, то обов'язкове виконання рівності: Q = МТ. Зі сказаного вище випливає, що робота складу відбувається однаковими циклами тривалістю Т, і за час циклу величина запасу змінюється від максимального рівня S до мінімального рівня s; • нарешті, будемо вважати обов'язковим виконання вимоги, щоб відсутність запасів на складі було неприпустимим, тобто виконується нерівність s0. З погляду зменшення витрат складу на збереження звідси випливає, що s =0 і, отже, S = Q. Остаточно графік «ідеальної» роботи складу у формі залежності величини запасів у від часу t буде мати вид, представлений на рис. 3.1.1. Ефективність роботи складу оцінюється по його витратах на поповнення запасів і їхнє збереження. Витрати, що не залежать від обсягу партії, називають накладними. Сюди входять поштово-телеграфні витрати, командировочні, деяка частина транспортних витрат і ін. Накладні витрати будемо позначати через К. Витрати збереження запасів будемо вважати пропорційними величині запасів, що зберігаються, і часу їхнього збереження. Витрати на збереження однієї одиниці запасів протягом однієї одиниці часу називаються величиною питомих витрат збереження; ми їх будемо позначати через h. Рис. 3.1.1.. Графік "ідеальної" роботи складу За змінної величині запасів, що зберігаються, витрати збереження за якийсь час Т одержують шляхом множення величини h і Т на середнє значення величини запасів протягом цього часу Т. Таким чином, витрати складу за час Т при розмірі партії поповнення Q у випадку ідеального режиму роботи складу, представленого на рис. 3.1.1., дорівнюють . Після ділення цієї функції на постійну величину Т с обліком рівності Q = МT одержимо вираження для величини витрат на поповнення і збереження запасів, що приходяться на одиницю часу: . (3.1.15) Це і буде цільовою функцією, мінімізація якої дозволить вказати оптимальний режим роботи окладу. Знайдемо обсяг партії, що замовляється, Q, при якому мінімізується функція середніх витрат складу за одиницю временя, тобто функція Z1(Q). На практиці Q часто приймають дискретні значення, зокрема, через використання транспортних засобів визначеної вантажопідйомності; у цьому випадку оптимальне значення Q знаходять перебором припустимих значень Q. Ми будемо вважати, що обмежень на прийняті значення Q ні, тоді задачу на мінімум функції Z1(Q) (легко показати, що вона є опуклою, (див. рис. 3.1.4) можна вирішити методами диференціального числення: , відкіля знаходимо крапку мінімуму (3.1.16) Ця формула називається формулою Уилсона (за ім'ям ангійского вченого-економіста, якій отримав її у 20-х роках минулого століття). Оптимальний розмір партії, що розраховується по формулі Уилсона, має характеристичну властивість: розмір партії Q оптимальний тоді і тільки тоді, коли витрати збереження за час циклу Т дорівнюють накладним витратам К. Дійсно, якщо , те витрати збереження за цикл рівні . Якщо ж витрати збереження за цикл дорівнюють накладним витратам, тобто , то . Проілюструємо характеристичну властивість оптимального розміру партії графічно (рис. 3.4). Рис. 3.1.4. Графічна ілюстрація знаходження оптимального розміру партії На рис. 3.1.4 видно, що мінімальне значення функції Z1(Q) досягається при тім значенні Q, при якому рівні значення двох інших функцій, її складових. Використовуючи формулу Уилсона (3.1.16), у зроблених раніше припущеннях про ідеальну роботу складу можна одержати ряд розрахункових характеристик роботи складу в оптимальному режимі: оптимальний середній рівень запасу ; (3.1.17) оптимальна періодичність поповнення запасів (3.1.18) оптимальні середні витрати збереження запасів в одиницю часу (3.1.19) Розглянемо типову задачу. На склад доставляють цемент на баржі по 100 т. У добу зі складу споживачі забирають 50 т цементу. Накладні витрати по доставці партії цементу рівні 10 тис. грн. Витрати збереження 1 т цементу протягом доби рівні 10 грн. Потрібно визначити: 1) тривалість циклу, середньодобові накладні витрати і середньодобові витрати збереження; 2) оптимальний розмір замовляється партій і розрахункові характеристики роботи складу в оптимальному режимі. Рішення: Параметри роботи складу: Q = 100 т; М= 50 т/доб.; К=10 грн.; h =10 грн./тдоб. Тривалість циклу: Т = Q : М = 100 т : 50 т/доб. = 2 доб.; середньодобові накладні витрати: К: Т = 10 грн. : 2 доб. = 5 грн. /доб.; середньодобові витрати збереження: hQ/2 = 10 грн./тдоб. 100 т/2 = 500 грн./доб. 2. Знайдемо оптимальний розмір партії, що замовляється, по формулі Уилсона (3.1.16): т; оптимальний середній рівень запасу по формулі (3.1.17): т; оптимальну періодичність поповнення запасів по формулі (3.1.18): доб. оптимальні середні витрати збереження запасів в одиницю часу по формулі (3.1.19): = 5 т  10 грн./тдоб. = 50 грн./доб. 3.2 Розробка програмного забезпечення для розрахунків по моделі економічно вигідних розмірів партій, що замовляються Розробимо додаток для розрахунків по даній моделі та їх графічного ілюстрування (а також перевірки) у середовищі об'єктно-орієнтованого програмування Borland Delphi. Середовище Delphi (Делфи) містить у собі повний набір інструментів для швидкої розробки інтерфейсу додатків користувача. Бібліотека візуальних компонентів Делфи (VCL) містить у собі стандартні інструменти для побудови інтерфейсу користувача, для керування даними, графічними об'єктами, об'єктами мультімедіа, керування файлами і діалоговими вікнами. 1. Створимо новий проект (розроблювальний додаток у Делфи називається проектом). Проект у Делфи - набір файлів, необхідних для створення додатка, що виконується (програми, ехе-файла). 2. Збережемо створений проект в окрему папку. Щоб зберегти проект, у меню File головного меню Делфи клацаємо по команді Save All. Після цього з'явиться діалогове вікно Save Unit1 As, у якому вказуємо ім'я файлу для модуля Unit1.pas і у віконці Папка вибираємо папку, у яку хочемо зберегти проект. Імена файлів у Delphi можуть складатися з латинських букв, цифр і знака підкреслення, причому ім'я не повинне починатися цифрою. Після того, як у вікні Save Unit1 As зазначене ім'я файлу для модуля Unit1.pas і натиснута кнопка Сохранить чи клавіша Enter, з'явиться наступне вікно Save Project1 As, у якому задаємо ім'я для файлу проекту Делфи. При спробі привласнити файлу проекту таке ж ім'я, що було вже привласнене модулю проекту, Delphi виводить вікно з повідомленням про помилку. Тому що ім'я файлу програми, що виконується (файлу з розширенням .ехе), створюваного компілятором, збігається з ім'ям файлу проекту, то файлу проекту варто привласнити ім'я, що повинний мати файл програми, що виконується, а файлу модуля яке-небудь інше. Компіляція – процес перетворення вихідної програми в таку, що виконується. Процес компіляції складається з двох етапів. На першому етапі виконується перевірка тексту програми на відсутність помилок, на другому – генерується програма, що виконується – ехе-файл. 3. Створимо макет додатку, що розробляється. Перемістимо з палітри компонентів і розмістимо у вікні форми необхідні об'єкти (напису, текстові поля, панелі груп, кнопки), створюючи, таким чином, графічний інтерфейс додатка. Вікно форми являє собою проект Windows-вікна майбутньої програми. У вихідному стані вікно порожнє, точніше містить стандартні елементи інтерфейсу - кнопки виклику системного меню (у лівому верхньому куті форми), кнопки Свернуть, Развернуть, Закрыть, смугу заголовка і рамку, що окреслює. Уся робоча область форми заповнена крапками координатної сітки, що служить для упорядкування розташовуваних на формі компонентів. Основна робота програміста - це діставати потрібний компонент із палітри компонентів і розміщати його у вікні форми, поступово заповнюючи форму елементами інтерфейсу. Програміст у будь-який момент часу контролює зміст вікна створюваної програми і може вносити в нього необхідні зміни. Палітра компонентів складається з різних вкладок (Standard, Additional і ін.), клацання по корінцю яких відкриває вкладку і показує, які компоненти є на цій вкладці, відкриваючи доступ до них. Для створюваного додатка знадобляться наступні компоненти, розташовані на різних вкладках Палітри компонент (табл. 3.2.1). Таблиця 3.2.1. Компоненти, що використовуються при створенні додатка Пікто-грама Компонент Вкладка Опис Label (напис) Standard Служить для відображення тексту на формі без можливостей редагування. Найчастіше застосовуються для створення підписів до інших елементів керування Edit (текстове поле) Standard Стандартні поля введення, що дозволяють відображати і редагувати текст Button (кнопка) Standard Дозволяють виконати які-небудь дії при натисканні кнопки під час виконання програми GroupBox (панель групи) Standard Використовується для групування об'єктів Chart (діаграма) Additional Дозволяє будувати різні діаграми і графіки На рис. 3.2.2. наведений зовнішній вигляд форми Делфі з розміщеними компонентами для розрахунків по моделі та графічного відображення результатів. Рис. 3.2.2 Вигляд формі додатку, що створюється, з розмішеними на неї компонентами 4. Установимо для поміщених на форму компонентів потрібні властивості. Написи (Label) використовуються для відображення на формі тексту без можливостей редагування. Найчастіше написи застосовуються для створення підписів до інших елементів керування. Властивості і методи компонента «напис» инкапсулированы в класі Tlabel (табл. 3.2). Таблиця 3.2.3 Основні властивості компонента TLabel Властивість Тип Опис Alignment TAlignment= (taLeftJustify, taRightJustify, taCenter) Визначає спосіб вирівнювання тексту по горизонталі: taLeftJustify — по лівому краю; taRightJustify — по правому краю; taCenter — по центру Layout TTextLayout= (tlTop, tlCenter, tlBottom) Визначає спосіб вирівнювання тексту по вертикалі: tlTop — по верхньому краю; tlCenter — по центру; tlBottom — по нижньому краю Autоsize Boolean Якщо дана властивість дорівнює true, то ширина і висота об'єкта Label автоматично змінюються таким чином, щоб відобразити весь текст, заданий у властивості Caption Transparent Boolean Якщо дана властивість дорівнює true, то тло напису буде прозорим WordWrap Boolean Якщо дана властивість встановлена в true, то виконується автоматичний перенос тексту на наступний рядок Основна властивість написів – Caption, у якому задається виведений текст. Можна змінити шрифт, розмір і колір тексту, двічі клацнувши по властивості Font компонента в Інспекторі Об'єктів і установивши потрібні значення. Текстове поле (Edit box) — стандартне поле введення, що дозволяє відображати і редагувати текст. Можливість уведення тексту з клавіатури реалізували в Delphi у класі TEdit. Клас TEdit містить ряд властивостей, що не мають аналогів і вже розглянутих елементах керування (табл. 3.2.6). Таблиця 3.2.6. Основні властивості компонента TEdit Властивість Тип Опис AutoSelect Boolean Визначає, чи буде виділятися текст у поле введення при одержанні полем фокуса введення CharCase TEditCharCase (ecNormal, ecUpperCase, ecLowerCase) Визначає регістр тексту, що вводиться: • ecNormal — текст може вводитися в різних регістрах; • ecUpperCase — текст, що вводиться, перетвориться в символи верхнього регістра; • ecLowerCase - текст, що вводиться, перетвориться в символи нижнього регістра SelText String Містить виділений фрагмент тексту Text String Містить текст, відображуваний у поле введення ReadOnly Boolean Якщо дана властивість дорівнює true, то при виконанні програми отсутствует можливість редагування тексту, відображуваного в поле введення За допомогою полів введення можна вводити тільки текстову інформацію. Рядок символів, записуваний у поле введення – значення властивості Text поля введення. Цей рядок відповідає строковому типу даних string. Щоб перетворити рядок символів у числову перемінну, що має, наприклад, тип дійсного числа, використовуємо процедуру Val (), а навпаки – процедуру Str (). Синтаксис процедури Val(): Procedure Val (S; var V; var Code: Integer); де S- вираження типу string; повинне бути послідовністю символів; V - перемінна целочисленного чи типу типу дійсного числа, який привласнюється значення перетвореної послідовності символів; Code - це перемінна целочисленного типу. Якщо введений рядок символів недійсний, індекс незадовольняючого символу запам'ятовується в перемінної Code; в іншому випадку значення перемінної Code прирівнюється нулю. Синтаксис процедури Str (): Рrocedure Str (X [: Width [: Decimals ]]; var S); де Х – вираження (перемінна) целочисленного чи типу типу дійсного числа; Width – загальна кількість знаків для відображення у вираженні (перемінної) Х; Decimals – кількість десяткових знаків; S -перемінна строкового типу, у яку перетвориться перемінна Х. Кнопки (Button) є одним з найбільш розповсюджених елементів керування Windows. Властивості і методи компонента «кнопка» инкапсулированы в класі TButton (табл. 3.2.7). Таблиця 3.2.7 Основні властивості компонента TButton Властивість Тип Опис Anchors TAnchors = set of (akTop, akLeft, akRight, akBottorn) Задає прив'язку кнопки: • akTop — до верхньої границі контейнера; • akLeft- до лівої границі контейнера; • akRight — до правої границі контейнера; • akBottom — до нижньої границі контейнера. Якщо задані всі чотири крапки прив'язки, то при зміні розмірів форми пропорційно будуть змінюватися і розміри кнопки Caption TCaption Рядок тексту, відображуваного на кнопці Cancel Boolean Якщо ця властивість установлена рівним true, то при натисканні на клавішу Escape викликається оброблювач події OnClick даної кнопки. На формі може бути тільки одна кнопка з властивістю Cancel, встановленим у true Default Boolean Якщо ця властивість установлена рівним true, то при натисканні на клавішу Enter викликається оброблювач події OnClick даної кнопки. На формі може бути тільки одна кнопка з властивістю Default, встановленим у true ModalResult TmodalResult При натисканні на кнопку значення властивості ModalResult батьківської форми встановлюється рівним властивості ModalResult кнопки. Використовується при створенні вікон діалогу Enable Boolean При установці даної властивості рівним true кнопка стає недоступної, буде відображена сірим кольором Visible Boolean При установці даної властивості в true кнопка стає невидимої і недоступною Font TFont Визначає шрифт, яким відображається напис на кнопці TabOrder TTabOrder Визначає порядок перебору елементів керування, розташованих на формі, при натисканні на клавішу Tab TabStop Boolean Якщо дана властивість встановлена в false, то фокус уведення ніколи не буде передаватися даній кнопці при переборі елементів клавішею Tab. Однак таку кнопку все рівно можна натиснути мишею Top Integer Положення верхньої границі кнопки (у пикселах) щодо верхньої границі контейнера, що містить кнопку Left Integer Положення лівої границі кнопки (у пикселах) щодо лівої границі контейнера, що містить кнопку Основна подія кнопки – OnClick, вона викликається при натисканні на кнопку і використовується для програмування реакції на натискання. Помістивши кнопку на форму, по подвійному щиглику по цьому компоненті можна створити заготівлю оброблювача події OnClick натискання кнопки. Далі потрібно заповнити заготівлю кодом. Пропонується згрупувати текстові поля для відображення результатів розрахунків значень: • тривалості циклу; • середньодобових накладних витрат; • середньодобових витрат збереження. Для цього розмістимо на формі три компоненти TGroupBox. Компонент TGroupBox використовується для візуального виділення групи елементів керування. Може мати заголовок (властивість Сарtіоn). Компонент ТChart дозволяє будувати різні діаграми і графіки, що виглядають дуже ефектно. Компонент Chart є контейнером об'єктів Series типу TChartSeries — серій даних, що характеризуються різними стилями відображення. Кожен компонент може включати кілька серій. Якщо ми хочемо відображати графік, то кожна серія буде відповідати однієї кривої на графіку. Якщо ми хочемо відображати діаграми, то для деяких видів діаграм можна накласти один на одного кілька різних серій. Приведемо пояснення деяких властивостей компонента Chart (табл. 3.2.8). Таблиця 3.2.8 Основні властивості компонента ТChart Властивість Опис AllowPanning Визначає можливість користувача прокручувати частину графіка, що спостерігається, під час виконання, натискаючи праву кнопку миші. Можливі значення: pmNone - прокручування заборонене, pmHorizontal, pmVertical чи pmBoth - дозволено відповідно тільки в горизонтальному напрямку, тільки у вертикальному чи в обох напрямках AllowZoom Дозволяє змінювати під час виконання масштаб зображення, вирізуючи фрагменти або діаграми графіка курсором миші Title Визначає заголовок діаграми Foot Визначає підпис під діаграмою. За замовчуванням відсутня. Текст підпису визначається подсвойством Text. Frame Визначає рамку навколо діаграми Legend Легенда діаграми — список позначень MarginLeft, MarginRight, MarginTop, MarginBottom Значення лівого, правого, верхнього і нижнього полів BottomAxis, LeftAxis, RightAxis Ці властивості визначають характеристики відповідно нижньої, лівої і правої осей. Завдання цих властивостей має сенс для графіків і деяких типів діаграм LeftWall, BottomWall, BackWall Ці властивості визначають характеристики відповідно лівої, нижньої і задньої граней області тривимірного відображення графіка SeriesList Список серій даних, відображуваних у компоненті View3d Дозволяє або забороняє тривимірне відображення діаграми View3DOptions Характеристики тривимірного відображення Надання властивостей компоненту ТChart повязане зі створенням програмного коду, тому опишемо його нижче. у розділі "Технологія програмування". Опис властивостей форми і компонентів, розміщених на формі, містить файл опису форми проекту (.dfm). Для розробленого додатка: {Опис форми:} object Form1: TForm Left = 206 Top = 102 BorderStyle = bsSizeable Caption = 'Модель управления запасами' ClientHeight = 465 ClientWidth =729 Color = clSilver Font.Charset = RUSSIAN_CHARSET Font.Color = clBlack Font.Height = -21 Font.Name = 'TimesNew Roman' Font.Style = [] Menu = MainMenu1 OldCreateOrder = False Position = poDefault Visible = True PixelsPerInch = 96 TextHeight = 23 {Опис напису "Исходные данные":} object Label1: TLabel Left = 280 Top = 0 Width = 166 Height = 23 Alignment = taCenter Caption = 'Исходные данные:' Visible = True Font.Color = clNavy Font.Height = -21 Font.Name = 'TimesNew Roman' Font.Size=16 ParentColor = False ParentFont = False end …… {Описание поля введення, що відповідає напису "Объем партии пополнения":} object Edit1: TEdit Left = 288 Top = 24 Width = 105 Height = 31 TabOrder = 0 Text = '1500' end …… {Описание кнопки "Вычислить и построить график":} object Button1: TButton Left = 120 Top = 368 Width = 113 Height = 33 Caption = 'Вычислить и построить график' Font.Charset = RUSSIAN_CHARSET Font.Color = clGreen Font.Height = -19 Font.Name = 'Times New Roman' Font.Style = [] ParentFont = False TabOrder = 0 OnClick = Button1Click end ….. {Описание панели группы "Исходные данные":} object GroupBox1: TGroupBox Left = 0 Top = 24 Width = 729 Height = 145 Color = clSilver DockSite = True ParentColor = False TabOrder = 2 end {Описание компоненту діаграми:} object Chart1: TChart Left = 8 Top = 400 Width = 801 Height = 225 BackWall.Brush.Color = clWhite BackWall.Brush.Style = bsClear Title.Text.Strings = ( '') LeftAxis.Title.Caption = 'Z(Q)' View3D = False TabOrder = 4 5. Створення головного меню Рядок головного меню розташовується у верхній частині головної форми додатка. Доступ до його команд може здійснюватися одним із трьох способів: • за допомогою миші; • за допомогою клавіатури (для входу в головне меню зарезервована клавіша Alt, а для навігації по командах меню використовуються клавіші переміщення курсору); • за допомогою спеціальних комбінацій клавіш - клавіатурних скорочень, що, однак, можуть бути задані не для всіх команд меню. Для створення головного меню в Делфи мається спеціальний компонент TMainMenu, розташований на сторінці Standard палітри компонентів. Кожен елемент меню є екземпляром класу TMenuItem. Причому цей об'єкт може бути або командою, або містити меню більш низького рівня. Кількість рівнів вкладеності не обмежено. Для створення меню в Делфи використовується спеціальний редактор (мал.), що запускається подвійним щигликом на компоненті TMainMenu, поміщеному на формі, чи щигликом на кнопці з многоточием у поле властивості Items цього компонента в інспекторі об'єктів. Рис. 3.2.9. Вікно редактора меню з уведеними пунктами меню додатка Вибір команд меню під час виконання програми супроводжується виконанням визначених дій. Для завдання цих дій використовуємо спосіб завдання оброблювача події OnClick елемента меню. Оброблювачі подій щигликів по командах головного меню будуть виглядати так: type … N1: TMenuItem; N2: TMenuItem; N3: TMenuItem; … procedure N1Click(Sender: TObject); procedure N2Click(Sender: TObject); procedure N3Click(Sender: TObject); procedure TForm1.N1Click(Sender: TObject); {при клацанні по пункті головного меню Вычислить процедура запускає на виконання процедуру оброблювача події-клацання по кнопці Вычислить} begin Button1.Click; Button2.Click; end; procedure TForm1.N2Click(Sender: TObject); {при клацанні по пункті головного меню Очистить процедура встановлює значення властивості Text усіх полів уведення рівним порожньому рядку, тобто очищає поля введення} begin Edit1.Text:=''; Edit2.Text:=''; Edit3.Text:=''; Edit4.Text:=''; Edit5.Text:=''; Edit6.Text:=''; Edit7.Text:=''; Edit8.Text:=''; Edit9.Text:=''; Edit10.Text:=''; Edit11.Text:=''; end; procedure TForm1.N3Click(Sender: TObject); {при клацанні по пункті головного меню Выход процедура закриває додаток} begin Close; end; Технологія програмування Для розрахунків по моделі, виведення результатів у відповідних полях та побудови диаграми запрограмуємо кнопку "Вычислить и построить график", процедура обробки клацання по який (подія OnClick) буде: procedure TForm1.Button1Click(Sender: TObject); var Q, K, h, M {завдання змінних вихідних даних}, T, SSnaklras, SSizdhr, n, optsr, optperiod, optsrizd, Z, Y1, Y2,Y3, i:real {завдання змінних чисельних результатів – усі перемінні дійсного типу}; code:integer {завдання перемінної цілого типу, що буде використовуватися в стандартних процедурах Val ()}; str5, str6, str7, str8, str9, str10, str11:string {завдання строкових перемінних для відображення результатів у текстових полях уведення}; begin Val(Edit1.Text,Q,code) {перетворення рядка символів, введених у поле введення Edit1, у чисельну перемінну Q}; Val(Edit2.Text,K,code) {перетворення рядка символів, введених у поле введення Edit2, у чисельну перемінну К}; Val(Edit3.Text,h,code) {перетворення рядка символів, введених у поле введення Edit3, у чисельну перемінну h}; Val(Edit4.Text,M,code) {перетворення рядка символів, введених у поле введення Edit4, у чисельну перемінну М}; T:=Q/M {обчислення за формулою і присвоєння результату перемінної Т}; Str(T:7:2, str5) {перетворення чисельної перемінний Т, що буде виводиться з загальним числом символів 7, після десяткової крапки - 2, у строкову перемінну str5}; Edit5.Text:=str5 {присвоювання властивості Text текстового полючи Edit5 (напис –"Длительность цикла, дней:") значення строкової зміної str5 – вивід у цьому полі результату формули T:=Q/M}; SSnaklras:=K/T {обчислення по формулі і присвоєння результату перемінної SSnaklras}; Str(SSnaklras:7:2,str6) {перетворення чисельної перемінний SSnaklras, що буде виводиться з загальним числом символів 7, після десяткової крапки - 2, у строкову перемінну str6}; Edit6.Text:=str6 {присвоювання властивості Text текстового поля Edit6 (напис –"Среднесуточные накладные расходы, грн:") значення строкової зміної str6 – вивід у цьому полі результату формули SSnaklras:=K/T}; SSizdhr:=h*Q/2 {обчислення по формулі і присвоєння результату перемінної SSizdhr}; Str(SSizdhr:7:2,str7) {перетворення чисельної перемінний SSizdhr, що буде виводиться з загальним числом символів 7, після десяткової крапки - 2, у строкову перемінну str7}; Edit7.Text:=str7 {присвоювання властивості Text текстового поля Edit7 (напис –"Среднесуточные издержки хранения, грн:") значення строкової зміної str7 – вивід у цьому полі результату формули SSizdhr:=h*Q/2 }; n:=sqrt((2*K*M)/(h)) {обчислення за формулою і присвоєння результату перемінної n}; Str(n:7:2,str8) {перетворення чисельної перемінний n, що буде виводиться з загальним числом символів 7, після десяткової крапки - 2, у строкову перемінну str8}; Edit8.Text:=str8 {присвоювання властивості Text текстового поля Edit8 (напис –"Оптимальный размер заказываемой партии,ед.:") значення строкової зміної str8 – вивід у цьому полі результату формули n:=sqrt((2*K*M)/(h)) }; optsr:=n/2 {обчислення за формулою і присвоєння результату перемінної optsr}; Str(optsr:7:2,str9) {перетворення чисельної перемінний optsr, що буде виводиться з загальним числом символів 7, після десяткової крапки - 2, у строкову перемінну str9}; Edit9.Text:=str9 {присвоювання властивості Text текстового поля Edit9 (напис –"Оптимальный средний уровень заказа,ед.:") значення строкової зміної str9 – вивід у цьому полі результату формули optsr:=n/2}; optperiod:=n/M {обчислення за формулою і присвоєння результату перемінної optperiod}; Str(optperiod:7:2,str10) {перетворення чисельної перемінний optperiod, що буде виводиться з загальним числом символів 7, після десяткової крапки - 2, у строкову перемінну str10}; Edit10.Text:=str10 {присвоювання властивості Text текстового поля Edit10 (напис –"Оптимальная периодичность пополнения запасов, дней:") значення строкової зміної str10 – вивід у цьому полі результату формули optsr:=n/М}; optsrizd:=optsr*h {обчислення за формулою і присвоєння результату перемінної optsrizd}; Str(optsrizd:7:2,str11) {перетворення чисельної перемінний optsrizd, що буде виводиться з загальним числом символів 7, після десяткової крапки - 2, у строкову перемінну str11}; Edit11.Text:=str11 {присвоювання властивості Text текстового поля Edit11 (напис –"Оптимальные средние издержки хранения запасов в единицу времени,грн./сут.:") значення строкової зміної str11 – вивід у цьому полі результату формули optsrizd:=optsr*h }; end; Далі запрограмуємо розрахунки функцій, лінії яких наведені на рис. 3.2.4. та виведення їх на діаграмі. Після подвійного клацання на компоненті Chart попадаємо у вікно Редактора Діаграм (рис. 3.2.10) на сторінку Chart, що має кілька закладок. Нас буде цікавити на ній закладка Series. Рис. 3.2.10. Редактор Діаграм, сторінка Chart, закладка Series Клацаємо на кнопці Add — додати серію. Ми попадаємо у вікно (рис. 3.2.11), у якому можна вибрати тип діаграми чи графіка. У даному випадку вибираємо Line — графік. Рис. 3.2.11. Вибір типу діаграми в Редакторі Діаграм Скориставшись закладкою Titles, можна задати заголовок діаграми, закладка Legend дозволяє задати параметри відображення легенди діаграми (списку позначень) чи взагалі забрати її з екрана, закладка Panel визначає вид панелі, на якій відображається діаграма. На цьому проектування зовнішнього вигляду додатка завершується. Залишилося написати код, що задає дані, що хочемо відображати. Для завдання відображуваних значень треба використовувати методи серій Series. Зупинимося тільки на двох основних методах. • Метод Clear очищає серію від занесених раніше даних. • Метод AddXY: AddXY(Const AXValue, AYValue: Double; Const ALabel: String; AColor: TColor) дозволяє додати нову крапку в графік функції. Параметри AXValue і AYValue відповідають аргументу і функції. Параметр ALabel - назва, що буде відображатися на діаграмі й у легенді, AColor — колір. Параметр ALabel — не обов'язковий, його можна задати порожнім: ''. i:=1; Series1.Clear; Series2.Clear; Series3.Clear; while i<=Q do begin Y1:=h*i/2; Y2:=K*M/i; Y3:=K*M/i+h*i/2; Series1.AddXY(i,Y1,'',clTeeColor); Series2.AddXY(i,Y2,'',clTeeColor); Series3.AddXY(i,Y3,'',clTeeColor); i:=i+1; end; Після створення головного меню додатка (з пунктами Вычислить, Очистить і Выход), компіляції і уведення вихідних даних тестового приклада додаток буде виглядати: Рис. 3.2.12. Вигляд скомпільованого додатку з введеними вихідними даними Після натискання кнопки Вычислить и построить графік або пункту Вычислить головного меню, додаток буде мати вид: Рис. 3.2.13. Вигляд скомпільованого додатку з виведеними результатами розрахунків та побудованим графіком Порівняння отриманих за допомогою програми результатів та результатів тестового прикладу показує, що результати збігаються, також збігаються результати, які можна отримати за допомогою графіка програми – абсциса точки перетинання графіків функцій h*Q/2 та K*M/Q – Qопт – дорівнює 10, що збігається з обчисленим результатом.
Категория: Мои статьи | Добавил: hugo-borz (04.02.2008) | Автор: Олег E W
Просмотров: 609 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]

Поиск

Друзья сайта
  •    

  • Copyright MyCorp © 2025