Пример выполнения работы.




Лабораторная работа № 3.

 

Тема - программирование циклических вычислительных процессов с использованием операторов, реализующих базовые структуры цикла.

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

 

Общие сведения

Циклическая структура процесса вычислений предполагает, что для получения результата некоторые действия необходимо выполнить несколько раз. Например, чтобы получить таблицу значений функции на заданном интервале изменения аргумента с заданным шагом, необходимо соответствующее количество раз определить следующее значение аргумента и вычислить для него значение функции. Другой пример. Чтобы найти фамилию человека в списке, надо проверить первую фамилию списка, затем вторую, третью и т. д. до тех пор, пока не будет найдена нужная или не будет достигнут конец списка. Такие повторяющиеся действия называются циклами.

Процессы вычислений циклической структуры можно разделить на три группы:

- циклические процессы, для которых количество повторений известно – счетные циклы или циклы с заданным числом повторений;

- циклические процессы, завершающиеся по достижении или нарушении некоторых условий – итерационные циклы;

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

 

Графические элементы структуры цикла:

1. Цикл с заранее известным числом повторений (рис.1)

 

 
 

 

 


Рис.1

 

2. Цикл с постусловием (рис.2)

 
 

 

 


Рис.2

 

3. Цикл с предусловием (рис.3)

 
 

 

 


Рис.3

Для реализации циклических процессов используют операторы циклов.

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

Существует два варианта этого оператора:

а) for i:= i1 to i2 do A;

б) for i:= i1 downto i2 do A.

В этих операторах:

i - параметр цикла, являющийся переменной порядкового типа (чаще всего integer; вещественный тип не допускается);

i1 - выражение, определяющее начальное значение параметра цикла;

i2 - выражение, определяющее конечное значение параметра цикла;

A - простой или составной выполняемый оператор (тело цикла).

i1 и i2 должны быть совместимы для присваивания с параметром цикла.

Цикл действует таким образом. Сначала вычисляются и запоминаются начальное i1 и конечное i2 значения параметра цикла. Далее параметру цикла i присваивается начальное значение i1. Затем значение параметра цикла i сравнивается со значением i2. Далее, пока параметр цикла меньше или равен конечному значению (в первом варианте оператора), или больше или равен конечному значению (во втором варианте), выполняется очередная итерация цикла; в противном случае происходит выход из цикла.Выполнение очередной итерации включает в себя сначала выполнение оператора A (тела цикла),а затем присваивание параметру цикла следующего, бóльшего, значения (в первом варианте оператора) или следующего, меньшего, значения (во втором варианте). Естественно, если в первом варианте значение i1 больше i2 или во втором варианте значение i1 меньше i2, оператор A (тело цикла) не выполняется ни разу.

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

2. Цикл с постусловием реализуется с помощью оператора цикла repeat. Оператор цикла repeat организует выполнение цикла, состоящего из любого числа операторов, с неизвестным заранее числом повторений. Тело цикла выполняется хотя бы один раз. Выход из цикла осуществляется при истинности некоторого логического выражения.

Структура этого оператора:

Repeat

until B;

В этой структуре:

p 1, p 2,..., p k – выполняемые операторы, составляющие тело цикла.

B - логическое выражение, истинность которого проверяется в конце каждой итерации.

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

 

3. Цикл с предусловием реализуется с помощью оператора цикла while. Оператор цикла while организует выполнение одного оператора неизвестное заранее число раз. Выход из цикла осуществляется, если некоторое логическое выражение окажется ложным. Так как истинность логического выражения проверяется в начале каждой итерации, тело цикла может не выполняться ни разу.

Структура этого оператора: while B do A;

где B - логическое выражение, истинность которого проверяется в начале каждой итерации;

A - простой или составной выполняемый оператор (тело цикла).

Перед каждым выполнением цикла вычисляется значение B. Если результат равен True, тело цикла выполняется и снова вычисляется значение логического выражения B. Если результат равен False, происходит выход из цикла и переход к следующему оператору программы.

Пример выполнения работы.

Задача 4.1. Составить программу для табулирования функции

при x = 0,9; 1,0; 1,1; 1,2.

Решение.

1. Анализ задачи.

Обозначим: a - начальное значение x; b - конечное значение x; h - шаг изменения x; - граничное значение x.

Тогда:

a = 0,9; b = 1,2; h = 0,1.

2. Тест для отладки программы.

a = 0,9;

b = 0,9;

y = 0,92 e-0,9-sin(0,9) = 0,25797.

3. Блок - схема:

 


4. Программа:

Program Fun1; { Пример шаговой таблицы функции}

Var

x, y, a, b,h, xgr: real; { Описание переменных }

Begin

WriteLn;

WriteLn(' Введите a,b,h');

ReadLn(a,b,h); { Ввод исходных данных}

WriteLn;

WriteLn(' a=',a:6:2,' b=',b:6:2,' h=',h:7:3); {Вывод

исходных данных}

WriteLn;

{ Вывод заголовка таблицы }

WriteLn('____________________');

WriteLn(' x y ');

WriteLn('____________________');

xgr:= b + 0.5 * h; { Вычисление граничного значения x }

x:= a; { Занесение начального значения x }

Repeat

y:= x*x * exp(-x) * sin(x); { Вычисление y }

WriteLn(x:7:1,y:10:5); { Вывод значений x, y }

x:= x + h; { Подготовка переменной x к новому циклу }

until x > xgr { Проверка на окончание цикла }

End. { Конец программы}

5. Вид печати:

 

a= 0.90 b= 1.20 h= 0.100

____________________

X y

____________________

0.9 0.25797

1.0 0.30956

1.1 0.35896

1.2 0.40424

Задача 4.2. Элементы последовательности вычисляются рекуррентно по формуле . Составить программу для вычисления и печати числа элементов последовательности, удовлетворяющих неравенству ai >0,7, если a o = 27, a значения i изменяются от 1 до 10.

Решение.

1. Анализ задачи.

Пусть n - число вычисляемых элементов последовательности,

k - число элементов, удовлетворяющих условию ai > 0,7.

Тогда

k o =0 - начальное значение k.

Исходные данные: a o = 27, n = 10.

 

2. Тест для отладки программы

n = 2,

a o = 27,

a 1 = 9,

a 2 = 3,

k = 2.

 

3. Блок - схема:

 

 
 

 


4. Программа:

Program Pose1; { Вычисление элементов последовательности

и их числа, удовлетворяющих условию }

Var

a0, a: real; { Описание переменных }

i, n, k: integer;

Begin

WriteLn;

WriteLn(' Введите n,a0');

ReadLn(n,a0); { Ввод n, a0 }

WriteLn;

WriteLn(' Введено число вычисляемых элементов последовательности:',n:4); { Вывод n }

WriteLn(' Начальное значение:',a0:6:1); { Вывод a0}

k:=0; { Занесение начального значения k }

i:=1; { Занесение начального значения i }

a:=a0; { Занесение начального значения a }

while i <= n do

Begin

a:= a / 3.0; { Вычисление текущего

элемента последовательности}

if a > 0.7 then k:= k + 1; {Проверка

условия a > 0.7}

i:= i + 1 { Увеличение номера элемента

последовательности }

end;

WriteLn;

WriteLn(' k=',k:4); {Вывод числа элементов,

удовлетворяющих условию }

End. { Конец программы}

 

5. Вид печати:



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-04-27 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: