Файл: Операторы циклов, их виды, особенности и области применения..pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 23.05.2023

Просмотров: 159

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Введение

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

В теории программирования существуют циклические алгоритмы, обеспечивающие выполнение действий, которые повторяются. Этим сокращается объем кода и облегчается написание программ.

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

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

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

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

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

В соответствии к цели работы поставлены такие основные задания:

– рассмотреть основные алгоритмические структуры;

– проанализировать использование циклических операторов разных типов;

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

– рассмотреть понятия массива в программировании, привести примеры использования циклических операторов для обработки массивов;

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

В данной курсовой работе используется язык программирования С++, поскольку он в нынешнее время является одним из наиболее распространенных и используемых.

Глава 1. Основные понятия о циклических алгоритмах

1.1. Базовые структуры алгоритмов. Циклические структуры алгоритмов

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


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

В простейшем случае алгоритм осуществляет одновременное выполнение всех по очереди заданных действий независимо от значений входных данных задачи. Например, для нахождения объема призмы нужно найти площадь ее основания, определить высоту призмы, найти их произведение. Эти действия нужно выполнить для расчета объема любой призмы.

Действие 1

Действие 2

Действие n

Рисунок 1 – Линейная структура алгоритмов

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

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

Алгоритм, который осуществляет выполнение тех или иных действий в зависимости от результата проверки условия, называется алгоритмом с разветвлением или разветвляющимся (рисунок 2):[8]

Условие

Действие 1

Действие 2

Да

Нет

Рисунок 2 –Структура разветвляющегося алгоритма

Поскольку такой алгоритм содержит описание действий для обоих возможных вариантов, при каждом его выполнении реализуется только один из них. Который именно – зависит от заданного набора входных данных.

Третий вид алгоритмов составляют в случае повторного выполнения определенной последовательности действий.

Например, для подсчета суммы двух целых чисел (в столбик) нужно сначала вычислить сумму последних цифр чисел-слагаемых, записать последнюю цифру результата и перенести, если нужно, единицу в следующий разряд. Далее по аналогичному правилу нужно вычислить сумму предпоследних цифр чисел-слагаемых и т.д. Процедура повторяется, пока все цифры чисел-слагаемых не будут исчерпаны. Количество повторений зависит от количества цифр в заданных числах.

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


Различают две основные разновидности циклов: циклы с предусловием (рисунок 3) и циклы с постусловием (рисунок 4).

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

Рисунок 3 – Циклическая структура с предусловием

Рисунок 4 – Циклическая структура с постусловием

Цикл с предусловием можно прочитать следующим образом:

пока проверка условия дает результат «да», выполнять действие.

Если при очередной проверке условия будет получено результат «нет», повторное выполнение действия будет прекращено и произойдет выход из цикла.

Например, для подсчета остатка от деления целого числа t на целое число n с помощью вычитания можно воспользоваться циклом:

пока t> n, уменьшить t на n.

В цикле с постусловием (рисунок 4) условие цикла формулируется противоположным образом: если очередная проверка условия дает результат "да", происходит выход из цикла. Цикл с постусловием можно сокращенно прочитать так:

повторять действие до получения результата «да» при проверке условия.

Например, подсчет остатка от деления целого числа t на целое число n (t> n) можно реализовать с помощью цикла:[9]

повторять уменьшить t на n до t <n.

Стоит обратить внимание на то, что является общим для обоих типов цикла:

– обе базовые структуры цикла являются замкнутыми;

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

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

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

1.2.Циклические операторы в С++

Рассмотрим реализацию циклических алгоритмов на языке С++, в котором существую три разновидности операторов цикла:

– оператор цикла for;

– оператор цикла с предусловием while;

– оператор цикла с постусловием do ... while.

Все операторы цикла непременно содержат следующие составные части:


– присваивания исходных значений (инициализация);

– условие продолжения цикла;

– тело цикла;

– изменение параметра (счетчика) цикла.

Оператор for обычно используется, когда есть заранее известное количество повторений или когда условие продолжения выполнения цикла записывается кратким выражением. Примерами использования данного оператора являются вычисления сумм заданного количества слагаемых, поиск минимального (максимального) элемента последовательности чисел, сортировки элементов массива по возрастанию (убыванию) и т.д.[7]

Синтаксис оператора следующий:

