на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Програма розрахунку сили супротиву

Програма розрахунку сили супротиву

3

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

На частинку,яка рухається в середовищі, діє сила супротиву. Вона розраховується по формулі:

, де

S - площа проекції тіла на площину ;

- швидкість руху частинки відносно середовища;

- щільність середовища;

- коефіцієнт супротиву середовища;

Він залежить від числа Рейнольдса

,

де

- швидкість руху частинки відносно середовища;

d - діаметр частинки;

- щільність середовища;

- в'язкість середовища.

Конкретно :

= для Re,

= для 2 < Re ? 500,

=0,44 для 500 < Re < 2*.

Описати абстрактний клас «Об'єкт_обчислення» з елементом даних «Обчислювальний параметр». Передбачити три віртуальні функції:

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

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

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

Описати клас «Сила_опору», похідний від абстрактного класу. В ньому добавити елементи даних: , , d, , Re.

Крім віртуальних функцій передбачити перевантажені операції присвоєння, порівняння (= =, !=, <, <=, >, >=), а також конструктори: пустий, з ініціалізацією і копіювання.

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

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

=1,29 кг/

=8-20 м/с,

d=1*,

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

В програмі використовуються:

1. Заголовкові файли стандартної бібліотеки:

§ <stdio.h> - прототипи для функцій введення/виведення;

§ <math.h> - прототипи для функцій математичної бібліотеки;

§ <iostream.h> - організація потокового введення/виведення;

§ <stdlib.h> - прототипи функцій для перетворення чисел в текст і навпаки, а також прототипи функцій розміщення пам'яті, генерації випадкових чисел і т.п.; в курсовій роботі застосовується для використання команди exit();

§ <fstream.h> - містить підкласи ofstream, ifstream та fstream, які забезпечують потоки введення/виведення в дискові файли;

§ <conio.h> - прототипи функцій консольного введення/виведення.

2. Класи:

§ Абстрактний - клас, в якому є хоча б одна чиста віртуальна функція.

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

3. Спеціальні члени-функції класу:

§ Конструктор - спеціальна функція, яка викликається кожного разу, коли треба створити новий об'єкт класу.

Пустий конструктор (конструктор по замовчуванню) - його задачею є створення об'єкта класу.

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

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

4. Функції:

§ Чисті віртуальні функції - функції без тіла (тіла функції немає, наприклад, тому, що ми не знаємо як реалізувати її тіло, але сама функція буде відображувати концепцію певної дії).

§ Inline-функції (вбудовані функції) - функції, які підставляються в точці виклику.

5. Структура вибору:

§ if/else - дає можливість програмісту вказати, залежно від того, істинна умова чи хибна, які дії будуть виконуватись.

§ if - використовується для вибору одного з альтернативних напрямків дій.

6. Вказівники:

§ Вказівник - змінна, яка містить адресу.

§ Неявний вказівник *this - вказівник на поточний об'єкт всередині члена-функції. В нього заноситься адреса об'єкту, який зв'язується з цією функцією.

7. Перевантажені оператори:

§ Перевантаження операторів - визначення функціональності вбудованих операторів при використанні з типами користувача.

8. Потоки:

§ Стандартні

cin - стандартний вхідний потік;

cout - стандартний вихідний потік;

§ Файлові

ofstream - відповідає за виведення інформації в файл;

ifstream - відповідає за введення інформації в файл;

Послідовність дій

У файлі kurs.cpp описуємо абстрактний клас «object» та похідний від абстрактного класу клас «sila_oporu».

Підключаємо заголовкові файли:

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

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

#include<math.h> - файл з прототипами математичних функцій, який забезпечує виконання математичних операцій;

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

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

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

class object

{

protected:

double F;

public:

virtual void vvod()=0;

virtual void resh()=0;

virtual void resh1()=0;

virtual void vivod()=0;

};

Тут ми оголосили змінну F типу double з міткою доступу protected. Це означає, що змінна F буде доступна для даного та похідних від нього класів. Також оголошені прототипи чистих віртуальних функцій.

Далі описуємо клас «sila_oporu», що є похідним від абстрактного класу. В ньому додаємо елементи даних.

class sila_oporu: public object

