Лабораторная работа №2
Арифметические операции и математические функции языка С++
1. Цель работы
Целью лабораторной работы является получение практических навыков в программировании алгеброичных выражений и использовании математических функций библиотеки языка C++.
2. Задачи работы
Освоить следующие темы:
арифметические операции;
порядок выполнения операций;
стандартные математические функции.
3. Содержание работы
1. Составьте программу, которая подсчитывает и выводит значение t1 и t2 по формулам, которые приведены в Вашем варианте индивидуального задания. Определите области допустимых значений параметров формул и задайте произвольные значения из этих областей. Параметры, которые имеют имена: n и m - целые, остальные параметры - с плавающей точкой. Значения параметров с именами x и y должны вводиться с клавиатуры, значения остальных - задаваться как начальные значения при объявлении соответствующих переменных. Допускается (и даже желательно) упростить / разложить формулы для того, чтобы обеспечить минимизацию объема вычислений.
2. Вывести на печать исходные данные и результат.
4. Порядок выполнения работы
1. Выражения
Выражение строится из одной или нескольких операций. Объекты этих операций называются операндами. Для операций используются обозначения. Так, например, в С++ для операции проверки на равенство используется обозначение "= =". Операции бывают унарные - которые действуют на один операнд - например унарный минус (-x) и бинарные - которые действуют на два операнда (сложение и т.п. - x+y). Вычисление выражения состоит в выполнении одной или нескольких операций, приводящих к результату. За исключением нескольких особых случаев, обычно связанных с присваиванием, результат выражения является rvalue (значением). Тип данных выражения обычно определяется типами его операндов. Когда в выражении присутствует более одного типа данных, то происходит преобразование типа в соответствии с определенными правилами.
Выражение, в котором участвуют две или более операции, называется составным (например, x+y-z). Порядок применения операций определяется приоритетом операции (какая операция выполняется раньше, а какая позже) и ее ассоциативностью (слева направо она выполняется или справа налево).
Простейшее выражение - просто операнд без операции - т.е. константа или переменная. Например 3.14159 или index. Тип выражения соответствует типу данной константы или переменной.
2. Арифметические операции
Бинарными арифметическими операциями являются +, -, *, / а также операция взятия остатка %. Операции *, / и % имеют более высокий приоритет, чем + и - (как и в Паскале). Например, x + y * z трактуется как x + (y*z), что естественно. Если нужно изменить порядок вычислений - то нужно, как и в Паскале, использовать скобки. Есть два
отличия от Паскаля:
1) Операция % берет остаток аналогично операции mod в Паскале (т.е 22 % 6 будет 4) и применима только к целым;
2) Если операция / применяется к целым, то результатом деления будет тоже целое, а остаток отбрасывается (22 / 6 будет 3). Это аналогично паскалевскому div.
Арифметические операции с одинаковым приоритетом выполняются слева направо.
Есть и унарные операции + и -. Их приоритет выше, чем у бинарных - -x * y значит (-x) * y a не -(x * y).
Следует заметить, что в результате выполнения арифметических операций можно выйти за диапазон типа.
Например:
unsigned char uc = 32, uc1 = 10;
uc = uc * uc1;
В результате uc должно получить значение 320, а верхний диапазон unsigned char, как известно, равен 255. Что при этом будет - зависит от машины, в Borland C++ uc получит значение 64 в результате каких-то усечений. Таких ошибок лучше не допускать - в С++ нет ошибки range check error, как в Паскале и программа продолжит свою работу - как, неизвестно.
3. Математические функции
Для работы с математическими функциями требуется подключить заголовочный файл math.h. Ниже перечислены основные функции, предназначенные для математических вычислений:
ABS(X) - находит модуль X типа INT;
ACOS(X) - вычисляет ARCCOS X;
ASIN(X) - вычисляет ARCSIN X;
ATAN(X) - вычисляет ARCTG X;
CEIL(X) - находит целую часть X;
COS(X) - вычисляет COS X;
EXP(X) - вычисляет экспоненциальную функцию;
FABS(X) - вычисляет абсолютное значение X;
FLOOR(X) - находит наибольшее целое, которое меньше или
равно X;
FMOD(X,Y) - находит остаток вещественного типа от деления
X на Y;
LABS(X) - находит модуль типа LONG;
LOG(X) - вычисляет натуральный логарифм X;
LOG10(X) - вычисляет десятичный логарифм X;
POW(X,Y) - вычисляет X в степени Y;
POW10(X) - вычисляет значение 10 в степени X;
SIN(X) - вычисляет SIN X;
SQRT(X) - находит квадратный корень X;
TAN(X) - вычисляет TG X.
Все математические функции работают со значениями вещественного типа (и аргументы, и возвращаемое значение типа DOUBLE), за исключением функции ABS(X), возвращающей абсолютное значение целого аргумента, и функции LABS(X), возвращающей абсолютное значение целого аргумента типа LONG.
Например:
#include <…>
main()
{
int X=-4,Y;
Y=Abs(X);
Printf("%d%d",X,Y);
}
|
Результат:
-4 4
|
#include <имя файла>
...
Printf("%0.7f",Atan(1.0));
...
|
|
#include <имя файла>
...
Double Y;
...
Y=Ceil(1.05); /* Y=2.0 */
Y=Ceil(-1.05); /* Y=-1.0 */
...
|
|
#include <имя файла>
...
Double X,Y;
...
Y=Cos(X);
...
|
|
#include <имя файла>
...
Double Y;
...
Y=Floor(2.8); /* Y=2.0 */
Y=Floor(-2.8); /* Y=-3.0 */
...
|
|
#include <имя файла>
...
Double X,Y,Z;
...
X=-10.0;
Y=3.0;
Z=Fmod(X,Y); /* Z=-1.0 */
...
|
|
4. Разбор типового варианта
В соответствии с пунктом 3 (содержание работы) определим необходимые переменные.
Составьте программу, которая подсчитывает и выводит значение t1 и t2 по формулам, которые приведены в Вашем варианте индивидуального задания. Определите области допустимых значений параметров формул и задайте произвольные значения из этих областей. Параметры, которые имеют имена: n и m - целые, остальные параметры - с плавающей точкой. Значения параметров с именами x и y должны вводиться с клавиатуры, значения остальных - задаваться как начальные значения при объявлении соответствующих переменных. Допускается (и даже желательно) упростить / разложить формулы для того, чтобы обеспечить минимизацию объема вычислений.
Прежде чем приступить к написанию программы упростим выражение и проверим подлогарифмические выражения (должны быть положительными) и выражения, стоящие в знаменателе. Решим последние относительно 0 и исключим экстремальные значения с помощью условного оператора.
#include
#include
#include
#include
main(){
double x,y,t1,t2;
const double a=5, b = 4;
clrscr();
cout<<"x= ";
cin>>x;
cout<//формат вывода вещественного числа (5 знаков после «,»)
if (x==0) cout<<"Delenie na 0"<<"\n"; else // исключаем 0 в знаменателе
{
t1 = 1/pow(a,3) * ( log(x)+2*b/x-pow(b,2)/(2*pow(x,2)) );
cout<<"t1 = "<}
if (tan(a*x/2)<0 || x==0) cout<<"Oshibka!"; else // проверка подлогарифмического
выражения и выражения в знаменателе на 0
{
t2 = cos(a*x)/(2*a*pow(sin(a*x),2)) + 1/(2*a)*log(tan(a*x/2));
cout<<"t2 = "<}
getch();
return 0;
}
0>
Достарыңызбен бөлісу: |