Порядок выполнения работы. Выражение строится из одной или нескольких операций




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 <iostream>

#include <conio.h>

#include <math.h>

#include <iomanip.h>

 

int main(){

double x,y,t1,t2;

const double a=5, b = 4;

// clrscr();

system(“cls”)

cout<<"x= ";

cin>>x;

cout<<setprecision(5); //формат вывода вещественного числа (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 = "<<t1<<"\n";

}

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 = "<<t2;

}

getch();

return 0;

}



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2018-12-19 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: