(C++) Арифметические выражения


Оператор присваивания

Мы уже знаем, что задать значение какой-либо переменной можно используя оператор ввода. Используется оператор ввода в тех случаях, когда значение переменной задает пользователь в ходе выполнения программы.

Но очень часто нам необходимо задать новое значение какой-либо переменной, вычислив его по определенной формуле. В этом случае поможет нам - оператор присваивания

Общая форма оператора присваивания имеет такой вид:
 
<имя переменной> = <выражение>;

Работает оператор присваивания следующим образом:
1. сначала вычисляется выражение, стоящее справа от знака присваивания;
2. полученное значение выражения сохраняется (говорят "присваивается") в переменной стоящей слева от знака присваивания. При этом старое значение переменной стирается.

Например, если нам необходимо задать переменной c значение в два раза превышающее значение переменной b, то надо будет записать так:
c = 2 * b;

Не забывайте, что в программировании нельзя опускать знаки умножения в выражении. Иначе компьютер не поймет, что вы хотите именно умножить.
Например, нельзя написать просто c = 2b, это будет неверно!

Арифметические выражения

Выражение, стоящее в правой части оператора присваивания, позволяет вычислять значения по различным формулам.
Что может содержать выражение:
• целые и вещественные числа (в вещественных числах целая и дробная часть разделяются точкой, а не запятой, как это принято в математике);
• знаки арифметических действий:  
+ сложение,
- вычитание,
* умножение,
/ деление,
% остаток от деления;

• вызовы стандартных функций (необходимо подключить библиотеку math.h - #include<math.h>);
 abs(i) модуль целого числа i  (не используется в Silvertests, следует использовать следующую функцию):
 fabs(x) модуль вещественного числа x;
 sqrt(x) квадратный корень из вещественного числа x;
 pow(x,y) вычисляет x в степени y;

• круглые скобки для изменения порядка действий.

Встроенные функции


Любой язык программирование включает множество встроенных функций, которые можно использовать в арифметических выражениях. Для использования дополнительных функций часто приходится подключать дополнительные библиотеки.

Например, наиболее часто используемые стандартные математические функции и их запись на языке Си и C++:
 abs(i) модуль целого числа i;
 fabs(x) модуль вещественного числа x;
 sqrt(x) квадратный корень из вещественного числа x;
 pow(x,y) вычисляет x в степени y.

Надо запомнить, что аргумент функции всегда записывается в скобках.
Для работы этих функций необходимо подключить дополнительную математическую библиотеку.
Сделать это можно добавив строчку:
 
#include<cmath>

Запись арифметических операций

Допустим нам необходимо вычислить выражение, записанное в математическом виде таким  образом:
\({ 2\ \cdot\ 17,56^2 \over {7\ \cdot\ 2,47\ \cdot\ 0,43}}\)
 
Правила записи арифметических выражений
1. Выражение может содержать числа, имена других переменных, знаки операций, круглые скобки, имена функций, арифметические операции и их знаки (+, -, *, /, %).
2. Разделителем целой и дробной части является точка.
3. Выражение записывается в одну в строку (линейная запись выражений), символы последовательно выстраиваются друг за другом, проставляются ВСЕ знаки операций, используются круглые скобки.

Таким образом, следуя правилам записи арифметических выражений, мы должны перевести данную дробь (математическую запись) в линейную запись, то есть записать дробь в одну строчку. Так как числитель и знаменатель у нас сложные (то есть содержат два и более множителя), то при записи выражения в линейную форму необходимо числитель и знаменатель взять в скобки.
Таким образом линейная запись такого выражения будет выглядеть следующим образом:
 
(2*17.56*17.56)/(7*2.47*0.43)
Напишем программу для вычисления значения данного выражения. Для этого определимся с входными и выходными данными.

Входные данные
Т.к. нам все значения известны, то с клавиатуры ничего вводить не надо, следовательно входных значений не будет.

Выходные данные
Программа должна вывести результат заданного арифметического выражения (результат можно сохранить в какую-либо переменную, либо же сразу вывести на экран).

В программе результат сразу будем выводить на экран. Так как у нас имеется дробь, то результатом будет являться вещественное число.
#include<iostream>
using namespace std;
int main()
{ 
    cout << (2*17.56*17.56) / (7*2.47*0.43) << endl;
    return 0;
}

Запустите программу на компьютере и убедитесь что она выдает результат равный 82.949843.
 

Особенности деления в Си и Си++

В языке программирования Си существует две операции деления:
/ деление  и % вычисление остатка от деления.
 
Надо запомнить!
1) операция вычисления остатка от деления (%) выполняется ТОЛЬКО над целыми числами;
2) результат операции деления (/) зависит от типа операндов.   
 
Правило
При делении целого числа на целое число - дробная часть отбрасывается всегда, независимо в переменную какого типа мы сохраняем значение. 
При сохранении вещественного результата в целую переменную дробная часть также будет отбрасываться.


Разберем примеры выполнения операций деления:
#include<iostream>
using namespace std;
int main()
{
  int i, n; 
  double x; 
  i = 7;
  x = i / 4;        // x=1, делится целое на целое
  x = i / 4.;       // x=1.75, делится целое на дробное    
                    // (4 - без точки воспринимается как целое число, 
                    // 4. (с точкой) - это уже вещественное число!)
  x = (double) i / 4; // x=1.75, делится дробное на целое  - 
                      // здесь переменная i преобразовывается в вещественное число 
                      // - это ЯВНОЕ преобразование типа
  n = 7. / 4.;        // n=1, результат записывается в целую переменную
  return 0;
}