Что называют телом цикла с параметром. Программирование

27.06.2020

Цикл с параметром был уже рассмотрен нами в разделе "Алгоритм" в теме "Виды алгоритмов".
Цикл с параметром используется, когда заранее известно сколько раз должен выполниться цикл.

Формат записи цикла:

Здесь for, to, do - зарезервированные слова (для, до, выполнить);

<пар. цикла> - параметр цикла – переменная целочисленного типа (типа integer);
<нач. знач.> - начальное значение - число или переменная целочисленного типа (типа integer);
<кон. знач.> - конечное значение - число или
переменная целочисленного типа (типа integer);
<оператор> - произвольный оператор Паскаля.

Пример: For i:=1 to n do <оператор>
здесь i - параметр цикла
1 - начальное значение
n - конечное значение
Если в теле цикла используется несколько операторов, тогда, используются операторные скобки: begin ... end.
При выполнении оператора for вначале вычисляется выражение <нач.знач.> и осуществляется присваивание его значения переменной цикла <пар.цикла> := <нач. знач.>. Далее сравниваются <пар.цикла> и <кон.знач.>. До тех пор, пока они не станут равными будет выполняться оператор (операторы). Значение переменной цикла <нач.знач> автоматически увеличивается на единицу в ходе выполнения цикла. Надо сразу заметить, что задать шаг цикла, отличный от 1 в этом операторе нельзя.
Пример:
Возможны такие записи оператора цикла:

1) for i:= 1 to n do s1;

2) for i:= 3 to 10 do s1;

3) for i:= a to b do s1;

4) for i:= a to b do
begin

s1;
s2;
...
sn

end;

Здесь s1, s2, s3, ... sn - операторы цикла.

Пример:
Составить программу вывода на экран чисел от 1 до 10.

Пример:
Составить программу вычисления факториала числа n, т. е. n!. (0! = 1)

Объяснение программы:
Переменная n - для вводимого пользователем числа, факториал которого надо найти; f - переменная, в которой будет "накапливаться" значение факториала числа n; i - переменная цикла.
Устанавливается первоначальное значение переменной f:= 1.
Далее начинается цикл. Переменной i присваивается начальное значение 1; оно сравнивается с конечным - n (1 <= n), если условие истинно, тогда выполняется оператор (в этой программе он один): f:= f*i, 1*1=1; значение переменной цикла увеличивается на 1, т. е. станет равным: i:= i + 1, 1 + 1 = 2 и цикл повторяется.
Когда значение i станет равным n, тогда цикл выполнится последний раз, потому что следующее значение i будет n + 1, что больше конечного значения n, условие i <= n - ложно, цикл не выполняется.

Существует другая форма оператора цикла For:
Формат записи цикла:

Замена зарезервированного слова to на downto означает, что шаг параметра цикла равен (-1).
Изменение значения параметра идет от большего значения к меньшему, т. е. <нач. знач.> <кон. знач.>.

Пример:
Возможны такие записи оператора цикла:

1) for i:= n downto 1 do s1;

2) for i:= 10 downto 3 do s1;

3) for i:= b downto a do s1; (при условии, что b>a)

4) for i:= b downto a do
begin

S1;
s2;
...
sn

end; (при условии, что b>a)

Здесь s1, s2, s3, ... sn - операторы цикла.

Пример: Программу вычисления факториала числа можно составить, используя этот оператор цикла.


