Язык Си. Лабораторные работы / Примеры отчетов / Lab5
.docx
Лабораторная работа №5
ПРОГРАММИРОВАНИЕ ВЛОЖЕННЫХ ЦИКЛОВ
Студент гр. ИКПИ-81
Коваленко Л. А.
А. Постановка задачи
Требуется составить программу вычисления функции . Формула:
Б. Разработка алгоритма
В данной лабораторной работе рассматривается задача, содержащая несколько циклических алгоритмов. Алгоритм решения данной задачи следующий:
-
Заранее вычислить числитель дроби s1, то есть: . Данное подвыражение функции y не зависит от каких-либо изменений в других частях формулы.
-
Подсчитать .
-
Прибавить к нему .
-
-
Организовать цикл внутри цикла. Это необходимо, потому что в знаменателе дроби находится операция суммирования, зависящая от переменной i, которая меняется во внешнем "цикле" формулы.
-
Внутренний цикл будет вычислять знаменатель дроби s2, то есть
-
.
-
Внешний цикл будет суммировать каждое значение, получаемое делением заранее вычисленного числителя и меняющегося знаменателя.
В программе должен быть предусмотрен ввод исходных данных, к которым относятся переменные x, m, n; вычисление и вывод y.
В. Таблица идентификаторов
N |
Обозначение в задаче |
Идентификатор |
Назначение |
1 |
x |
x |
Входные данные |
2 |
m |
m |
Входные данные |
3 |
n |
n |
Входные данные |
4 |
y |
y |
Выходные данные |
5 |
– |
i |
Промежуточные данные |
6 |
– |
j |
|
7 |
– |
s1 |
|
8 |
– |
s2 |
Г. Диаграмма Насси – Шнейдермана
Решение задачи |
||
Ввод x, m, n |
||
y=0; s1 = 0.5 * x |
||
for (i = 1; i ≤ m; i++) |
||
|
s1 = s1 + pow((2*i + 1), 2) |
|
for (i = 1; i ≤ n; i++) |
||
|
s2 = x |
|
for (j = 1; j ≤ m; j++) |
||
|
s2 = s2 + pow(i + 2*j, 3) |
|
y = y + (s1 / s2) |
||
Вывод y |
||
Останов |
Д. Контрольный расчет
В качестве контрольного набора выберем x=0, m=1, n=1.
Результаты вычислений приведены ниже в таблице вычислений.
Назначение набора данных |
Набор данных |
Результаты вычислений |
|||
x |
m |
n |
Ручные |
Машинные |
|
y |
y |
||||
Контрольный набор |
0 |
1 |
1 |
0.333333 |
0.333333 |
Рабочий набор |
2 |
20 |
14 |
0.268385 |
0.268385 |
Е. Программа на языке Си
/* Файл Lab5.c */
#include <stdio.h>
#include <math.h>
/*
Лабораторная работа 5
ПРОГРАММИРОВАНИЕ ВЛОЖЕННЫХ ЦИКЛОВ
Студент гр. ИКПИ-81
Коваленко Л. А.
*/
int main(int argc, char **argv)
{
int i, j, n, m;
double x, s1, s2, y=0;
/* Ввод исходных данных */
printf("Input x, m, n: ");
scanf("%lf %d %d", &x, &m, &n);
/* Вычисление числителя */
s1 = 0.5 * x;
for (i = 1; i <= m; i++)
s1 += pow((2*i + 1), 2);
/* Вычисление знаменателя */
for (i = 1; i <= n; i++) {
s2 = x;
for (j = 1; j <= m; j++)
s2 += pow(i + 2*j, 3);
y += s1 / s2;
}
/* Вывод результатов */
printf("%.6lf", y);
return 0;
}
Ж. Выводы
Тот факт, что результаты контрольных расчетов, выполненных вручную, достаточно совпадают с результатами контрольных расчетов, выполненных на ЭВМ, свидетельствуют о том, что программа составлена правильно.