Программирование циклических вычислительных процессов. Методичка табулирование и программирование функций

ПРОГРАММИРОВАНИЕ ЦИКЛИЧЕСКИХ ВЫЧИСЛИТЕЛЬНЫХ ПРОЦЕССОВ

Основные сведения

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

оператор цикла с параметром For – Next , конструкция которого используется, если заранее известно, сколько раз должно повториться тело цикла:

For счетчик = начальное_значение То конечное_значение Step шаг блок_операторов

Next с четчик

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

Конструкция цикла

Конструкция цикла

с предусловием имеет вид:

с постусловием имеет вид:

Do While условие

блок_операторов

блок_операторов

Loop While условие

Do Until условие

блок_операторов

блок_операторов

Loop Until условие

While условие

блок_операторов

Разработаем пользовательскую форму и составим программу для определения индекса рентабельности предлагаемого инвестиционного проекта обновления оборудования, если сумма первоначальных вложений (ПВ) составляет 10 000 тыс. р., ставкадисконтированияr = 10 %, апредполагаемые денежныепотокиследующие:

Денежный поток (ДПk B ),B тыс. р.

Пусть пользовательская форма будет иметь вид (рис. 1), а значения величин денежных потоков в 1-м – 5- х годах считываются из ячеек рабочего листа «Пример 1» (рис. 2).

Свойства объектов формы представлены в таблице 1.

Рис. 1. Форма «Индекс рентабельности

рентабельности

инвестиционного проекта»

рассчитывается по формуле

∑n

ДПk

ИР =

k = 1 (1+ r )

где n – количество лет, в течение которых будут приходить денежные поступления.

Рис. 2. Таблица распределения денежных потоков

Таблица 1

Свойство

Свойство

Caption = Индекс рента-

Caption = Размер первоначаль-

бельности инвестиционно-

ных вложений

го проекта

Caption = Ставка дисконтирова-

Caption = Индекс рентабельности

Caption = Очистить

Caption = Выход

Для обработки события нажатия кнопки «Рассчитать» введем следующий

Private Sub calc_Click()

‘задание типа переменных

Dim pv, dp, i, n As Integer

Dim r, s As Single

‘считывание значений переменных

pv = Val(txtPV.Text)

r = Val(txtSD.Text) / 100

n = Val(InputBox("Введите количество лет, в течение которых будут

приходить

денежные

поступления ", "Ввод данных"))

‘считывание значений денежных потоков

dp = Cells(2, i + 2)

‘суммирование

txtIR.Text = Round(s / pv, 2) ‘округление и вывод результата

Функция Round (N, k) округляет число N до k знаков после запятой.

Далее с помощью элемента Кнопка панели инструментов Элементы управления разместим ниже таблицы кнопку «Открыть форму» для запуска процедуры «ФормаИндексРентабельности» (рис. 3). Код данной процедуры имеет вид:

Private Sub ФормаИндексРентабельности_Click ()

Рис. 3. Определение индекса рентабельности инвестиционного проекта

С помощью созданной кнопки «Открыть форму» запустим форму и рассчитаем индекс рентабельности инвестиционного проекта (рис. 3).

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

Для создания данной пользовательской формы перейдем в редактор VB (останемся в той же рабочей книге MS Excel, что и в примере 1) и добавим еще одну форму (рис. 4).

Свойства объектов формы представлены в таблице 2.

Для обработки событий нажатия кнопок

следующий код:

Private Sub calc_Click()

Рис. 4. Форма для примера 2

Label2.Caption = ""

‘определение первой цифры двузначного числа

‘определение второй цифры двузначного числа

If (i1^2+i2^2) Mod 13=0 Then Label2.Caption = Label2.Caption+Str(i)+" "

Private Sub clean_Click()

Label2.Caption = ""

Private Sub exitForm_Click()

Таблица 2

Свойство

Caption = Пример 2

Caption = Двузначные числа, сумма

квадратов цифр которых делится на 13

TextAlign = 2-fmTextAlignCenter

Caption = “ ”

AutoSize = False

Свойство

Caption = Очистить

Caption = Выход

На рабочем листе «Пример 2» разместим

кнопку «Открыть форму» для вызова формы

«Пример 2» и запустим данную форму (рис.

Разработаем

пользовательский

интерфейс

и составим

программу для вы-

суммы ряда:

числения с точностью ε = 10P

k + 2

S = ∑

(− 1)

k = 1

Останемся в той же рабочей книге Excel,

что и в примерах 1 и 2. С помощью инстру-

Рис. 5. Двузначные числа, сумма квад-

ментов «Надпись», « Поле» и «Кнопка» па-

ратов цифр которых делится на 13

нели инструментов

Элементы

управления

разместим на рабочем листе «Пример 3» соответствующие объекты (рис. 6).

Свойства объектов листа «Пример 3» представлены в таблице 3.

Таблица 3

Свойство

Свойство

Caption = Сумма ряда

Caption = Очистить

Для обработки событий нажатия кнопок «Рассчитать» и «Очистить» введем в модуле «Лист3(Пример 3)» следующий программный код:

eps = Val(InputBox("Задайте точность", "Ввод данных"))

a = (-1) ^ (k + 2) / (f * 2 ^ k) s = s + a

Loop txtS.Text = s

Private Sub clean_Click() txtS.Text = ""

Здесь тело цикла Do While – Loop будет

выполняться,

слагаемое

абсолютной

k + 2

n− 1

k + 2

n+ 2

величине (т.

(− 1)

−∑

(− 1)

(− 1)

) будет

Рис. 6. Вычисление суммы

k = 1

k = 1

превышать заданную точность 10 P

Проверим работу программы (рис. 7).

Разработаем

пользовательскую

составим программу для решения следующей задачи.

При анализе хозяйственной деятельности пред-

установлена

следующая

закономерность: в январе 2004 г. прибыль данного

предприятия составила 573 тыс. р. и в течение

следующих 5 лет ежемесячно увеличивалась на i %,

где i – номер месяца (т. е. в феврале – на 2 %, в марте

– на 3 % и т. д.), по сравнению с суммой прибыли в

Рис. 7. Результат вычисления

предыдущем месяце.

Определить полученные пред-

суммы ряда

приятием суммы прибыли за 2004 г., 2005 г., …, 2008 г., а также общую сумму прибыли за эти 5 лет.

Для создания данной пользовательской формы перейдем в редактор VB (останемся в той же рабочей книге MS Excel, что и в примерах 1–3) и добавим еще одну форму (рис. 8). Вывод вычисленных значений прибыли предприятия будет осуществляться как в поле объекта список (ListBox ), размещенного на форме, так и в ячейки рабочего листа «Пример 4» (рис. 9).

Рис. 8. Форма «Прибыль предприятия» Рис. 9. Таблица к примеру 4

Свойства объектов формы представлены в таблице 4.

Таблица 4

Свойство

Свойство

Caption = Прибыль предприятия

Caption = Очистить

Caption = Выход

Примечание. Свойство ColumnCount задает количество колонок объекта ListBox.

Для обработки событий нажатия кнопок «Рассчитать», «Очистить» и «Вы-

ход» введем следующий код:

Private Sub calc_Click() Dim i, j As Integer

Dim PrM, prG, sPr As Single

PrM = Val(InputBox("Введите прибыль, полученную в январе 2004 г.", "Ввод данных"))

ListBox используется метод AddItem , предназначенный для добавления элементов в список

ИмяСписка.AddItem Выражение , Индекс

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

А свойство List (НомерСтроки, НомерСтолбца) объекта ListBox возвращает (присваивает) элемент списка, стоящий на пересечении указанных строки и столбца.

На рабочем листе «Пример 4» разместим кнопку «Открыть форму» для вызова формы «Прибыль предприятия» и запустим данную форму (рис. 10).

Теперь можно добавить в рабочую книгу MS Excel еще один лист с именем «Оглавление», на котором, например, с помощью инструмента Кнопка панели инструментов Формы создадим четыре кнопки: «Индекс рентабельности», «Двузначные числа», «Сумма ряда», «Прибыль предприятия».

В редакторе VB добавим новый модуль (Insert → Module ), в котором введем следующий код:

Public Sub ЛистПример1()

Worksheets("Пример 1").Activate

ListPr.AddItem "Год", 0

‘задание начальных подписей и данных

ListPr.List(0, 1) = "Прибыль, тыс. р."

‘цикл по годам

‘цикл по месяцам каждого года

If (i = 4) And (j = 1) Then

PrM = PrM * (1 + j / 100)

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

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

Что же такое цикл в программировании?

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

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

К примеру – круговорот воды в природе, это естественный цикл в нашей жизни.

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

Этапы циклического процесса

В общем случае цикл должен быть реализован за 4 этапа:
  • 1 этап – подготовка цикла (инициализация).
    Задание начального значения параметру и переменной цикла.
    Параметр цикла – эта величина, которая считает число шагов цикла (число повторений цикла).
    Переменная цикла – это величина, которая изменяет свое значение на каждом этапе цикла.
    Инициализация – это задание начальных значений параметру и переменной цикла.
  • 2 этап – тело цикла.
    Это многократное повторение действие в цикле или вычислений по одним и тем же математическим зависимостям с разными значениями переменных.
  • 3 этап – модификация (изменение) цикла.
  • 4 этап – управление циклом.
    Это проверка условия на продолжение или начало цикла.
В pascal существует 3 оператора цикла, которые могут реализовать любую алгоритмически – циклическую структуру :
  1. Оператор цикла с параметром
  2. Оператор цикла с предусловием
  3. Оператор цикла с постусловием
Подробно их мы рассмотрим в следующих статья.

“Программирование циклических вычислительных процессов”

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

Теоретическая часть

4.1.1. Циклические алгоритмы.

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

Циклический алгоритм – это алгоритм, содержащий один или несколько циклов.

Имеется 3 вида циклов:

Цикл с предусловием;

Цикл с постусловием;

Цикл со счетчиком (счетный цикл).

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

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

Блок-схемы циклических алгоритмов выглядят следующим образом:

1. Цикл со счетчиком.

2. Цикл с предусловием. 3. Цикл с постусловием.

4.1.2 Операторы цикла в языке программирования C++.

В C++ для каждого вида цикла имеется соответствующий оператор:

Цикл типа while (с предусловием);

Цикл типа do…while (с постусловием);

Цикл типа for (счетный).

1.Оператор цикла типа while

Форма записи:

while (условие) оператор;

где: (условие) – логическое выражение;

оператор – выполняемый в цикле оператор или тело цикла.

Если тело цикла представляет собой составной оператор, то его нужно заключить в операторные скобки{...}:

while (условие)

группа операторов

Схема работы такого цикла: пока условие является истинным (true), выполняется тело цикла и снова проверяется условие и т.д. Когда условие станет ложным (false) цикл завершает работу.

2. Оператор цикла типа do…while

Форма записи:

оператор;

while (условие);

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

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



группа операторов

while (условие);

3. Оператор цикла типа for

Форма записи:

оператор;

A – начальное выражение, которое задает начальные значения параметру цикла и при необходимости начальные значения другим параметрам. Например:

i=0, x=0.5, p=1, s=0

B – условное выражение, которое проверяет условие продолжения работы цикла. Например:

C – выражение приращения, которое задает приращение параметру цикла и при необходимости другим параметров, тогда они записываются списком. Например: x+=0.1, i++

4.1.3 Пример составления алгоритма и программы на языке C++ для циклического вычислительного процесса.

Вычислить значение выражения:

b – исходная величина, ее значение вводятся с клавиатуры и не изменяется;

a – изменяется в диапазоне с шагом 1;

y – результат, его значения выводятся на экран.

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

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

#include

#include

#include

printf(“Введите b: “);

scanf(“%f”,&b);

printf(“ a y\n”);

for (a=0;a<=10;a++)

printf(“%3d”,a);

printf(“%8.2f\n”,y);

y=(a-b)/sqrt(a);

printf(“%8.2f\n”,y);

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

Текст программы на языке C++, соответствующей данному алгоритму, выглядит следующим образом:

#include

#include

#include

printf(“Введите b: “);

scanf(“%f”,&b);

printf(“ a y\n”);

printf(“%3d”,a);

printf(“%8.2f\n”,y);

y=(a-b)/sqrt(a);

printf(“%8.2f\n”,y);

else printf(“ y не существует\n”);

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

Текст программы на языке C++, соответствующей данному алгоритму, выглядит следующим образом:

#include

#include

#include

printf(“Введите b: “);

scanf(“%f”,&b);

printf(“ a y\n”);

printf(“%3d”,a);

printf(“%8.2f\n”,y);

y=(a-b)/sqrt(a);

printf(“%8.2f\n”,y);

else printf(“ y не существует\n”);

while(a<=10);

Практическая часть

4.2.1 Требования к выполнению работы:

Выполнить задание из лабораторной работы № 3 для диапазона значений одной из переменных. Изменяемая переменная, диапазон ее изменения и шаг указаны в таблице 4. Составить блок-схемы алгоритмов и программы для двух типов циклов, указанных в индивидуальном задании (таблица 4).

Оформить вывод результатов таким образом, чтобы четко выделялись значения изменяемого параметра и при каждом его конкретном значении выводились значения результата (трех переменных из столбца 2 таблицы 3) в виде таблицы.

Порядок выполнения работы.

1. Выполнить анализ задания, сформулировать постановку задачи.

2. Составить блок-схемы алгоритмов.

3. Составить программу на языке C++. Предусмотреть ввод исходных данных с клавиатуры и вывод результатов на экран.

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

5. Выполнить анализ полученных результатов.

Варианты индивидуальных заданий.

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

Таблица 4. Варианты индивидуальных заданий

№ п/п Изменяемая переменная Типы циклов
10 ≤ a ≤ 10, Δ a=1
-4 ≤ d ≤ 4 , Δ d = 0.5
-6 ≤ x ≤ 3 , Δ x = 0.5
0 ≤ b ≤ 3 0, Δ b = 1.5 1. С предусловием, 2. Счетный
-15 ≤ j ≤ 1 0, Δ j = 0.5 1. С предусловием, 2. С постусловием
5 ≤ e ≤ 35, Δ e = 2 1. Счетный, 2. С постусловием
-5 ≤ m ≤ 15, Δ m = 1 1. С предусловием, 2. Счетный
1 ≤ c ≤ 70, Δ c = 3 1. С предусловием, 2. С постусловием
1.5 ≤ c ≤ 15, Δ c = 0.5 1. Счетный, 2. С постусловием
-8 ≤ b ≤ 28, Δ b = 2 1. С предусловием, 2. Счетный
-4.5 ≤ x ≤ 11.5, Δ x = 0.5 1. С предусловием, 2. С постусловием
-7 ≤ k ≤ 2, Δ k = 0.3 1. Счетный, 2. С постусловием
-1 ≤ m ≤ 21, Δ m = 1 1. С предусловием, 2. Счетный
-2 ≤ e ≤ 34, Δ e = 2 1. С предусловием, 2. С постусловием
-11 ≤ c ≤ 23, Δ c = 2 1. Счетный, 2. С постусловием
-13 ≤ p ≤ 50, Δ p = 3 1. С предусловием, 2. Счетный
3.3 ≤ b ≤ 9.3, Δ b = 0.3 1. С предусловием, 2. С постусловием
3.5 ≤ y ≤ 12.3, Δ y = 0.4 1. Счетный, 2. С постусловием
-7.5 ≤ a ≤ 5.7, Δ a = 0.6 1. С предусловием, 2. Счетный
-1.5 ≤ h ≤ 1.2, Δ h = 0.1 1. С предусловием, 2. С постусловием
0 ≤ h ≤ 10, Δ h=0.5 1. Счетный, 2. С постусловием
-15 ≤ b ≤ 15 , Δ b =2 1. С предусловием, 2. Счетный
-7 ≤ l ≤ 3 , Δ l = 0.5 1. С предусловием, 2. С постусловием
-5.5 ≤ b ≤ 6.5 , Δ b = 0.5 1. Счетный, 2. С постусловием
1 ≤ k ≤ 9 , Δ k = 0.4 1. С предусловием, 2. Счетный
0 ≤ b ≤ 6.9, Δ b = 0.3 1. С предусловием, 2. С постусловием
-3 ≤ v ≤ 9, Δ v = 0.6 1. Счетный, 2. С постусловием
-2 ≤ p ≤ 2.6, Δ p = 0.2 1. С предусловием, 2. Счетный

4.3 Контрольные вопросы и практические задания:

1. Как работает оператор while?

2. Как работает оператор do ... while?

3. Как работает оператор for?

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

5. В чем заключается отличие операторов while и do ... while?

6. Заменить в программе один оператор цикла другим.

Лабораторная работа № 2

«Программирование циклических вычислительных процессов»

Цель работы

Изучение операторов цикла в языке С++.

Теоретическая часть

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

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

Исполнение любого цикла включает первоначальную инициализацию переменных цикла, проверку условия выхода, исполнение тела цикла и обновление переменной цикла на каждой итерации. Кроме того, большинство языков программирования предоставляют средства для досрочного управления циклом, например, операторы завершения цикла, то есть выхода из цикла независимо от истинности условия выхода (в языке Си - break) и операторы пропуска итерации (в языке Си - continue).

Различают следующие виды циклов.


1. Безусловные циклы. Циклы, выход из которых не предусмотрен логикой программы. Специальных синтаксических средств для создания бесконечных циклов, ввиду их нетипичности, языки программирования не предусматривают, поэтому такие циклы создаются с помощью конструкций, предназначенных для создания обычных (или условных ) циклов. Например, В языке С используется цикл for(;;) с незаполненными секциями.

2. Условные циклы. Это циклы, выполнение которых управляется некоторым условием, проверяемым в начале или конце тела цикла. Соответственно, условные циклы бывают с предусловием и с постусловием. Цикл с предусловием - цикл, который выполняется пока истинно некоторое условие, указанное перед его началом. Это условие проверяется до выполнения тела цикла, поэтому тело может быть не выполнено ни разу (если условие с самого начала ложно). В большинстве процедурных языков программирования реализуется оператором while , отсюда его второе название - while-цикл. На языке С++ такой цикл имеет вид:

while(<условие>)

<тело цикла>

Цикл с постусловием - цикл, в котором условие проверяется после выполнения тела цикла. Отсюда следует, что цикл всегда выполняется хотя бы один раз. В языке Паскаль этот цикл реализует оператор repeat..until , в Си - do…while , например:

<тело цикла>

while(<условие продолжения цикла>);

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

Цикл с выходом из середины - наиболее общая форма условного цикла. Синтаксически такой цикл оформляется с помощью трёх конструкций: начала цикла, конца цикла и команды выхода из цикла. Конструкция начала определяет точку программы, в которой начинается тело цикла, конструкция конца - точку, где тело заканчивается. Внутри тела должна присутствовать команда выхода из цикла, при выполнении которой цикл заканчивается и управление передаётся оператору, следующему за конструкцией конца цикла. Естественно, чтобы цикл выполнился более одного раза, команда выхода должна вызываться не безусловно, а только при выполнении условия выхода из цикла.

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

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

В некоторых языках, например, Си и других, произошедших от него, цикл for , несмотря на синтаксическую форму цикла со счётчиком, в действительности является циклом с предусловием. То есть в Си конструкция цикла:


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

Тело цикла

фактически представляет собой другую форму записи конструкции:

while (i < 10)

Тело цикла

То есть в конструкции for сначала пишется произвольное предложение инициализации цикла, затем - условие продолжения и, наконец, выполняемая после каждого тела цикла некоторая операция (это не обязательно должно быть изменение счётчика; это может быть правка указателя или какая-нибудь совершенно посторонняя операция). Для языков такого вида вышеописанная проблема решается очень просто: переменная-счётчик ведёт себя совершенно предсказуемо и по завершении цикла сохраняет своё последнее значение.

Организация циклов в языке Си++

1. Цикл for.

Цикл с использованием оператора for удобно использовать, когда требуемое число итераций заранее известно. Синтаксис данного оператора имеет вид:

for (действие до начала цикла;

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

действия в конце каждой итерации цикла) {

инструкция цикла;

инструкция цикла 2;

инструкция цикла N;

Существует частный случай этой записи (со счетчиком):

for (счетчик = значение; счетчик < значение; шаг цикла)

тело цикла;

Сначала присваивается первоначальное значение счетчику, после чего ставится точка с запятой. Затем задается конечное значение счетчика цикла. После того, как значение счетчика достигнет указанного предела, цикл завершится. Затем задается шаг цикла - значение, на которое будет увеличиваться или уменьшаться счетчик цикла при каждом проходе.

Пример: подсчет суммы всех числе от 1 до 1000.

#include

using namespace std;

int i; // счетчик цикла

int sum = 0; // сумма чисел от 1 до 1000.

setlocale(0, "");

for (i = 1; i <= 1000; i++) // задаем начальное значение 1, конечное 1000 и задаем шаг цикла - 1.

cout << "Сумма чисел от 1 до 1000 = " << sum << endl;

2. Цикл while.

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

while (Условие) {

Тело цикла;

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

#include

using namespace std;

setlocale(0, "");

while (i < 1000)

cout << "Сумма чисел от 1 до 1000 = " << sum << endl;

3. Цикл do while

Цикл do while отличается от while тем, что при его выполнении цикла один проход цикла будет выполнен независимо от условия. Программа для решения задачи на поиск суммы чисел от 1 до 1000 с применением цикла do while :

#include

using namespace std;

setlocale(0, "");

int i = 0; // инициализируем счетчик цикла.

int sum = 0; // инициализируем счетчик суммы.

do {// выполняем цикл.

} while (i < 1000); // пока выполняется условие.

cout << "Сумма чисел от 1 до 1000 = " << sum << endl;

1. Разработать программу на языке С++ для решения задачи, соответствующей выбранному варианту.

2. Ввести, отладить и откомпилировать программу. Проверить правильность ее работы.

1. Блок-схема алгоритма программы.

2. Листинг программы с комментариями.

3. Результаты контрольных прогонов.

Контрольные вопросы

1. Дайте определение цикла, тела цикла, итерации.

2. Что такое условие выхода из цикла, счётчик итераций?

3. Какие этапы включает выполнение любого цикла?

4. Как работает цикл с постусловием?

5. Как работает цикл с предусловием?

6. Как работает цикл со счетчиком?

7. Как реализуется цикл с помощью оператора for?

8. Как реализуется цикл с помощью оператора while?

9. Как реализуется цикл с помощью оператора do while?

1. Вывести на экран следующую последовательность символов

2. Вводится последовательность целых чисел (0 – конец последовательности), найти разность между наименьшим среди положительных и наибольшим среди отрицательных чисел.

3. Вводится последовательность из N целых чисел, найти разность между произведением нечетных чисел и наибольшим среди отрицательных чисел.

4. Вводится последовательность целых чисел, 0 – конец последовательности. Определить, содержит ли последовательность хотя бы два числа, кратных 3, 5 и 7.

5. Вводится последовательность из N целых чисел. Определить наибольшее число среди кратных 11.

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

7. Вводится последовательность из N вещественных чисел. Определить наименьшее число, среди чисел больших 20.

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

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

10. Вводится последовательность чисел, 0 – конец последовательности. Определить является ли последовательность строго убывающей.

12. Вводится последовательность целых чисел, 0 – конец последовательности. Определить, содержит ли последовательность хотя бы два рядом стоящих положительных числа.

13. Вводится последовательность из N вещественных чисел. Определить, является ли последовательность знакочередующейся.

14. Вводится последовательность из N вещественных чисел. Определить разницу между минимальным положительным и максимальным отрицательным элементами последовательности.

15. Найти последние три числа кратные четырем в диапазоне от 1 до N. Вычислить сумму этих чисел.

16. Вывести на экран следующую последовательность символов

18. Вычислить произведение последних трех чисел не кратных 5 в диапазоне от N1 до N2.

19. Вычислить среднее арифметическое четных чисел, некратных четырем в диапазоне от 1 до K.

Цель работы:

Изучить циклические операторы for, while, do – while, научиться составлять и программировать циклические алгоритмы.

Краткие теоретические сведения

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

Оператор цикла for

Основная форма оператора цикла for имеет вид

for (выражение_1; выражение_2; выражение_3)

оператор;

где выражение_1 – начальное значения параметра цикла;

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

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

оператор – простой или составной оператор языка С.

Схема работы оператора следующая: только один раз вначале вычисляется выражение_1, затем проверяется выражение_2, и если оно - «истина», то выполня­ет­ся циклический участок программы, затем производится коррекция параметра, и так до тех пор, пока выражение_2 не примет значение «ложь».

Например: for (k=1; k<5; k++)

printf(“\n %d”, k);

В результате выполнения этого оператора печатаются в столбик цифры от 1 до 4.

В качестве параметра цикла можно использовать переменную любого базового типа.

Например:

for(ch=’a’; ch<=’z’; ch++) // Вывод на экран букв

printf(“ %c”,ch); // латинского алфавита

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

Например :

for(k=10; k>6;k++)

printf(“бесконечный цикл \n”);

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

По дополнительному условию;

Используя следующие операторы:

break; - выход из цикла, в котором находится break, управление передается на первый после цикла выполняемый оператор;

exit(int Kod); - выход из программы;

return; - выход из функции;

С помощью оператора безусловного перехода goto <метка>;

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

Передавать управление извне внутрь цикла запрещается.

Любое из выражений цикла for в круглых скобках может отсутствовать, но символ «;» опускать нельзя.

Например :

for(; i<3; i++)

puts(“Hello!”);

Циклические операторы while и do–while

Основная форма циклического оператора while :

While (условие)

оператор;

где оператор

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

Основная форма оператора do – while :

оператор;

while (условие);

где оператор – это простой, составной или пустой оператор.

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

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

Например:

for (i=1;i<=300;i++) // Печать целых чисел, кратных 5

if (i%5!=0) continue;

printf(“%5d”,i);

Примеры бесконечных циклов:

оператор;

2) while(число_не_0) // Всегда истинно!

оператор;

оператор;

while(число_не_0); // Всегда истинно!

Среди операторов цикла обязательно должно быть условие выхода.

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

В случае вложенных циклов один цикл находится внутри другого, например:

for(i=nn;i

for(j=mn;j

оператор;

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

Пример:

for(i=1;i<10;i++) // Печать таблицы умножения

for(j=1;j<4;j++)

printf(“\n %d*%d=%2d”, i, j, i*j);

printf(“\n”);

Пример использования оператора for

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

Текст программы может иметь вид

#include

#include

puts(“ Введите N”);

scanf(“%d”,&N);

for (s=0, k=1; k<=N; k++) // В заголовке цикла можно выпол-

{ // нять и двойное присваивание

printf(" \n k=%d s=%f ", k, s);

printf("\n ОТВЕТ: s=%f, Press any key...",s);

Варианты индивидуальных заданий

Составить программу для определения таблицы значений функции у в произвольном диапазоне [a ,b ] изменения аргумента х с произвольным шагом h . Значения a, b, h вводятся с клавиатуры. Таблица должна содержать следующие столбцы: порядковый номер, значение аргумента x , значение функции, сообщение о возрастании или убывании функции, разность двух соседних значений функции.

Определить максимальное и минимальное значения функции.

1. a=-p; b=p; h=0,4.

2. a=0,7; b=1,8; h=0,1.

3. a=-0,5; b=2,5; h=0,2.

4. a=-0,9; b=2,7; h=0,3.

5. a=-2; b=0,8; h=0,2.

6. a=-1,9; b=2,7; h=0,3.

7. a=-0,4p; b=0,4p; h=0,5.

8. a=-0,3p; b=1,3p; h= p/10.

9. a=-p/2; b= p/2; h=p/10.

10. a=-3; b=3; h=0,5.



 

Пожалуйста, поделитесь этим материалом в социальных сетях, если он оказался полезен!