Задачи

  1. Даны 10 чисел, вывести те из них, которые являются полными квадратами.
  2. Даны 10 чисел, найти их произведение. Составить блок-схему и программу.
  3. Даны 10 чисел, найти сумму четных. Составить блок-схему и программу.
  4. Даны 10 чисел, найти количество отрицательных. Составить блок-схему и программу.
  5. Даны n действительных чисел. Найти максимум и минимум. Составить блок-схему и программу.
  6. Даны n действительных чисел. Найти среднее арифметическое всех элементов. Составить блок-схему и программу.
  7. Даны n действительных чисел. Найти среднее арифметическое отрицательных и положительных элементов. Составить блок-схему и программу.
  8. Даны n натуральных чисел. Найти сумму и произведение элементов, кратных 3 и 5. Составить блок-схему и программу.
  9. Даны n натуральных чисел. Вывести те числа, значения которых являются степенями двойки (1, 2, 4, 8, 16, ...). Составить блок-схему и программу.
  10. Даны n натуральных чисел. Вывести те числа, значения которых находятся в отрезке . Составить блок-схему и программу.
  11. Даны n натуральных чисел. Вывести на экран те числа, значения которых являются квадратами какого-либо числа. Составить блок-схему и программу.
  12. Дано натуральное число n. Найти n 2. Составить блок-схему и программу.
  13. Даны натуральные числа a, n. Найти a n. Составить блок-схему и программу.
  14. Дано натуральное число n. Определить его разрядность, цифру старшего разряда числа увеличить на 2
  15. Дано натуральное число n. Поменять местами первую и последнюю цифры числа
  16. Дано натуральное число n. Цифры числа, кратные 2 заменить на 0.
  17. Дано натуральное число n. Цифры числа, кратные 3 заменить на 1.
  18. Дано натуральное число n. Вычислить произведение (2n-1)*(3n-1)*(4n-1)*...*(10n-1). Составить блок-схему и программу.
  19. Вычислить сумму 2+4+6+...+100. Составить блок-схему и программу.
  20. Дано натуральное число n, действительное x. Вычислить произведение x+x/2+x/3+...+x/n. Составить блок-схему и программу.
  21. Дано натуральное число n. Вычислить P=(1-1/2)(1-1/3)...(1-1/n), где n>2. Составить блок-схему и программу.
  22. Дано натуральное число n. Вычислить P=(1+x)/n+(2+x)/(n-1)+...+(n+x)/1. Составить блок-схему и программу.
  23. Даны n натуральных чисел. Вычислить сумму ряда 1+x/1!+x 2 /2!+x 3 /3!+ ... +x n /n!. Составить блок-схему и программу.

Операторы цикла с параметром (for)

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

For параметр цикла:= начальное значение to конечное значение do оператор.

В качестве управляющей переменной должен использоваться идентификатор переменной. Управляющая переменная должна иметь перечислимый тип. Начальное и конечное значения должны иметь тип, совместимый по присваиванию с перечислимым типом. Когда начинает выполняться оператор for , начальное и конечное значения определяются один раз, и эти значения сохраняются на протяжении всего выполнения оператора for . Оператор, который содержится в теле оператора for , выполняется один раз для каждого значения в диапазоне между начальным и конечным значением. Управляющая переменная всегда инициализируется начальным значением. Когда работает оператор for и используется ключевое слово to , значение управляющей переменной увеличивается при каждом повторении на единицу. Если начальное значение превышает конечное значение, то содержащийся в теле оператора for оператор не выполнятся. Когда в операторе цикла используется ключевое слово downto , значение управляющей переменной уменьшается при каждом повторении на единицу. Если начальное значение в таком операторе меньше, чем конечное значение, то содержащийся в теле оператора цикла оператор не выполнятся.

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

На параметр цикла в операторе for накладываются следующие ограничения:

1) параметр цикла, а также его начальное и конечное значения не могут быть изменены никаким оператором в теле цикла;

2) вход в цикл ТОЛЬКО через его начало.

Массив - это упорядоченная совокупность переменных одного типа, называемых элементами массива. Все элементы имеют одно и то же имя, совпадающее с именем массива. Каждый элемент снабжается индексом (порядковым номером), определяющим его относительную позицию в ряду других элементов, и называется индексированной переменной. Индекс элемента записывается вслед за его именем в квадратных скобках, например, a, max и т.д. Характеристиками каждого массива являютnя его имя, размерность и длина. Имя массива выбирается по тем же правилам, что и имя простой (неиндексированной) переменной. Понятие размерности массива аналогично понятию размерности матрицы в математике. Так одномерный массив соответствует вектору - строке, двумерный - матрице такой же размерности и т.д.



