Моделювання цифрових пристроїв.

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
КН
Кафедра:
Кафедра електронних обчислювальних машин

Інформація про роботу

Рік:
2004
Тип роботи:
Звіт про виконання лабораторної роботи
Предмет:
Об’єктно-орієнтоване програмування

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки України Національний університет „Львівська політехніка” Кафедра електронних обчислювальних машин Звіт про виконання лабораторної роботи № 3 з курсу „ Об'єктно-орієнтоване програмування ” Тема: Моделювання цифрових пристроїв. Львів – 2004 Мета роботи: Закріпити теоретичні знання та оволодіти практичними навиками об’єкно-орієнтованого аналізу та створення базових абстракцій для моделювання предметної області. Варіант завдання на лабораторну роботу  Розробити об’єктно-орієнтовану модель цифрового пристрою: Варіант 9. Пристрою пошуку максимуму сигналу. Пристрій повинен видати значення максимуму та відлік у якому він досягається. Опис програми Клас CSignal : Базовий клас, що описує цифровий сигнал. Містить регістри для збереження одиничного відліку сигналу (time) та його значення (size), а також методи для їх збереження та завантаження. Клас CComp, public CSignal: Описує програмну модель елементарного компаратора двох значень цифрового сигналу. Для обробки сигналу містить метод порівняння двох значень сигналу ( iCompare() ). Успадковує клас CSignal, що дозволяє збереження максимального знайденого значення сигналу та його відліку. Клас CIO, public CSignal: Описує програмну модель пристрою вводу/виводу цифрового сигналу. Містить метод отримання наступного значення сигналу і метод збереження кінцевого результату. Успадковує клас CSignal, що дозволяє збереження поточного значення сигналу та його відліку. Клас CDev, public CIO: Абстракція, що моделює цифровий пристрій, який приймає на вхід цифровий сигнал, а на вихід видає знайдене його максимальне значення та відлік, в якому його досягнуто. У програмі створюються об’єкти: CComp ElemComparator - елементарного компаратора; CDev MaxFndDevice - пристрій пошуку максимуму сигналу. Вміст файлів // main.cpp #include "Comp.h" #include "Dev.h" #include "IO.h" #include "Signal.h" int main (int argc, char *argv[]) { char *InName, *OutName; // Змінні для збереження імен файлів double x=0; int t=0; if (argc!=3) { cout << "Wrong argument count!\n"; cout << "SYNTAX: " << argv[0] << " <input file> <output file>\n"; exit(0); } InName=(char *)calloc(50,sizeof(char)); strcpy(InName,argv[1]); InName=(char *)realloc(InName,strlen(InName)+1); OutName=(char *)calloc(50,sizeof(char)); strcpy(OutName,argv[2]); OutName=(char *)realloc(OutName,strlen(OutName)+1); CComp ElemComparator; // Створення об’єкту елементарного компаратора CDev MaxFndDevice; // Створення об’єкту пристрою MaxFndDevice.vSetFiles(InName,OutName); // Підключення файлів до пристрою cout << "Parsing Signal..."; // Цикл порівняння while ( MaxFndDevice.iEndOfFile()==0 ) { MaxFndDevice.iGetNextSignal(); // Зчитуємо з файлу наст. відлік сигналу t=MaxFndDevice.iLoadSignalTime(); //та завантажуємо його часовий відлік x=MaxFndDevice.dLoadSignalSize(); // і значення до наших змінних if ( ElemComparator.iCompare(x)==1 ) { // Якщо значення більше, ніж збережене у компараторі, ElemComparator.vStoreSignal(t,x); // то зберігаємо його } } // Завантаження максимального значення сигналу та його відліку з компаратора t=ElemComparator.iLoadSignalTime(); x=ElemComparator.dLoadSignalSize(); // Збереження максимального значення сигналу до файлу MaxFndDevice.vSaveMax(t,x); cout << "Signal length " << MaxFndDevice.iLoadSignalTime() << ".\nResult saved to " << OutName << ".\n"; free (InName); free (OutName); return 0; } // Signal.h: interface for the CSignal class. #if !defined(AFX_SIGNAL_H__216BB1C5_581B_449E_8EC9_582D038796A0__INCLUDED_) #define AFX_SIGNAL_H__216BB1C5_581B_449E_8EC9_582D038796A0__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include "iostream.h" class CSignal { public: int iLoadSignalTime(void); double dLoadSignalSize(void); void vStoreSignal(int t, double x); CSignal(); virtual ~CSignal(); protected: double size; // Параметр сигналу - значення int time; // Параметр сигналу – часовий відлік }; #endif // !defined(AFX_SIGNAL_H__216BB1C5_581B_449E_8EC9_582D038796A0__INCLUDED_) // Signal.cpp: implementation of the CSignal class. #include "Signal.h" CSignal::CSignal() { size=0; time=0; } CSignal::~CSignal() {} void CSignal::vStoreSignal(int t, double x) // Метод збереження сигналу { size=x; time=t; } int CSignal::iLoadSignalTime(void) // Метод завантаження відліку сигналу { return time; } double CSignal::dLoadSignalSize(void) // Метод завантаження значення сигналу { return size; } // Comp.h: interface for the CComp class. #if !defined(AFX_COMP_H__66BE5331_2AA4_401F_984A_D80668E5A1ED__INCLUDED_) #define AFX_COMP_H__66BE5331_2AA4_401F_984A_D80668E5A1ED__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include "Signal.h" class CComp : public CSignal { public: int iCompare (double x); CComp(); virtual ~CComp(); }; #endif // !defined(AFX_COMP_H__66BE5331_2AA4_401F_984A_D80668E5A1ED__INCLUDED_) // Comp.cpp: implementation of the CComp class. #include "Comp.h" CComp::CComp() {} CComp::~CComp() {} int CComp::iCompare(double x) // Метод порівняння нового значення сигналу зі { // збереженим if ( x>size ) return 1; // Нове число більше за збережене, треба замінити return 0; } // IO.h: interface for the CIO class. #if !defined(AFX_IO_H__BC57362A_ED2C_4BF1_908D_53CE8020A3CB__INCLUDED_) #define AFX_IO_H__BC57362A_ED2C_4BF1_908D_53CE8020A3CB__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include "Signal.h" #include "stdlib.h" #include "stdio.h" #include "string.h" #include "fstream.h" class CIO : public CSignal { public: void vSaveMax(int t, double x); int iEndOfFile(void); void vSetFiles(char *i,char *o); int iGetNextSignal(); virtual ~CIO(); CIO::CIO(); protected: ifstream InputFile; // Файл із вхідним сигналом ofstream OutputFile; // Файл для збереження результату }; #endif // !defined(AFX_IO_H__BC57362A_ED2C_4BF1_908D_53CE8020A3CB__INCLUDED_) // IO.cpp: implementation of the CIO class. #include "IO.h" CIO::CIO() {} CIO::~CIO() { InputFile.close(); OutputFile.close(); } void CIO::vSetFiles(char *i,char *o) // Метод відкриття файлів { InputFile.open(i); OutputFile.open(o); } int CIO::iGetNextSignal(void) // Метод зчитування наступного відліку сигналу { InputFile >> time >> size; return 0; } int CIO::iEndOfFile(void) // Метод перевірки чи відкритий вхідний файл та чи { // досягнуто його кінець if ( InputFile.is_open() ) { if ( InputFile.eof() ) return 1; else return 0; } return 1; } void CIO::vSaveMax(int t, double x) { OutputFile << "Signal maximum:\n count = " << t << "\n value = " << x << "\n"; cout << "\nSignal maximum:\n count = " << t << "\n value = " << x << "\n"; } // Dev.h: interface for the CDev class. #if !defined(AFX_DEV_H__E931764E_92B0_4915_985C_83A937FE5C22__INCLUDED_) #define AFX_DEV_H__E931764E_92B0_4915_985C_83A937FE5C22__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include "IO.h" class CDev : public CIO { public: CDev(); virtual ~CDev(); }; #endif // !defined(AFX_DEV_H__E931764E_92B0_4915_985C_83A937FE5C22__INCLUDED_) // Dev.cpp: implementation of the CDev class. #include "Dev.h" CDev::CDev() {} CDev::~CDev() {} Опис результатів тестування Виконання програми з поданим на вхід файлом, що містить цифровий сигнал приводить до отримання на виході файлу з максимальним значенням сигналу та відліку, в якому його досягнуто. Вхідний файл: 1 53475 2 -9.83657e+008 3 1.02619e-009 ………… 1023 2.02 1024 5.47889e+008 Вихідний файл: Signal maximum: count = 556 value = 2.14435e+009 Висновок: Виконуючи дану лабораторну роботу, я закріпив теоретичні знання та оволодів практичними навиками об’єкно-орієнтованого аналізу та створення базових абстракцій для моделювання предметної області на прикладі пристрою пошуку максимуму сигналу.
Антиботан аватар за замовчуванням

31.03.2013 13:03-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!