for (<инициализация>; <условие>; <модификации>)

{

<тело цикла>;

}

Конструкция этого оператора состоит из трех основных блоков, размещенных в круглых скобках и отделенных друг от друга точкой с запятой (;) и команд (тела цикла), которые могут многократно повторятся. В начале выполнения оператора цикла, однократно, в блоке инициализации задаются начальные значения переменных, которые управляют циклом. Затем проверяется условие и, если оно выполняется, то управление переходит к выполнению тела цикла. Блок модификации меняет параметры цикла и, в случае истинности условия, выполнение цикла продолжается. Если условие не выполняется (false или равно нулю), то цикл прерывается и управление передается на оператор, следующий за оператором for. Существенным является то, что проверка условия выполняется в начале цикла. Это значит, что тело цикла может не выполниться ни разу, если условие сначала ошибочное. Каждое повторение (шаг) цикла называется итерацией.

Простой пример для вычисления суммы проиллюстрирует использования оператора for:

int s = 0;

for (int i = 1; i <= 10; i ++)

s + = i;

Этот оператор цикла можно прочитать так: "выполнить команду s + = i 10 раз (для значений i от 1 до 10 включительно, где i при каждой итерации увеличивается на 1)". В этом примере есть два присваивания начальных значений: s = 0 и i = 1, условие продолжения цикла: (i <= 10) и изменение параметра: i ++. Телом цикла является команда s + = i.

Порядок выполнения этого цикла компьютером такой:

1) присваиваются начальные значения (s = 0, i = 1);

2) проверяется условие (i <= 10);

3) если условие истинное (true), выполняется команда (или команды) тела цикла: к сумме, полученной на предыдущей итерации, добавляется новое число;

4) параметр цикла увеличивается на 1.

Далее возвращаемся к пункту 2. Если условие в пункте 2 не будет выполнено (false), произойдет выход из цикла.[5]

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


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

for (int s = 0, i = 1; i <= 10; s + = i ++)

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

Рассмотрим простые примеры использования оператора цикла for. [6]

1) Вывод на экран чисел от 1 до 10 с их квадратами:

for (int i = 1; i <11; i ++)

cout << i <<" " << i * i;

Цикл выполняется при значениях i = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10. После этого i примет значение 11 и условие (11 <11) не выполнится (false) – произойдет выход из цикла.

2) Вывод положительных нечетных целых от 1 до 100 с их квадратами. Цикл записывается аналогично предыдущему, но параметр будет увеличиваться на 2, то есть цикл будет выполняться для значений i = 1, 3, 5, 7, ..., 97, 99.

for (int i = 1; i <100; i + = 2)

cout << i <<" " << i * i;

3) Вычисление факториала F = n! (напомним, что факториал вычисляется по формуле n! = 1 * 2 * 3 * ... * (n-2) * (n-1) * n, например: 4! = 1 * 2 * 3 * 4 = 24) . Приведем три аналогичных по действию формы записи оператора for:

1) int F = 1, n = 5,

for (int i = 1; i <= n; i ++)

F * = i;

2) int F, i, n = 5,

for (F = 1, i = 1; i <= n; F * = i ++)

3) int F = 1, i = 1, n = 5,

for (; i <= n;)

F * = i ++;

Для досрочного начала очередной итерации цикла можно использовать оператор перехода к следующей итерации continue, например:

for (i = 0; i <20; i ++)

{

if (array [i] == 0) continue;

array [i] = 1 / array [i];

}

Для заблаговременного выхода из цикла применяют операторы break (выход из конструкции) или return (выход из текущей функции). [19]

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

Например:

int top, bot;

char string [100], temp;

for (top = 0, bot = 98; top <bot; top++, bot– –)

{

temp = string [top];

string [top] = string [bot];

string [bot] = temp;

}

В этом примере для реализации записи строки символов в обратном порядке параметрами цикла являются две переменные top и bot, значение которых движутся навстречу друг другу. Заметим, что в блоке инициализации оператора for через запятую задаются начальные значения сразу двух переменных. Так же через запятую записаны модификации этих переменных после условного выражения.

Еще одним интересным вариантом применения оператора for является бесконечный цикл. Для организации такого цикла можно записать пустое условное выражение, а для выхода из цикла воспользоваться условным оператором if вместе с оператором break. [20]