Длина массива - это количество составляющих его элементов. Массивы относятся к одной из разновидностей составного типа, а именно к регулярному типу.

Определение регулярного типа имеет вид

array of t1

где array - массив (ключевоеое слово);

of - из (ключевое слово);

t1 - тип элементов массива (базовый тип);

t2 - тип индексов элементов массива.

В качестве элементов массива могут выступать переменные любого типа, допустимого в языке. Тип индекса задаёт количество элементов в массиве, т.е. его длину; это количество определяется числом возможных значений типа,указанного в описании массива. Для индексации элементов массива чаще всего используется ограниченный тип, который образуется из какого-либо стандартного типа (например, целого) путём наложения ограничений на допустимый диапазон его значений. Эти ограничения задаются минимальным и максимальным значениями индекса, разделёнными двумя стоящими подряд точками и заключёнными в квадратные скобки, например, , [-5..35] и т.д.

В программе каждый массив должен быть описан. Его описание может быть сделано либо в разделе описания переменных - var , либо в двух разделах: описания типов - type и описания переменных. Но в любом случае в описании массива должно присутствовать определение регулярного типа.

Описание массива в разделе переменных выглядит так:

var

имя массива: array of t1;

В общих чертах, сегодня узнаем о каждом из циклов в паскале поподробней и увидим как они задаются. Будем разбирать цикл while с предусловием , цикл for с параметром и цикл repeat - until с постусловием .

1. Цикл с параметром в Паскале - FOR

Цикл FOR задаёт определённое условие по которому программа будет работать до его выполнения, допустим нужно нам 5 (или n) раз зациклить программу, то это легко сделать с помощью данного цикла. У цикла FOR есть характерная черта - счетчик который обычно обозначается буквой i или j.

Внешний вид цикла с параметром в паскале:

for i:= 1 to n do // присваиваем i сначала одному, потом двум, трем, ..., n

После 1-го прохода переменной i присваиваем 1, после второго присваиваем 2 и так до тех пор, пока не дойдем до n. to - это до.. в порядке возрастания, также есть downto - до.. в порядке убывания.

Блок - схема цикла с параметром:

2. Цикл с предусловием в Паскале - WHILE

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

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

WHILE DO begin end;

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

Любые выполняемые операторы языка.

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

Пока условие истинно выполняется тело цикла. Как только условие становится ложно выполнение цикла прекращается.

Блок - схема цикла с предусловием:


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

Пример:

Задача: вычислить сумму ряда 1+1.5+2+2.5+3+3.5+ .. + 30

program example-while;

Var sum:real; n:real; BEGIN sum:=0; n:=1; while n

3. Цикл с постусловием - Repeat - until.

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

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

Последовательность операторов, входящих в тело цикла выполняется один раз, после чего проверяется соблюдение условия, записанного следом за служебным словом Until. Если условие не соблюдается, цикл завершается. В противном случае - тело цикла повторяется ещё раз, после чего снова проверяется соблюдение условия.

Блок - схема цикла с постусловием:

Формат записи, структура цикла:
REPEAT UNTIL ;

Пример:

Program test2; Var b:Real; Begin b:=100; Repeat b:=b/2; Until b

Выводы:

1.Цикл с параметром используется переменная, называемая параметром цикла или счётчиком. Перед выполнением цикла параметру (счётчику) устанавливается начальное значение. После выполнения шага цикла значение параметра увеличивается на единицу. Цикл продолжается до тех пор пока параметр не достигнет своего конечного значения, которое указывается после to (downto).

2. Цикл с предусловием выполняется до тех пор, пока условие выполнения не станет ложным, и продолжается, если условие истинно.

3. Цикл с постусловием выполняется до тех пор, пока условие не станет истинно, если условие ложно, цикл продолжается.

Цикл с параметром имеет следующий формат:

for (инициализация; выражение; модификации) оператор;

Инициализация используется для объявления и присвоения начальных значений величинам, используемым в цикле. В этой части можно записать несколько опе­раторов, разделенных запятой (операцией «последовательное выполнение»), на­пример, так:

