Similar presentations:
Циклические вычислительные процессы
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
Добавление
элемента а к
сумме