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


 

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

64947. УЧЕНЫЙ ЗОЛОТОЙ ОРДЫ АЛА-ЭД-ДИН ЭННОМАН ЭЛЬХАРЕЗМИ, КАК ПРЕДСТАВИТЕЛЬ ОРДЫНСКОЙ КУЛЬТУРНОЙ ТРАДИЦИИ 46 KB
  В представлении современного образованного человека наличие какой-либо научной деятельности в степных кочевых государствах абсолютно не возможно. Известно что Алаэд Дин Энноман Эльхарезми родился в начале сентября 1259 г. Алаэд Дин Энноман вернулся в Хорезм в 701 г.
64948. «МАМАЕВА ОРДА» 139 KB
  Временная самоизоляция этой провинции происходит на фоне дальнейшего возвышения на политической авансцене золотоордынского государства небезызвестного эмира Мамая. Следует также отметить что в историографии деятельность Мамая характеризуется как правило...
64950. Ярлыки ордынских ханов русским митрополитам 71.5 KB
  Золотоордынские ханы стремясь обеспечить себе поддержку русской церкви давали русскому духовенству льготы которые были строго определены в их льготных имущественных грамотах-ярлыках. Ярлыки освобождали духовенство от поборов в пользу ханов и их ставленников.
64951. ВЕЛИКАЯ ЯСА 549 KB
  В сохранившихся фрагментах Ясы лишь одна статья рассматривающая императорский титул касается этого предмета. Однако одна важная статья относительно наследования была включена в Ясу: У умершего человека не имеющего наследника ничего не изымается в пользу хана...
64952. Поминки - «тыш» в контексте взаимоотношений Руси - России с Золотой Ордой и Крымским юртом 75 KB
  Многие историки тяготели и тяготеют к той точке зрения что изначально поминки являлись подарками позже со второй половины XVI в. слово поминки либо в сочетании с другими терминами либо без них обязательно присутствует в терминологии употреблявшейся русской стороной для обозначения выплат Крымскому ханству...
64953. Знаменный комплекс в военно-политической культуре средневековых кочевников Центральной Азии 126 KB
  Предметом исследования данной статьи является такой феномен военно-политической культуры средневековых кочевников Центральной Азии имеющий ярко выраженные корни в этнографическом субстрате как знамя или знаменный комплекс. От этого значения идет ряд производных например...
64954. Ненайденные монеты Каракорума 172.5 KB
  Распределение найденных монет собранных на любом городище по датам их выпуска и месту чекана позволяют определить с высокой степенью достоверности торговые связи с другими странами и периоды активного денежного обращения в раскапываемых городах.
64955. Письменные источники о Чингисхане 120.5 KB
  В первой части до описания времени Чингисхана почти дословно повторяется индийская история о проповеди Будды Шакьямуни в Магадхе3 двух учений тантры и сутры. У Джувейни дом Чингисхана находится в Куланбаши название которого нет в текстах...