Как оформить цикл for в блок схеме
Перейти к содержимому

Как оформить цикл for в блок схеме

Как оформить цикл for в блок схеме

Рассмотрим пример вычисления суммы чисел от 1 до 10.

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

В данном примере, когда оператор for начинает выполняться, объявляется и инициализируется счетчик цикла i ( i=0). Затем проверяется условие продолжения цикла i < 10. Поскольку начальное значение i равно 0, условие удовлетворяется, и выполняется блок операторов внутри цикла (тело цикла). Затем выражение ++ i выполняет приращение счетчику i ( i=1), и цикл снова начинается с проверки условия продолжения. Этот процесс продолжается, пока тело цикла не будет исполнено 10 раз и управляющая переменная i не увеличится до 10, это приведет к тому, что проверка условия продолжения даст отрицательный результат, и повторение будет прервано. Выполнение программы продолжится с первого оператора, расположенного после оператора for.

1.8.2 Пошаговый цикл for

Общая форма оператора for, и соответствующая ему блок-схема показаны в таблице.

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

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

В большинстве случаев оператор for можно представить эквивалентным оператором while:

Если выражение инициализации в заголовке оператора for объявляет счетчик цикла (т.е. перед именем переменной указан ее тип), то переменная может использоваться только в теле оператора for – вне оператора for эта переменная будет неизвестна. Такое ограничение на использование имени переменной называют областью действия переменной. Область действия переменной определяет, где в программе она может использоваться.

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

Еще несколько примеров заголовков цикла:

  • изменение управляющей переменной от 1 до 100 с шагом 1:
    for ( int i = 1; i <= 100; i++)
  • изменение управляющей переменной от 100 до 1 с шагом -1 (с уменьшением на 1):
    for ( int i = 100; i > 0; i—)
  • изменение управляющей переменной от 7 до 77 с шагом 7:
    for ( int i = 7; i <= 77; i += 7)
  • изменение управляющей переменной от 20 до 2 с шагом -2:
    for ( int i = 20; i >= 2; i -= 2)
  • изменение управляющей переменной в следующей последовательности: 2, 5, 8, 11, 14:
    for ( int j = 2; j <= 20; j += 3)
  • изменение управляющей переменной в следующей последовательности: 99, 88, 77, 66, 55, 44, 33, 22, 11, 0:
    for ( int j = 99; j >= 0; j -= 11)

Выражения инициализации и приращения могут быть списками выражений, разделенных запятыми. Например, в одном операторе for может быть несколько управляющих переменных, которые нужно инициализировать и модифицировать:

for ( int x = 0, y=0; x < 10; x++, y++)

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

На самом деле, все три выражения в операторе for являются необязательными. Если опущено выражение для условия продолжения цикла, C++ предполагает, что условие всегда истинно и, таким образом, получается бесконечный цикл. Можно опустить выражение инициализации, если управляющая переменная инициализируется в программе ранее. Можно опустить и выражение приращения, если приращение переменной выполняется в теле цикла или оно вообще не требуется.

Например, цикл for ( int i = 0; i < 100; i++) можно записать следующим образом:

1.8.3 Операторы break и continue

Когда оператор break исполняется в операторе while, for, do. while или switch, происходит немедленный выход из цикла (или switch) и исполнение программы продолжается со следующего оператора. Типичным применением оператора break является досрочное прерывание цикла или пропуск оставшейся части оператора switch.

Исполнение оператора continue в операторе while, for или do. while вызывает пропуск оставшейся части тела оператора и переход к следующей итерации цикла. В операторах while и do. while сразу после исполнения оператора continue оценивается условие продолжения цикла. В операторе for сначала исполняется выражение приращения, и затем оценивается условие продолжения.

Цикл for в C#

В программировании порой необходимо выполнить набор инструкций определенное количество раз. Возможное решение — скопировать код. Но есть проблема: количество этих наборов мы можем либо не знать, либо их может быть очень много (10000, к примеру).

Решение проблемы — циклы. В программировании циклы используются для многократного выполнения блока кода. Цикл работает до тех пор, пока заданное условие истинно.

Цикл for

Для инициализации цикла используется ключевое слово for.

Синтаксис цикла

Как работает цикл for

  1. В цикле for три переменные: счетчик , условие и итератор .
  2. Объявление счетчика происходит в самом начале и лишь раз. Обычно он инициализируется сразу после объявления.
  3. Затем проверяется условие. Условие — булево выражение. То есть, возвращает true или false .
  4. Если условие определяется как true :
    • Выполняются инструкции внутри цикла.
    • После этого инициализируется итератор — обычно изменяется значение этой переменной.
    • Условие проверяется снова.
    • Процесс повторяется до тех пор, пока условие не будет определено как false .
  5. Если условие определится как false , цикл завершается.

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

Пример 1. Итерации цикла for

Вывод:

В этой программе:

  • счетчик — int = 1 ,
  • условие — i <= 5 ,
  • итератор — i++ ,

После запуска программы происходит следующее:

  • Объявляется и инициализируется переменная i . Ей присваивается значение 1.
  • После этого проверяется условие i <= 5 .
  • Если проверка условия возвращает `true`, выполняется тело цикла. Оно печатает строку «Цикл for C#: итерация 1».
  • Затем определяется значение итератора ( i++ ). Значение i увеличивается до 2.
  • Условие ( i <= 5 ) проверяется снова и значение i увеличивается на 1. Первые 5 итераций условие цикла будет оцениваться как true .
  • Когда значение i станет равняться 6, условие оценится как false . Следовательно, цикл завершится.
Пример 2. Вычисляем сумму первых n натуральных чисел

Вывод:

Сумма первых 5 натуральных чисел = 15

