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

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

Здесь 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 изображается следующим образом:

Синтаксис:

For (инициализация ; условие ; модификация ) { Инструкции тела цикла; }

Если в теле цикла одна инструкция, то { } можно опустить. Переменная-параметр цикла (счетчик) может быть любого числового типа. Это делает цикл for C++ таким же универсальным, как и цикл типа while . В разделе модификации чаще всего используется операция постфиксного или префиксного инкремента (или декремента), но может использоваться любое выражение с присваиванием, изменяющее значение параметра цикла. Цикл работает следующим образом:

  • В начале происходит описание и инициализация переменной-счетчика
  • Далее проверка условия: если выражение имеет значение true , произойдет итерация
  • После выполнения инструкций тела цикла производится модификация величины счетчика

Примечание : в C++ является правилом делать описание переменной-счетчика в заголовке цикла. Но это не обязательно, тем более, если планируется инициализировать несколько переменных в разделе инициализации так, как это реализовано в программе 9.2. Однако, использование описания переменной-счетчика в заголовке цикла приводит к описанию локальной переменной, уничтожаемой автоматически при завершении работы цикла. Поэтому, без крайней необходимости, описание переменной-счетчика вне цикла for производить не следует.
В процессе работы цикла for не рекомендуется изменять операнды в выражениях заголовка цикла – это приведет к разного рода ошибкам! Но сами значения переменных (или констант), в том числе изменяемые значения (счетчик), использовать можно. Рассмотрим классический пример.

Программа 9.1 Дано натуральное число N. Вывести все делители этого числа.

#include << "N = "; cin >> N; for (int i = 2; i < N / 2; i++) { if (N % i == 0) cout << i << " "; } return 0; } N = 16000 2 4 5 8 10 16 20 25 32 40 50 64 80 100 125 128 160 200 250 320 400 500 640 800 1000 1600 2000 3200 4000

Использование инструкции continue в цикле for

При использовании инструкции continue в цикле for необходимо учитывать особенности работы этого цикла:

  • Инструкции, следующие после continue , будут пропущены
  • Затем происходит модификация счетчика
  • Переход к выполнению следующей итерации (иначе, проверки условия)

