Програма розрахунку сили супротиву
Розрахунок сили супротиву, що діє на частинку, за допомогою засобів мови програмування С++. Заголовкові файли стандартної бібліотеки, спеціальні члени-функції, структури вибору, класи, вказівники та інші елементи, які використовуються в програмі.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | украинский |
Дата добавления | 06.01.2011 |
Размер файла | 267,9 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
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 с.
Подобные документы
Широкі можливості по використанню комп'ютерних навчальних систем. Розробка навчальної системи мультимедійного посібника з дисципліни "Інформатика і ОТ" на тему "Особливості мови програмування С++. Вказівники". Вимоги до розробки навчальної програми.
курсовая работа [2,9 M], добавлен 23.11.2010Об'єктно-орієнтована мова Python - сучасна мова програмування, проста у вивченні та використанні. Наявність повної стандартної бібліотеки. Середовища програмування на Python. Механізм функціонування інтерпретатора. Колекції даних, комбіновані оператори.
презентация [753,2 K], добавлен 06.02.2014Сутність і елементи електронної бібліотеки, її послуги та особливості. Традиційна каскадна модель життєвого циклу програми. Написання електронної бібліотеки за допомогою мови гіпертекстової розмітки HTML, рекомендації щодо її впровадження та використання.
курсовая работа [3,0 M], добавлен 29.03.2013Розробка програми автоматизації роботи з матрицями. Оформлення даних у вигляді матриць цілих чисел. Перелік операцій над матрицями, які реалізуються у програмі. Програмне забезпечення, мови програмування. Опис логічної структури та алгоритм програми.
курсовая работа [312,2 K], добавлен 01.04.2016Блок-схема та програма обчислення значення функції y=f(x) у точці x0. Обчислення двох значень поліному з використанням схеми Горнера. Програма табуляції функції Y на проміжку [a,b] з шагом h. Програма визначення нульових елементів квадратної матриці.
контрольная работа [63,3 K], добавлен 23.09.2010Інтернет пейджер типу ICQ: можливості, специфікація протоколу, комунікація між сервером та клієнтом. Загальний вигляд алгоритму додатка сервера. Вибір мови та середовища програмування. Потокові та дейтаграмні сокети. Бібліотеки, використані в програмі.
курсовая работа [2,0 M], добавлен 06.08.2013Ключові поняття мови об’єктно-орієнтованого програмування C++: інкапсуляція, наслідування, абстракція, поліморфізм. Об’ява класів у мові С++. Графічні засоби. Пошук відстані між точками. Опис класів і об’єктів. Програма графічної задачі. Лістинги файлів.
курсовая работа [144,3 K], добавлен 14.03.2013Складання блок-схеми і програми обчислення значення функції з заданою точністю та програми табулювання функції з заданим кроком. Обчислення двох значень поліному за допомогою схеми Горнера. Програма введення вхідних даних з клавіатури і з файлу ZAD4.DAT.
контрольная работа [168,6 K], добавлен 29.09.2010Мови програмування, на яких написана програма побудови замкнутих багатокутників. Функціональні обмеження на застосування. Методи та елементи, що використовуються. Структура програми з описом функцій складових частин. Зв'язок програми з іншими програмами.
курсовая работа [76,6 K], добавлен 01.04.2016Визначення сили взаємодії двох точкових зарядів. С++ як універсальна мова програмування. Клас - ключове поняття С++. Стандартні бібліотеки С++. Функція конструктора і деструктора. Опис базового класу Objcalc. Лістинг та результат роботи програми.
курсовая работа [107,6 K], добавлен 27.12.2011