Циклические алгоритмы

Содержание

Слайд 2

Задача. N!

Для заданного значения n вычислить n! (факториал n), то есть найти

Задача. N! Для заданного значения n вычислить n! (факториал n), то есть
значение, которое по определению равно
n!=1*2*3*…(n-1)*n

1!=1

2!=1*2=2

3!=1*2*3=6

4!=1*2*3*4=24

4!=3!*4

n! = (n-1)! * n

Рекуррентная формула – позволяющая вычислить очередное значение числовой последовательности по предыдущему

int Factorial = 1;
for(int i=1; i<=n;i++) Factorial=Factorial*i;

Слайд 3

Задача. N!

Задача. N!

Слайд 4

Вычисление сумм (ряды Тейлора)

sin(x) = x-x3/3!+x5/5!-x7/7! ...

От того, сколько членов степенного

Вычисление сумм (ряды Тейлора) sin(x) = x-x3/3!+x5/5!-x7/7! ... От того, сколько членов
ряда сохранено, зависит точность полученного значения.

Задача. Требуется составить алгоритм для вычисления приближенного значения синуса от произвольного значения аргумента.

Пусть Si – значение i-го слагаемого, причем S0=x. Тогда выполняется следующее соотношение:
Si+1=Si*(-x2)/(2i*(2i+1))

Слайд 5

Sum_1

double S=x;
double Sum=x;
for(int i=1;i<=5;i++)
{
S=-S*pow(x,2)/(2*i*(2*i+1));
Sum=Sum+S;
}

Почему 5 ?

Погрешность вычислений – допустимое отклонение

Sum_1 double S=x; double Sum=x; for(int i=1;i { S=-S*pow(x,2)/(2*i*(2*i+1)); Sum=Sum+S; } Почему
вычисляемого значения
| Si+1-Si | < eps

Слайд 6

Sum_2

double const eps=0.0001; //погрешность
int i=0;
double S0=x; //текущий член ряда
double S1=x; //следующий член

Sum_2 double const eps=0.0001; //погрешность int i=0; double S0=x; //текущий член ряда
ряда
Sum=x;
do
{
i++;
S0=S1;
S1=-S0*pow(x,2)/(2*i*(2*i+1));
Sum=Sum+S1;
}
while (fabs(S0-S1)>eps);

Слайд 7

Алгоритмы обработки массивов

подсчет количества элементов, обладающих заданным свойством
поиск максимального и

Алгоритмы обработки массивов подсчет количества элементов, обладающих заданным свойством поиск максимального и
минимального элементов
поиск элементов, обладающих заданным свойством
поиск подпоследовательностей
сортировка элементов

Слайд 8

Алгоритмы обработки массивов

//1. количество четных положительных
int count=0;
for (int i=0;i if (a[i]>0 &&

Алгоритмы обработки массивов //1. количество четных положительных int count=0; for (int i=0;i
a[i]%2==0) count++;

//2. сумма всех отрицательных
int sum=0;
for (int i=0;i if (a[i]<0) sum=sum+a[i]; //или sum+=a[i]

Слайд 9

Алгоритмы обработки массивов

//3. последовательный поиск
//найти индекс элемента со значением key
int key=5; //искомое

Алгоритмы обработки массивов //3. последовательный поиск //найти индекс элемента со значением key
значение
int index=-1; //если элемента key в массиве нет
for(int i=0;i{
if (a[i]==key) index=i;
break; //прервать выполнение цикла
}

Слайд 10

Алгоритмы обработки массивов

//4. найти первый отрицательный элемент в массиве
int index=-1; //если в

Алгоритмы обработки массивов //4. найти первый отрицательный элемент в массиве int index=-1;
массиве нет отрицательных int i=0;
while (iif (i

//5. поиск максимального элемента массива
int max=a[0];
for(int i=1;iif (a[i]>max) max=a[i];

Слайд 11

Алгоритмы обработки массивов

//4. найти первый отрицательный элемент в массиве
int index=-1; //если в

Алгоритмы обработки массивов //4. найти первый отрицательный элемент в массиве int index=-1;
массиве нет отрицательных int i=0;
while (iif (i

//5. поиск максимального элемента массива
int max=a[0];
for(int i=1;iif (a[i]>max) max=a[i];

Имя файла: Циклические-алгоритмы.pptx
Количество просмотров: 20
Количество скачиваний: 0