Цель работы:
Изучить циклические операторы 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. Процесс, в котором один оператор или группа операторов выполняются многократно при различных значениях аргумента, называется циклическим процессом
. В 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 г.", "Ввод данных")) ListPr.AddItem "Год", 0 ‘задание начальных подписей и данных ListPr.List(0, 1) = "Прибыль, тыс. р." ‘цикл по годам ‘цикл по месяцам каждого года If (i = 4) And (j = 1) Then PrM = PrM * (1 + j / 100) ИмяСписка.AddItem Выражение
,
Индекс
где Выражение
– элемент списка, который надо добавить; Индекс
– порядковый номер элемента в списке (нумерация элементов списка начинается с 0). А свойство List
(НомерСтроки, НомерСтолбца) объекта ListBox
возвращает (присваивает) элемент списка, стоящий на пересечении указанных строки и столбца. На рабочем листе «Пример 4» разместим кнопку «Открыть форму» для вызова формы «Прибыль предприятия» и запустим данную форму (рис. 10). Теперь можно добавить в рабочую книгу MS Excel еще один лист с именем «Оглавление», на котором, например, с помощью инструмента Кнопка
панели инструментов Формы
создадим четыре кнопки: «Индекс рентабельности», «Двузначные числа», «Сумма ряда», «Прибыль предприятия». В редакторе VB добавим новый модуль (Insert
→
Module
), в котором введем следующий код: Public Sub ЛистПример1() Worksheets("Пример 1").Activate Нажав на кнопку "Скачать архив", вы скачаете нужный вам файл совершенно бесплатно. Чтобы скачать архив с документом, в поле, расположенное ниже, впишите пятизначное число и нажмите кнопку "Скачать архив" Составление отчетной ведомости "Магазины" в Excel 2013. Работа с таблицами семейства Microsoft Office. Построение круговой диаграммы и гистограммы, графиков. Разработка процедур для табулирования функций. Программирование функций пользователя на VBA. курсовая работа , добавлен 03.04.2014 Пакет Microsoft Office. Электронная таблица MS Excel. Создание экранной формы и ввод данных. Формулы и функции. Пояснение пользовательских функций MS Excel. Физическая постановка задач. Задание граничных условий для допустимых значений переменных. курсовая работа , добавлен 07.06.2015 Особенности использования встроенных функций Microsoft Excel. Создание таблиц, их заполнение данными, построение графиков. Применение математических формул для выполнения запросов с помощью пакетов прикладных программ. Технические требования к компьютеру. курсовая работа , добавлен 25.04.2013 Организация файлов и доступ к ним. Файловые операции. Программирование с использованием встроенных функций ввода-вывода; линейных, разветвляющихся и циклических вычислительных процессов с использованием If-else, оператора выбора Case; массивов и матриц. курсовая работа , добавлен 24.05.2014 Процессор электронных таблиц Microsoft Excel - прикладная программа, предназначенная для автоматизации процесса обработки экономической информации, представленной в виде таблиц; применение формул и функций для производства расчетов; построение графиков. реферат , добавлен 03.02.2013 Программирование вычислительных процессов на языке FORTRAN для обеспечения взаимодействия системы "Человек-Производство-Природа". Использование массивов для составления циклов подсчета уровня экологического загрязнения, затрат на переработку отходов. курсовая работа , добавлен 30.05.2014 Создание приложения, которое будет производить построение графиков функций по заданному математическому выражению. Разработка программы "Генератор математических функций". Создание мастера функций для ввода математического выражения, тестирование. дипломная работа , добавлен 16.02.2016 1. Способы построения циклических вычислительных процессов в программах.
2. В компьютер вводится
N
вещественных чисел. Составить программу, выдающую на экран среднее арифметическое значение этого набора.
Введение
Циклические программы используются практически в любом программном обеспечении. При этом циклы могут быть явными и неявными. В частности неявный цикл присутствует в обработчиках прерываний, которые фактически работают в бесконечном цикле, чье тело инициируется прерыванием. Циклическими являются и подпрограммы - оконные функции приложений Windows. Далее рассматриваются программы с циклом, тело которого содержит функциональные модули. Циклический процесс
- это вычислительный процесс, в котором многократно выполняются вычисления по одним и тем же формулам при различных значениях аргумента. Программы
, реализующие циклический процесс называются циклическими программами. В организации цикла можно выделить следующие этапы: подготовка (инициализация) цикла (И); выполнение вычислений цикла (тело цикла) (Т); модификация параметров (М); проверка условия окончания цикла (У). Порядок выполнения этих этапов, например, Т и М, может изменяться. В зависимости от расположения проверки условия окончания цикла различают циклы с нижним и верхним окончаниями. Для цикла с нижним окончанием тело цикла выполняется как минимум один раз, так как сначала производятся вычисления, а затем проверяется условие выхода из цикла. В случае цикла с верхним окончанием тело цикла может не выполниться ни разу в случае, если сразу соблюдается условие выхода. Цикл называется детерминированным, если число повторений тела цикла заранее известно или определено. Цикл называется итерационным, если число повторений тела цикла заранее неизвестно, а зависит от значений параметров (некоторых переменных), участвующих в вычислениях. Тело цикла
- это многократно повторяющийся участок программы. Параметр цикла
- это переменная, которая принимает новые значения при каждом повторении цикла (циклы бывают простые и сложные). Общий вид цикла n раз
В общем виде цикл n раз записывается так: нц число повторений раз Служебное слово нц (начало цикла) и кц (конец цикла) пишутся строго одно под другим и соединяются вертикальной чертой. Правее этой черты записывается повторяемая последовательность команд (тело цикла). Число повторений – произвольное целое число. При выполнении алгоритма последовательность команд в теле цикла повторяется указанное число раз. Правила алгоритмического языка допускают задание любого целого числа повторений. Оно может быть нулевым и даже отрицательным. Эти случаи не считаются ошибочными, просто тело цикла не будет выполнено ни разу, а компьютер сразу перейдет к выполнению команд, записанных после кц Общий вид цикла пока
В общем виде цикл пока записывается так: нц пока условие | тело цикла (последовательность команд) При выполнении цикла компьютер повторяет следующие действия: а) проверяет записанное после служебного слова пока условие; б) если условие не соблюдается, то выполнение цикла завершается и компьютер начинает выполнять команды, записанные после кц. Если же условие соблюдается, то компьютер выполняет тело цикла, снова проверяет условие и т.д. Общий вид цикла для
нц для i от i1 до i2 | тело цикла (последовательность команд) Здесь i – имя величины целого типа, i1, i2 – произвольные целые числа или выражения с целыми значениями. Тело цикла последовательно выполняется для i = i1, i = i1 + 1, i1 + 2, …i = i2. Правила алгоритмического языка допускают задание любых целых i1, i2. в частности, i2 может быть меньше i1. этот случай не считается ошибочным – просто тело цикла не будет выполнено ни разу, а компьютер сразу перейдет к выполнению команд, записанных после кц. Цикл n раз и цикл пока
Циклы n раз и пока оформляются в алгоритмическом языке почти одинаково. Это не удивительно, ведь обе эти команды задают цикл – повторяющуюся последовательность команд. Служебные слова нц и кц указывают, что исполняется цикл, а заголовок цикла задает конкретный механизм его выполнения. Однако у этих двух циклов есть одно существенное отличие. Начиная выполнять цикл n раз, компьютер знает, сколько раз придется повторить тело цикла. При исполнении цикла пока это не так: компьютер каждый раз проверяет условие цикла и не может заранее определить, когда выполнение закончится. Узнать количество повторений цикла пока можно только после того, как цикл завершен. Отсюда ясно, в каких случаях какой цикл следует использовать. Если к моменту начала цикла количество повторений известно, удобно воспользоваться циклом n раз. Если же количество повторений заранее определить нельзя, необходим цикл пока. Например, программа автоматического управления имеет структуру, изображенную на рис. 1. Модули, входящие в цикл
(а также модули обработки прерываний), с одним входом и одним выходом каждый, как правило, имеют характерную особенность: модули содержат статические переменные, которым присваивается значение в текущем цикле, а анализ этих переменных выполняется в следующем цикле. Таким образом, упомянутые переменные характеризуют состояние модуля на конец текущего или начало следующего цикла программы. В дальнейшем будем рассматривать только такие модули циклических программ и обозначать их кратко МЦП. Рис.1. Типовая структура управляющей программы с бесконечным циклом. МЦП имеют разнообразную структуру, сложность которой необходимо оценивать по специальным критериям. В.В.Липаевым предложен удобный и объективный критерий сложности программных модулей, а именно: число и суммарная длина путей в управляющем графе модуля . При этом учитываются только условные операторы и операторы выбора. Однако этого критерия явно недостаточно для МЦП со статической памятью, ибо при анализе МЦП необходимо помнить значения всех статических переменных, установленные в предшествующем цикле. Помимо этого, никаких рекомендаций по стандартизации алгоритмов и программ, кроме давно известного структурного программирования на общеупотребительных языках программирования типа Си и Паскаль - нет. В данной статье предлагается восполнить эти пробелы применительно к МЦП. 2. Фрагменты модулей циклических программ
Двухполюсным фрагментом, или просто фрагментом, будем считать участок программы с одним входом и одним выходом (включая операторы циклов) в предположении, что рассматриваемые МЦП структурированы. Простейший фрагмент включает единственный оператор. Последовательность фрагментов также является фрагментом. МЦП в свою очередь является фрагментом и состоит из последовательности фрагментов. В предложен метод независимых фрагментов для синтеза структуры модулей, реализующих таблицы решений. При этом независимым считается такой фрагмент, который можно вставить в любом месте последовательности фрагментов модуля. Независимость местоположения такого фрагмента обусловлена тем, что анализируемые в нем данные не формируются в указанной последовательности фрагментов, а формируемые в независимом фрагменте данные не анализируются в данной последовательности фрагментов. Поэтому независимые фрагменты могут выполняться параллельно (псевдопараллельно). На рис. 2 показаны возможные варианты реализации модуля с двумя независимыми фрагментами. В вариантах “а” и “б” фрагменты переставлены местами без искажения существа программы; в варианте “в” фрагменты реализуются параллельно. Рис.2. Варианты реализации модуля с независимыми фрагментами: а) и б) - последовательная реализация, в) - параллельная реализация: двойная горизонтальная линия обозначает распараллеливание программы, жирная горизонтальная черта обозначает завершение параллельных процессов. Фиксированным будем называть зависимый фрагмент, местоположение которого в модуле строго определено. Например, в модуле распознавания символа, введенного с клавиатуры, первым должен быть снизу зависимый фрагмент непосредственно ввода символа. Операторы “начало” и “конец” модуля есть фиксированные фрагменты. Абсолютно независимых фрагментов не существует хотя бы потому, что в любом модуле есть упомянутые фиксированные фрагменты начала и конца. Поэтому независимый фрагмент, в общем случае, имеет ограниченную двумя взаимно зависимыми фрагментами область возможного местоположения. То есть более строгое определение независимого фрагмента звучит следующим образом: независимым относительно двух фиксированных фрагментов будем называть такой фрагмент, который может быть размещен в любом месте последовательности фрагментов, ограниченной сверху и снизу указанными фиксированными фрагментами. В программировании часто встречаются задачи, требующие многократного выполнения одной и той же группы операторов программы с разными значениями их операндов. Такие процессы называются циклическими
или просто циклами.
Группа циклически повторяющихся операторов образует так называемое тело цикла
, которое может быть представлено как простым, так и составным выражением. Однократное выполнение тела цикла будем называть итерацией
. Телу цикла в программе всегда предшествует заголовок цикла
, содержащий обозначение оператора цикла
и выражение, определяющее (прямо или косвенно) количество итераций. Заметим, что тело цикла является операндом оператора цикла, следовательно, заголовок и тело цикла составляют неделимую структурную единицу программы. В дальнейшем, используя термин "оператор цикла
", будем иметь в виду и заголовок, и тело цикла. Для организации циклов во всех системах программирования существуют специализированные операторы циклов
, применение которых избавляет программиста от необходимости программировать циклы "вручную". MathCAD поддерживает два вида таких операторов – цикл с предопределением
For
(называемый также циклом со счетчиком
) и цикл с предусловием
While
. Описание структуры этих операторов приведено в таблице 5. 5.4.1 Оператор For
Этот оператор следует использовать в тех случаях, когда количество итераций предопределено, то есть известно заранее. Заголовок цикла
этого оператора (правый операнд) содержит переменную, называемую параметром
(или счетчиком) цикла
, и список значений
этого параметра. Число элементов списка определяет и количество итераций – при выполнении каждой итерации параметр цикла получает очередное значение из списка, заданного в заголовке. Параметр цикла
имеет статус внутренней переменной программы и обладает всеми ее свойствами (описанными в параграфе 5.1.4). Как правило, параметр цикла используется в правой части выражений, входящих в состав тела цикла, хотя формально и не запрещено использование его в левой части выражений (то есть слева от оператора локального определения "f"). При этом следует помнить, что если параметр был изменен в теле цикла, его измененное значение будет действовать лишь до конца текущей итерации, так как перед началом следующей итерации параметр все равно получит очередное значение из списка, указанного в заголовке цикла. Формально допускается вообще не использовать параметр цикла в выражениях тела цикла – в этом случае список значений параметра не играет никакой роли - существенна лишь длина этого списка, определяющая число (возможно бессмысленных) итераций. По завершению последней итерации будет выполняться оператор программы, следующий после оператора цикла. При этом переменная, использованная в качестве параметра завершенного цикла, сохраняет значение, которое она имела в последней реально выполненной
итерации[*]. Заметим, что это значение не всегда совпадает с последним значением из списка, заданного в заголовке цикла, так как возможен "досрочный" выход из цикла при срабатывании оператора Break
, включенного в тело цикла. Список значений
параметра цикла записывается в заголовке цикла после символа "Î
", обозначающего принадлежность множеству (этот символ не требуется вводить "вручную" – он будет автоматически отображен при вводе оператора For
). MathCAD допускает использование трех форм
записи этого списка: прямое перечисление
– элементы списка явно указываются через запятую, параметр получает значения из списка в порядке их следования; в стиле ранжированной переменной –
элементы списка образуют соответствующий арифметический ряд; массив
– элементы списка последовательно получают значения элементов массива в порядке следования их индексов (сначала – столбцы слева направо, затем – строки сверху вниз). Три программы, приведенные на рисунке 21, иллюстрируют различные варианты использования оператора For
. Программа Fact(n)
вычисляет факториал числа n
. Оператор цикла в этой программе входит в состав составного выражения, которое, в свою очередь, является операндом условного оператора Otherwise
. Параметр цикла k
получает значения из целочисленного арифметического ряда. Программа Ch(V,N,p)
обрабатывает входной вектор V
, заменяя в нем на значение p
те элементы, индексы которых заданы элементами второго входного вектора N
. В этом примере список значений параметра цикла i
задан множеством элементов вектора N
. Заметим, что обе эти программы осуществляют входной контроль данных и блокируют выполнение основного алгоритма в случае, если фактические аргументы программы заданы некорректно. Программа L(M,z)
, приведенная в примере в
), сопровождается подробными комментариями и не требует пояснений. Эта программа иллюстрирует возможность использования нескольких операторов цикла, один из которых включен в число операторов тела
другого. Использование вложенных циклов
- типичный прием, используемый для обработки многомерных массивов. Рисунок 21 – Примеры программирования циклов For
Рисунок 22 иллюстрирует использование операторов Break
и Continue
в теле цикла. Как правило, эти операторы сами являются операндами условных операторов If
или Otherwise
. Оператор Break
("прервать") прерывает
выполнение цикла и передает управление оператору, следующему после прерванного оператора цикла. Заметим, что если оператором Break
прерван вложенный цикл
, выполнение внешнего цикла будет продолжено. Оператор Continue
("продолжить") действует иначе – он прерывает только текущую итерацию цикла
и передает управление заголовку этого цикла, после чего выполнение цикла продолжается
со следующей итерации (если, конечно, прерванная итерация не была последней). Оператор Break
допускается использовать и вне
тела цикла. В этом случае прерывается выполнение всей подпрограммы, и возвращается результат вычисления последнего фактически выполненного ее выражения. Рисунок 22 – Примеры использования операторов Break
и Continue
Функция SumN(V)
суммирует только те элементы вектора, которые содержат скалярные данные числового типа, а остальные элементы пропускаются. Функция Inverse(V)
формирует вектор, элементы которого – значения, обратные значениям соответствующих элементов исходного вектора. При этом, если очередной элемент содержит число "0" или не является скаляром числового типа, цикл прерывается
. Заметим, что оператор Break
в последнем примере не прерывает работы программы, а передает управление оператору Return
, следующему непосредственно после оператора For
. 5.4.3 Оператор While
В отличие от оператора For
, заголовок оператора While
(в переводе - "пока
") не содержит явных указаний на количество итераций – он содержит логическое выражение
, значение которого автоматически вычисляется перед началом
выполнения каждой очередной итерации[†]. Пока это выражение "истинно", итерации цикла будут продолжаться; как только после завершения очередной итерации выражение станет "ложным", следующая итерация цикла выполнена не будет, и управление получит оператор программы, следующий после оператора While
. Очевидно, что если в заголовок цикла поместить тождественно ложное логическое выражение, этот цикл не выполнит ни одной своей итерации, а если это выражение тождественно истинно, цикл будет бесконечным (последнюю ситуацию называют зацикливанием
программы). Для того, чтобы избежать подобных ситуаций, в число операндов логического выражения должны быть включены одна или более переменных, изменяющих свои значения в теле цикла
таким образом, чтобы цикл был конечным (для предотвращения зацикливания могут использоваться и другие средства – например, принудительный выход из цикла оператором Break
). Примеры использования оператора While
приведены на рисунке 23. Приведены три варианта решения одной и той же задачи: каждая из программ F0
, F1
и F2
возвращает индекс первого из элементов исходного вектора
V
, превосходящего заданное значение
z
. Первая программа (пример а
) прибавляет единицу к счетчику k
в теле цикла While
до тех пор, пока очередной k
-й элемент исходного вектора не превысит заданного значения z
. После этого цикл завершается, и программа возвращает последнее измененное значение переменной k
, которое и является решением задачи. Отметим, что в отличие от цикла For
, счетчик k
здесь необходимо обрабатывать отдельными операторами: инициализировать (то есть присваивать ему начальное значение) перед оператором цикла и изменять его значение в теле цикла. Нетрудно заметить, что вариант а
) программы имеет существенный недостаток: он не предотвращает зацикливания программы в случае, когда задача не имеет решения, то есть когда параметр z
превышает значение самого большого элемента вектора V
. В этом примере зацикливания в такой ситуации реально не произойдет – но это заслуга не нашей программы, а системы MathCAD, которая проконтролирует выход индекса вектора V
за пределы допустимых значений и выдаст сообщение об ошибке. Свободным от этого недостатка является вариант б
) программы, в котором тело цикла содержит дополнительную проверку допустимости очередного значения индекса и принудительно прерывает цикл оператором Break
в соответствующей ситуации с выдачей текстового сообщения. Возможно, наиболее эффективным вариантом решения этой задачи является вариант в
), который вообще не использует оператор While
. В этой программе переменная k
использована только для соблюдения "чистоты стиля" – чтобы исключить обработку параметра цикла i
вне оператора For
. Рисунок 23 – Примеры программирования циклов While
ПРОГРАММИРОВАНИЕ ЦИКЛИЧЕСКИХ ВЫЧИСЛИТЕЛЬНЫХ ПРОЦЕССОВ
Основные сведения
ListBox
используется метод AddItem
, предназначенный для добавления элементов в список
Перед скачиванием данного файла вспомните о тех хороших рефератах, контрольных, курсовых, дипломных работах, статьях и других документах, которые лежат невостребованными в вашем компьютере. Это ваш труд, он должен участвовать в развитии общества и приносить пользу людям. Найдите эти работы и отправьте в базу знаний.
Мы и все студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будем вам очень благодарны.Подобные документы