{

private:

double Q1;

double s;

double R;

double V;

double d;

double m;

double re;

Визначаємо допоміжні функції:

public:

double S()

{

return (d*d*M_PI)/4;

}

double Re()

{

return ((V*d*R)/m);

}

double Q()

{

double re = Re();

if (re<=2)

{

return 24/re;

}

if(2<re && re<=500)

{

return (18.5)/pow(re,0.6);

}

if(500<re && re<200000)

{

return 0.44;

}

return 0;

}

Оголосимо пустий конструктор:

sila_oporu()

{

}

Оголосимо конструктор з ініціалізацією:

sila_oporu(double Q1src, double ssrc, double Rsrc, double Vsrc)

{

Q1=Q1src;

s=ssrc;

R=Rsrc;

V=Vsrc;

}

Оголосимо конструктор копіювання:

sila_oporu(const sila_oporu & src)

{

Q1=src.Q1;

s=src.s;

R=src.R;

V=src.V;

}

Визначаємо віртуальні функції, прототипи яких описані раніше:

virtual void vvod()

{

ifstream ifs("dan.txt");

if(!ifs)

{

cout<<"Error: file \"dan.txt\" was not found"<<'\n';

exit(1);

}

ifs>>R>>V>>d>>m;

cout<<"Information from the file \"dan.txt\":\n R="<<R<<" V="<<V<<" d="<<d<<" m="<<m<<'\n';

ifs.close();

}

virtual void resh()

{

F=((Q()*S()*R*V*V)/2);

cout<<"F="<<F<<'\n';

}

virtual void resh1()

{

F=((Q1*s*R*V*V)/2);

cout<<"F="<<F<<'\n';

}

virtual void vivod()

{

ofstream ofs("rez.txt");

if(!ofs)

{

cout<<"Error: file \"rez.txt\" was not found"<<'\n';

exit(1);

}

ofs<<"Q="<<Q()<<"S="<<S()<<"R="<<R<<"V="<<V<<"Re="<<Re()

<<"\nF="<<F;

cout<<"The result was written into the file \"rez.txt\"\n";

ofs.close();

}

Перевантажуємо операцію ==:

sila_oporu & operator == (sila_oporu&src)

{

if(F==src.F)

cout<<"Power of object A and B are equal.\n";

else

cout<<"Power of object A and B are not equal.\n";

return *this;

}

Перевантажуємо операцію !=:

sila_oporu & operator != (sila_oporu&src)

{

if(F!=src.F)

cout<<"Power of object A and B are not equal.\n";

else

cout<<"Power of object A and B are equal.\n";

return *this;

}

Перевантажуємо операцію <:

sila_oporu & operator < (sila_oporu&src)

{

if(F<src.F)

cout<<"Power of object A is less then Power of object B.\n";

else

cout<<"Power of object A is greater then Power of object B.\n";

return *this;

}

Перевантажуємо операцію <=:

sila_oporu & operator<=(sila_oporu&src)

{

if(F<=src.F)

cout<<"Power of object A is less or equal then Power of object B.\n";

else

cout<<"Power of object A is greater or equal then Power of object B.\n";

return *this;

}

Перевантажуємо операцію>:

sila_oporu & operator>(sila_oporu&src)

{

if(F>src.F)

cout<<"Power of object A is greater then Power of object B.\n";

else

cout<<"Power of object A is less then Power of object B.\n";

return *this;

}

Перевантажуємо операцію>=:

sila_oporu & operator>=(sila_oporu&src)

{

if(F>=src.F)

cout<<"Power of object A is greater or equal then Power of object B. ";

else

cout<<"Power of object A is less or equal then Power of object B. ";

return *this;

}

};

Потім опишемо функцію void main(), в якій безпосередньо і використовуватимемо описані вище функції та перевантаження операцій.

Опис функцій

1. virtual void vvod() - функція, що зчитує дані з файлу «dan.txt», та виводить їх на екран в тому разі, якщо інформація зчитана успішно. Якщо інформація не зчитана, то з'являється відповідне повідомлення.

2. virtual void resh() - функція, що безпосередньо обчислює наше значення F використовуючи при цьому дані, що зчитані з файлу та дві допоміжні функції Q() та S(). Після обчислень результат виводиться на екран.

3. virtual void resh1() - функція, що обчислює F використовуючи дані, ініціалізовані конструктором. Після обчислень результат виводиться на екран.

4. virtual void vivod() - функція, що записує результати в файл rez.txt, а саме Q1, S, R, V, Re, F. Також вона виводить повідомлення на екран про те, що дані записані в файл.

5. double S() - функція, що повертає значення (d*d*M_PI)/4, а саме обчислює площу проекції тіла на площину.

6. double Re() - функція, що повертає значення (V*d*R)/m, а саме обчислює число Рейнольда.

7. double Q() - функція, що повертає значення коефіцієнта супротиву середовища в залежності від величини числа Рейнольда.

8. void main() - головна функція, в якій реалізовані всі операції та функції.

9. clrscr() - стандартна функція очищення екрану.

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

11. close() - функція, що закриває файловий потік.

