Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Оператор цикла WHILE




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

Структура оператора цикла WHILE имеет вид:

while s do Instruction;

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

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

Instruction – выполняемый оператор цикла, который может быть составным.

Алгоритм работы оператора WHILE:

1 – вычисляется значение условия S;

2 – проверяется условие, если результат равен True, тело цикла выполняется и происходит переход к п. 1; если результат равен False, происходят выход из цикла и переход к первому после while оператору (рисунок 4.2).

 

Рисунок 4.2 – Схема работы цикла While ‑ do

 

Пример. Найти все делители целого положительного числа (кроме 1 и самого числа).

program EXAMPLE;

var

Х: Integer;

Half: Integer;

Divider: Integer;

i: Integer;

begin

repeat

Write('Введите число больше нуля: ');

ReadLn(X);

if X<=0 then

WriteLn('Неправильный ввод')

until X > 0;

Half:= X div 2;

Divider:= 2;

i: = 0;

While Divider <= Half do

begin

if X mod Divider = 0

then

begin

inc(i); {увеличение счетчика на единицу}

WriteLn(i, '-й делитель равен:' Divider)

end;

inc(Divider) {увеличение делителя на единицу}

end;

if i=0 then

WriteLn('Делителей нет');

WriteLn('Конец решения')

end.

Некоторые возможные способы использования циклов в решении задач можно пояснить на приведенных ниже примерах.

Пример 1. Организация цикла без операторов цикла. Найти сумму ста первых элементов натурального ряда чисел.

Решение. Блок-схема алгоритма показана на рисунке 4.3.

 

Начало
s:=0; i:=1
s:=s+i i:=i+1
 
Вывод s
Конец  
i <=100

 

Рисунок 4.3 – Блок-схема алгоритма к примеру 1

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

Текст программы может выглядеть следующим образом:

Program pr_1;

Label M;

Var s,i: integer;

Begin

S:=0;

i:=1;

M: s:=s+i:

i:=i+1:

if i<= 100 then goto M;

Writeln(‘Сумма=’,s:4);End.

Пример 2. Оператор цикла с параметром (с известным числом повторений). Условие – предыдущий пример.

Решение. Блок-схема алгоритма показана на рисунке 4.4.

 

Начало
s:=0
s:=s+i
i:=1 to 100
 
Вывод s
Конец  

 

Рисунок 4.4 – Блок-схема алгоритма к примеру 2

 
 
 
– начальные условия;
 
 
– начало цикла с известным числом повторений;
 
 
– тело цикла;
 
 
– конец цикла;
 
 
– вывод результата.
 
 
 
 
 
 
 
 

Текст программы может выглядеть следующим образом:

Program pr_2;

Var s,i: integer;

Begin

S:=0;

for i:=1 to 100 do

s:=s+i;

Writeln(‘Сумма=’,s:4);

End.

Пример 3. Оператор цикла с предусловием (цикл while). Условие – предыдущий пример.

Решение. Блок-схема алгоритма показана на рисунке 4.5.

 

Начало
s:=0; i:=1
s:=s+i; i:=i+1
While i<=100
 
Вывод s
Конец  

 

Рисунок 4.5 – Блок-схема алгоритма к примеру 3

 
 
 
– начальные условия;
 
 
– начало цикла с предусловием (цикл while); проверка условия выполнения тела цикла;
 
– тело цикла;
 
 
– конец цикла;
 
 
– вывод результата.
 
 
 
 
 
 
 

Текст программы может выглядеть следующим образом:

Program pr_3;

Var s,i: integer;

Begin

S:=0;

i:=1;

While i<=100 do

begin

s:=s+i:

i:=i+1;

end;

Writeln(‘Сумма=’,s:4);

End.


Пример 4. Оператор цикла с постусловием (цикл repeat). Условие – предыдущий пример (рисунок 4.6).

 

Начало
s:=0; i:=1
s:=s+i; i:=i+1
repeat  
 
Вывод s
Конец  
until i>100

 

Рисунок 4.6 – Блок-схема алгоритма к примеру 4

 
 
 
– начальные условия;
 
 
– начало цикла с постусловием (цикл repeat);
 
– тело цикла;
 
 
– проверка условия выхода из цикла (конец цикла);
 
 
– вывод результата.
 
 
 
 
 
 
 

Текст программы может выглядеть следующим образом:

Program pr_4;

Var s,i: integer;

Begin

S:=0;

i:=1;

Repeat

s:=s+i:

i:=i+1;

until i>100;

Writeln(‘Сумма=’,s:4);

End.

Итерационные циклы. Итерационные циклы широко используются в приближенных вычислениях, являющихся основой использования вычислительной мощности ЭВМ. Как известно, далеко не всякое уравнение может быть решено точно. В первую очередь, это относится к большинству трансцендентных уравнений. Доказано также, что нельзя построить формулу, по которой можно было бы решать произвольные алгебраические уравнения степени, выше четвертой. Однако точное решение уравнения не всегда является необходимым. Задачу отыскания корней уравнения можно считать практически решенной, если мы сумели определить корни с нужной степенью точности и указать пределы возможной погрешности. Численные методы позволяют свести решение любых математических задач к выполнению четырех арифметических действий.

Отличительными чертами итерационных способов вычислений являются:

• наличие стереотипных вычислений, связанных с переходом от одного приближения к следующему;

• зависимость числа вычисленных шагов от требуемой точности.

Для организации итерационных циклов используются два вида операторов цикла:

1) оператор цикла с предусловием WHILE-DO;

2) оператор цикла с постусловием REPEAT-UNTIL.

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

• используют общую формулу для подсчета суммы в цикле:

S:=S+{тeкyщee слагаемое},

где S – значение суммы, полученное в предыдущем шаге;

• используют общую формулу для подсчета произведения в цикле:

P:=P* {множитель},

где P – значение произведения, полученное в предыдущем шаге;

• заменяют операцию возведения в степень операцией умножения в цикле;

• увеличивают в каждом шаге цикла управляющую переменную n на заданное значение (в общем случае – на единицу), т.е.

n = n +1;

• используют рекуррентную формулу для получения следующего члена ряда, для чего, зная формулу общего члена ряда, вычисляют коэффициент k – отношение текущего члена ряда (при n) к предыдущему (при n- 1) или отношение следующего члена ряда (при n +1) к текущему (при n):

или ;

• принимают начальные условия: значение управляющей переменной n; значение текущего члена ряда A (при n); значение суммы членов ряда при начальном приближении S:=A;

• используют дополнительную переменную S 1, сохраняющую значение предыдущего приближения (значение суммы ряда в предыдущем шаге);

• используют функцию определения абсолютного значения abs для определения условия выхода из цикла:

abs(S-S1) < (для цикла с постусловием REPEAT-UNTIL)

или

abs(S-S1) > (для цикла с предусловием WHILE-DO).

Рассмотрим пример на составление программы приближённых вычислений с использованием итерационного цикла с постусловием REPEAT-UNTIL.

Пример 5. Рассчитать с заданной точностью .

Решение:

1) Определим начальные условия:

• значение управляющей переменной n=0;

• значение текущего члена ряда А (при n=0):

;

• значение суммы членов ряда при начальном приближении (при n=0) S:=A.

2) Составим рекуррентную формулу для определения текущего члена ряда.

При составлении рекуррентной формулы, зная формулу общего члена ряда , необходимо вычислить коэффициент k – отношение следующего члена ряда (при n +1) к текущему (при n):

Запишем рекуррентную формулу для вычисления в цикле текущего члена ряда А (заменив операцию возведения в степень умножением):

 

 

Обратим внимание, что полученная функция – знакопеременная, т.к. имеется множитель (–1).

3) Запишем выражение для вычисления в цикле значения функции S (суммирование в цикле):

S:=S+А.

Обратим внимание, что значение управляющей переменной n увеличивается в каждом шаге цикла на единицу (от начального значения), т.е.

n: = n +1.

4) Введём дополнительную переменную S 1, сохраняющую в цикле значение предыдущего приближения (значение суммы ряда в предыдущем шаге):

.

5) Запишем условие выхода из цикла, используя функцию определения абсолютного значения abs: abs(S-S1) < (для цикла с постусловием).

 

 

Текст программы может выглядеть следующим образом:

program prim5;

Var

n:integer;

s,s1,a,eps:Real;

BEGIN

Write('Vvedite eps=');

Read(eps);

n:=0;

a:=1;

s:=a;

repeat

s1:=s;

a:=(-1)*a*(1+n*n*n)/(1+(n+1)*(n+1)*(n+1));

s:=s+a;

n:=n+1;

WriteLn('s=',s:8:4);

until abs(s-s1)<eps;

ReadLn;

ReadLn

END.

 

Варианты заданий

Таблица 4.1

Номер варианта Общий член ряда Точность
1. =0,01
2. =0,001
3. =0,01
4. =0,001
5. =0,1
6. =0,001
7. =0,01
8. =0,001
9. =0,0001
10. =0,1
12. =0,01
13. =0,001
14. =0,01
15. =0,1
16. =0,0001

 

Содержание отчета (см. лабораторную работу 1).

Контрольные вопросы

1. Каково назначение условных операторов повтора (циклов)?

2. Какие требования предъявляются к выражениям, управляющим повторениями?

3. В чем отличия операторов повтора while и repeat?

4. В каких случаях предпочтительнее использовать для организации циклов оператор повтора for? Что записывается в заголовке этого оператора?

5. Что такое вложенные циклы? Какие дополнительные условия необходимо соблюдать при организации вложенных циклов?






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных