- •Курсова робота з дисципліни ”Обчислювальна техніка, алгоритмічні мови та програмне забезпечення” Варіант №
- •Содержание
- •Алгоритми
- •1Опис алгоритму.
- •2Алгоритм у вигляді блок-схем.
- •Програма, реалізована на мові Object Pascal в середовищі Delphi 7
- •3Інтерфейс програми – фото форм у конструкторі.
- •4Опис компонентів, що використовуються в програмі.
- •5Текст програми та модулів форм.
- •6Опис тексту програми та коментарії до її окремих частин.
- •Результати тестування програми
- •Інструкція користувача
- •Висновки
- •Перелік посилань
Алгоритми
1Опис алгоритму.
Перша частина програми складається з написання процедури генерування файлів. Перед тим як почати генерувати файли з деякими даними потрібно створити папку, назва якої буде відповідати даті генерації. Для того що б створити папку с датою скористуємось функцією ForceDirectories(t), де t – повний шлях розміщення папки, так я к папка з датою буде знаходитись ще в якійсь папці на вінчестері. Шлях складається з двох частин: шляху, що вказаний в компоненті Edit1, в наслідок вибору розміщення папки, та назви папки, що є наслідком вибору дати в компоненті DateTimePicker1.
Наступним кроком генерації файлів, буде визначення кількості файлів за деякий час. В умові сказано, що в файлі містяться дані за 10 хвилин. Таким чином кількість файлів визначається з різниці між початковими межами часу та кінцевими межами часу. За допомогою чотирьох компонентів Edit здійснюємо введення меж часу. Шукаємо різницю годин, та цю різницю годин переводимо в хвилини, розділивши її на 60. Шукаємо різницю хвилин, до цієї різниці додаємо переведену в хвилини різницю часу. Таким чином отримаємо час в хвилинах, за який знімаються дані. Для визначення кількості файлів цей час ділимо на 10, так як в один файл записуються дані за 10 хвилин. Як що при діленні на 10 отримаємо дробове число, то відкидаємо дробову частину за допомогою функції Ceil.
Наступним кроком буде створення самих файлів, та їх заповнення деякими даними. Назва файлу буде складатися з 3 частин. Перша частина “file00”, друга частина назви файлу це порядковий номер , третя “.dat”.
Що до заповнення файлів даними. Дані повинні генеруватись за заком змінної напруги. Закон зміни напруги представлений в формулі 1.1.
. ()
Тому для визначення кроку по осі часу між точками, потрібно період поділити на кількість точок. Довжина періоду синусоїди 2*π. Тому моємо:
. ()
Це відображено на рисунку .
Рисунок
– Визначення відстані в часі між
точками
Визначаємо рівень дискретизації по осі напруги. Визначимо його з співвідношення
. ()
Отже маємо
. ()
Ми маємо частоту 50 Гц, отже за 10 хвилин будемо мати 30000 періодів, а отже 6000000 точок. Кожній цій точці треба присвоїти значення амплітуди. Це зробимо за допомогою двох вкладених циклів for де кожній точці присвоюємо значення амплітуди. Ми не можемо на пряму працювати з даними в файлі тому ми спочатку присвоюємо файлову змінну f, тобто асоціюємось с файлом за допомогою процедури AssignFile(f), та починаємо заповнення файлу даними з допомогою процедури Rewrite(f). В кінці процедури закінчуємо роботу зфайлом за допомогою процедури CloseFile(f).
Друга частина програми складається з двох частин. Реалізується за допомогою двох процедур, які знаходяться в одному модулі.
Для реалізації першої процедури, яка має будувати графік дійсних значень напруги та виводити за допомогою компонента TChar побудований графік на екран, була написана процедура, яка умовно складається з двох частин. Перша частина, це встановлення зв’язку з даними що знаходяться в файлі. Друга частина – обробляє данні та виводить їх в компонент TChar, а також координати точок в компонент TMemo.
Для встановлення звязку з даними, що знаходяться в файлі потрібно спочаку вказати файл, з яким буде встановлено звязок. Файл ми вказуємо за іменем, яке складається з декількох частин, які детально були описані в першій частині опису програми. Також вказуємо шлях, більш детально який був описаний раніше. Після цього за допомогою стандартної процедури AssignFile() встановлюємо зв'язок з даними, встановлюємо в початок за допомогою процедури Reset(), та починаємо зчитувати дані за допомогою процедури read() та циклу for так як нам потрібно зчитати велику кількість записів в файлі, яка відповідає кількості точок по осі часу тобто 600 тисяч., де вказуємо ім’я файлової змінної та самого запису, що в файлі. Можлива крайня ситуація, яка виникає внаслідок не знаходження вказаного файла. Цю проблему ми вирішуємо за допомогою try…except…end і виводимо за допомогою процедури ShowMessage повідомлення « файла не существует». Після цього починаємо за допомогою циклів for знаходити суму напруги на кожному із періодів. Так як нам потрібно діюче значення напруги всю суму множимо на √2. та ділимо на кількість точок на періоді, тобто на 20. отже обробивши данні можемо будувати графік. Графік буде складатись з 30 тисяч періодів, тому для побудови нам потрібен ще один цикл for. В компоненти Мемо виводимо координати амплітуди та часу. Кількість точок що виводяться в Мемо, можемо вибирати вводячи їх кількість в Edit5.
Друга процедура побудови максимального значення має таку ж саму структуру, відмінність лише в тому , що ми на періоді обираємо дві точки з максимальним і мінімальним значенням амплітуди на одному періоді. За цими вибраними точками зі всього масиву даних будуємо графік. Ця проблема вирішується за допомогою циклів for так я перебираємо 20 точок на періоді і так для 30 тисяч таких періодів,та розгалуження if… then для вибору максимальної та мінімальної точки на періоді. Побудова та вивід даних в Мемо відбувається таким самим чином.
