Програма розрахунку середнього діаметру крапель
Принципи реалізації абстрактних класів і віртуальних функцій в С++/Сli: перевантажені операції присвоєння і порівняння; конструктори ініціалізації та копіювання. Розробка програми розрахунку середнього діаметру крапель від дискового розпилювача рідини.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | украинский |
Дата добавления | 24.06.2013 |
Размер файла | 1,5 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Зміст
- Постановка задачі
- Пояснювальна записка
- Лістинг програми
- Результати роботи програми
- Висновки
- Список літератури
Постановка задачі
Із фізики відомо, що внаслідок теплових шумів на кінцях опору виникає електрорушійна сила Еш()
,
де k - постійна Больцмана (Дж/К);
Tk - температура (К);
R - опір (Ом);
- полоса частот (Гц);
Описати абстрактний клас «Об'єкт_обчислення» з елементом даних «Обчислюваний_параметр». Передбачити чисті віртуальні функції:
1) Введення даних з файлу;
2) Розрахунок обчислюваного параметру;
3) Виведення в файл результату та вхідних даних.
Описати клас «Тепловий_шум», похідний від абстрактного класу. В ньому додати елементи даних:
k, Tk, R,
Крім віртуальних функцій передбачити перевантажені операції присвоєння, порівняння (= =, !=, <,<=, >, >=), а також конструктори: пустий, з ініціалізацією і копіювання.
Привести приклад програми, в якій застосовуються усі конструктори, члени-функції і перевантажені оператори.
При введенні даних врахувати, що
К=1,37*10-23 Дж/К
Порядок значень інших параметрів:
Tk =1000…1500 К
R = 900…1700 Oм,
=140…300 Гц
Пояснювальна записка
Спочатку підключаються заголовкові файли:
#include "math.h" - файл з прототипами математичних функцій, який забезпечує виконання математичних операцій.
Далі описуються абстрактний клас SolObj з ементом даних E_sh типу double під міткою protected , що означає, що дана змінна буде доступною з похідних класів та трьома віртуальними функціями:
virtual void Read(String^ filename) abstract; - для читання даних з файлу
virtual void solve() abstract; - для розрахунку обчислювального параметру
virtual void Write(String^ filename) abstract; - для запису результату у файл а також похідний від нього клас TeploviyShum з елементами даних Tk,R,dF типу double. В цьому класі визначено чисті віртуальні функції з базового класу, передбачено перевантажені операції: присвоєння, порівняння (= =, !=, <,<=, >, >=), а також конструктори: пустий, з ініціюванням і копіювання.
Функції:
1. virtual void Read(String^ filename) abstract;- відповідає за считування вхідних даних з файлу. Змінна String^ filename передає ім'я файлу. В функції відбувається почергове считування записаних до файду значень елементів даних Tk,R,dF Якщо файл із вказаним ім'ям не знайдений, то функція поверне текс із вказаною помилкою.
virtual void Read(String^ filename) override
{
if (File::Exists(filename))
{
array<String^>^ data = gcnew array<String^>(3);
StreamReader^ sr = gcnew StreamReader(filename);
Tk = Convert::ToDouble(sr->ReadLine());
R = Convert::ToDouble(sr->ReadLine());
dF = Convert::ToDouble(sr->ReadLine());
solve();
}
else
Console::Write("Не найден файл {0}",filename);
}
2. virtual void solve() abstract - відповідає за проведення розрахунків обчислювального параметру E_sh за формулою
.
В функції здійснюється перевірка умови для забезпечення наявності невід'ємного числа під коренем. При невиконанні цієї умови виводиться текстове повідомлення, що повідомляє про помилку в даних.
virtual void solve() override
{
if(Tk*R*dF >= 0)
{
E_sh=pow(4.0*k*Tk*R*dF,0.5);
}
else
{
Console::WriteLine("Ошибка в данных!");
}
}
3. virtual void Write(String^ filename) abstract - призначена для запису отриманого результату та вхідних даних до файлу. Віртуальна функція virtual String^ ToString() override повертає значення параметрів в функцію вивода.
virtual void Write(String^ filename) override
{
StreamWriter^ sw = gcnew StreamWriter(filename);
sw->AutoFlush::set(true);
sw->Write(this);
}
virtual String^ ToString() override
{
return "Tk = " + Tk + " R = " + R + " dF = " + dF;
}
4. void vvod () - призначення для введення аргуметів для використання їх в перевантажених операціях порівняння.
void vvod ()
{
Tk = Convert::ToDouble(Console::ReadLine());
R = Convert::ToDouble(Console::ReadLine());
dF = Convert::ToDouble(Console::ReadLine());
solve();
}
Перевантажені операції присвоєння та порівняння (= =, !=, <,<=, >, >=)
В них порівнюються значення змінної E_sh. Кожен об'єкт буде порівнюватись з b(1000,900,140). У випадку істинності оператора на єкран виведеться «true» інакше «false»
bool operator > (TeploviyShum^ a1)
{
if(this->E_sh > a1->E_sh)
return true;
else
return false;
}
bool operator < (TeploviyShum^ a1)
{
if(this->E_sh < a1->E_sh)
return true;
else
return false;
}
bool operator >= (TeploviyShum^ a1)
{
if(this->E_sh >= a1->E_sh)
return true;
else
return false;
}
bool operator <= (TeploviyShum^ a1)
{
if(this->E_sh <= a1->E_sh)
return true;
else
return false;
}
bool operator == (TeploviyShum^ a1)
{
if(a1->E_sh == this->E_sh)
return true;
else
return false;
}
bool operator != (TeploviyShum^ a1)
{
if(a1->E_sh != this->E_sh)
return true;
else
return false;
}
Конструктори:
1. Пустий
TeploviyShum()
{}
2. Ініціалізіції списком
TeploviyShum(double _Tk, double _R, double _dF):Tk(_Tk),R(_R),dF(_dF)
{
solve();
}
3. Копіювання
TeploviyShum(const TeploviyShum^ a)
{
Tk = a->Tk;
R = a->R;
dF = a->dF;
E_sh = a->E_sh;
}
В головній функції void main() описуються конструктори, оголошуються змінні, очищується екран, потім почергово викликаються функції
a->Read("input.txt");
a->Write("output.txt");
абстрактний ініціалізація діаметр крапель
виводиться повідомлення про занесення даних до файлу.
Console::WriteLine ("Результат записано в файл OUTPUT.TXT\n Hажмите любую клавишу для продолжения");
Виводиться повідомлення з описанням аргументів. Викликається функція введення аргументів для виконання операцій присвоєння та порівняння та виводиться їх результат
Console::WriteLine ( "Vvedit' znachennya parametriv>>>");
a->vvod();
Console::WriteLine ( "==");
Console::WriteLine (a==b?"true":"false");
Console::WriteLine("a: {0} b: {1}",a->GetRes(),b->GetRes());
Таблиця символьних ідентифікаторів
Символ |
Тип |
Що позначає в програмі |
|
Tk |
double |
Tk - температура (К); |
|
R |
double |
R - опір (Ом); |
|
dF |
double |
- полоса частот (Гц); |
|
E_sh |
double |
Еш - електрорушійна сила () |
Лістинг програми
#include "stdafx.h"
#include "math.h"
using namespace System;
using namespace System::IO;
ref class SolObj abstract
{
protected:
double E_sh;
public:
virtual void Read(String^ filename) abstract;
virtual void solve() abstract;
virtual void Write(String^ filename) abstract;
};
ref class TeploviyShum: SolObj
{
private:
double Tk,R,dF;
initonly static double k=1.37e-23; //stala Bol'cmana.
public:
virtual void solve() override
{
if(Tk*R*dF >= 0)
{
E_sh=pow(4.0*k*Tk*R*dF,0.5);
}
else
{
Console::WriteLine("Ошибка в данных!");
}
}
virtual void Read(String^ filename) override
{
if (File::Exists(filename))
{
array<String^>^ data = gcnew array<String^>(3);
StreamReader^ sr = gcnew StreamReader(filename);
Tk = Convert::ToDouble(sr->ReadLine());
R = Convert::ToDouble(sr->ReadLine());
dF = Convert::ToDouble(sr->ReadLine());
solve();
}
else
Console::Write("Не найден файл {0}",filename);
}
virtual void Write(String^ filename) override
{
StreamWriter^ sw = gcnew StreamWriter(filename);
sw->AutoFlush::set(true);
sw->Write(this);
}
virtual String^ ToString() override
{
return "Tk = " + Tk + " R = " + R + " dF = " + dF;
}
TeploviyShum^ operator= (TeploviyShum^ a)
{
Tk = a->Tk;
R = a->R;
dF = a->dF;
E_sh = a->E_sh;
return this;
}
TeploviyShum()
{}
TeploviyShum(double _Tk, double _R, double _dF):Tk(_Tk),R(_R),dF(_dF)
{
solve();
}
TeploviyShum(const TeploviyShum^ a)
{
Tk = a->Tk;
R = a->R;
dF = a->dF;
E_sh = a->E_sh;
}
double GetRes()
{
return E_sh;
}
void vvod ()
{
Tk = Convert::ToDouble(Console::ReadLine());
R = Convert::ToDouble(Console::ReadLine());
dF = Convert::ToDouble(Console::ReadLine());
solve();
}
bool operator > (TeploviyShum^ a1)
{
if(this->E_sh > a1->E_sh)
return true;
else
return false;
}
bool operator < (TeploviyShum^ a1)
{
if(this->E_sh < a1->E_sh)
return true;
else
return false;
}
bool operator >= (TeploviyShum^ a1)
{
if(this->E_sh >= a1->E_sh)
return true;
else
return false;
}
bool operator <= (TeploviyShum^ a1)
{
if(this->E_sh <= a1->E_sh)
return true;
else
return false;
}
bool operator == (TeploviyShum^ a1)
{
if(a1->E_sh == this->E_sh)
return true;
else
return false;
}
bool operator != (TeploviyShum^ a1)
{
if(a1->E_sh != this->E_sh)
return true;
else
return false;
}
};
void main()
{
TeploviyShum^ a = gcnew TeploviyShum;
TeploviyShum^ b = gcnew TeploviyShum(1000,900,140);
double Tk, R, dF;
Console::Clear();
a->Read("input.txt");
a->Write("output.txt");
Console::WriteLine ("Результат записано в файл OUTPUT.TXT\n
Hажмите любую клавишу для продолжения");
Console::ReadKey();
Console::Clear();
Console::Write ( " \n" +
" ----------------------- СПИСОК АРГУМЕНТОВ -----------------------\n"+
" Tk - Температура, K\n" +
" R - Сопротивление, Om\n" +
" dF - Полоса частот, Gc\n" +
" -----------------------------------------------------------------\n\n"+
" <\n");
Console::WriteLine ( "Введите значения аргументов>>>");
a->vvod();
Console::WriteLine ( "==");
Console::WriteLine (a==b?"true":"false");
Console::WriteLine("a: {0} b: {1}",a->GetRes(),b->GetRes());
Console::WriteLine ( "!=");
Console::WriteLine (a!=b?"true":"false");
Console::WriteLine("a: {0} b: {1}",a->GetRes(),b->GetRes());
Console::WriteLine ( "<");
Console::WriteLine (a<b?"true":"false");
Console::WriteLine("a: {0} b: {1}",a->GetRes(),b->GetRes());
Console::WriteLine ( "<=");
Console::WriteLine (a<=b?"true":"false");
Console::WriteLine("a: {0} b: {1}",a->GetRes(),b->GetRes());
Console::WriteLine ( ">");
Console::WriteLine (a>b?"true":"false");
Console::WriteLine("a: {0} b: {1}",a->GetRes(),b->GetRes());
Console::WriteLine ( ">=");
Console::WriteLine (a>=b?"true":"false");
Console::WriteLine("a: {0} b: {1}",a->GetRes(),b->GetRes());
int t;
String^ert;
Console::WriteLine("нажмите 1 для выхода");
ert=Console::ReadLine();
t=Convert::ToInt32(ert);
}
Результати роботи програми
Спочатку необхідно записати необхідні вхідні дані до файлу «input.txt»
Потім запускаємо програму.
Результат роботи програми записується в файл «OUTPUT.txt».
Після натиснення будь-якої клавіші отримуємо
Необхідно ввести аргументи для виконання порівняння. Об'єкт буде порівнюватись з b(1000,900,140) та на екран виведеться результат.
Висновки
В процесі роботи поставлена задача була вирішена. Була створена програма для розрахунку середнього діаметру крапель, що виникають за допомогою дискового розпилювача рідини. Були повторені основні принципи роботи в C++/CLI. Засвоєно матеріал по темам : абстрактні класи, віртуальні функції, наслідування класів, перевантажені операції присвоєння та порівняння і конструктори ініціалізації та копіювання, принципи роботи с ними в С++/Сli. Створена програма була перевірена рядом тестів, після чого були зроблені висновки, що програма працює правильно та може бути використана на практиці.
Размещено на Allbest.ru
Подобные документы
Інструменти середовища C++Builder, які були використані в програмі. Робота з файлами, їх відкриття, відображення та закриття. Розробка основних функцій для реалізації програми. Тестування програмного забезпечення. Блок-схема та алгоритм програми.
курсовая работа [924,3 K], добавлен 14.01.2014Розробка програми для синхронізації та резервного копіювання даних на основі функцій Windows API. Методи отримання шляхів папок. Синхронізація та резервне копіювання файлів або папок. Застосування основ мови програмування С, функцій Windows API.
курсовая работа [366,5 K], добавлен 21.05.2019Аналіз технічного забезпечення, вибір інструментального програмного забезпечення та середовища розробки програм. Створення класів для реалізації необхідних функцій для роботи програмного засобу. Розробка інтерфейсу для користувача та лістинг програми.
курсовая работа [343,9 K], добавлен 24.08.2012Розгляд матеріалу з розрахунку рецептур. Аналоги програм та сайтів по розрахунку рецептур, створення алгоритму побудови програми. Оптимізація калькулятору з розрахунку рецептур. Проектування алгоритму та програмного забезпечення для його реалізації.
курсовая работа [52,0 M], добавлен 28.03.2023Дослідження динамічних рядів методом найменших квадратів та ковзаючого середнього. Опис логічної структури програми. Стандартні методи та елементи середовища програмування Borland Delphi 2007. Опис функцій складових частин програми і зв'язків між ними.
курсовая работа [135,3 K], добавлен 01.04.2016Розробка програми для визначення динамічної навантажності заднього підшипника вториного валу коробки передач. Програма для розв'язання систем лінійних алгебраїчних рівнянь. Алгоритм обрахунку і графічного відображення швидкісної характеристики автомобіля.
курсовая работа [900,6 K], добавлен 07.06.2010Розробка програми для ітераційного пошуку розміру рівномірних виплат по кредиту й нарахування відсотків на суму, що залишилася. Написання алгоритму програми з використанням бібліотеки (Graph, CRT), констант і перемінних, вхідних і вихідних даний.
курсовая работа [95,9 K], добавлен 26.05.2012Розрахунок оптимального діаметру теплової мережі енергосистеми теплопостачання від джерела до споживача, при змінній швидкості теплоносія та діаметра теплообмінника. Розробка програми за допомогою алгоритмічної мови програмування QBasic і Microsoft Excel.
курсовая работа [1,0 M], добавлен 02.01.2014Об’єктно-орієнтоване програмування мовою С++. Основні принципи об’єктно-орієнтованого програмування. Розробка класів з використанням технології візуального програмування. Розробка класу classProgressBar. Базовий клас font. Методи тестування програми.
курсовая работа [211,3 K], добавлен 19.08.2010Розробка інтелектуального програмного продукту для рішення завдання оптимізації у заданій предметній області. Алгоритм розрахунку пласкої конічної передачі. Оптимізація параметрів та вибір мови програмування. Приклад розрахунку конічної передачі.
курсовая работа [1,5 M], добавлен 24.06.2013