Программирование в среде Robot C. Приоритет операций. Сложные математические выражения

Содержание

Слайд 2

Приоритет операций В математических вычислениях важную роль играет порядок, в котором

Приоритет операций

В математических вычислениях важную роль играет порядок, в котором выполняются

действия. Чему, например, равно значение выражения 2+2*2? Конечно же шесть, т.к. сначала выполняется умножение.
В C используется знакомый нам порядок выполнения операций. Но т.к. в программировании есть свои особенности, то кое-какие отличия всё же есть.
Выпишем приоритет для тех операций, которые мы уже знаем.
1. вычисляются функции (например, sqrt(), cos() и др.)
2. умножение, деление, остаток от деления (слева направо)
3. сложение, вычитание
4. выполняется присваивание
Если нам нужно изменить порядок выполнения действий, то мы можем использовать для этого круглые скобки
Слайд 3

Приоритет операций А каково значение переменной x после выполнения следующего кода

Приоритет операций

А каково значение переменной x после выполнения следующего кода

int x = 8 / 4 / 2;
Правильный ответ 1. Т.к в случае одинакового приоритета операций, команды выполняются слева направо. Другими словами данный код эквивалентен коду
int x = (8 / 4) / 2;
Вот еще один пример
2+2*2 = 6
(2+2)*2 = 8 // действие в скобках будет выполнено прежде умножения
Слайд 4

Приоритет операций На следующем рисунке над каждым действием отмечено, каким оно

Приоритет операций

На следующем рисунке над каждым действием отмечено, каким оно выполнится

по счёту.
Если в вашей программе вы написали довольно сложное выражение, в котором не сразу ясен порядок операций, то лучше добавить лишние скобки, чтобы явно задать последовательность операций. Это поможет избежать ошибок в вычислениях, которые потом будет сложно отловить.
Слайд 5

Сложные математические выражения Иногда формулы, по которым нужно что-то вычислять, в

Сложные математические выражения

Иногда формулы, по которым нужно что-то вычислять, в программе

могут принимать довольно ужасный вид.
При этом когда мы пишем программу, любая формула должна быть записана в одну строку. На начальном этапе это может вызвать у вас некоторые затруднения. Чтобы избавиться от этих затруднений, нужно овладеть навыком переводить формулу из стандартной математической записи в ту, которая используется в программировании и обратно.
Слайд 6

Способы записи сложных математических выражений Для записи сложных математических выражений полезно

Способы записи сложных математических выражений

Для записи сложных математических выражений полезно использовать

некоторые соображения, которые позволят это сделать проще и не допустить ошибку.
При записи дробить общее выражение на мелкие части, записывать их.
Вводить новые переменные.
Совершать математические преобразования, которые могут упростить пример.
Рассмотрим эти идеи на примере.
Слайд 7

Способы записи сложных математических выражений Записать на языке С выражение и

Способы записи сложных математических выражений

Записать на языке С выражение
и вычислить его

при a=6, b=100.
1. Пишем поэтапно: ()/()+()/() → (()/()+()/())*(()/()) →
теперь заполняем скобки →
((a-sqrt(b))/(a+sqrt(b))+(a+sqrt(b))/(a-sqrt(b)))*((2*a*sqrt(b)) /(a+sqrt(b)))
Получилось выражение. Возможно, какие-то скобки лишние, но лучше поставить лишние скобки, чем забыть и получить неверный ответ. Можете вставить это выражение в программу и вычислить. Правильный ответ: 0.5
Слайд 8

Способы записи сложных математических выражений 2. Можно ввести переменные float t=a-sqrt(b);

Способы записи сложных математических выражений

2. Можно ввести переменные
float t=a-sqrt(b);
float

s=a+sqrt(b);
Тогда выражение будет записываться таким образом:
(t/s+s/t)*(2*a*sqrt(b))/s;
Можете проверить, что его вычисление даст такой же ответ 0.5.
3. Если преобразовать второе выражение, то получится более простое:
Ответ получается таким же!
Слайд 9

Задача 1. Упорядочите указанные операции по убыванию приоритета. Сверху операции, которые

Задача 1.

Упорядочите указанные операции по убыванию приоритета. Сверху операции, которые

имеют более высокий приоритет.
1. *, /, %
2. +, -
3. операции в скобках
4. =
5. sqrt(), sin(), cos() и другие функции .
Слайд 10

Задача 2. Дано уравнение y=ax3+7. Среди указанных выражений отметьте те, которые

Задача 2.

Дано уравнение y=ax3+7. Среди указанных выражений отметьте те, которые соответствуют

верной записи этого выражения на языке Си.
1. y = a * x * x * (x + 7);
2. y = (a * x) * x * (x + 7);
3. y = a*(x * x * x) + 7;
4. y = (a * x) * x * x +7;
5. y = a * x * x * x + 7;
6. y = a * x * (x * x + 7);
Слайд 11

Задача 3. Какое значение будет сохранено в переменной x после выполнения

Задача 3.

Какое значение будет сохранено в переменной x после выполнения следующего

кода:
int x = 7 + 3 * 6 / 2 - 1;
Слайд 12

Задача 4. Какое значение будет сохранено в переменной x после выполнения

Задача 4.

Какое значение будет сохранено в переменной x после выполнения следующего

кода:
int x = 2 % 2 + 2 * 2 - 2/2;        
Слайд 13

Задача 5. Какое значение будет сохранено в переменной x после выполнения

Задача 5.

Какое значение будет сохранено в переменной x после выполнения следующего

кода:
int x = (3 * 9 * (3 + (9 * 3 / 3)));
Слайд 14

Задача 6. Напишите программу, вычисляющую площадь треугольника по трём сторонам. Формат

Задача 6.

Напишите программу, вычисляющую площадь треугольника по трём сторонам.
Формат входных данных:

Вначале программы задаём три вещественных числа a, b, c — длины сторон треугольника.
Формат выходных данных:
Одно число — площадь треугольника со сторонами a, b, c. Точность — два знака после запятой.
Для вычисления площади используйте формулу Герона:
где p=(a+b+c)/2 – полупериметр.
Слайд 15

Задача 7. В выражении a/b*c/d*e/f*h расставьте скобки так, чтобы выражению со

Задача 7.

В выражении a/b*c/d*e/f*h расставьте скобки так, чтобы выражению со скобками

соответствовала дробь
Напишите программу, вычисляющее это выражение для чисел a=7, b=2, c=3, d=7, e=8, f=3, h=4. Результат вычисления должен быть равен 5.44.
Слайд 16

Ответы к задачам 1. 3, 5,1, 4, 2 2. 3, 4,

Ответы к задачам

1. 3, 5,1, 4, 2
2.  3, 4, 5
3.   15
4. 3
5.

324
6. task main(){
       float a=12.5, b=13.6, c=15.01, p, s;
p=(a+b+c)/2;
s=sqrt(p*(p-a)*(p-b)*(p-c));
       nxtDisplayTextLine(1,”%.2f”,s);
     }
7. a/(b*c/(d*e/(f*h)))