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

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

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

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

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

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

Міністерство освіти і науки України Національний університет „Львівська політехніка” Кафедра електронних обчислювальних машин Звіт про виконання лабораторної роботи № 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:35

Коментарі

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

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

Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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