12. pow() - стандартна функція обчислення степеня.

Опис команд та операторів

1. sila_oporu & operator == (sila_oporu&src) - перевантаження операції ==.

2. sila_oporu & operator != (sila_oporu&src) - перевантаження операції !=.

3. sila_oporu & operator < (sila_oporu&src) - перевантаження операції <.

4. sila_oporu & operator<=(sila_oporu&src) - перевантаження операції <=.

5. sila_oporu & operator>(sila_oporu&src) - перевантаження операції >.

6. sila_oporu & operator>=(sila_oporu&src) - перевантаження операції >=.

7. cout - стандартний об'єкт, що служить для виведення інформації на екран.

8. endl - маніпулятор, який викликає flash, переходить на інший рядок.

9. іf - логічна інструкція.

10. ofstream - стандартний клас файлового виведення даних.

11. іfstream - стандартний клас файлового введення даних.

12. оfs - команда, що використовується для файлового виведення даних.

13. іfs - команда, що використовується для файлового введення даних.

Таблиця символьних імен

Змінна за умовою

Змінна в програмі

Одиниці вимірювання

Пояснення

F

F

Н

сила супротиву

Q1

/ кг*м

коефіцієнт супротиву середовища

S

s

площа проекції тіла на площину

R

кг/

щільність середовища

V

м/с

швидкість руху частинки відносно середовища

d

d

м

діаметр частинки

m

в'язкість середовища

Re

re

кг*м/

число Рейнольдса

Також в програмі використовуються такі змінні як:

Q1src, ssrc, Rsrc, Vsrc - вони застосовуються в конструкторі ініціалізації для ініціювання змінних заданими значеннями.

Програма

#include<math.h>

#include<stdlib.h>

#include<fstream>

#include<conio.h>

#include<iostream>

using namespace std;

#define M_PI 3.14159265

class object //абстрактний клас

{

protected:

double F;

public:

virtual void vvod()=0; //чисті віртуальні функції

virtual void resh()=0;

virtual void resh1()=0;

virtual void vivod()=0;

};

class sila_oporu: public object //клас, похідний від абстрактного

{

private:

double Q1;

double s;

double R;

double V;

double d;

double m;

double re;

public:

double S()

{

return (d*d*M_PI)/4;

}

double Re()

{

return ((V*d*R)/m);

}

double Q()

{

double re = Re();

if (re<=2)

{

return 24/re;

}

if(2<re && re<=500)

{

return (18.5)/pow(re,0.6);

}

if(500<re && re<200000)

{

return 0.44;

}

return 0;

}

sila_oporu() //пустий конструктор

{

}

sila_oporu(double Q1src, double ssrc, double Rsrc, double Vsrc)

{

Q1=Q1src; //конструктор з ініціалізацією в тілі s=ssrc;

R=Rsrc;

V=Vsrc;

}

sila_oporu(const sila_oporu & src) //конструктор копіювання

{

Q1=src.Q1;

s=src.s;

R=src.R;

V=src.V;

}

virtual void vvod() //функція введення даних з файлу

{

ifstream ifs("dan.txt");

if(!ifs)

{

cout<<"Error: file \"dan.txt\" was not found"<<'\n';

exit(1);

}

ifs>>R>>V>>d>>m;

cout<<"Information from the file \"dan.txt\":\n R="<<R<<" kg/m^3 V="<<V<<" m/s d="<<d<<" m m="<<m<<" N*s/m^2 '\n'" ;

ifs.close();

}

virtual void resh() //функція підрахунку сили F

{

F=((Q()*S()*R*V*V)/2);

cout<<"F="<<F<<'\n';

}

virtual void resh1()

{

F=((Q1*s*R*V*V)/2);

cout<<"F="<<F<<'\n';

}

virtual void vivod() //функція виведення (запису в файл)

{

ofstream ofs("rez.txt");

if(!ofs)

{

cout<<"Error: file \"rez.txt\" was not found"<<'\n';

exit(1);

}

ofs<<"Q="<<Q()<<" S="<<S()<<" R="<<R<<" V="<<V<<" Re="<<Re()<<"\nF="<<F;

cout<<"The result was written into the file \"rez.txt\"\n";

ofs.close();

}

sila_oporu & operator = (sila_oporu&src) //перевантаження оператора присвоєння

{

Q1=src.Q1;

s=src.s;

R=src.R;

V=src.V;

return *this;

}

sila_oporu & operator == (sila_oporu&src) //перевантаження оператора порівняння = =

{

if(F==src.F)

cout<<"Power of object A and B are equal.\n";

else

cout<<"Power of object A and B are not equal.\n";

return *this;

}

sila_oporu & operator != (sila_oporu&src) //перевантаження оператора порівняння ? (!=)

{

if(F!=src.F)

cout<<"Power of object A and B are not equal.\n";

else

cout<<"Power of object A and B are equal.\n";

return *this;

}

sila_oporu & operator < (sila_oporu&src) //перевантаження оператора порівняння <

{

if(F<src.F)

cout<<"Power of object A is less then Power of object B.\n";

else

cout<<"Power of object A is greater then Power of object B.\n";

return *this;

}

sila_oporu & operator<=(sila_oporu&src) //перевантаження оператора порівняння

{

if(F<=src.F)

cout<<"Power of object A is less or equal then Power of object B.\n";

else

cout<<"Power of object A is greater or equal then Power of object B.\n";

return *this;

}

sila_oporu & operator>(sila_oporu&src) //перевантаження оператора порівняння >

{

if(F>src.F)

cout<<"Power of object A is greater then Power of object B.\n";

else

cout<<"Power of object A is less then Power of object B.\n";

return *this;

}

sila_oporu & operator>=(sila_oporu&src) //перевантаження оператора порівняння ?

{

if(F>=src.F)

cout<<"Power of object A is greater or equal then Power of object B. ";

else

cout<<"Power of object A is less or equal then Power of object B. ";

return *this;

}

};