Покажем это на примере: int main() { for (int i = 1; i < 20; i++) { if (i % 2 == 0) continue; cout << i << " "; } 1 3 5 7 9 11 13 15 17 19

Примечание . Обратите внимание: хотя вывод чисел по условию пропущен, но инкрементация счетчика выполняется. Этот пример приведен всего-лишь для иллюстрации, программировать цикл так не следует! Эту задачу лучше решить следующим образом:

Int main() { for (int i = 1; i < 20; i += 2) cout << i << " ";

Несколько выражений в разделе инициализации и модификации

Как мы уже отметили ранее в заголовке инструкции for должно быть три раздела. Выражения, находящееся в этих разделах, можно опускать, но нельзя опускать ";" . В конце концов, можно оставить только; . Заголовок в виде:

For (;;) { ... }

является заголовком “бесконечного” цикла. (Выход из цикла должен программироваться внутри тела цикла).
C++ поддерживает несколько выражений в разделах инициализации и модификации в заголовке инструкции for . При этом условие продолжения цикла должно быть одно!
Например. Постановка задачи: Вычислить факториал числа, не превосходящий 20.
Программа 9.2

#include using namespace std; int main() { unsigned long long n; int i, k; cout << "k = "; cin >> k; // 0 <= k <= 20 for(n = 1, i = 1; i <= k; n *= i, ++i); cout << k << "! = " << n << endl; return 0; } k = 20 20! = 2432902008176640000

Примечание : обратите внимание, что поток вывода в строке 12 не относится к телу цикла! (В конце заголовка – ;). Таким образом, данный цикл в теле имеет пустую инструкцию, а все выражения вычисляются в заголовке. Программа 9.2 правильно вычисляет факториал числа от 0 до 20 .

Цикл for основанный на диапазоне (range-based for)

Для перебора элементов массива или контейнера приходится выполнять однотипные действия, при этом использовать громоздкий код. Для упрощения работы с контейнерами в C++ существует специальная форма цикла for – range-based for (цикл for основанный на диапазоне или диапазонный for).
Синтаксис :

For (объявление : имя_последовательности ) loop_statement

Использование range-based for на примере C-массива:
Программа 9.3

#include using namespace std; int main() { int x { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; for (auto &s: x) { cout << s << " "; } return 0; }

Чтобы элементы массива можно было изменять – переменная s должна быть ссылочной переменной (как в примере выше). Если переменная не является ссылкой, то данные будут копироваться. Для автоматического выведения типа в этом цикле используется спецификатор auto . range-based for имеет ограничение на работу с динамическими массивами: он не поддерживает изменение размера массива, так как содержит фиксированный указатель конца массива. При работе с массивами, имеющими фиксированный размер, диапазонный for является прекрасной и безопасной альтернативой обычному for .

Вложенные циклы for

Так же, как и другие инструкции циклов, for поддерживает структуру вложенных циклов. Применение вложенных циклов for для организации ввода и вывода двумерных массивов выглядит гораздо компактнее, чем при использовании цикла while .
Однако, при решении задач обхода таких массивов, необходимо избегать применение условной инструкции if . Зачастую, задачу можно реализовать более рационально, путем манипуляции индексами (переменными цикла i и j). То есть, поставить в зависимость изменение одного индекса, от значения величины другого. Рассмотрим два примера.
Программа 9.4 Дана квадратная матрица размера n, элементы которой равны 0. Заполнить элементы, лежащие ниже и на самой главной диагонали единицами.

#include using namespace std; int main() { int n; cout << "n = "; cin >> n; int mas[n][n]; // Заполняем нулями for(int i = 0; i < n; i++) for(int j = 0; j < n; j++) mas[i][j] = 0; // Реализация for(int i = 0; i < n; i++) for(int j = 0; j <= i; j++) mas[i][j] = 1; // Вывод for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { cout.width(2); cout << mas[i][j]; } cout << "\n"; } return 0; } n = 10 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1

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


В этом треугольнике на вершине и по бокам стоят единицы (в программе 9.5 треугольник “положен на бок” – стороны треугольника: первый столбец и главная диагональ). Каждое число равно сумме двух чисел, расположенных над ним. Строки треугольника симметричны относительно вертикальной оси и содержат биноминальные коэффициенты.

#include using namespace std; int main() { int n; cout << "n = "; cin >> n; int pas[n][n]; for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) pas[i][j] = 0; pas = 1; for (int i = 1; i < n; i++) { pas[i] = 1; for (int j = 1; j <= i; j++) { pas[i][j] = pas + pas[j]; } } for (int i = 0; i < n; i++) { for (int j = 0; j <= i; j++) { cout.width(4); cout << pas[i][j]; } cout << "\n"; } return 0; } n = 12 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 1 8 28 56 70 56 28 8 1 1 9 36 84 126 126 84 36 9 1 1 10 45 120 210 252 210 120 45 10 1 1 11 55 165 330 462 462 330 165 55 11 1

Вопросы
  1. Может ли быть заменена в программе инструкция цикла for на инструкцию цикла while? Всегда ли это можно сделать?
  2. Когда удобнее применять для организации циклов инструкцию for? while?
  3. Возможны ли в заголовке инструкции for следующие выражения: a) for (;a > b && !(a % 2);) b) for (a > b;;) c) for (;;i = 0) d) for (;i = 0;) e) for (;;i++, --b) f) for (--i;;) g) for (b = 0; b != a;) ?
  4. Переменная i – параметр внешнего цикла, а j – вложенного. Доступна ли будет переменная j во внешнем цикле? i во вложенном цикле?
Учебник
Домашняя работа
  1. Зад. 29. Напишите программу, в которой вводятся натуральные числа a и b , а на дисплей выводятся все простые числа в диапазоне от a до b (идея алгоритма Программа 8.5)
  2. Зад. 30. Совершенным называется число, равное сумме всех своих делителей, меньших его самого (например, число 6 = 1 + 2 + 3). Напишите программу, которая вводит натуральное число N и определяет, является ли число N совершенным.
  3. Напишите программу, которая выводит на экран квадратную числовую таблицу размера n x n , имеющую следующий вид при n = 10: 1 * * * * * * * * * * 2 * * * * * * * * * * 3 * * * * * * * * * * 4 * * * * * * * * * * 5 * * * * * * * * * * 6 * * * * * * * * * * 7 * * * * * * * * * * 8 * * * * * * * * * * 9 * * * * * * * * * * 10
Литература
  1. Лафоре Р. Объектно-ориентированное программирование в C++ (4-е изд.). Питер: 2004
  2. Прата, Стивен. Язык программирования C++. Лекции и упражнения, 6-е изд.: Пер. с англ. - М.: ООО «И.Д. Вильяме», 2012
  3. Липпман Б. Стенли, Жози Лажойе, Барбара Э. Му. Язык программирования С++. Базовый курс. Изд. 5-е. М: ООО “И. Д. Вильямс”, 2014
  4. Эллайн А. C++. От ламера до программера. СПб.: Питер, 2015
  5. Шилдт Г. С++: Базовый курс, 3-изд. М.: Вильямс, 2010



