Циклический алгоритм на языке PascalABC

  • pdf
  • 14.08.2025
Публикация на сайте для учителей

Публикация педагогических разработок

Бесплатное участие. Свидетельство автора сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала Лекция 3 Циклический алгоритм на языке PascalABC.pdf

Циклический алгоритм

В Паскале различают три типа операторов цикла. Цикл с предшествующим условием, реализуется при помощи оператора цикла while. Цикл с последующим условием реализуется оператором цикла repeat. Цикл с параметром – оператором цикла for.

Оператор while

Если в программе необходимо описать базовую алгоритмическую структуру, представленную на рис. 53, то в паскале она описывается оператором цикла while.

Рис. 53. Схема базовой алгоритмической структуры цикл с предшествующим условием Общий вид оператора: while УПЦ do ТЦ; Здесь:

УПЦ – условие продолжения цикла; ТЦ – тело цикла. Читается эта запись так - пока УПЦ – истина - делать ТЦ.

Если операторов в теле цикла более одного, то эту серию операторов нужно заключить в операторные скобки begin…end для того, чтобы точка с  запятой после первого оператора в теле цикла не спровоцировала завершение цикла.

Порядок выполнения оператора while:

1.     Вычисляется УПЦ.

2.     Если при вычислении выражения в пункте 1 получится истина, то выполняется ТЦ.

3.     Все циклически повторяется, начиная с пункта 1.

4.     Если в результате вычисления выражения в пункте 1 получится ложь – цикл завершается. Управление программой передается следующему после оператора цикла оператору.

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

Пример 13. Вычислить функцию 𝑦 = 𝑥2 в точках интервала (a, b), точки на интервале выбираются с заданным шагом h.

Обозначения:                                               

A, B – Начало и конец заданного интервала;

H – шаг, с которым выбирается точка на интервале;

X   – текущая точка на интервале;

Y   – значение функции, вычисленное в точке интервала.

Программа:

program primer_13;  var a,b,h,x,y:real;

begin     

writeln('введите начало интервала, конец  интервала и шаг'); readln(a,b,h);  x:=a; while x<=b do   begin y:=sqr(x); 

writeln('x=',x:5:2,' y=',y:5:2); x:=x+h;end; end .

Окно вывода (исходные данные введены верно, начало интервала  меньше или равно концу, шаг меньше длины отрезка):

Оператор repeat

Если в программе необходимо описать структуру, представленную на рис. 55, то необходимо использовать оператор цикла repeat.

 

 

Рис. 55 Базовая алгоритмическая структура цикл с последующим условием Общий вид оператора цикла с последующим условием:

repeat ТЦ; until УОЦ;

Здесь:

ТЦ – тело цикла;

УОЦ – условие окончания цикла.

Состоит оператор из:

                   заголовка repeat (что означает, с этого места начинается повтор);

                   тело   цикла          (оператор   или    серия          операторов,         которая          должна

многократно повторяться в программе);

                   условие окончания цикла until УОЦ (условие, при выполнении которого цикл должен завершить свою работу). Последовательность выполнения оператора:

1.     Выполняются операторы тела цикла (ТЦ);

2.     Вычисляется выражение УОЦ;

3.     Если в результате вычисления выражения в пункте 2 имеем истину, то цикл завершается. Управление программой передается следующему после цикла оператору;

4.     Если в результате вычисления выражения пункта 2 получим истину, то все циклически повторяется с пункта 1.

В этом цикле, сколько бы операторов в теле цикла не присутствовало, операторные скобки не нужны, т.к. repeat и until уже ограничивают тело цикла.

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

 

Пример 13 а). Вычислить функцию 𝑦 = 𝑥2 в точках интервала (a, b), точки на интервале выбираются с заданным шагом h.

Обозначения:

A, B – Начало и конец заданного интервала;

H – шаг, с которым выбирается точка на интервале;

X   – текущая точка на интервале;

Y   – значение функции, вычисленное в точке интервала. Программа:

program primer_13_А; var  a,b,h,x,y:realbegin

writeln('введите начало интервала, конец интервала и шаг'); readln(a,b,h);  x:=a; repeat y:=sqr(x);

writeln('x=',x:5:2,' y=',y:5:2); x:=x+h; until x>b; end.

Окно вывода (исходные данные введены верно, начало интервала меньше или равно концу, шаг меньше длины отрезка):

Комментарий. Особенность цикла с последующим условием в том, что один раз он выполнится в любом случае.

 

Пример 14. Рассмотрим известный алгоритм нахождения НОД (наибольшего общего делителя) двух натуральных чисел (алгоритм Евклида). Математическая модель НОД(A,B)= НОД(min (A,B), |A-B|),

Обозначения:

А, В – заданные числа.

Алгоритм применим к любым натуральным числам и за конечное число шагов должен приводить к решению Программа: 

program primer_14; var a,b:bytebegin

