Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Решение математических задач.pdf
Скачиваний:
28
Добавлен:
13.02.2015
Размер:
858.1 Кб
Скачать

Глава 1. Прикладные математические задачи

1.1.Вычисление математических функций

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

К их числу относятся следующие функции:

abs(x) – определяет aбсолютное значение аргумента, которым может

быть число или выражение целого или вещественного типа;

arctan(x) – вычисляет арктангенс угла, значение которого выражено

в радианах;

cos(x) – вычисляет косинус угла, значение которого выражено в

радианах;

exp(x) – вычисляет экспоненту аргумента (то есть e в степени x); int(x) – определяет целую часть аргумента. Значением функции

является величина вещественного типа;

ln(x) – вычисляет натуральный логарифм аргумента (т. е. логарифм

по основанию e);

pi – данная функция не имеет параметров, а значением ее является

число «Пи»;

round(x) – округляет значение аргумента до ближайшего целого числа;sin(x) - вычисляет cинус угла, значение которого выражено в

радианах;

sqr(x) – вычисляет квадрат аргумента, которым может быть число

или выражение целого или вещественного типа;

sqrt(x) – вычисляет квадратный корень из аргумента;

trunc(x) – определяет целую часть аргумента. Значением функции

является величина целого типа.

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

математических вычислений, и которые имеются в других приложениях. Например, при работе с программой «Калькулятор», являющейся

стандартным приложением операционной системы Windows можно

переключить данную программу в инженерный режим работы (в меню программы «Калькулятор» для этого имеется команда Вид Инженерный). В таком режиме на панели «Калькулятора» появляется ряд

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

6

(в Паскале имеется только стандартная функция, которая вычисляет натуральный логарифм числа.)

Данный раздел пособия посвящен составлению таких программ, которые восполняют вышеуказанные пробелы, имеющиеся в системе Turbo Pascal. Начнем с составления программ, которые возводят число в произвольную степень. Эту задачу можно разделить на две части:

а) возведение любого числа в степень (показатель степени является целым числом);

б) возведение положительного числа в степень (показатель степени – действительное число).

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

вернуться к вычислениям.

 

 

 

program stepen;

 

 

 

uses crt;

 

 

 

var x,s:real;

 

 

 

n,i,y:integer;

 

 

 

{x - основание степени, n - показатель степени, s -

искомая степень,

 

 

 

i,y - вспомогательные переменные}

 

 

begin

 

 

 

repeat

 

 

 

clrscr;

 

 

 

writeln('Введите число');

 

 

readln(x);

показатель

степени

(целое

writeln('Введите

число)');

 

 

 

readln(n);

s:=1;

if n>0 then

for i:=1 to n do s:=s*x else

if n=0 then s:=1 else

for i:=-1 downto n do s:=s/x;

7

показатель степени
– дробное число. Согласно определению логарифма,

writeln('Число ',x:6:2,' в степени ',n,' равно ',s:10:4);

writeln;

writeln('Для продолжения работы с программой введите 0');

writeln('Для завершения 1'); readln(y);

until y=1 end.

Данная программа может возвести любое число в целую степень. Но для решения второй части задачи (возведение положительного числа в действительную степень) нужно будет использовать другой алгоритм. Для решения поставленной задачи можно воспользоваться встроенными функциями языка Паскаль – экспонентой и натуральным логарифмом.

Пусть требуется возвести в степень некоторое число x, причем k

число x можно представить в следующем виде: x=eln x. Тогда x в степени k

можно вычислить по следующей формуле: xk=ek ln x . На языке Паскаль

выражение, стоящее в последней формуле справа от знака равенства, можно записать так: xk:=exp(k*ln(x)). Ниже приводится программа, которая

реализует вышеописанный алгоритм.

program expln; uses crt;

var x,st,k:real; flag:integer;

{x - основание степени, k - показатель степени, st - искомая величина,

beginflag - признак окончания ввода данных'}

repeat clrscr; repeat

writeln('Введите основание степени (положительное число)');

readln(x); until x>0;

writeln('Введите показатель степени'); readln(k);

st:=exp(k*ln(x));

writeln('Число ',x:7:2,' в степени ',k:7:2,' равно ',st:10:4);

writeln;

8

writeln('Для продолжения вычислений введите 0'); writeln('для завершения введите 1'); readln(flag);

until flag=1; end.

Для защиты от неправильного ввода данных в этой программе имеется цикл с постусловием, который возвращает пользователя к вводу

значения основания x, если указанное пользователем основание не было положительным.

На следующем этапе создадим программу, в которой объединены два алгоритма, приведенные выше. В этой программе после ввода исходных данных проверяется, является ли показатель степени целым числом или нет.

Для этого показатель (число k) сравнивается с его целой частью, определяемой с помощью стандартной функции int. Если эти величины не

равны между собой, то показатель не является целым числом, и для вычисления функции используется формула из программы expln (использование экспоненты и натурального логарифма). Если же целая часть

числа k равна самому числу, то число k является целым. В этом случае с помощью функции trunk вещественная величина k преобразуется в целочисленную величину n, которая затем применяется в дальнейших

вычислениях. Далее применяется алгоритм многократного умножения или многократного деления из программы stepen. Программа позволяет найти

любую степень, кроме действительной степени отрицательного числа.

program unistep; uses crt;

var x,k,s:real; flag,n,i:integer;

begin repeat clrscr;

writeln('Введите основание степени'); readln(x);

writeln('Введите показатель степени'); readln(k);

if int(k)<>k then s:=exp(k*ln(x)) else

begin n:=trunc(k); s:=1;

if n>0 then

for i:=1 to n do s:=s*x

9

else

if n=0 then s:=1 else

for i:=-1 downto n do end;s:=s/x;

writeln('Число ',x:7:2,' в степени ',k:7:2,' равно ',s:10:4);

writeln;

writeln ('Для продолжения вычислений введите 0'); writeln ('для завершения работы введите 1'); readln(flag);

until flag=1; end.

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

натурального числа n (эта величина обозначается в математике n!)

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

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

program faktor; uses crt;

var f,i,n,flag:longint; begin

repeat Clrscr;

writeln('Введите натуральное число'); readln(n);

f:=1;

for i:= 1 to n do f:=f*i;

writeln;

writeln('Факториал числа ',n,' равен ',f); writeln;

writeln('Для продолжение вычислений введите 0'); writeln('для завершения 1');

10

readln(flag); until flag=1; end.

Еще одной функцией, отсутствующей в стандартном наборе языка Паскаль, является вычисление десятичного логарифма. В Паскаль встроена функция вычисления натурального логарифма, поэтому наиболее простым способом нахождения десятичного логарифма является следующий: найти натуральный логарифм заданного числа, а затем подсчитать десятичный по следующей формуле:

ln(x)

(1.1)

log 10 x = ln(10)

Этот способ расчета реализован в приведенной ниже программе. После ввода исходного числа в программе производится проверка: так как введенное число должно быть положительным (отрицательные числа не имеют действительных логарифмов, а логарифм нуля – это отрицательная бесконечность), то в случае ввода отрицательного числа или ноля, программа возвращает пользователя к вводу исходных данных. Затем для расчета используется приведенная выше формула.

program deslog; uses crt;

var x,log:real; flag:integer;

begin repeat clrscr; repeat

writeln('Введите положительное число'); readln(x);

until x>0; log:=ln(x)/ln(10);

writeln('Десятичный логарифм ',x:8:2,' равен ',log:10:4);

writeln;

writeln('Для продолжения вычислений нажмите 0'); writeln('для завершения нажмите 1 '); readln(flag);

until flag=1; end.

11