Програма розрахунку середнього діаметру крапель

Принципи реалізації абстрактних класів і віртуальних функцій в С++/С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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.