Стандартные математические функции



Обычная запись Запись на Паскале
sin x SIN(X)
cos x COS(X)
tg x TAN(X)
ctg x COS(X)/SIN(X)
arctg x ARCTAN(X)
SQRT(X)
x2 SQR(X)
xa POWER(X,A)
ex EXP(X)
ln x LN(X)
lg x LOG10(X)
|x| ABS(X)
arcsin x ARCSIN(X)
arccos x ARCCOS(X)

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

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

· вычисление функций (высший);

· умножение, деление;

· сложение, вычитание (низший).

При необходимости смены приоритета можно пользоваться круглыми скобками.

Например, выражение  на Паскале имеет вид: SQRT((a*y*y+x)/(b*z*z+u))*SQR(SIN(t))

Процедуры ввода/вывода

Ввод данных в языке Паскаль выполняется стандартными процедурами READ() или READLN(), вывод – процедурами WRITE() или WRITELN().

Процедуры READ() и READLN() используют для ввода символов (тип данных CHAR), строк (тип данных STRING) или числовых данных (тип данных INTEGER, BYTE, REAL и др.).

Процедуры вывода: W RITE(список параметров) и W RITE L N () – предназначены для вывода данных из оперативной памяти на внешние носители (экран, бумага, файл), где в качестве параметров могут использоваться переменные, строки символов и константы.

Окончание ln переводит курсор на начало новой строки после завершения процедуры ввода/вывода.

Пример.

Program a;

Var x,y,n: integer;

BEGIN

x := 5;
y := sqr ( x ) - 1;
n := -15;
writeln('Печатаем x=', x, ' y=', y, ' их сумма: ', x+y);
write('n=', n);
writeln;

END.

Результат на экране будет выглядеть так:

Печатаем x=5 y=24 их сумма: 29

n=-15

Для выражений типа real спецификация вывода может иметь вид:

:n:m , где n - ширина поля вывода, а m - количество цифр числа после точки, выводимых на печать:

WRITE(A1:10:3, A2:10:3);

Примечание: регистр символов при записи имен переменных, функций в программе не различается (Z и z – одна и та же переменная).


Программирование задач на простые переменные

Линейный алгоритм

Запишем программу примера линейного алгоритма. Вычислить значение функции y=x2+bx+c при любых значениях x, b, c.

Program  lin_algoritm;

Var

y,x,c,b:real;

Begin

Writeln('Введите x,b,c');

readln(x,b,c);

y:=x*x+b*x+c;

writeln('y=',y:6:2);

end.

Результат работы программы:

Рис.3. Результат работы программы

Разветвляющийся алгоритм

Часто требуется в зависимости от конкретного набора данных или промежуточных результатов выбрать один из двух или более различных вариантов продолжения вычислительного процесса. Если в зависимости от выполнения условия выбирается один из двух (или более) различных вариантов вычислительного процесса, то такой алгоритм называется разветвляющимся. В зависимости от того, удовлетворяется ли условие, выполняется «действие 1» или «действие 2», после чего вычислительный процесс вновь сводится в единое русло.

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

Для реализации разветвляющегося алгоритма в Паскаль используется условный оператор if. Приведем общий вид блок-схем и общий вид записи условного оператора:

Полное ветвление:   if условие then   begin   Последовательность_действий_1;   end else begin    Последовательность _действий_2;    end;
Неполное ветвление:   if условие then   begin   Последовательность _действий_1;   end;

Рис. 4 . Условный оператор

Примечание. Если необходимо выполнить не последовательность действий, а всего одно действие, то операторные скобки begin и end можно опустить.

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

Таблица 2

Операции отношения

 

Равно Не равно Больше Меньше Больше или равно Меньше или равно
= <> > < >= <=

 

Таблица 3

Логические операции

 

A B Not A A and B A or B
истина истина ложь истина истина
истина ложь ложь ложь истина
ложь истина истина ложь истина
ложь ложь истина ложь ложь

Логические операции используются для составления сложных условий (A и B – простые условия).


Пример. Вычислить значение функции при любых заданных значениях x, y.

 

