134.79K
Категория: ПрограммированиеПрограммирование

Циклические вычислительные процессы

1.

ЛЕКЦИЯ 5.
ЦИКЛИЧЕСКИЕ ВЫЧИСЛИТЕЛЬНЫЕ
ПРОЦЕССЫ

2.

ЦИКЛИЧЕСКИЕ ВЫЧИСЛИТЕЛЬНЫЕ
ПРОЦЕССЫ
• Циклическими называются программы,
содержащие циклы.
• Цикл — это многократно повторяемый
участок программы.
• В организации цикла можно выделить
следующие этапы:
• подготовка параметра цикла (инициализация (И);
• выполнение вычислений (тело цикла) (Т);
• Изменение значения параметра (модификация (М);
• проверка условия окончания цикла (У).

3.

Примеры циклических алгоритмов

4.

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

5.

Начало
пример
Расчет значений функции с одной
переменной.
Вычислить таблицу значений функции:
y ( x)
для всех
х
a,b
Заголовок
таблицы
ln x
a b
2
x=-0.5
2
в интервале
[-0.5, 2.5] с шагом Δх = 0.1,
0
x≤2.5
1
y=ln(x)/(a+b)
а, b - заданные вещественные числа.
x,y
x=x+0.1
Конец

6.

Операторы цикла с параметром
• Общий вид записи
x=m1, m2, шаг
Тело
цикла
for( x = m1; x<= m2; x=x+шаг)
Выход из
{
цикла
тело цикла;
}
x -
параметр, управляющий
работой цикла;
m1, m2 выражения,
определяющие соответственно
начальное и конечное значения
параметра цикла.
Шаг – это либо число, либо имя
переменной со значением,
равным заданному шагу

7.

#include<stdio.h>
#include<math.h>
int _tmain()
Схема алгоритма
a.b
{
printf(“введите значения а и b “);
scanf(“%f%f”,&a,&b);
printf(“ x
y(x)\n”);
for ( х=-0.5; x<=2.5; x=x+0.1)
{
y=log(abs(x))/(a*a-b*b);
printf(“ %8.1f %8.1f \n ”,x,y);
X= -0.5; 2.5; .1
Y=
x,y
}
}

8.

Правила использования оператора цикла с
параметром
1. Параметр цикла , а также его значения m1 и
m2 могут быть любого типа.
2. Параметр , а также значения m1 и m2 не
должны переопределяться (менять
значения) в теле цикла.
3. При завершении работы оператора
параметр можно использовать в других
целях.
4. Тело цикла может не выполниться ни разу,
если m1>m2 для цикла for... с положительным
шагом, или m1<m2 для отрицательного шага.

9.

Операторы цикла с условием
В языке Си имеется два вида операторов
цикла с условием:
• оператор цикла
while (пока){
};
• и оператор цикла
do... while();
(повторять до тех пор, пока).

10.

Оператор цикла while
Графическая интерпретация
оператора
0
Условие
(ЛВ)
1
(F)
(T)
Тело цикла
Выход
из
цикла
Общий вид записи
установка начального значения
параметра;
while (логическое выражение)
{
тело цикла;
модификация параметра;
}
……………..

11.

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

12.

Оператор цикла while
Графическая интерпретация
оператора
Установка
нач.значения
параметра
• Параметр=нач. значение
Логическое
выражение
• условие
Тело цикла
• Тело цикла
Общий вид записи
параметр=начальное
значение;
while (логическое
выражение)
{
тело цикла;
параметр=параметр+шаг;
}

13.

Начало
пример
a,b
Расчет значений функции с одной
переменной.
Вычислить таблицу значений функции:
y ( x)
Заголовок
таблицы
ln x
x=-0.5
a
b
для всех х, находящихся в интервале
2
2
0
x≤2.5
[-0.5, 2.5] с шагом Δх = 0.1,
1
а, b - заданные вещественные числа.
y=ln(x)/(a+b)
x,y
x=x+0.1
Конец

14.

Программа
Начало
#include <stdafx.h>
#include<math.h>
#include <iostream>
using namespace std;
int _tmain() {
setlocale(0,”RUS”);
float а, b, х, у;
printf”'Bвeдитe исходные данные\n”);
scanf(“%f %f”, &a, &b); // ввод исходных данных
printf(“ x
y(x)\n”); //вывод заголовка таблицы
a,b
Заголовок
таблицы
x=-0.5
0
x≤2.5
1
y=
x,y
x=x+0.1
Конец
• х=-0. 5;
• while(х <= 2.5)
{
y= log(abs(x))/(a*a +b*b);
cout<<x<<“
“<<y<<endl;
x=x + 0.1;
}}

15.

Оператор цикла do...while
Графическая интерпретация
оператора
Тело
цикла
1
0
Усло
вие
(T)
(F)
(ЛВ)
Выход
из
цикла
Общий вид записи
параметр=начальное
значение;
do
{
тело цикла;
параметр=параметр+шаг;
}
while (логическое
выражение);

16.

использование оператора цикла do…while
#include <stdio.h>
#include<math.h>
Начало
a,b
Заголовок таблицы
x=-0.5
y=
x,y
x=x+0.1
1
#include <iostream>
using namespace std;
Int _tmain()
{ setlocale(0,”RUS”);
float а, b, х, y;
printf(“Bвeдитe исходные данные “);
scanf(“%f%f”,&a,&b);
printf(“ x
y(x)\n”);
х=-0.5;
do
{
y=log(abs(x))/(a*a-b*b);
cout<<x<<“ “ <<y<<endl;
x= x+ 0.1;
X<=2.5
} while( x<= 2.5);
0
Конец
}

17.

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

18.

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

19.

ВНИМАНИЕ!
• Параметр внутреннего цикла всегда
меняется быстрее, чем внешнего.
Это означает, что для каждого значения
внешней переменной цикла перебираются
все значения внутренней переменной.

20.

Пример
• Вычислить значение функции:
z(x, у) = sin x + cos y
х изменяется на интервале [-1, 1] с шагом Δх = 0.2,
у изменяется на интервале [0, 1] с шагом Δу = 0.1.
• Данный алгоритм реализуется с использованием
вложенных циклов
х - примем за параметр внешнего цикла,
у – параметр внутреннего цикла
Внешний и внутренний циклы могут быть записаны
любым из трех операторов цикла
(while, do-while, for).

21.

Блок-схема
начало
Х=-1; 1; 0,2
x
Y=0; 1; 0.1
Z=
y, z
конец

22.

#include <stdafx.h>
#include<math.h>
#include <iostream>
using namespace std;
ПРОГРАММА
int _tmain()
{
setlocale(0,”RUS”);
float х, у, z;
// описание переменных
printf(“x
y
z(x,y)\n”); // вывод заголовка
x= -l;
// начальное значение параметра внешнего цикла
do
// запуск внешнего цикла, если х≤ 1
{
printf(“ x = %6.1f \n ”,x);
y=0;
while ( y<=1) //запуск внутреннего цикла
{
z=sin(x) + cos(y);
// вычисление функции
cout<<“y=“<< y<<“ “<<“z= “<< z<<endl;
// вывод
y=y+0.1;
}
x=x + 0.2;
// изменение параметра внешнего цикла х на шаг
} while (х<=1) ;
}

23.

Итерационный цикл
• Рассмотрим задачу, когда количество элементов
заранее неизвестно.
• Пример 2. Найти сумму таких элементов
последовательности
S=1/2 – 2/4 + 3/8 – 4/16+…
• которые по модулю меньше, чем 0.001
• Любой элемент последовательности можно представить в виде
S=z*c/d
У переменной z меняется знак (эту операцию можно записать в виде
z=-z)
• значение переменной c увеличивается при повторении на единицу
(c =с+1),
а переменная
d
умножается на 2
(d=d*2).

24.

Итерационный цикл
программа
алгоритм
начало
S=0; z=1; c=1;
d=2;
a>=0.001
a=c/d
S=S+z*a; c++;
d=d*2; z=-z;
конец
#include <stdafx.h>
void main() {
float S, z, c, d, a; S = 0; z = 1; c = 1; d = 2;
a = 1;
while ( a >= 0.001 )
{
a =abs( c / d);
S = S + z*a;
z = - z;
c ++;
Изменение
d = d * 2;
параметров
}
printf(“Сумма S = %f”, S);
}
Начальные
данные
Запустить цикл,
если а>=0.001
Добавление
элемента а к
сумме
English     Русский Правила