Что надо знать для выполнения работы
Правила программирования алгебраических выражений
1. Не забываем включать заголовочные файлы.
2. При программировании «больших» формул придерживаемся подхода «здравого смысла», т.к. запись формулы в виде одного выражения чревата появлением ошибок, как правило, из-за несоответствия скобок, а введение большого числа дополнительных переменных для сохранения промежуточных результатов – также не лучший выход.
3. Не путаем операции = (присвоить) и == (равно).
4. При вычислении выражений действуют правила: нельзя делить на 0, нельзя извлечь корень из отрицательного числа, нельзя вычислить логарифм отрицательного числа.
5. Последовательность выполнения вычислений может повлиять на результат.
6. В выражениях операнды одного типа стараемся группировать вместе.
7. Не забываем о приоритете операций и используем круглые скобки для облегчения чтения и проверки выражения. Круглые скобки в выражениях С++ используются аналогично алгебраическим выражениям. Они имеют наивысший приоритет и их можно использовать для формирования любой необходимой последовательности вычислений. Вложенные круглые скобки вычисляются самыми первыми. Круглые скобки одинакового уровня вычисляются слева направо. Избыточные (не являющиеся необходимыми) скобки возможны: они не влияют на результат, однако делают выражения более ясными, повышая «читабельность» программы.
8. Предварительно анализируем формулу. Повторяющиеся в ней выражения вычисляем заранее.
9. Невозможно определить порядок обработки операндов в коммутативных операциях:
например, в выражении z=(x*5)+((x=10)/2) z может получить различные значения в зависимости от порядка вычисления скобок, во избежание двусмысленности следует использовать промежуточную переменную:
int z, t, x=1; t=x*5; z= t +((x=10)/2);
Заменяем умножением возведение в небольшую степень, стараемся не использовать в этом случае функцию возведения в степень pow().
11. Замена деления умножением дает выигрыш в скорости (A/5.0 à A*0.2).
12. Литералы в инициализирующих выражениях должны иметь тип, соответствующий типу инициализируемой переменной (double А=0; менее эффективно, чем double А=0.0; double Y=1/x; менее эффективно, чем double Y=1.0/x;.
13. При вводе с помощью функции scanf() не забываем указывать адрес (&) вводимой переменной.
14. Чтобы обнаружить ошибку ввода значения, необходимо контролировать вводимые данные.
15. При выводе с помощью функции printf() правильно задаём спецификатор. Например, для переменной, определенной как double, вывод со спецификатором “%d” даст неверный результат.
16. Если в операторе вывода в поток используется тернарная операция, то условное выражение полностью заключается в скобки.
17. При использовании функции pow() запись вида pow (a+b*b, 1/4) всегда даст значение, равное 1, т.к. 1/4==0. Исправит положение запись второго операнда в виде 1.0/4, 1/4.0, 1.0/4.0 или 0.25.
18. Число в целой степени вычисляется быстрее, чем число в вещественной степени.
19. Следим за наличием точки с запятой перед else в условном операторе if.
20. Если в какой-либо ветви условного оператора необходимо выполнить более одного оператора, то их следует объединить в составной оператор с помощью фигурных скобок.
При выполнении операций умножения и сложения над переменными типа short, char, в случае выхода значения результата за диапазон значений его типа, результат будет верным, т.к. вычисления проводятся для типа int.
При выполнении операций умножения и сложения над переменными типа int, в случае выхода значения результата за диапазон значений его типа, результат будет неверным, но вычисления продолжатся. В таком случае поможет предварительное приведение типа int к более широкому типу.
При выполнении операций умножения и сложения над вещественными переменными, в случае выхода значения результата за диапазон значений его типа, произойдет переполнение (будет выведено 1.# INF).
-----------------------------------------------------------------------------------------






