Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие_С++.doc
Скачиваний:
145
Добавлен:
11.04.2015
Размер:
1.76 Mб
Скачать

Задача 2. Алгоритм накопления суммы

Дана последовательность:

sin 2x, sin 4x, sin 6x, ..., sin l6x

x - заданное вещественное число.

Вычислить сумму членов последовательности, которые по модулю больше 0.3.

Решение

Общий член последовательности имеет вид:

а = sin(2nx), где n =.

Для вычисления суммы в памяти компьютера выделяется ячейка S, к содержимому которой прибавляется член последовательности а каждый раз, когда выполняется условие > 0.3. Накопление суммы реализуется оператором присваиванияS=S+a;. В начальный момент ячейка для суммирования должна быть очищена оператором S=0;.

#include "stdafx.h"

#include<math.h>

int main()

{

float a, x, S; //описание переменных задачи

int n;

printf("Введите значение х= ");

scanf("%f",&x);

S=0; //очистка суммы

for(n=1;n<=8;n++) // запуск цикла

{

a=sin(2*n*x);

if ( abs(a)>0.3) S = S + a; /* добавление числа а в сумму, если |a|>0.3 */

}

printf("S=%6.2f",S); // вывод значения суммы на экран

return 0;

}

Задача 3. Алгоритм накопления произведения

Дана последовательность:

cos 0.1, cos 0.2, cos 0.3, ..., cos 10.

Вычислить значение: Ргде РО - произведение отри­цательных членов последовательности.

Решение

Общий член последовательности имеет вид:

y = cos x, где 0.110;Δх = 0.1.

Для реализации алгоритма накопления произведения выделяется ячейка памяти РО, в которой осуществляется последова­тельное перемножение отрицательных членов последовательно­сти с помощью оператора присваивания РО=РО*у; . В началь­ный момент в ячейку должна быть занесена единица оператором РО=1;.

#include "stdafx.h"

#include<math.h>

int main()

{

float х, у, Р, РО;

РО = 1; // установка нач. значения произведения

for (x=0.1; x<=10; x=x+0.1) //запуск цикла

{

у = cos(x);

if ( y<0) РО = РО*у;

}

Р = fabs(PO);

printf("P=%6.2f",P); //вывод на экран значения P

return 0;

}

Задача 4. Алгоритм поиска минимального члена после­довательности

Дана последовательность:

ak=ektg(2k + l); к=.

Найти минимальный член последовательности.

Решение

Для реализации алгоритма выделяется ячейка памяти min, в которую сначала заносится первый член последовательности. Затем, начиная со второго, производится сравнение очередного вычисленного члена последовательности с содержимым ячейки min. Если текущий член последовательности меньше содержимого ячейки min, то oн переписывается в эту ячейку. В противном случае содержимое ячейки min сохраняет прежнее значение. При завершении сравнения всех членов последовательности в ячейке min остается минимальное значение.

Замечание 1. Алгоритм поиска максимального члена последовательности отличается от поиска минимального члена лишь тем, что в ячейке (ей можно дать, например, имя max) запоминается больший из сравниваемых членов последовательности.

Замечание 2. В начальный момент в ячейку min можно занести не первый член последовательности, а достаточно большое число, которое превышало бы область определения сравниваемых чисел (например, min=+1E6;). Тогда при сравнении с содержимым ячейки min первый член последовательности обязательно окажется меньше и перепишется в ячейку min. При поиске максимального члена последовательности в ячейку max в начальный момент заносится, наоборот, достаточно малое число, которое должно быть меньше всех сравниваемых членов последовательности (например, mах= -1Е6;). В этом случае первый из сравниваемых членов последовательности окажется больше содержимого ячейки max и запишется в эту ячейку.

Программа поиска min:

#include "stdafx.h"

#include<math.h>

int main()

{

float a, min;

int k;

min = +1E6; // нач. значение переменной min

for( k=l; k<=10;k++)

{

a = exp(1.0*k)*tan(2*k + 1.0);

if (a<min) min = a; // условие для поиска min

}

printf("min=%6.2f", min);

return 0;

}