
- •Программирование линейных вычислительных процессов
- •Типы данных
- •Варианты задания.
- •Цель работы
- •Управление выбором действий
- •Контрольные вопросы
- •Варианты задания
- •Программирование циклических процессов с использованием оператора repeat - until
- •Контрольные вопросы
- •Варианты задания
- •Программирование циклических процессов с известным числом повторений цикла
- •Контрольные вопросы
- •Варианты задания
- •Уточнение корня уравнения
- •Контрольные вопросы
- •Варианты задания
- •Программирование вложенных циклических вычислительных процессов
- •Контрольные вопросы
- •Варианты задания
- •Библиографический список
- •Содержание
Программирование циклических процессов с известным числом повторений цикла
Цель работы
Изучение правил организации цикла с параметром, а также дополнительных возможностей последней версии языка при работе с циклами.
Методические указания
Конструкция цикла с параметром или, как ее часто называют, со счетчиком предназначена для организации повторяющихся действий (вычислений) при заранее известном числе повторений тела цикла. Блок и реализующий его оператор языка представлены ниже.
Вариант
1:
Тело
циклаp:=n(h)k
FOR p:=n TO
k DO <Оператор>;
Вариант 2:
FOR p:=n DOWNTO k DO <Оператор>;
Оператор FOR имеет два варианта написания в зависимости от того, как соотносятся начальное n и конечное k значения параметра цикла p. В первом варианте параметр изменяется от меньшего значения n до большего k, во втором - от большего n до меньшего k. Отсюда и различие в служебных словах. Шаг h, с которым автоматически изменяется параметр после выполнения тела цикла (оператора), зависит от типа переменной, используемой в качестве параметра цикла. Тип переменной может быть любым порядковым. Параметр p увеличивает на единицу порядковый номер своего следующего значения в варианте 1, а во втором - уменьшает на единицу. Величины n и k могут быть представлены выражениями соответствующего параметру p типа. В теле допускается использовать любой оператор языка, в том числе и пустой оператор, обозначаемый ; (точка с запятой). Запрещается вхождение в оператор FOR извне. Такую потенциальную возможность предоставляет оператор безусловного перехода GOTO. Данный оператор не отвечает духу структурного программирования и используется редко. Формат его использования: Goto <Метка>;. С помощью данного оператора нельзя также переходить из основной программы в подпрограмму и наоборот. Метка должна быть описана в разделе Label объявления меток с помощью имени языка или целого числа без знака от 0 до 9999 следующим образом:
Label a1, 45, 01;
Не следует также переопределять параметр p в теле цикла For, для этого служит заголовок цикла.
Пример 1. Вывести на экран буквы латинского алфавита в обратном порядке через пробел.
program bukva;
var c:char;
begin
for c := ‘z’ downto ‘a’ do
write(c, ‘ ‘);
writeln
end.
Широкое распространение табличного представления значений различных функций позволяет говорить о необходимости уметь программировать процесс получения этих значений, отстоящих друг от друга на некоторый шаг в направлении изменения аргумента. Чтобы можно было воспользоваться для указанных целей циклом со счетчиком, требуется осуществить переход от вещественных аргумента и шага, непригодных для организации данного цикла, к целочисленному параметру цикла, изменяющемуся с единичным шагом. Покажем реализацию такого приема на примере.
Пример 2. Пусть
необходимо протабулировать с шагом h
для аргумента, изменяющегося от xn
до xk,
функцию f(x)
= sin(x)/x.
Подсчитаем количество значений аргумента
n,
для которых требуется определить
значение функции:
.
Здесь запись]число[
обозначает
целую часть числа. Тогда можно представить
алгоритм решения задачи и соответствующую
ему программу в следующем виде.
Ввод
(xn,
xk,
h)
x
:= xn
n
:= ](xk-xn)/h[
+ 1
i := 1 (1) n
f := sin(x)/x
Вывод (x,
f)
x := x + h
program tab_fun;
var xn, xk, x, h, fun : real;
i, n : byte;
begin
writeln(‘Введите начальное и конечное значения аргумента, шаг’);
readln(xn, xk, h);
x := xn;
n := trunc((xk-xn)/h) + 1;
for i := 1 to n do
begin
fun := sin(x)/x;
writeln(‘x = ’, x:4:2, ‘ fun = ‘, fun:7:4); {форматный вывод}
x := x + h
end {for} end.
Версия Turbo Pascal 7.0 включает в себя процедуру Break досрочного выхода из цикла с любой организацией, в том числе и из цикла с параметром. Рассмотрим на примере возможности ее использования.
Пример 3. С
погрешностью 0.001 требуется уточнить на
отрезке [2, 3] методом касательных (Ньютона)
корень уравнения
.
Задают начальное приближение к корню
,
а затем применяют формулу метода с
использованием производной для отыскания
очередного приближения:
.
Если |
-
|
< 0,001, то найденное приближение и есть
корень с заданной погрешностью. Ниже
приводится программная реализация
метода с помощью цикла с параметром.
program newton;
const e = 0.001;
n = 50; {Число повторений цикла с запасом}
var a, b, d, q : real;
i : byte;
begin
writeln(‘Введите границы отрезка a и b’);
readln(a,b);
q := (a + b)/2; {Начальное приближение}
for i := 1 to n do
begin
d := (exp(q)-q*q-10)/(exp(q)-2*q);
q := q - d;
if abs(d) < e then begin
writeln(‘Корень уравнения = ‘, q);
break end {if}
end; {for}
writeln(‘Значение функции при этом = ‘, exp(q)-q*q-10)
end.
В состав процедур Turbo Pascal 7.0 включена процедура Continue, позволяющая переходить к очередной итерации цикла без завершения выполнения предыдущей. Часть тела цикла, следующая за обращением к процедуре, не выполняется. Таким образом, можно, например, реализовать цикл с параметром, который изменяется с шагом, отличным от единицы.
Пример 4. Подсчитать сумму четных чисел в диапазоне от n до k.
program Summa_Chotny;
Ввод
(n, k) var i,n,k : byte;
n-нечетное?
sum : word;
ДА
begin
n:= n+1 writeln(‘Введите
n и
k’);
sum
:= 0 readln(n,k); sum
:= 0;
i
:= n (2) k if odd(n) then n := n+1;
sum := sum + i
for i := n to k do begin
Вывод
(sum) if odd(i) then
continue;
sum := sum + i end; writeln(sum) end.