67973

Обчислення виразів за допомогою математичних функцій

Практическая работа

Информатика, кибернетика и программирование

У стандарті мови C++ визначена стандартна бібліотека функцій, яка складається з великої кількості окремих тематичних бібліотек. Наприклад: стандартні бібліотеки, що залишилися в «спадок» від C; стандартні бібліотеки C++; API – функції, що надаються операційною системою...

Украинкский

2014-09-16

146.5 KB

2 чел.

i: Практична робота №5 до лекції №12. 

Практична робота № 5

Обчислення|підрахунок| виразів за допомогою математичних функцій.

Мета|ціль| роботи: програмування обчислювального процесу лінійної структури з використанням арифметичних операцій та математичних функцій  на мові С++.

Теми для попереднього опрацювання:

  •  арифметичні операції;
  •  порядок|лад| виконання операцій;
  •  стандартні математичні функції.

Варіанти індивідуальних завдань.   Див. додаток 1. 

Приклад розв’язання задачі 

Функції бібліотеки математичних функцій.

Теоретична частина.

У стандарті мови C++ визначена  стандартна бібліотека функцій, яка складається з великої кількості окремих тематичних бібліотек.  Наприклад:

  1.  стандартні бібліотеки, що залишилися в "спадок" від C;
  2.  стандартні бібліотеки C++;
  3.  API – функції, що надаються операційною системою;

Щоб використовувати функцію, потрібно знати:

  1.  у якій бібліотеці вона знаходиться,
  2.  як називається функція;
  3.  які параметри передаються на вхід функції;
  4.  який результат повертає функція.

Математичні функції

Особливості реалізації: підключення заголовного файлу math.h, який містить прототипи функцій.

Приклад: Написати програму, яка  обчислення куб дійсного числа за допомогою математичної функції з ім’ям  pow.

Прототип функції (файл math.h):   double pow(double x, double y);

#include <iostream>

#include <windows.h>

#include <math.h>

using namespace std;

void main()

{

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

double n;

cin>>n;

cout<<"Куб числа "<<n<<" = "<<pow(n,3)<<endl;

cout<<"\n\n";

system("pause");

}

Неправильний варіант реалізації:

int n=5;

cout<<pow(n,3)<<endl;

Компілятор  виведе повідомлення про помилку.   

error C2668: 'pow' : ambiguous call to overloaded function

Неоднозначний виклик перенавантажуваної функції

Неправильний варіант реалізації:

int n=5;

cout<<pow(n,3.)<<endl;

Приклад:  Обчислити висоти трикутника, якщо відомі його сторони

Вхідні дані:   сторони трикутника a, b, c, які задаємо з клавіатури.

Вихідні дані: висоти трикутника ha, hb, hc;.

Алгоритм:

Формула обчислення висоти трикутника.

,

, де р= (a+d+с) /2 - півпериметр трикутника.

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

Проміжні змінні:

  perimeter - периметр трикутника p;

square -  площа трикутника