void main() //головна функція

{

object *p;

p=new sila_oporu; //виділення пам'яті

p->vvod(); //звертання до функції введення

cout<<"\nThe result is: ";

p->resh(); //звертання до функції підрахунку

p->vivod(); //звертання до функції виведення

sila_oporu a(1.1,8.3,1.29,15);

sila_oporu b(0.8,4.2,1.29,20);

cout<<"\nAfter the initialising:\nFor object A: ";

a.resh1();

cout<<"\nFor object B: ";

b.resh1();

sila_oporu w(a);

cout<<"After the copying: ";

w.resh1();

sila_oporu k;

k=a;

cout<<"After the assignment: ";

k.resh1();

cout<<"Operator ==: ";

a==b;

cout<<"Operator !=: ";

a!=b;

cout<<"Operator >=: ";

a>=b;

cout<<"\nOperator >: ";

a>b;

cout<<"Operator <=: ";

a<=b;

cout<<"Operator <: ";

a<b;

}

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

В результаті отримаємо :

Тобто, спочатку зчитуються з файлу “dan.txt” та виводяться на екран дані, з якими працюватиме програма. Далі обраховується значення сили супротиву F; результат обчислення записується в файл “rez.txt” та виводиться на екран.

Також в програмі передбачена ініціалізація даних для двох об'єктів класу “ sila_oporu ” - а та b, після чого обчислюються та виводяться на екран значення параметра F для даних об'єктів. Присутнє і присвоєння(копіювання) - об'єкт k=a (w(a)) . Тобто, об'єкт k (w) класу “ sila_oporu ” буде мати такі самі значення параметрів, як і а. На екран виводиться результат присвоєння(копіювання) - значення F для k (w). Програма містить перевантажені операції присвоєння (що використовується при копіюванні) та порівняння (==, !=, <, <=, >, >=), за допомогою яких відбувається порівняння об'єктів а та b. Результат роботи цих операцій виводиться на екран.

Висновки

В курсовій роботі виконується обчислення сили супротиву, яка діє на частинку,що рухається в середовищі. Вона обчислюється по формулі:

.

Програмна реалізація основується на роботі з класами, а саме:

1. Описується абстрактний клас, в якому наявні чисті віртуальні функції:

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

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

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

2. Описується клас, похідний від абстрактного, в якому передбачені:

1) Перевантажені операції присвоєння, порівняння (==, !=, <, <=, >, >=).

2) Конструктори: пустий, з ініціюванням і копіювання.

Тобто, в курсовій роботі були вдосконаленні вміння роботи з класами, спеціальними членами-функціями класу, віртуальними функціями, перевантаженими операторами, а також з файловими потоками в середовищі Microsoft Visual C++ 2005.

Література

1. Конспект лекцій з предмету «Алгоритмічні мови».

2. Стефан, Дэвис. C++ для "чайников", 4-е издание. : Пер. с англ.: - М.: Издательский дом «Вильямс», 2003. - 336 с.

3. Х.Дейтел, П.Дейтел. Как программировать на С. : Пер. с англ.: - М.: Издательский дом «Вильямс», 2000. - 995 с.

4. Джесс Либерти. Освой самостоятельно С++ за 21 день.:Пер. С англ.:- М.: Издательский дом «Вильямс», 2006. -840 с.



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.