Стандартные математические функции
Обычная запись | Запись на Паскале |
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. Блок проверки условия продолжения цикла (x≤xk – для цикла с предусловием) или условие выхода из цикла (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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!