Особенное место в Turbo Pascal занимают циклы. Их начинают изучать сразу же после отработки навыков ввода-вывода информации на экран. Ведь большинство задач сводится к тому, что циклы с параметром и другие конструкции помогают облегчить написание и функционирование определенного блока программы.

Разновидности циклов

Всего различают три разновидности:

  • с параметром,
  • с предусловием,
  • с постусловием.

Циклы с параметром, иначе их называют For … to … do или For … downto …. do, многократно повторяют определенную последовательность действий. В принципе, и другие разновидности используются с этой же целью, только в for-цикле заранее известно количество шагов.

В двух других конструкциях (While и Repeat) количество итераций изначально неизвестно. Поэтому при изучении задания уже необходимо понимать, какой цикл будет использован.

Основные определения по теме

Циклы с параметрами - многократно повторяющиеся итерации. Счетчик - основной показатель, с помощью которого выполняется заданная конструкция. Границы промежутка показывают, в каких пределах будут выполняться те или иные итерации. Кстати, совершенно не обязательно, чтобы начальное значение было равно 1. Пользователь самостоятельно задает обе границы промежутка. Тело цикла - набор команд, для которых уже определено количество повторений.

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

For … to … do: алгоритм работы, синтаксис

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

Выделяют 2 вида конструкции: на увеличение счетчика и на его уменьшение. Первая конструкция будет прописана следующим образом:

for исх.переменная := граница 1 to граница 2 do

тело цикла ;

Здесь: исх. переменная объявляется пользователем в начале программы или блока; граница 1 и граница 2 - начальное и конечное значение промежутка; в теле цикла прописывается ряд действий, которые должны выполняться программой. Необходимо помнить, что если тело цикла содержит всего 1 команду, тогда операторные скобки begin…end можно опустить. В таком варианте конструкции счетчик, а именно <исх.переменная>, будет увеличиваться с шагом, равным 1.

for исх.переменная := граница 1 downto граница 2 do

тело цикла ;

Здесь же исх. переменная будет уменьшаться с шагом, равным 1.

Схема работы цикла с параметром For … to … do будет выглядеть следующим образом:

  • Задается значение верхней границы промежутка, т. е. граница 2 .
  • Исх.переменной присваивается значение параметра граница 1 .
  • Проходит проверка условия: исх.переменная ≤ граница 2 .
  • При получении результата True (Истина ) выполняется тело цикла.
  • Счетчик увеличивается на шаг, равный 1.
  • Выполнение пунктов 3-5 происходит ровно до того момента, пока условие истинно: исх.переменная > граница 2 . Как только это произошло, происходит выход из цикла и управление передается команде, следующей за данной конструкцией.

В For … downto … do алгоритм работы схож с вышеуказанным, за исключением некоторых пунктов:

  • В 3-м пункте проверяется условие: исх.переменная ≥ граница 2 .
  • В 5-й строчке алгоритма счетчик уменьшается на 1.
  • В 6-м пункте команды 3-5 будут выполняться до тех пор, пока не будет удовлетворено условие: исх.переменная < граница 2.

Все остальное аналогично в обоих алгоритмах работы.

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

Циклы с параметром имеют следующий вид блок-схемы (хотя выше она уже была представлена). Здесь же показана упрощенная организация конструкции.

Основные требования к циклу с параметром

Циклы с параметрами требуют определенного рода условий.

  • Счетчик и границы промежутка (т. е. исх.переменная, граница 1 и граница 2) должны принадлежать одному типу данных. Если имеется лишь совместимость между начальным и конечным значениями отрезка и исходной переменной, то программа может повести себя неправильно, поскольку границы будут преобразованы по типу данных исходного параметра.
  • Тип данных, которому должны принадлежать значения параметров, должен быть целочисленным. Крайне не рекомендуется использовать вещественный тип.
  • Изменять значение параметра исх.переменная в теле цикла принудительно нежелательно. Иначе пользователь с трудом сможет отследить возможные появившиеся ошибки.
  • В отличие от других видов циклов, в For … to … do илиFor … downto … do шаг не может менятьсяна параметр, отличный от 1.

Turbo Pascal: как выйти из цикла

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

