Потужність вісьсиметричного розбризкувача

Розробка програми, яка розраховує потужність рідинного вісьсиметричного розбризкувача і демонструє основні аспекти об’єктно-орієнтованого програмування, а саме розробку класів, зв’язків між ними та такі явища як інкапсуляція, поліморфізм та спадкування.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык украинский
Дата добавления 18.12.2011
Размер файла 155,4 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

КУРСОВА РОБОТА

з предмету: «Алгоритмічні мови»
на тему: «Потужність вісьсиметричного розбризкувача»
Зміст

Постановка задачі

Теоретичні відомості

Пояснювальна записка

Код програми

Результати роботи програми

Висновки

Список літератури

Постановка задачі

Потужність, яка витрачається на розбризкування рідини вісьосиметричним розбризкувачем, визначається за формулою

де ? - щільність рідини;

? - кутова швидкість обертання розбризкувача;

Sotv - площа одного отвору;

R - радіус оболонки;

? - коефіцієнт добутку

?s - площа перфорованої поверхні розбризкування, віднесена доодного отвору витікання.

g - прискорення вільного падіння

H - напор рідини.

Описати абстрактний клас „Об'єкт обчислення” з елементом даних „Обчислюваний-параметр”.

Передбачити чисті віртуальні функції:

1) Введення даних із файлу;

2) Розрахунок обчислюваного параметру;

3) Виведення в файл результату та вхідних даних.

Описати клас „Розбризкувач”, похідний від абстрактного класу. В ньому добавити елементи даних: ?,?,Sotv,R,?,?s,g, Н.

Крім віртуальних функцій передбачити перевантажені операції присвоєння, порівняння

(= =, !=, <, <=, >, >=), а також конструктори: пустий, з ініціалізацією і копіювання.

Привести приклад програми, в якій застосовуються ці конструктори, члени-функції і перевантажені оператори.

Порядок значень параметрів:

? =1000 кг/м3 ;

H =0,3-:-0,6;

? = 100 -:- 120 рад/с;

Sotv =1*10-6 -:-1,2*10-6 м2;

R =0,15 -:- 0,25 м2;

? =0,65;

?s =1*10-4 м2;

g =9,81 м/с2;

Теоретичні відомості

C++ -- мова програмування високого рівня з підтримкою декількох парадигм програмування: об'єктно-орієнтованої, узагальненої та процедурної. Розроблена Б'ярном Страуструпом в AT&T Bell Laboratories (Мюррей-Хілл, Нью-Джерсі) у 1979 році та названа «Сі з класами». Страуструп перейменував мову у C++ у 1983 р. Базується на мові С. Визначена стандартом ISO/IEC 14882:2003.

Підтримує різні парадигми програмування, поєднує властивості як високорівневих, так і низькорівневих мов. У порівнянні з його попередником - мовою C, - найбільшу увагу приділено підтримці об'єктно-орієнтованого програмування. Назва «C + +» походить від назви мови C, в якому унарний оператор + + позначає інкремент змінної.

C + + додає до C об'єктно-орієнтовані можливості. Він вводить класи, які забезпечують три найважливіші властивості ООП: інкапсуляцію, успадкування і поліморфізм.

Інкапсуляція - одна з трьох основних концепцій об'єктно-орієнтованого програмування і дизайну. Мається на увазі, що об'єкт вміщує не тільки дані, але і правила їх обробки, оформлені в вигляді виконуваних фрагментів. А також те, що доступ до стану об'єкта напряму забороняється, і ззовні можна взаємодіяти з об'єктом тільки через заданий інтерфейс, що дозволяє знизити зв'язність.

Успадкувамння - метод утворення нових класів на основі використання вже існуючих. У C++ при успадкуванні одного класу від іншого успадковується реалізація класу, плюс клас-спадкоємець може додавати свої поля і функції або перевизначити функції базового класу. Множинне успадкування дозволено. Спадкування буває публічним, захищеним і закритим.

Поліморфізм - є здатність екземплярів підкласу грати роль об'єктів батьківського класу, завдяки чому екземпляри підкласу можна використовувати там, де використовуються екземпляри батьківського класу.

Дружні функції - функції які фактично не належать даному класу, але можуть використовувати його приватні змінні та методи.

Віртуальний метод або віртуальна функція - метод об'єкта в об'єктно-орієнтованому програмуванні, різний для базового класу і класу нащадка.

Чиста віртуальна функція - це функція, яка нічого не виконує і не доступна для виклику. Її прототип є шаблоном для функцій, що заміщають її у похідних класах.

Абстрактний клас - це базовий клас (шаблон), котрий не передбачає створення екземплярів. Абстрактний клас може мати або не мати абстрактні методи та властивості. Абстрактні методи не реалізуються для класу, в якому вони описані, але повинні бути описані для його не абстрактних нащадків.

Конструктор класу - спеціальний блок інструкцій, який викликається при створенні об'єкта. Конструктор схожий з методом, але відрізняється тим, що не має явним чином визначеного типу даних, що повертаються, не успадковується.

Пустий конструктор - конструктор, що не приймає аргументів.

Конструктор копіювання - конструктор, що приймає в якості аргументу об'єкт, того ж класу, або посилання на нього.

Перевантаження операторів - один із способів реалізації поліморфізму, що полягає в можливості одночасного існування в одній області видимості декількох різних варіантів застосування оператора, що мають одне і те ж ім'я, але розрізняються типами параметрів, до яких вони застосовуються.

Пояснювальна записка

Код програми знаходиться в файлі vovk.cpp

В файлі описуються два класи Objectdoslid та Sprinkler (наслідує Objectdoslid)

Спочатку підключаються бібліотеки:

#include <iostream.h> - файл заголовків методів класів потоків вводу виводу інформації;

#include <fstream.h> - файл заголовків методів класів потоків для роботи з файлами;

#include <stdlib.h> - файл заголовків методи якого контролюють роботу програми, дозволяють переводити дані в різні типи, та інше.

#include <conio.h> - файл заголовків, який передбачає методи роботи з консоллю.

#include <math.h> - файл заголовків, який містить математичні функції.

Потім оголошується клас «Objectdoslid»:

class Objectdoslid

{

protected:

double obchParameter;

public:

virtual void input()=0;

virtual void calculation()=0;

virtual void output()=0;

};

Мітка protected означає, що дана змінна буде доступною з похідних класів, а мітка public означає, що дані змінні будуть доступні будь-де. В цьому блоці:

1) оголошено змінну obchParameter типу double, яка буде використовуватись для зберігання результатів обчисленнь;

2) оголошено прототипи чистих віртуальних функцій.

Далі описуємо клас Sprinkler похідний від абстрактного класу. В ньому добавлено елементи даних типу double та конструктори (пустий, з ініціалізацією та копіювання), перевантажені оператори =, ==, !=, >=, >, <=, < та конструктори: пустий, з ініціюванням та копіювання, також в ньому перевизначені віртуальні функції абстрактного класу: calculation, output, input;

Функції output, input відповідають за введення/виведення інформації в файл та на екран.

Функція calculation призначена для розрахування формули.

Після визначення класів описуються дружні функції, які об'явлені в класі Sprinkler.

Таблиця символьних ідентифікаторів

В умові

В програмі

? - щільність рідини;

Ro

? - кутова швидкість обертання розбризкувача;

Omg

Sotv - площа одного отвору;

Fotv

R - радіус оболонки;

R

? - коефіцієнт добутку

Mu

?s - площа перфорованої поверхні розбризкування, віднесена доодного отвору витікання.

DS

g - прискорення вільного падіння

G

H - напор рідини.

H

Код програми

програмування розбризкувач інкапсуляція поліморфізм

#include <stdio.h>

#include <iostream.h>

#include <fstream.h>

#include <stdlib.h>

#include <conio.h>

#include <math.h>

#define constG 9.81

class Objectdoslid

{

protected:

double obchParameter;

public:

virtual void input()=0;

virtual void calculation()=0;

virtual void output()=0;

};

class Sprinkler: public Objectdoslid

{

private:

double Ro, H, Omg, Fotv, R, Mu, DS, G;

public:

friend void operator==(Sprinkler &a, Sprinkler &b);

friend void operator!=(Sprinkler &a, Sprinkler &b);

friend void operator<(Sprinkler &a, Sprinkler &b);

friend void operator<=(Sprinkler &a, Sprinkler &b);

friend void operator>(Sprinkler &a, Sprinkler &b);

friend void operator>=(Sprinkler &a, Sprinkler &b);

friend ifstream &operator>>(ifstream &ifs, Sprinkler &Spr);

friend ostream &operator<<(ostream &os, Sprinkler &Spr);

friend ofstream &operator<<(ofstream &ofs, Sprinkler &Srp);

Sprinkler(double ro, double h, double omg, double fotv, double r, double mu, double dS, double g)

{

Ro=ro;

H=h;

Omg=omg;

Fotv=fotv;

R=r;

Mu=mu;

DS=dS;

G=g;

}

Sprinkler()

{

}

Sprinkler(const Sprinkler &src)

{

Ro=src.Ro;

H=src.H;

Omg=src.Omg;

Fotv=src.Fotv;

R=src.R;

Mu=src.Mu;

DS=src.DS;

G=src.G;

}

virtual void input()

{

ifstream ifs("input.txt");

if(!ifs)

{

cout<<"Fail ne znaydeno"<<'\n';

getch();

exit(1);

}

ifs>>Ro;

ifs>>H;

ifs>>Omg;

ifs>>Fotv;

ifs>>R;

ifs>>Mu;

ifs>>DS;

ifs>>G;

}

virtual void output()

{

ofstream ofs("output.txt");

ofs<<Ro<<endl;

ofs<<H<<endl;

ofs<<Omg<<endl;

ofs<<Fotv<<endl;

ofs<<R<<endl;

ofs<<Mu<<endl;

ofs<<DS<<endl;

ofs<<G<<endl;

ofs<<obchParameter<<endl;

cout<<Ro<<endl;

cout<<H<<endl;

cout<<Omg<<endl;

cout<<Fotv<<endl;

cout<<R<<endl;

cout<<Mu<<endl;

cout<<DS<<endl;

cout<<G<<endl;

cout<<obchParameter<<endl;

cout<<"";

}

virtual void calculation()

{

obchParameter=(2/3)*((M_PI*Ro*Omg*Omg*Fotv*Mu*R*R*R)/(G*DS))*pow(Omg*Omg*R*R+2*G*H,3/2);

cout<<obchParameter;

}

};

void operator==(Sprinkler &a, Sprinkler &b)

{

cout<<"\n Operator '==':\n";

if(a.obchParameter==b.obchParameter)

cout<<" 'a' ta 'b' rivni.\n";

else

cout<<" 'a' ta 'b' ne rivni.\n";

}

void operator!=(Sprinkler &a, Sprinkler &b)

{

cout<<"\n Operator '!=':\n";

if(a.obchParameter!=b.obchParameter)

cout<<"'a' ta 'b' ne rivni.\n";

else

cout<<"'a' ta 'b' rivni.\n";

}

void operator<(Sprinkler &a, Sprinkler &b)

{

cout<<"\n Operator '<':\n";

if(a.obchParameter<b.obchParameter)

cout<<"'a' menshe nizh 'b'.\n";

else

cout<<"'a' bilshe, chi rivne 'b'.\n";

}

void operator<=(Sprinkler &a, Sprinkler &b)

