Начинающему программисту будет просто разобраться в них, на обобщенном примере. Причем важно понимать, что во всех языках программирования существуют способы реализации циклов.
Что же такое цикл в программировании?
Цикл – в программировании называется многократное повторение одних и тех же действий или вычислений, но по одним и тес же зависимостям с различными значениями переменных.С понятием цикл мы встречаемся не только в программировании. Во многих областях нашей жизни существуют циклы.
К примеру – круговорот воды в природе, это естественный цикл в нашей жизни.
А теперь рассмотрим общие правила и понятия используемые в вычислительных циклах.
Этапы циклического процесса
В общем случае цикл должен быть реализован за 4 этапа:- 1 этап – подготовка цикла (инициализация).
Задание начального значения параметру и переменной цикла.
Параметр цикла – эта величина, которая считает число шагов цикла (число повторений цикла).
Переменная цикла – это величина, которая изменяет свое значение на каждом этапе цикла.
Инициализация – это задание начальных значений параметру и переменной цикла. - 2 этап – тело цикла.
Это многократное повторение действие в цикле или вычислений по одним и тем же математическим зависимостям с разными значениями переменных. - 3 этап – модификация (изменение) цикла.
- 4 этап – управление циклом.
Это проверка условия на продолжение или начало цикла.
- Оператор цикла с параметром
- Оператор цикла с предусловием
- Оператор цикла с постусловием
“Программирование циклических вычислительных процессов”
Цель работы: освоение методов составления алгоритмов циклических вычислительных процессов и организации циклических программ сложной структуры.
Теоретическая часть
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
Программирование ветвящихся вычислительных процессов
Цель работы
Получить навыки программирования ветвящихся вычислительных процессов. Изучить условные операторы, переменные логического типа, логические отношения и операции.
Пусть на плоскости x, y задана область D. Требуется определить «попадает» ли точка с координатами (x, y) в область D или нет. Если попадает, то необходимо вычислить функцию и переменной M, значение которой является признаком «попадания» или «непопадания», присвоить значение M=1. В противном случае вычислить и положить M=2.
Ход работы
Алгоритм решения поставленной задачи:
1. Выписать область D и выписать функции и
2. Записать уравнения, определяющие границы области
3. Подготовить 7 точек, чтобы часть точек находилась внутри D, а часть- вне ее.
4. Написать программу для выполнения поставленной задачи.
5. Для выбранных точек получить и записать результаты счета.
f 1= tg(x)/e y f 2 =
(x>0 и y>0 и X**2+Y**2<=9) или (x<0 и y>0 и y<=x+4) или (x<0 и y<0 и x>(-4) и y>(-2))
то точка принадлежит области D
1)(1;1)
2)(3;3)
3)(-1;2)
4)(-5;2)
5)(-2;-1)
6)(-5;-3)
Fortran | MathCAD | ||||||
x | y | z | m | c | z | m | c |
0.1573E+01 | T | 1.573 | |||||
0.0751E+01 | F | 0.751 | |||||
-1 | -0.1211E+01 | T | -1.211 | ||||
-5 | 0.083E+01 | F | 0.83 | ||||
-2 | -1 | 0. 394E+01 | T | 3.94 | |||
-5 | -3 | 0.0282E+01 | F | 0.282 | |||
-3 | 0. 0271E+01 | F | 0.271 |
PRINT *,"X=?,Y=?";READ *,X,Y
C=(x>0..and. y>0..and.X**2+Y**2<=9).or.(x<0..and.y>0..and.y<=x+4).or.(x<0..and.y<0..and.x>(-4).and.y>(-2))
PRINT 2,X,Y,Z,C,M
2 FORMAT ("X=",F7.3,3X,"Y=",F7.3,3X,"Z=",E11.4,3X,"C=",L2,3X,"M=",I2/)
END PROGRAM LAB2
FUNCTION F1(X,Y)
F1=tan(x)/exp(x)**y
FUNCTION F2(X,Y)
F2= (sqrt(sin(2*x+3*y)**2)**1./3.)
print*,"a,b,c=?";read "(2F7.3)",a,b,c
q=a>b.and.a a w=b>a.and.b b e=c>a.and.c c 28.,558.,345. 345.0000 Задание №3
Программирование циклических вычислительных процессов
Цель работы Получить навыки программирования циклических вычислительных процессов. Изучить циклы с шагом и циклы с условием. 1. Записать расчетные формулы для вычисления слагаемого и конечной суммы 2. Составить алгоритм вычисления с заданной точностью суммы конечного числа членов ряда в указанном диапазоне изменения параметра x с заданным шагом. Для получения шага диапазон изменения x разделить на 10. 3. Составить программу решения задачи. В программе для каждого значения x предусмотреть вычисление как приближенной, так и точной суммы соответствующего ряда y по приведенной в таблице формуле. точное значения суммы ряда, а также количество просуммированных членов. Ход работы 1. Задать x0-начало цикла и xл-конец цикла 2. Задаем шаг h по формуле 4. Составить программу решения задач рекуррентным способом 5. Построить таблицу полученных данных Формула ряда: Формула точного вычисления суммы: π/4 1. x0= π/10 xk=9 π/10 3. real:: a,b,c,eps,h,s,x,x0,xk,y,p b=(sin*(x)*(2*n)-1+sin*((2*n-1)*x))/4*n-2 if(abs(a) print 2,x,s,y,n; write(1,2)x,s,y,n end do 2 format("x=",f6.3,3x,"s=",e10.3,3x,"y=",e10.3,3x,"n=",i5) end program lab3 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. Варианты реализации модуля с независимыми фрагментами: а) и б) - последовательная реализация, в) - параллельная реализация: двойная горизонтальная линия обозначает распараллеливание программы, жирная горизонтальная черта обозначает завершение параллельных процессов. Фиксированным будем называть зависимый фрагмент, местоположение которого в модуле строго определено. Например, в модуле распознавания символа, введенного с клавиатуры, первым должен быть снизу зависимый фрагмент непосредственно ввода символа. Операторы “начало” и “конец” модуля есть фиксированные фрагменты. Абсолютно независимых фрагментов не существует хотя бы потому, что в любом модуле есть упомянутые фиксированные фрагменты начала и конца. Поэтому независимый фрагмент, в общем случае, имеет ограниченную двумя взаимно зависимыми фрагментами область возможного местоположения. То есть более строгое определение независимого фрагмента звучит следующим образом: независимым относительно двух фиксированных фрагментов будем называть такой фрагмент, который может быть размещен в любом месте последовательности фрагментов, ограниченной сверху и снизу указанными фиксированными фрагментами. x
S(x)
y
0.314
0.324
0.785
0.565
0.622
0.785
0.817
0.979
0.785
1.068
1.404
0.785
1.319
1.43
0.785
1.57
-19.257
0.785
1.821
-533.961
0.785
2.072
-8.624E+3
0.785
2.324
-9.986E+4
0.785
2.575
-8.928E+5
0.785
2.826
-6.477E+6
0.785