Вычисление значений математических выражений
Для вычисления значений различных математических выражений в Pascal существуют различные арифметические функции:
Функция | Математическое обозначение | Описание |
abs(x) | |x| | Возвращает абсолютное значение аргумента |
arctan(x) | arctg(x) | Возвращает значение арктангенса аргумента |
cos(x) | cos(x) | Возвращает значение косинуса аргумента |
sin(x) | sin(x) | Возвращает значение синуса аргумента |
pi | π | Возвращает значение числа π (3.141592653897932385) |
exp(x) | ex | Возвращает экспоненту аргумента |
ln(x) | ln(x) | Возвращает натуральный логарифм аргумента |
sqr(x) | x2 | Возвращает квадрат аргумента |
sqrt(x) | Возвращает корень квадратный из аргумента | |
frac(x) | Возвращает дробную часть аргумента | |
int(x) | [x] | Возвращает целую часть аргумента |
round(x) | Округляет аргумент до ближайшего целого |
В таблице отсутствуют функции для вычисления tg(x), ctg(x), arcsin(x), arcos(x), arcctg(x), logax и xa.
Данные функции отсутствуют по той причине, что они могут быть выражены через уже имеющиеся функции, перечисленные в таблице.
Приведем эти выражения ниже. Сначала перечислим сами формулы, выражающие функции tgx, ctgx, arcsin(x), arcos(x), arcctg(x), logax и xa через перечисленные в таблице функции.
Таким образом, мы получим следующие выражения для вычисления значений перечисленных функций:
tg(x)=sin(x)/cos(x);
ctg(x)=cos(x)/sin(x);
arcctg(x)=pi/2-arctan(x);
arcsin(x)=arctan(x/sqrt(1-sqr(x)));
arcos(x) =arctan(sqrt(1-sqr(x))/ x);
logax=ln(x)/ln(a);
xa=exp(a*ln(x));
Пример. Составить программу для вычисления значения выражения
Решение. Составим словесный алгоритм решения данной задачи.
- Ввести значение х
- Вычислить у по заданной формуле
- Вывести у
Для того, чтобы вычислить значение данного выражения, необходимо записать его с помощью математических функций Паскаля:
y:=sqrt(2*x-1)-abs(4*exp(1.2*ln(x))+sqrt(3))/(5*sin(x)+cos(2*x))- arctan(0.25/sqrt(1-sqr(0.25)))
Отметим, что для вычисления использован знак := (он читается «присвоить»). Данный знак вычисляет значение выражения, стоящего справа от него и после этого помещает вычисленное значение в переменную, стоящую слева от него. Данный знак называется оператором присваивания и при его применении обязательным является требование того, чтобы слева от него стояла переменная.
Программа для вычисления данного выражения будет выглядеть следующим образом:
Program Vyrag1;
Uses Crt;
Var x,y:real;
Begin
ClrScr;{Очистить экран}
write('Введите х: ');{Вывести подсказку на экран}
readln(x);{Ввести значение х}
{Вычислить значение у}
y:=sqrt(2*x-1)-abs(4*exp(1.2*ln(x))+
sqrt(3))/(5*sin(x)+cos(2*x))- arctan(0.25/sqrt(1-sqr(0.25)));
writeln('y=',y:6:3);{Вывести у на экран}
readln;{Задержать работу программы}
End.
Рассмотрим еще один пример. Вычислить значение выражения .
Решение. Словесный алгоритм решения данного задания будет точно таким же, как и в предыдущей задаче. Отличие будет заключаться только в формуле для вычисления у, а еще в том, что в данной программе будет использоваться не две переменные х и у, а три – х, у, z.
Program Vyrag2;
Uses Crt;
Var x,y,z:real;
Begin
ClrScr;{Очистить экран}
write('Введите х: ');{Вывести подсказку на экран}
readln(x);{Ввести значение х}
write('Введите z: ');{Вывести подсказку на экран}
readln(z);{Ввести значение z}
{Вычислить значение у}
y:=3*x*x-exp(sin(x))+sqrt(x*x+1)/(pi-arctan(x));
writeln('y=',y:6:3);{Вывести у на экран}
readln;{Задержать работу программы}
End.
Задания для практической работы:
1. Найдите значение выражения:
2. Найдите значение выражения:
3. Найдите значение выражения:
4. Найдите значение выражения:
5. Найдите значение выражения:
6. Найдите значение выражения:
7. Найдите значение выражения:
8. Найдите значение выражения:
9. Найдите значение выражения:
10. Найдите значение выражения:
11. Найдите значение выражения:
12. Найдите значение выражения:
13. Найдите значение выражения:
14. Найдите значение выражения:
15. Найдите значение выражения:
Условный оператор
Разберем задание, на котором поясним назначение и работу условного оператора.
Задание. Составить программу для вычисления значения функции .
Решение
Нам уже приходилось вычислять значения различных выражений, однако они были подобраны так, что значения данных выражений можно было вычислить при любых значениях входящих в них переменных.
При решении данной задачи необходимо учитывать, что корень квадратный из х существует только для неотрицательных значений х (при ). Поэтому в данном случае мы сами должны продумать как должна работать программа при отрицательном и при неотрицательном значениях х. Пусть после ввода значения х программа проверит введенное значение х и выполнит одно из двух действий: если x>=0, то вычислит и выведет ответ на экран, иначе выведет на экран сообщение о том, что при отрицательном значении х функция не существует.
Нарисуем блок-схему описанного алгоритма решения задачи:
По блок-схеме алгоритма решения задачи хорошо видно, что после ввода значения х выполнение команд программы разделяется на две части: левую и правую. Команды левой части выполнятся при условии, что введенное значение х окажется больше либо равно 0. Команды правой части выполнятся при условии, что введенное значение х окажется меньше нуля. Таким образом, в зависимости от введенного значения х будет выполнена либо левая, либо правая часть, но никогда не выполняются команды и левой и правой части одновременно.
Организовать такую работу программы можно с использованием условного оператора.
Общий вид условного оператора:
if <логическое выражение> then <оператор 1> [else <оператор 2>];
<логическое выражение> - это выражение типа boolean, которое принимает одно из двух значений: true (истина) или false (ложь);
Истинное значение логического выражения на блок-схемах обычно обозначается знаком «+» или словом «да», а ложное значение – знаком «-» или словом «нет».
<оператор 1> - оператор, который будет выполнен в том случае, когда логическое выражение принимает значение true;
<оператор 2> - оператор, который будет выполнен в том случае, когда логическое выражение принимает значение false.
Работа условного оператора описывается следующей блок-схемой:
Работает условный оператор следующим образом: если логическое выражение принимает значение true (истина), то выполняется оператор 1, стоящий после служебного слова then, если логическое выражение принимает значение false (ложь), то выполняется оператор 2, стоящий после служебного слова else.
Следует обратить внимание, что секция else <оператор 2> заключена в квадратные скобки. Ранее говорилось, что квадратные скобки при написании программы не пишутся, а при написании общего вида оператора они означают часть оператора или программы, которая может отсутствовать.
Т.е. условный оператор может иметь сокращенный вид:
if <логическое выражение> then <оператор 1>;
В сокращенном виде условного оператора оператор 1 выполняется при условии, что логическое выражение принимает значение true. Если же логическое выражение принимает значение false, то в сокращенном виде условного оператора ничего не выполняется и программа просто переходит к выполнению оператора следующего за условным оператором.
Работа сокращенного вида условного оператора описывается следующей блок-схемой:
Итак, вернемся к поставленному заданию и напишем программу, вычисляющую значение .
Program KvKoren;
Uses Crt;
Var x,y:real;
Begin
ClrScr; {Очистить экран}
write('Введите х: '); {Вывести подсказку на экран}
readln(x); {Ввести с клавиатуры значение в переменную х}
if x>=0 {Проверить логическое выражение х>=0}
then {Выполнить операторы, стоящие после слова then, если логическое выражение x>=0 принимает значение true (истина)}
begin {Начало составного оператора}
y:=sqrt(x); {Вычислить корень из х и результат поместить в переменную у}
writeln('y=',y:6:3); {Вывести полученное значение у на экран}
{Обратите внимание, что внутри составного оператора, составляющие его операторы отделяются друг от друга точкой с запятой}
end {Конец составного оператора. Важный нюанс: это конец составного оператора, но не конец условного оператора, поэтому здесь точка с запятой не ставится}
else writeln('При х<0 корень квадратный не существует.'); {Вывести на экран сообщение о том, что корень не существует, если логическое выражение x>=0 принимает значение false (ложь)}
readln; {Задержка работы программы}
End.
Обратите внимание на то, что в условном операторе после слов then и else может быть написано по одному оператору, однако, если требуется написать несколько операторов, то их нужно писать между зарезервированными словами begin и end, как это сделано после слова then. Ключевые слова begin и end называются операторными скобками, а операторы, заключенные между ними образуют так называемый составной оператор.
Приведем еще один пример использования условного оператора.
Пример. Составить программу для вычисления значения функции, заданной системой:
Решение.
В зависимости от введенного значения х значение у будет вычислено по одной или другой формуле.
Решить эту задачу можно двумя способами:
1) с использованием полного вида условного оператора;
2) с использованием сокращенного вида условного оператора.
Рассмотрим оба варианта. Чтобы увидеть разницу между ними, рассматривать их будем параллельно.
Словесный алгоритм решения данной задачи может выглядеть следующим образом:
Словесный алгоритм решения задачи с использованием полного вида условного оператора | Словесный алгоритм решения задачи с использованием сокращенного вида условного оператора |
|
|
Составим блок-схемы решения задачи, соответствующие первому и второму случаю:
Блок-схема решения задачи с использованием полного вида условного оператора | Блок-схема решения задачи с использованием сокращенного вида условного оператора |
Приведем тексты программ, соответствующих словесным алгоритмам и блок-схемам:
Текст программы с использованием полного вида условного оператора | Текст программы с использованием сокращенного вида условного оператора |
Program UslOp1; Uses Crt; Var x,y:real; Begin ClrScr; write('Введите х: '); readln(x); if x<3 then y:=2*x+1 else y:=x*x-4; writeln('y=',y:6:3); readln; End. | Program UslOp2; Uses Crt; Var x,y:real; Begin ClrScr; write('Введите х: '); readln(x); if x<3 then y:=2*x+1; if x>=3 then y:=x*x-4; writeln('y=',y:6:3); readln; End. |
Задания для решения
1. Даны три числа: a, b и c. Определить: можно ли построить треугольник с данными сторонами.
2. Даны два целых числа a и b. Определить: является ли число а делителем числа b.
3. Составить программу вычисления значения функции
4. Составить программу вычисления значения функции
5. Известны две скорости: одна в километрах в час, другая – в метрах в секунду. Какая из скоростей больше?
6. Составить программу нахождения корней квадратного уравнения ax2+bx+c=0.
7. Дано трехзначное число. Выяснить, является ли оно палиндромом («перевертышем»), т.е. таким числом, десятичная запись которого читается одинаково слева направо и справа налево.
8. Дано трехзначное число. Верно ли, что все его цифры одинаковые?
9. Дано трехзначное число. Определить, есть ли среди его цифр одинаковые.
Задания для практической работы:
Оператор выбора
При написании программ, в которых реализованы алгоритмы ветвящейся структуры, наряду с условным оператором if … then часто используется оператор выбора case. Данный оператор имеет следующий общий вид:
case <селектор> of
<1-й список выбора>:<оператор 1>;
<2-й список выбора>:<оператор 2>;
…………………
<N-й список выбора>:<оператор N>;
[else <оператор N+1>]
end;
Рассмотрим как работает оператор выбора и в чем заключаются отличия оператора выбора от рассмотренного выше условного оператора.
Начинается оператор выбора с зарезервированного слова case. Это слово пишется всегда и оно показывает, что начинается оператор выбора. За словом case программист указывает селектор. Селектор – это переменная, которая может быть целочисленного (целые числа в диапазоне от -32768 до 65535), символьного или логического типа. За селектором обязательно следует зарезервированное слово of, которое отделяет селектор от списков выбора. Так как селектор – это переменная, то он может содержать различные значения и работа оператора выбора заключается в том, что он определяет в каком из списков выбора находится значение селектора и выполняет тот оператор, который находится за списком выбора, в котором было найдено значение селектора.
Таким образом, не зная заранее, какое значение находится в селекторе, программист может предусмотреть несколько различных вариантов значений селектора и задать их в одном или нескольких списках выбора, а оператор case выполнит тот оператор, который стоит после соответствующего списка выбора.
Если значение селектора не было найдено ни в одном из списков выбора, то будет выполнен оператор, находящийся в секции else. Но секция else может отсутствовать, тогда, если значение селектора не было найдено ни в одном списке выбора, то оператор case будет просто пропущен, и программа перейдет к выполнению оператора следующего за оператором case.