В этой программе объявляются две переменные — sum и n . Их значения равны 0 и 5 соответственно. Значение счетчика i в самом начале равно 1.

Внутри цикла значение переменной sum увеличивается на i — sum = sum + i . Цикл продолжается до тех пор, пока значение счетчика i меньше или равно n .

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

Изначально i = 1, sum = 0 и n = 5.

Итерация

Значение i

i <= 5

Значение sum

То есть, финальное значение sum будет равняться 15.

Несколько выражений внутри цикла for

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

Пример 3. Цикл for с несколькими выражениями

Вывод:

В этой программе мы объявили и инициализировали 2 переменных-счетчика — i и j .

В части итератора у нас также два выражения. То есть, на каждой итерации цикла i и j увеличиваются на 1.

Цикл for без объявления счетчика и итератора

Объявление счетчика, условия и итератора в цикле for не обязательно. Запустить цикл for мы можем и без них.

В таких случаях цикл for работает так же, как и while. Давайте рассмотрим.

Пример 4. Цикл for без объявления счетчика и итератора

Вывод:

В этом примере мы не объявляли счетчик и итератор.

Переменная i объявлена до цикла for и ее значение увеличивается внутри тела цикла. Эта программа практически идентична той, о которой мы говорили в первом примере.

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

Бесконечный цикл for

Если условие выполнения цикла всегда true , то он будет выполняться бесконечно. Это называется бесконечным циклом.

Пример 5. Бесконечный цикл for

В этом примере i было присвоено значение 1. Условие — i > 0 . На каждой итерации цикла значение `i` увеличивается на 1. Из-за этого условие цикла никогда не примет значение false . Именно поэтому цикл будет выполняться бесконечно.

Инициализировать бесконечный цикл можно и заменой условия пробелом. Например:

3. Цикл с параметром (for)

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

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

Рис. 1. Блок-схемы циклов.

В языке Паскаль существует несколько вариантов организации циклов. Рассмотрим один из них – так называемый цикл с параметром или цикл for. Чтобы записать его нам потребуется переменная целого типа, например:

Схема его записи выглядит следующим образом:

Здесь i – так называемая переменная-счетчик (разумеется, ее не обязательно называть именно i, это может быть любая переменная целого типа). Начальное и конечное значение это любые выражения, имеющее значение целого типа. Когда оператор цикла начинает работу переменная счетчик принимает начальное значение, затем выполняются , после этого счетчик увеличивается на единицу, и снова выполняются операторы. Процесс повторяется, пока счетчик не окажется больше конечного значения. Например, если начальное значение 2, а конечное 3, то будут выполнены 2 раза. Область между словами begin и end, где располагаются повторяющие в цикле операторы, называется телом цикла.

На рис. 2 показана блок-схема работы этого цикла.

Рис. 2. Схема работы цикла с параметром (for).

Пример 1: Напечатать слово Hello на экране 100 раз.

Один раз слово Hello можно напечатать с помощью процедуры

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

Переменной счетчику n будет присвоено начальное значение 1. Затем Hello будет напечатано 1-й раз. Счетчик увеличится на 1 и Hello напечатается 2-й раз и т.д.

Перечислим в одном месте все правила, касающиеся работы цикла с параметром:

1) Переменная-счетчик должна быть обязательно целого типа (например, integer).

2) Начальное и конечное значения задаются выражениями, значение которых также имеет целый тип.

Нельзя, например, записать цикл

Но можно, например:

3) Если конечное значение меньше начального цикл не выполнится ни разу.

4) После окончания работы переменная-счетчик «портится». Глядя на блок-схему можно предположить, что после окончания работы цикла она на единицу больше конечного значения. На практике это не так и она может иметь любое значение. Отсюда правило: если переменная используется, как счетчик шагов в цикле не следует обращаться к ней после того, как цикл завершил свою работу.

5) Если в теле цикла содержится всего один оператор, то слова begin и end, ограничивающие тело цикла можно опустить. Такая ситуация у нас была в примере 1. Там можно было написать:

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

7) Тело цикла может содержать любые операторы. Следовательно, туда можно поместить другой оператор цикла. Переменные-счетчики в этом случае у циклов должны быть разные. Если их сделать одинаковыми это нарушит предыдущее правило – внутренний цикл изменит значение переменной-счетчика внешнего.

8) Еще одно стилистическое правило: все операторы тела цикла должны быть дополнительно сдвинуты на 2-3 пробела вправо (см. запись программы в примере 1 и последующих примеров ниже по тексту).
Итак, одни и те же действия мы можем выполнять сколько угодно раз, но что полезного это дает? Печатать 100 раз Hello не очень важное приложение. Чтобы сделать что-то полезное, надо чтобы действия на каждом шаге цикла чем-то различались. Первый способ добиться этого состоит в использовании переменной счетчика, которая на каждом шаге принимает различные значения.

Пример 2: Напечатать все целые числа в диапазоне от 5 до 25.

Как видно, в данном примере на каждом шаге печатаются разные числа.
Используем эту возможность для чего-то более полезного.

Пример 3: Табуляция функций.

Под табуляцией функций подразумевается составление таблицы значений функции для некоторого диапазона значений аргумента. Пусть требуется N значений функции f(x) в диапазоне от Xmin до Xmax. Рассматривая переменную-счетчик как номер аргумента функции, составим выражение, позволяющее по номеру получить значение аргумента:

x := Xmin + (Xmax — Xmin)*(i-1)/(N-1).

Убедитесь, что действительно первое значение аргумента (при i = 1) составляет x = Xmin, а N-е (i = N) – x = Xmax. Вычисляя на каждом шаге значение аргумента, можем тут же вычислить функцию и составить требуемую таблицу.

Вместо f(x) в приведенной программе следует подставить любое выражение, составленное по правилам языка Паскаль.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *