program sin_repeat;
var y,{текущее значение функции}
x,{текущее значение аргумента}
xn,{начальное значение аргумента}
xk,{конечное значение аргумента}
hx {шаг изменения аргумента}
:real;
begin
{ввод исходной информации}
writeln('Введите диапазон и шаг изменения аргумента');
readln(xn,xk,hx);
{вывод заголовка таблицы (первая графа - 15 позиций;
вторая графа - 20 позиций)}
writeln('АРГУМЕНТ Х':15,'ФУНКЦИЯ Y=SIN(X)':20);
{аргументу присваивается первое значение}
x:=xn;
{цикл для вычисления всех значений}
repeat
{вычисление текущего значения функции для текущего
значения аргумента}
y:=sin(x);
{вывод аргумента и функции в табличной форме}
writeln(x:15:5,y:20:5);
{переход к новому значению аргумента}
x:=x+hx
until x>xk
end.
Формальное исполнение программы sin_while
1) До выполнения программы осуществляется распределение свободного участка памяти под переменные величины, описанные в разделе переменных программы (рис. 15.7)
ОП | ||
y | ? | Под хранение данного типа REAL (6Б) |
x | ? | Под хранение данного типа REAL (6Б) |
xn | ? | Под хранение данного типа REAL (6Б) |
xk | ? | Под хранение данного типа REAL (6Б) |
hx | ? | Под хранение данного типа REAL (6Б) |
Рис. 15.7. –Распределение ОП
Содержимое выделенных участков памяти - неопределенное;
1) выполняется обращение к процедуре вывода:
writeln('Введите диапазон и шаг изменения аргумента');
В результате на экране, начиная с текущего положения курсора, появляется сообщение:
Введите диапазон и шаг изменения аргумента
и курсор переводится в начало следующей строки экрана дисплея;
2) выполняется обращение к процедуре ввода:
readln(xn,xk,hx);
Программа ожидает получения информации в виде трех вещественных чисел с клавиатуры ПЭВМ. Человек набирает эту информацию, например, 0 0.2 0.1 и нажимает клавишу ввод (Return или Enter). Значение 0 поступает в память под именем xn, значение 0.2 - под именем xk, значение 0.1 - под именем hx. Содержимое оперативной памяти после ввода показано на рис. 15.8.
ОП | ||
y | ? | Под хранение данного типа REAL (6Б) |
x | ? | Под хранение данного типа REAL (6Б) |
xn | 0.0 | Под хранение данного типа REAL (6Б) |
xk | 0.2 | Под хранение данного типа REAL (6Б) |
hx | 0.1 | Под хранение данного типа REAL (6Б) |
Рис. 15.8. –Распределение ОП после ввода исходных данных
3) выполняется обращение к процедуре вывода:
writeln('АРГУМЕНТ Х':15,'ФУНКЦИЯ Y=SIN(X)':20);
на экране первые пятнадцать позиций строки занимает текст АРГУМЕНТ Х , следующие двадцать позиций текст ФУНКЦИЯ Y=SIN(X) (это сделано для формирования на экране таблицы из двух колонок);
4) выполняется оператор присваивания x:=xn
x:= | 0.0 | (0.0) |
xn |
5) выполняется оператор цикла пока
5.1.1)вычисляется условие выполнения цикла
0.0<=0.2 | (TRUE) |
x<=xk |
5.1.2) Так как условие выполнения цикла справедливо, то выполняется тело цикла, а затем происходит возврат к вычислению условия выполнения цикла.
Выполняем тело цикла
5.1.2.1)
y:= | 0.0 | (0.0) |
sin(0.0) |
5.1.2.2) Вывод на экран:
0.00000 0.00000
5.1.2.3)
x:= | 0.0+0.1 | (0.1) |
x+hx |
5.2.1)вычисляется условие выполнения цикла
0.1<=0.2 | (TRUE) |
x<=xk |
5.2.2) Выполняем тело цикла
5.2.2.1)
y:= | 0.09983 | (0.09983) |
sin(0.1) |
5.2.2.2) Вывод на экран:
0.10000 0.09983
5.2.2.3)
x:= | 0.1+0.1 | (0.2) |
x+hx |
5.3.1)вычисляется условие выполнения цикла
0.2<=0.2 | (TRUE) |
x<=xk |
5.3.2) Выполняем тело цикла
5.3.2.1)
y:= | 0.19867 | (0.19867) |
sin(0.2) |
5.3.2.2) Вывод на экран:
0.20000 0.19867
5.3.2.3)
x:= | 0.2+0.1 | (0.3) |
x+hx |
5.4.1)вычисляется условие выполнения цикла
0.3<=0.2 | (FALSE) |
x<=xk |
Так как результат FALSE, то цикл завершается.
15.6.
Правила перебора всех значений переменной в заданном диапазоне
с заданным шагом изменения
Эти правила определяют метод решения задачи, которой соответствует следующая математическая модель:
x:=xn(hx)xk : <серия команд>
Метод решения (правила)
1) Изменяющейся переменной присваивается начальное значение;
2) Используется цикл пока или повторять до, соответственно с условием выполнения цикла – значение изменяющейся переменной меньше или равно конечного значения; с условием окончания цикла – значение изменяющейся переменной больше конечного значения;
3) Последним действием в теле цикла является вычисление нового значения изменяющейся переменной (ее значение увеличивается на величину шага изменения).
Обобщенный алгоритм (действия на языке Паскаль)
а) с использованием цикла пока
x:=xn;
while x<=xk do
begin
<серия команд>
x:=x+hx
end
б) с использованием цикла повторять до
x:=xn;
repeat
<серия команд>
x:=x+hx
until x>xk
15. 7. Алгоритм вычисления
таблицы значений функции от нескольких переменных.
Вложенные циклы
Математическая модель
Математическая модель таблицы значений функции от нескольких переменных (или аргументов) формулируется следующим образом
"x1:=x1n(hx1)x1k:
"x2:=x2n(hx2)x2k:
"x3:=x3n(hx3)x3k:
……………………
"xn:=xnn(hxn)xnk: y:=f(x1,x2,x3,…xn)
Метод решения
Таблица должна содержать значения функции для всевозможных комбинаций значений аргументов. Т.е. необходимо перебрать все значения первого аргумента, для каждого значения первого аргумента перебрать все значения второго аргумента; для каждого значения второго аргумента перебрать все значения третьего и т.д.; для каждого значения последнего аргумента вычислить значение функции, вывести полученное значение и значения всех аргументов, при которых рассчитывалось полученное значение функции, и перейти к новому значению последнего аргумента.
Алгоритм с использованием оператора цикла пока будет иметь следующую структуру:
x1:=x1n;
while x1 <= x1k do
begin
x2:=x2n;
while x2 <= x2k do
begin
x3:=x3n;
while x3 <= x3k do
begin
. . .
xn:=xnn;
while xn <= xnk do
begin
y:=f(x1,x2,...,xn);
writeln(x1,x2,...,xn,y);
xn:=xn+hxn
end;{xn}
. . .
x3:=x3+hx3
end;{x3}
x2:=x2+hx2
end;{x2}
x1:=x1+hx1
end;{x1}
Этот же алгоритм с использованием оператора цикла до будет иметь следующую структуру:
x1:=x1n;
repeat
x2:=x2n;
repeat
x3:=x3n;
repeat
. . .
xn:=xnn;
repeat
y:=f(x1,x2,...,xn);
writeln(x1,x2,...,xn,y);
xn:=xn+hxn
until xn>xnk;
. . .
x3:=x3+hx3
until x3>x3k;
x2:=x2+hx2
until x2>x2k;
x1:=x1+hx1
until x1>x1k
Естественно, что в таком алгоритме можно использовать разные виды операторов цикла, главное - должно выдерживаться следующее правило:
- цикл, который начинается раньше, позже заканчивается;
- цикл, который начинается позже, раньше заканчивается.
Это основное правило вложенности циклов.
IV.2.10. Оператор цикла с параметром
Назначение
Оператор используется в алгоритмах, когда для каждого значения переменной из диапазона значений необходимо выполнять одинаковые действия. Эта переменная называется параметром цикла.
Синтаксис
Рис. 15.9. –Оператор цикла с параметром
Синтаксическое ограничение:
результаты вычислений выражений 1 и 2 и параметр цикла должны быть одного простого порядкового типа.
Семантика
Условием выполнения оператора цикла с параметром является существование списка значений - для возрастающего списка значений с символом TO значение выражения 1 должно быть меньше или равно значения выражения 2; для убывающего списка значений с символом DOWNTO значение выражения 1 должно быть больше или равно значения выражения 2.
Порядок выполнения оператора:
1) вычисляются значения выражений 1 и 2, определяющих список значений параметра цикла;
2) вычисляется условие выполнения оператора цикла с параметром – для списка с символом TO результат выражения 1 меньше или равен результата выражения 2, для списка с символом DOWNTO результат выражения 1 больше или равен результата выражения 2 (возможен результат TRUE или FALSE);
3) если условие имеет значение FALSE, то выполнение оператора цикла прекращается (выполняется следующий оператор, расположенный за оператором цикла);
4) формируется полный список значений параметра цикла. Для списка с символом TO - это все значения подряд от результата выражения1 по результат выражения2. Для списка с символом DOWNTO – это все значения в обратном порядке от результата выражения1 по результат выражения2;
5) параметру цикла присваивается очередное значение из списка значений (первый раз - значение выражения1);
6) если список значений исчерпан (до этого уже было выбрано значение выражения2), то выполнение оператора цикла прекращается. Значение параметра цикла становится неопределенным и выполняется следующий оператор, стоящий за оператором цикла;
7) для выбранного значения параметра цикла выполняется оператор, расположенный после символа DO (тело цикла);
8) осуществляется переход к пункту 5.
Рис. 15.10. –Изображение оператора цикла с параметром на схемах алгоритма
Предупреждения:
1) по завершению оператора цикла (см. пункты 3 и 6) значение параметра цикла неопределенное (зависит от реализации языка) и выполняется следующий оператор, расположенный за оператором цикла с параметром;
2) значения выражений 1 и 2 вычисляются один раз (см. пункт 1), поэтому в теле цикла не имеет смысла изменять значения, определяющие эти выражения;
3) в теле цикла запрещается изменять значение параметра цикла, так как это приводит к непредсказуемым последствиям (значение параметра цикла изменяется автоматически в пункте 5)