 
        
        лабы для 28 варианта / Лабораторная работа№4
.docxСанкт-Петербургский государственный университет телекоммуникаций им. проф. М.А. Бонч-Бруевича
ПРОГРАММИРОВАНИЕ
Отчёт по Лабораторной Работе №4
тема: «ЦИКЛИЧЕСКИЕ ВЫЧИСЛИТЕЛЬНЫЕ ПРОЦЕССЫ.
ВЫЧИСЛЕНИЯ ПО РЕККУРЕНТНЫМ ФОРМУЛАМ»
Санкт-Петербург 2020
А. Постановка задачи
Требуется
составить программу вычисления функции
 ,
содержащей произведение. Формула:
,
содержащей произведение. Формула:
 
Б. Разработка алгоритма
В программе должен быть предусмотрен ввод исходных данных, к которым относятся значение аргумента x и верхняя граница суммирования n. Выделим в отдельную формулу сумму, стоящую в скобках. Получаем две расчётные формулы:
y
=  
 
 
В формуле вычисления произведения нет переменных, результаты выполнения которых не зависят от переменной суммирования i.
В. Таблица идентификаторов
| N | Обозначение в задаче | Идентификатор | Назначение | 
| 1 | n | n | Верхняя граница суммирования | 
| 2 | x | x | Аргумент функции | 
| 3 | - | y | Сумма | 
| 4 | z | z | Результат вычислений | 
| 5 | – | i | Промежуточные данные | 
Г. Схема алгоритма
 
Д. Контрольный расчёт
В качестве контрольного набора выберем n=3; x=5
Результаты вычислений приведены ниже в таблице вычислений.
| Назначение набора данных | Набор данных | Результаты ручных вычислений | Результаты машинных вычислений | |
| n | x | y | y | |
| Контрольный набор | 3 | 5 | 24.880 | 24.887 | 
| Рабочий набор | 40 | 0,85 | - | 66062.578 | 
Е. Программа на языке Си
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int n, k, i;
float x, p, z;
printf("n= ");
scanf("%i", &n);
printf("x= ");
scanf("%f", &x);
do
{
printf("1-For loop; 2-While loop; 3-Do while loop; 4-Exit\n\n");
scanf("%i", &k);
switch(k)
{
case 1:
p=1;
for (i=3; i<= n; i++)
{
p = p*(1+(x/(10+x))*pow (i, 0.5));
}
z=3.4*x+x*p;
printf("For: z=%6.3f\n\n", z);
break;
case 2:
p=1;
i=3;
while (i<= n)
{
p = p*(1+(x/(10+x))*pow (i, 0.5));
i++;
}
z=3.4*x+x*p;
printf("While: z=%6.3f\n\n", z);
break;
case 3:
p=1;
i=3;
do
{
p = p*(1+(x/(10+x))*pow (i, 0.5));
i++;
} while (i<=n);
z=3.4*x+x*p;
printf("Do while: z=%6.3f\n\n", z);
break;
default:
break;
}
}
while (k!=4);
printf("Ending the code");
return 0;
}
 
 
Ж. Выводы
Тот факт, что результаты контрольных расчетов, выполненных вручную, достаточно совпадают с результатами контрольных расчетов, выполненных на ЭВМ, свидетельствуют о том, что программа составлена правильно.
