Контакты

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

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

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

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

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

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

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

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

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

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

Цель работы:

Изучить циклические операторы 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.

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. Варианты реализации модуля с независимыми фрагментами:

а) и б) - последовательная реализация,

в) - параллельная реализация: двойная горизонтальная линия обозначает распараллеливание программы, жирная горизонтальная черта обозначает завершение параллельных процессов.

Зависимым фрагментом является такой, местоположение которого зависит от местоположения другого (других) фрагмента в модуле. Будем различать сверху- и снизу зависимые фрагменты. Сверху-зависимый фрагмент должен быть расположен всегда ниже некоторого фрагмента, в котором формируются переменные, используемые в данном (зависимом) фрагменте. Снизу-зависимый фрагмент должен размещаться всегда выше фрагмента, в котором используются переменные, формируемые в данном фрагменте. Два зависимых фрагмента, один из которых является сверху зависимым от второго, а второй снизу зависимым от первого, будем называть взаимно зависимыми фрагментами. Их нельзя менять местами и нельзя реализовывать параллельно. На рис. 3 приведен пример модуля с взаимно зависимыми фрагментами. Между взаимно зависимыми фрагментами могут находиться другие, зависимые или не зависимые от них. Рис.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. Заменить в программе один оператор цикла другим.



Понравилась статья? Поделитесь ей