writeln('Введите два натуральных числа');  readln(a,b); while a<>b do

if a>b then a:=a-b else b:=b-a; writeln('a=',a); end.

Пример 15. Вычислите сумму

S=1+ x +  + ··· +  

Вычислим реккурентный множитель

R=

un+1

X – любое число; е – точность; N – номер слагаемого; S – текущая сумма; U – текущее слагаемое.

Сумма находится пока u > e Программа: program primer_15; var  x,e,s,u:real; n:integer; begin

writeln('Введите любое число x и точность'); readln(x,e); n:=0; s:=0; u:=1;

while abs(u)>e do   begin

s:=s+u; u:=u*x/(n+1); n:=n+1; end;  writeln('s=',s);

writeln('экспонента в точке ',x:5:2,'=',exp(x)); end.  

Комментарий. Выполнена проверка вычисленного результата. В условии задачи задано разложение в ряд Тейлора экспоненты. В программу добавлен оператор

writeln('экспонента в точке ',x:5:2,' =',exp(x));

 

Оператор for

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

Рис 57. Схема базовой алгоритмической структуры цикл с параметром Здесь:

ПЦ – переменная цикла или параметр цикла или счетчик повторения цикла;

НЗ – начальное значение переменной цикла; КЗ – конечное значение переменной цикла;  ТЦ – тело цикла.

 

В общем виде оператор цикла с параметром будет выглядеть так:

for ПЦ:=НЗ to КЗ do ТЦ; Читается оператор так:

Для всех значений параметра цикла (ПЦ) изменяющегося в диапазоне от начального значения (НЗ) до конечного значения (КЗ) делать тело цикла (ТЦ). Параметр цикла – всегда простая переменная целого типа. В этом варианте цикла при каждом новом повторе цикла параметр цикла будет увеличиваться на единицу.

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

Алгоритм выполнения оператора

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

После этого циклически выполняются следующие действия:

1.                 Проверяется условие, текущее значение переменной цикла меньше или равно конечному значению переменной цикла.

2.                 Если условие в пункте 1 – истина, то выполняется тело цикла, если - ложь, то цикл завершается и управление передается следующему после цикла оператору.

3.                 Переменная цикла увеличивается на единицу. Пример 16. Вычислить: S=  

Обозначения:

N – Количество слагаемых в сумме;  I – номер слагаемого; S – текущая сумма.

Программа: 

program primer_16; var  s:real; n,i:integer; begin

writeln('Введите количество слагаемых в  сумме'); readln(n);  i:=1; s:=0; while i<=n do   begin s:=s+1/sqr(i);  i:=i+1; endwriteln('s=',s);  end.

Блок-схема этого же алгоритма с использованием структуры  цикл с параметром представлена на рис. 59.

 

Рис. 59. Блок-схема алгоритма решения задачи примера 16

Программа:

program primer_16;var  s:real; n,i:integer; begin

writeln('Введите количество слагаемых в сумме'); readln(n); s:=0; for i:=1 to n do s:=s+1/sqr(i); writeln('s=',s); end.

 

Комментарии. Программный код значительно короче и не перегружен дополнительными деталями. Это более подходящий выбор цикла при решении примера 16.

Задания для самостоятельной работы

1.                 Вычислить сумму натуральных чётных чисел не больших заданного натурального числа N.

2.                 Вычислить факториал натурального числа N.

3.                 Дано натуральное число N. Определить K – количество делителей этого числа, меньших чем само заданное число N (например, для N=12 делители 1, 2, 3, 4, 6. Количество K=5).

4.                 Дано натуральное число N. Определить, является ли оно простым. Натуральное число N называется простым, если оно делится без остатка только на единицу и на само себя. Число 19 – простое, так как делится только на 1 и 19, а число 12 не является простым, так как делится на 1, 2, 3, 4, 6 и 12.

5.                 Из N заданных вещественных чисел определить наибольшее число.

6.                 Целые числа вводятся до тех пор, пока не ввели число 0. Найти наименьшее число среди положительных. Если найденный минимум – не единственный (есть повторы), определить, сколько их.

7.                 Водятся числа до тех пор, пока не введет число 0. Определить среднее арифметическое всех введенных чисел.

8.                 Водятся числа до тех пор, пока не введет число 0. Вычислить процент положительных и отрицательных чисел.

9.                 Задано целое положительное число n. Определить значение выражения

a =  

10.            Задано целое положительное число n. Определить значение выражения:

n

p i

11.            Вводится целое число N, (𝑁 > 1. Составить алгоритм вывода наименьшего целого числа K, при котором выполняется неравенство 5𝐾 > 𝑁.

12.            Вводится целое число N, (𝑁 > 1). Составить алгоритм вывода наибольшего целого числа K, при котором выполняется неравенство 5𝐾 < 𝑁.

13.            Найти минимальное число большее 100, которое нацело делится на 15.