Программы линейной структуры. Простейшие программы циклической структуры. Разветвления, циклы и разветвления. Простейшие алгоритмы обработки массивов, страница 7

float x=1+p, x1=x*x;

int i;

  for (i=1; i<10; i++ )

  {

   c= - c*x1;

   s= s+ c / i;

}

printf( “Сумма чисел равна: %10.2f ”,s);

}

В приведенной программе вспомогательные переменные x, x1 используются   дляуменьшения   общего   объема   вычислений.

2. Вычисление  произведения  п  сомножителей. 

Требуется   вычислить

        n

 P= P xi =x1*x2*…*xn.

    i= 1

Эта задача также сводится к организации цикла по i . При  каждом прохождении цикла произведение (Р) умножается на оче­редной член. До входа в цикл нужно задать Р=1 (рис. 3).


                                       Рис. 3                                              Рис. 4

     К этому алгоритму сводится задача вычисления факториала  Р=п! (xi=i, i— натуральное). Программа 2.3 реализует этот алгоритм при n=6.

Программа 2.3

void  main()

{

 const int n=6;

 float p=1;

    for (int i=2;i<=n;i++ )

       p=p*i;

printf( “Факториал числа %i  равен: %10.2f ”, n, p);

}

Начальное значение управляющей переменной цикла i в опе­раторе for полагается равным 2, чтобы исключить лишнюю опе­рацию (умножение 1 на 1).

3. Табулирование функции. Требуется вычислить функцию y=f(x) на отрезке [а, b] с шагом h.

   Для решения задачи нужно предварительно определить число точек, для которых требуется вычислить функцию

(n=(b-a)/h+1) и организовать цикл для вычисления значений функции в каждой точке. Печать получающихся значений нужно осуществлять в цик­ле каждый раз после вычисления значения функции в очередной точке (рис. 4).

   Программа 2.4 реализует приведенный алгоритм табулирова­ния для получения таблицы функции у=х sin х при изменении х на отрезке от -pдо p с шагом p/5 .

Программа 2.4

#include <iostream.h>

#include <math.h>

#include <conio.h>

int main(int argc, char* argv[])

{

const  float Pi=3.14159;

  float x, y;

 cout<<"Таблица функции y=xsin(x)\n";

cout<<"--------------------\n";

 cout<<"     x    |   y       \n" ;

 cout<<"--------------------\n";

   for (x=-Pi; x<=Pi; x+= Pi/5)

   {

      y=x*sin(x);

      cout.width(10);                // устанавливает ширину поля вывода для значений

      cout.precision(2);             // устанавливает число десятичных знаков   вещественных значений

cout<< x<<"|"<<y<< endl;

   }

  cout<<"---------------------\n";

  getch();

  return 0;

}

4. Приближенное вычисление площади. Алгоритм приближенно­го вычисления площади геометрической фигуры (линии, ограничи­вающие фигуру, заданы аналитически) является объединением ал­горитмов суммирования и табулирования.

     Пусть требуется вычислить приближенно площадь фигуры, ограниченной графиком функции y=f(x), осью абсцисс и двумя прямыми: х=а и х=b(f(x)>=0). Разобьем отрезов [a,b] на n частей и вычислим площадь фигуры приближенно как сумму п прямоугольников с основаниями h =(b-a)/п и высотами, определяемыми значением функции y=f(x) в середине соответствующего прямоугольника.

Программа 2.5 реализует приведенный алгоритм для вычисле­ния площади одной арки синусоиды (а=0, b=p, п=10).

Программа 2.5

#include <iostream.h>

#include <math.h>

#include <conio.h>

int main(int argc, char* argv[])

{

const  float Pi=3.14159;

float s=0, h=Pi/10;

  for (float i=1; i<=10; i++)

       s= s+sin((i-1)*h+h/2)*h;

cout<<"Площадь одной арки синусоиды "<<s;

getch();

return 0;

}

Структуру цикла for… рекомендуется использовать при органи­зации циклов с известным до выполнения цикла числом его повто­рений (цикл по счетчику). Если число повторений цикла до его выполнения неизвестно, то рекомендуется использовать структуру цикла while… или  do….

Пример. Мощность радиоактивного излучения пропорцио­нальна концентрации радиоактивного вещества. Период полурас­пада одного из изотопов углерода составляет 8 дней. В начальный момент времени мощность излучения составляет 2 рентгена/час. Определить, через сколько дней мощность излучения снизится до безопасной для человека величины 0,15 рентгена/час.