Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
inf2.doc
Скачиваний:
18
Добавлен:
15.04.2015
Размер:
603.14 Кб
Скачать

Программирование циклических процессов с известным числом повторений цикла

Цель работы

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

Методические указания

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

Вариант 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.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]