{

cout<<"\n Operator '<=':\n";

if(a.obchParameter<=b.obchParameter)

cout<<"'a' menshe, chi rivne 'b'.\n";

else

cout<<"'a' bilshe, nizh 'b'.\n";

}

void operator>(Sprinkler &a, Sprinkler &b)

{

cout<<"\n Operator '>':\n";

if(a.obchParameter>b.obchParameter)

cout<<"'a' bilshe nizh 'b'.\n";

else

cout<<"'a' menshe, chi rivne 'b'.\n";

}

void operator>=(Sprinkler &a, Sprinkler &b)

{

cout<<"\n Oerator '>=':\n";

if(a.obchParameter>=b.obchParameter)

cout<<"'a' bilshe chi rivne 'b'.\n";

else

cout<<"'a' menshe, nizh 'b'.\n"<<endl;

}

ifstream &operator>>(ifstream &ifs, Sprinkler &Spr)

{

ifs>>Spr.Ro;

ifs>>Spr.H;

ifs>>Spr.Omg;

ifs>>Spr.Fotv;

ifs>>Spr.R;

ifs>>Spr.Mu;

ifs>>Spr.DS;

ifs>>Spr.G;

return ifs;

}

ostream &operator<<(ostream &os, Sprinkler &Spr)

{

os<<Spr.Ro<<endl;

os<<Spr.H<<endl;

os<<Spr.Omg<<endl;

os<<Spr.Fotv<<endl;

os<<Spr.R<<endl;

os<<Spr.Mu<<endl;

os<<Spr.DS<<endl;

os<<Spr.G<<endl;

os<<Spr.obchParameter<<endl;

return os;

}

ofstream &operator<<(ofstream &ofs, Sprinkler &Spr)

{

ofs<<Spr.Ro<<endl;

ofs<<Spr.H<<endl;

ofs<<Spr.Omg<<endl;

ofs<<Spr.Fotv<<endl;

ofs<<Spr.R<<endl;

ofs<<Spr.Mu<<endl;

ofs<<Spr.DS<<endl;

ofs<<Spr.G<<endl;

ofs<<Spr.obchParameter<<endl;

}

void main()

{

clrscr();

Sprinkler sp1;

Sprinkler sp2(1000,0.3,100,1*pow(10,-6),0.15,0.65,1*pow(10,-4),constG);

sp1.input();

sp1.calculation();

sp2.calculation();

sp1==sp2;

sp1!=sp2;

sp1<sp2;

sp1<=sp2;

sp1>sp2;

sp1>=sp2;

Sprinkler sp3(sp1);

cout<<"Dani z faily: \n";

cout<<sp1;

cout<<"Dani z programu: \n";

cout<<sp2;

cout<<"Dani stvoreni konstruktorom: \n";

sp3.output();

getch();

}

Результати роботи програми

Спочатку необхідно записати необхідні вхідні дані до файлу «input.txt».

Рис. 1 - файл вхідних даних

Потім запускаємо програму.

Рис. 2 - результати програми

Результат роботи програми записується в файл «out.txt».

Рис. 3 - файл вихідних даних

Висновки

Під час виконання завдання курсової роботи, була розроблена програма, яка розраховує потужність рідинного розбризкувала. Дана програма демонструє основні аспекти об'єктно-орієнтованого програмування, а саме розробка класів, та зв'язків між ними, та такі явища як інкапсуляція, поліморфізм та спадкування.

За період побудови алгоритму роботи програми та її коду, мною були набуті деякі навички використання принципів об'єктно-орієнтованого програмування.

Список літератури

1. Конспект лекцій.

2. Бьерн Страуструп - Программирование. Принципы и практика использования С++, Издательство: Вильямс, Год: 2011, Страниц: 1246.

3. http://ru.wikipedia.org/wiki

- http://ru.wikipedia.org/wiki/Объектно_ориентированное_програмирование

- http://ru.wikipedia.org/wiki/C++

4. http://www.cplusplus.com

Размещено на Allbest.ru


Подобные документы

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