Перед решением задачи целесообразно нарисовать ось x и отложить на ней точки ветвления (рис. 4). Блоки условного перехода расставляем в порядке расположения точек ветвления и в том же количестве. Проверяемые условия обычно содержат  знаки «меньше» или «меньше или равно». Первое проверяемое условие в данном случае x y < 0. Если оно выполнено, вычисление проводится по первой формуле, не имеет смысла проверять обратное условие. Если первое условие не выполнено, проверяется второе условие: x y £ 1. Если оно выполнено, то вычисление осуществляется по второй формуле. Если оба условия не выполнены, то нет смысла проверять последнее условие, а вычисление проводится по третьей формуле.

 

 

 


Рис. 5 . Точки ветвления

После выполнения действия по одному из разветвлений вычислительный процесс опять сводится в одно русло.

При построении многоразветвляющегося алгоритма следует пользоваться правилом:

· число проверяемых условий всегда на единицу меньше числа разветвлений;

· эти блоки содержат лишь односторонние условия (обычно со знаками «меньше» и «меньше или равно»); двойные условия записывать в блок-схеме и программе нельзя;

· от каждого из блоков вычисления процесс переходит к одному блоку (обычно блоку печати).

Приведем блок-схему и програму.

Program uslovn_algoritm; Var y,x,z: real; Begin Writeln('введите x,y'); readln(x,y); if x*y<0 then z:=exp(x*y) else     if x*y<=1 then         z:=power(x,y)     else z:=sqr(x)+sqr(y); writeln('z=', z:4:2); end. Результат работы программы:  

Примечание: перед оператором else символ «;» никогда не ставится, это приводит к синтаксической ошибке!

Пример. Вычислить значение функции при любых заданных значениях x, y.

Приведем блок-схему и програму.

Program vetvl_min; Var x,y,z,z1,z2:real; begin write('x='); read(x); write('y='); read(y); z1:=power(x,y); z2:=power(y,x); z:=z1; if z2<z then z:=z2; writeln('z1=',z1:5:3); writeln('z2=',z2:5:3); writeln('z=',z:5:3); end. Результат работы программы:

 

Циклический алгоритм

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

Для организации цикла определяются переменная цикла (x) и его параметры – начальное и конечное значение переменной цикла и шаг ее изменения (xn, xk, hx).

Блок-схема циклического алгоритма содержит:

1. Блок начального присвоения: переменной цикла присваивается начальное значение (x = xn).

2. Тело цикла – многократно повторяющаяся часть алгоритма, внутри которой переменная цикла не изменяется. Телом цикла может быть любой алгоритм: линейный, разветвляющийся или циклический.

3. Блок приращения значения переменной цикла: переменная цикла изменяет свое значение на величину шага (x = x + hx).

4. Блок проверки условия продолжения цикла (xxk – для цикла с предусловием) или условие выхода из цикла (x>xk – для цикла с постусловием). Цикл выполняется до тех пор, пока значение переменной цикла не превысит xk.

Схема циклического алгоритма

Цикл с предусловием Цикл с постусловием
Тело цикла может не выполниться ни разу, если условие сразу будет нарушено Тело цикла обязательно выполнится хотя бы 1 раз

Операторы цикла в Pascal

Цикл с предусловием Цикл с постусловием
x:=xn; while x<=xk do begin Тело цикла; x:=x+hx; end; x:=xn; repeat Тело цикла; x:=x+hx; until x>xk;

Если шаг изменения переменной цикла равен 1 (hx=1), то для реализации в программе цикла с предусловием можно использовать оператор for. Параметр цикла for (x), а также переменные, обозначающие диапазон его изменения (xn и xk), должны быть переменными только целочисленного типа.

for x:=xn to xk do

begin

Тело цикла

end;

Тело цикла может включать один или несколько операторов, может являться конструкцией любого типа (линейной, разветвляющейся, циклической).

Если в теле цикла один оператор, то begin и end можно не ставить.

Одномерный циклический алгоритм реализуется, если имеется лишь одна переменная цикла.

Пример. Вычислить таблицу значений  при x, изменяющемся в интервале [xn;xk] с шагом hx. Параметры цикла xn, xk, hx задаются произвольно.

Например, зададим интервал [0; 1], шаг hx =0,25.

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

Приведем блок-схему и програму.   