Ми не перевірятимемо значення на допустимість (хоча в реальних програмах обов'язково потрібно це робити) - сторони трикутника не можуть бути від’ємними  або нульовими.

Особливості реалізації: підключення заголовного файлу math.h, який містить прототипи функцій.

double sqrt(double x);

Текст програми:

#include <iostream>

#include <windows.h>

#include <math.h>

using namespace std;

void main()

{

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

double a, b, c;    // сторони трикутника

double ha, hb, hc;    // висоти трикутника

double perimeter, square;   

cout<<"Задайте сторони трикутника: ";

cin>>a>>b>>c;

perimeter  = (a+b+c)/2;     

square  = sqrt(perimeter*(perimeter-a)*(perimeter-b)*(perimeter-c)); ha=2/a*square ;

cout<<"hа ="<<ha<<endl;

hb = 2/b*square ;

cout<<"hb ="<<hb<<endl;

hc = 2/c*square ;

cout<<"hc ="<<hc<<endl;

cout<<endl<<endl;     

system("pause");

return;

}

Контрольный тест:

Прямоугольный треугольник:

Задайте стороны треугольника: 3 4 5

hа =4

hb =3

hc =2.4

Равносторонний  треугольник.

Задайте стороны треугольника: 1 1 1

hа =0.866025

hb =0.866025

hc =0.866025

Равнобедренный  треугольник.

Задайте стороны треугольника: 3 3 2

hа =1.88562

hb =1.88562

hc =2.82843

Перевантаження функцій

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

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

Программа складається з 3-х функцій.

  1.  Головна функція:

Вхідні дані:  два цілих і два дійсні числа ;   

Вихідні дані :  виведення на екран результату функції ділення двох  чисел..

  1.  Функція ділення двох цілих чисел.  Ім'я функції -  Div.    

Вхідні дані:      цілі числа numbFirst,numbSecond; 

Значення, яке повертає функція :  частка від ділення.

Прототип функції:    int Div(int numbFirst,int numbSecond);

  1.  Функція ділення двох дійсних  чисел.  Ім'я функції -  Div.    

Вхідні дані:      дійсні числа  numbFirst,numbSecond; 

Значення, яке повертає функція :  частка від ділення.

Прототип функції:  double Div(double numbFirst,double numbSecond);

Текст програми.

#include <iostream>

using namespace std;

int Div(int a, int b);    // пртотип функції Div

double Div(double a, double b);   // пртотип функції Div

void main()    

{

cout<<Div(2,3)<<endl;

cout<<Div(2.,3.);

cout<<endl<<endl;

   

system("pause");

return;

}

int Div(int numbFirst, int numbSecond)

{

 return numbFirst/numbSecond;

}

double Div(double numbFirst, double numbSecond)

{

 return numbFirst/numbSecond;

}

Результат

0

0.666667


Приклад розв’язання задачі.       Назад

Скласти програму, яка підраховує|підсумовує| і|та| виводить на екран значення  змінних t1 і|та| t2 відповідно до заданих формул. Значення деяких параметрів,  можуть бути цілими числами або  числами з|із| плаваючою точкою|крапкою|. Вони повинні вводитися|запроваджувати| з клавіатури. Значення інших|останніх| - задаватися як початкові значення при оголошенні відповідних змінних.    У разі потреби, допускається (і навіть бажано) спростити формули для того, щоб забезпечити мінімізацію об'єму|обсягу| обчислень|підрахунків|.

Вхідні дані:

x і|та| y – змінні дійсного типу;

a, b, c, d  - константи дійсного типу.

Вихідні дані:

t1 і|та| t2 – змінні дійсного типу .

Алгоритм.

Алгоритм розв’язання задачі - лінійний і|та| складається з|із|:

  •  визначення констант  a, b, c, d .
  •  введення значень x і|та| y.
  •  обчислення|підрахунки| значення t1;
  •  обчислення|підрахунки| значення t2;
  •  виведення значень t1 і|та| t2.

Оптимізація алгоритму

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

  •  Вираз ax зустрічається один раз в першій формулі і|та| двічі в другій. Отже, можна один раз провести множення ax, а потім використовувати цей результат.
  •  У другій формулі двічі зустрічається множення квадратного кореня на тангенс - це обчислення|підрахунок| можна так само зробити один раз.


Текст програми для компілятора Visual Studio 2005

#include <iostream>

#include <windows.h>

#include <math.h>

using namespace std;

void main()    

{

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

 double x, y;

 const double a=12.5,b=1.3,c=14.1,d=2.7;

 double t1, t2;        

 double ax;             // робоча змінна

cout<<"Введіть x, y : ";

cin>>x>>y;

ax=a*x;

t1=(b*log(ax+b)/a+d*log(y*x+d)/y)/c;

ax=sqrt((c - b)*(c+b))*tan(ax);

t2=log((ax+2)/(ax - 2))/(2*a*b);

cout<<"\n t1 ="<<t1<<"\n t2 ="<<t2;

cout<<"\n\n";

system("pause");

 return;

}

 Відладка програми

 При відладці програми бажано перевіряти правильність виконання кожної операції. Для цього складні оператори-вирази, розбиваються на послідовність простих операторів-виразів, в кожному з яких виконується тільки|лише| одна операція. Результат кожної такої операції виводиться на екран або відстежується|відслідковує| в покроковому режимі.

Результат

Введіть x, y : 5 1.2

t1 =0.375863

t2 =-0.0270576


Додаток 1. Бібліотека математичних функцій.    Назад

Для використання функцій необхідно підключити заголовний файл math.h.

Ім’я  функції

Призначення

Прототип  функції

Приклади

abs

абсолютне значення цілого числа - |x|

int abs(int x);

labs

абсолютне значення "довгого" цілого числа - |x|:

long labs(long x);

fabs

абсолютне значення числа з|із| плаваючою точкою|крапкою| - |x|:

double fabs(double x);

если х>0,то fabs(x)=x  

если х=0,то fabs(x)=0.0

если х<0,то fabs(х)=-x

sqrt

витягання|видобування| квадратного кореня :

double sqrt(double x);

sqrt (900.0)= 30.0

sqrt(9.0)= 3.0

pow

піднесення до ступеня:

double pow(double x, double y);

pow( 2,7)= 128.0

pow(9,0.5)= 3.0

cos

косинус - x (тут і|та| далі x задається в радіанах) :

double cos(double x);

cos(0.0)=1.0

sin

синус - x:

double sin(double x);

sin(0.0)=0.0

tg

тангенс X (х в радианах).

double tan(double x);

tan(0.0)=0.0

arccos

арккосинус - x:

double acos(double x);

arcsin

арксинус - x:

double asin(double x);

arctg

арктангенс - x:

double atan(double x);

arctg

арктангенс - x/y:

double atan2(double x, double y);

exp

експонента:

double exp(double x);

ехр(1.0)= 2.718282 ехр(2.0)= 7.389056

log

натуральний логарифм - ln x (основание е)

double log(double x);

log(2.718282)=1.0

log(7.38905)= 2.0

log10

десятковий логарифм - log10x:

double log10(double x);

log10(1.0)=0.0 log10(10.0)=1.0 log10(100.0)=2.0

ceil

Повертає найближче ціле, більше х

double ceil(double x)

Ceil(9.2)=10

Ceil(-9.8)=-9

floor

Повертає найближче ціле, менше х

double floor(double x)

floor(9.2)=9.0

floor(-9.5 )= -10.0


Додаток 2.
Варіанти індивідуальних завдань     Назад|задавань|

Варіант 1              Практична робота №2

Варіант 2              Практична робота №2

Варіант 3              Практична робота №2

Варіант 4              Практична робота №2

Варіант 5              Практична робота №2

Варіант 6              Практична робота №2

Варіант 7              Практична робота №2

Варіант 8              Практична робота №2

Варіант 9              Практична робота №2

Варіант 10              Практична робота №2

PAGE  6

FILENAME \p C:\Anna_2013\Ci_2013_2014\Lesson_C_12_Mathematics_Function_Lec_Lab5_Control\Lab\C_LAB_05_Function_Math_L12_Metodichka_st_ukr.doc  DATE \@ "M/d/yyyy" 10/26/2013


 

А также другие работы, которые могут Вас заинтересовать

22280. ХРОНИЧЕСКИЕ НЕСПЕЦИФИЧЕСКИЕ ЗАБОЛЕВАНИЯ ЛЕГКИХ (ХНЗЛ) 41 KB
  Классификация ХНЗЛ В группу ХНЗЛ входят следующие болезни: Хронический бронхит Бронхоэктазы Хроническая пневмония Эмфизема легких Хронический абсцесс легкого Пневмосклероз Интерстициальные болезни легких ИБЛ. Выделяют 3 патогенетические механизма ХНЗЛ: Бронхитогенный механизм – в основе хронический бронхит и его осложнения бронхоэктазы пневмосклероз эмфизема. Исходы и осложнения: бронхоэктаз Эмфизема Пневмосклероз. ЭМФИЗЕМА ЛЕГКИХ Определение: эмфизема – это повышенное содержание воздуха в легких и увеличение их...
22281. Эндокринопатии Клинико-морфологические формы 24 KB
  По гистологическому строению зоб бывает колллоидным макрофолликулярным микрофолликулярным и смешанным и паренхиматозным Клиникоморфологические формы зоба: Эндемический зоб возникающий в определенных местах где мало йода в воде. Спорадический зоб появляется в молодом возрасте и у взрослых. Базедов зоб базедова болезнь – названа по фамилии немецкого врача – Базедов.
22282. БОЛЕЗНИ ПЕЧЕНИ 40.5 KB
  ГЕПАТОЗЫ – это болезни печени характеризующиеся дистрофией и некрозом гепатоцитов. ГЕПАТИТЫ – заболевания печени в основе которого лежит воспаление проявляющееся как в дистрофии и некрозе гепатоцитов так и в клеточной инфильтрации стромы. ОПУХОЛИ – болезни печени с развитием в ткани печени опухолевого процесса первичного или вторичного происхождения метастазы в печени.
22283. БОЛЕЗНИ ПОЧЕК (НЕФРОПАТИИ) 35.5 KB
  Гломерулопатии – это заболевания которые характеризуются первичными воспалительными или дистрофическими поражениями клубочков гломерул почек что ведет к нарушению функции фильтрации. Классификация гломерулопатий: гломерулонефриты нефротический синдром амилоидоз почек диабетический гломерулосклероз печеночный гломерулосклероз. Гломерулонефриты – это группа заболеваний почек для которых характерно: двухсторонний процесс воспалительные негнойные поражения клубочков гломерул почечные симптомы – гематурия эритроциты в моче...
22284. ВОЗДУШНО-КАПЕЛЬНЫЕ ИНФЕКЦИИ 35.5 KB
  Все изменения при этой болезни связаны с попаданием токсина в кровь – токсинемией. Экзотоксин всасывается в кровь что ведет к тяжелым общим изменениям со стороны миокарда нервной системы выделительной системы. Местные изменения в миндалинах при фиксации на них стрептококка характеризуются воспалением первичный скарлатинозный аффект с присоединением регионарного лимфаденита первичный скарлатинозный комплекс. Местные изменения в 1й период локализуются в зеве и миндалинах.
22285. ВОСПАЛЕНИЕ. Морфогенез 40.5 KB
  Этилогия Агенты воспаления факторы вызывающие воспаление: биологические агенты – бактерии вирусы иммунные комплексы физические агенты – травмы высокие и низкие температуры химические агенты – токсины и яды бактериальные и не бактериальные яды. Морфогенез Воспаление состоит из трех стадий: альтерация экссудация пролиферация. Гепатит – воспаления печени плеврит – воспаление плевры гастрит – воспаление желудка.
22286. ПРОДУКТИВНОЕ ВОСПАЛЕНИЕ 36 KB
  Виды продуктивного воспаления: межуточное интерстициальное воспаление гранулематозное воспаление воспаление вокруг животных паразитов воспаление с образованием папиллом и кондилом. МЕЖУТОЧНОЕ ВОСПАЛЕНИЕ Определение. ГРАНУЛЕМАТОЗНОЕ ВОСПАЛЕНИЕ Определение.
22287. ГАСТРИТ 44 KB
  По патогенезу: Гастрит типа А аутоиммунный характеризуется поражением фундального отдела желудка Гастрит типа В неиммунный локализуется в антральном отделе желудка. При этой форме происходит атрофия желез желудка. Макро – слизистая желудка бледная тонкая складки сглажены.
22288. Гипертоническая болезнь 46 KB
  Гипертоническая болезнь ГБ – хроническое заболевание характеризующееся длительным и постоянным повышением артериального давления АД что связано со спазмом артериол а затем и со склерозом артериол артериолосклероз. Это связано с кратковременным спазмом артериол. В эту стадию происходит гипертрофия мышечной оболочки артериол и незначительная рабочая гипертрофия миокарда левого желудочка. В основе этого состояния – склероз и гиалиноз стенки артериол.