Циклы с параметром в паскале (программирование которых предполагает «извечную» истинность условия) можно остановить с помощью Continue. Здесь работа налажена следующим образом: текущая итерация досрочно заканчивает свое выполнение, управление передается следующей команде, но без выхода из цикла.

Процедура Exit необходима для того, чтобы завершить работу того или иного блока в программном коде. Ее вызывают внутри процедуры (функции) и в тот же момент, исполнение этого «куска» немедленно прекращается. Если же Exit находится в основном блоке программы, тогда она завершает свою работу.

Процедура Halt сводит принцип функционирования к следующему: полностью оканчивается работа программы.

Примеры заданий с решением

Пользователю будет полезно после изучения темы «Циклы с параметром в паскале» примеры сначала изучить, а затем тренироваться писать код самостоятельно. Простые задачи помогают будущему программисту узнавать теорию в практике, а затем успешно ее применять. По теме «Циклы с параметром» примеры задач с решением можно найти легкие и сложные. Здесь представлены 3 задачи, в которых разбираются алгоритмы работы и даются пояснения и комментарии к каждому решению.

Задача 1

Дан двумерный массив натуральных чисел в диапазоне , выбранных случайно. Найти количество всех двузначных чисел, сумма цифр которых кратна 2.

Алгоритм действий:

  1. Создать двумерный массив.
  2. Проверить каждое число на соответствие условиям:

a) если 9 < Х < 100, то разделить его нацело на 10 посредством div;

b) выделить вторую цифру числа посредством деления через mod;

c) сложить выделенные цифры;

d) поделить посредством mod заданную сумму на 2;

e) если результат будет равен 0, то счетчик увеличивается на 1.

Задача 2

Дан одномерный массив целочисленных элементов. Найти количество положительных чисел.

Алгоритм действий:

  1. Создать массив целочисленных элементов, созданных посредством randomize.
  2. В цикл с параметром вложить IF, который будет проверять заданный элемент на соответствие условию: Х>0.
  3. Если условие выполняется, то счетчик увеличивается на 1.
  4. После цикла следует вывести на экран получившееся значение счетчика.

Данные, указанные в скобках {}, являются комментариями. В строке 11 можно вывести массив на экран двумя способами: оставить пробел между числами либо отвести под каждый элемент определенное количество ячеек (в данном случае их 5).

В строке 12 переменную counter можно увеличить также двумя способами: либо к предыдущему значению прибавить 1, либо воспользоваться стандартной функцией Inc.

Задача 3

Дана квадратная матрица. Найти количество положительных элементов, находящихся на главной диагонали.

Пояснения:

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

Алгоритм действий:

  1. Создать квадратную матрицу.
  2. Присвоить переменной, ответственной за подсчет положительных элементов, значение «0».
  3. Составить цикл по созданию квадратной матрицы.
  4. Организовать цикл по проверке условия: если число на главной диагонали >0, тогда счетчик увеличивается на 1.
  5. После окончания действия цикла на экран вывести значение переменной, хранящей количество положительных элементов.

Противостояние двух языков программирования: С и Turbo Pascal

Как правило, уважающий себя программист знает несколько языков. К примеру, это могут быть С++, Turbo Pascal, Delphi, Java и т. д. Противостояние двух из них было ярко выражено еще в 80-е гг. (С и турбо паскаль). В конце ХХ века такая же борьба наблюдалась между Си++ и Java.

В виртуальном пространстве среди трех десятков языков программирования можно выделить три самые яркие пары, противостояние которых поражало величайшие умы киберпространства: алгол-60 и фортран, Pascal и C, Java и С++. Конечно, эти ощущения субъективные, но в тот или иной период один из пары был лидером. Это объяснялось требованиями промышленности и необходимости в том или ином программном продукте. В 70-х гг. «управлял миром» фортран, в 80-х - Turbo Pascal, в 90-х - С++. Конечно, ни один из них не «умер». Скорее, они преобразовались в усовершенствованные программные продукты.

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

Интересно, что разработчики Turbo Pascal (Старый Свет) пользовались результатами наработок американских ученых, в то время как в Новом Свете активно применяли итоги исследований европейских специалистов. В Европе разработчики ратуют в большей степени за чистоту и компактность языков программирования, а американские умы склоняются больше к использованию новомодных веяний в написании кода.

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

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 предпочтительнее в большинстве остальных случаев (однознач­но - для организации циклов со счетчиками).

В общих чертах, сегодня узнаем о каждом из циклов в паскале поподробней и увидим как они задаются. Будем разбирать цикл 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. Цикл с постусловием выполняется до тех пор, пока условие не станет истинно, если условие ложно, цикл продолжается.