Program cikl_1; Var x,xn,xk,hx,y: real; begin xn:=0; xk:=1; hx:=0.25; writeln('x':10,'y':10); x:=xn; while x<=xk do begin y:=sqrt(abs(x)); writeln(x:10:2,y:10:4); x:=x+hx; end; end.   Результат работы программы:

 

Часто бывает полезным перед тем, как запустить программу на выполнение, прокрутить алгоритм вручную. Приведем ручную прокрутку данного алгоритма.

1. Ввод исходных данных и параметров цикла: xn=0;  xk=1;  hx=0,25.

2. Печать заголовка таблицы.

3. Присвоение начального значения переменной цикла x = 0.

4. Проверка условия продолжения цикла x£1 (0£1) – да; ; печать 0 0; x=0+0,25=0,25.

5. Проверка условия продолжения цикла x£1 (0,25£1) – да; ; печать 0,25 0,5; x=0,25+0,25=0,5.

6. Проверка условия продолжения цикла x£1 (0,5£1) – да; ; печать 0,5 0,7071; x=0,5+0,25=0,75.

7. Проверка условия продолжения цикла x£1 (0,75£1) – да; ; печать 0,75 0,866; x=0,75+0,25=1.

8. Проверка условия продолжения цикла x£1 (1£1) – да; ; печать 1 1; x=1+0,25=1,25.

9. Проверка условия продолжения цикла x£1 (1,25£1) – нет (выход из цикла).

10. Конец.

Рассмотрим случай, когда телом цикла является разветвляющийся алгоритм.

Пример. Вычислить таблицу значений функции

при различных значениях переменной x, изменяющейся в интервале от xn=0,1 до xk = 0,4 по закону арифметической прогрессии с шагом hx = 0,1. Здесь a, b, c – заданные константы (a = 0,5; b = 1; c = 2).

 

Приведем блок-схему и програму.

Program cikl_2; Var  a,b,c,x,xn,xk,hx,y: real; begin a:=0.5; b:=1;c:=2; xn:=0.1; xk:=0.4; hx:=0.1; writeln('x':10,'y':10); x:=xn; while x<=xk do begin if x<=0.3 then y:=a*x*x+b*x+c else y:=a*x; writeln(x:10:2,y:10:2); x:=x+hx; end; end.   Результат работы программы:

 

Пошаговое выполнение данного алгоритма:

1. Ввод исходных данных и параметров цикла:

a=0,5; b=1; c=2; xn=0,1; xk=0,4; hx=0,1;

2. Печать заголовка таблицы.

3. Присвоение начального значения переменной цикла x = 0,1.

4. Проверка условия продолжения цикла x£0,4 (0,1£0,4) – да; проверка условия в функции x£0,3 (0,1£0,3) – да; ; печать 0.1    2.11; x=0,1+0,1=0,2.

5. Проверка условия продолжения цикла x£0,4 (0,2£0,4) – да; проверка условия в функции x£0,3 (0,2£0,3) – да; ; печать 0,2 2,22; x=0,2+0,1=0,3.

6. Проверка условия продолжения цикла x£0,4 (0,3£0,4) – да; проверка условия в функции x£0,3 (0,3£0,3) – да; ; печать 0,3 0,15; x=0,3+0,1=0,4.

7. Проверка условия продолжения цикла x£0,4 (0,4£0,4) – да; проверка условия в функции x£0,3 (0,4£0,3) – нет; ;
печать 0,4 0,20; x=0,4+0,1=0,5.

8. Проверка условия продолжения цикла x£0,4 (0,5£0,4) – нет.

9. Конец.

 

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

1. Вначале записывается блок начального присвоения и проверка условия продолжения внешнего цикла.

2. Затем записывается блок начального присвоения и проверка условия продолжения внутреннего цикла.

3. Далее следует тело самого внутреннего цикла.

4. В заключение записываются приращения переменных цикла, начиная с самого внутреннего и заканчивая самым внешним циклом.

 

Рассмотрим пример двумерного циклического алгоритма, в котором телом внутреннего цикла является разветвляющийся алгоритм.

Пример. Вычислить таблицу значений функции:

 
при изменении значений переменной х, изменяющейся в интервале [-5;3] c шагом hx=4, и у, изменяющейся в интервале [1,2;1,7] c шагом hy=0,5.

Приведем блок-схему и програму.


Дата добавления: 2019-09-13; просмотров: 223; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!