for (int i = 0, j = 2; ...

for (k = 1, m = 0; ...

Областью действия переменных, объявленных в части инициализации цикла, яв­ляется цикл 1 . Инициализация выполняется один раз в начале исполнения цикла.

Выражение определяет условие выполнения цикла: если его результат, приве­денный к типу bool , равен true, цикл выполняется. Цикл с параметром реализо­ван как цикл с предусловием.

Модификации выполняются после каждой итерации цикла и служат обычно для изменения параметров цикла. В части модификаций можно записать несколько операторов через запятую. Простой или составной оператор представляет собой тело цикла. Любая из частей оператора for может быть опущена (но точки с запя­той надо оставить на своих местах!).

Пример (оператор, вычисляющий сумму чисел от 1 до 100):

for (Int i = 1, s = 0; 1<=100; i++) s += i;

Пример (программа печатает таблицу значений функции у=х 2 +1 во введенном диапазоне):

#Include

float Xn, Xk, Dx, X;

printf (“Введите диапазон и шаг изменения аргумента: ");

scanf (“%f%f%f”, &Xn, &Xk, &Dx);

printf (“| X | Y |\n");

for (X = Xn; X<=Xk; X+=Dx)

printf (" | %5.2f | %5.2f |\n”, X*X + 1);

Пример (программа находит все делители целого положительного числа):

#Include Int main(){

Int num, half, div;

cout << “\n Введите число: "; cin >> num;

for (half = num / 2, div = 2; div <= half; div++)

if (!(num %div))cout << div <<"\n";

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

Любой цикл while может быть приведен к эквивалентному ему циклу for и на­оборот по следующей схеме:

for (b1: b2; bЗ) оператор b1;

while (b2){ оператор; bЗ;}

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

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


q проверить, изменяется ли в цикле хотя бы одна переменная, входящая в усло­вие выхода из цикла;

q предусмотреть аварийный выход из цикла по достижению некоторого коли­чества итераций;

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

Операторы цикла взаимозаменяемы, но можно привести некоторые рекоменда­ции по выбору наилучшего в каждом конкретном случае.

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

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

Оператор for предпочтительнее в большинстве остальных случаев (однознач­но - для организации циклов со счетчиками).

В большинстве программ встречается необходимость многократного выполнения некоторого оператора (или блока операторов). Для организации подобного рода конструкций могут использоваться операторы цикла. В языке программирования Паскаль используются следующие виды операторов цикла: for, while, repeat (в PascalABC.NET используется также оператор цикла foreach ).

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

Оператор for в Паскаль

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

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

В зависимости от направления изменения параметра цикла (возрастание - to или убывание - downto ) в языке Паскаль оператор цикла for может быть записан в одной из двух форм:

  • for параметр := нач_знач to кон_знач do
  • оператор;
  • for параметр := нач_знач downto кон_знач do
  • оператор;

Переменная-параметр цикла может принимать любой порядковый тип . При этом начальное и конечное значения должны иметь тип совместимый с типом переменной-параметром.

Рассмотрим работу цикла for .

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

  1. Сравнивается текущее значение параметра с конечным значением.
  2. Если условие параметр кон_знач истинно, то выполняется тело цикла, в противном случае оператор for завершает работу и управление передается оператору, следующему за циклом.

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

Задача. Вывести на экран список квадратов целых чисел от 10 до 1.

Решение. В поставленной задаче параметр цикла убывает.

{Фрагмент кода программы}

  • for i:= 10 downto 1 do
  • writeln(i:2, " ", i * i);

Внимание: если в теле цикла необходимо использовать более одного оператора, то применяется составной оператор (операторные скобки begin и end ).

Пример 2. Известны оценки абитуриента на четырех экзаменах. Определить сумму набранных им баллов.

Задача. Известны оценки абитуриента на четырех экзаменах. Определить сумму набранных им баллов.

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

{Фрагмент кода программы}

  • s:= 0;
  • for i:= 1 to 4 do
  • begin
  • readln(mark);
  • s:= s + mark;
  • writeln(s);