Решение задач с помощью итерационных процессов, использование оператор цикла FOR и WHILE (DO/WHILE)

Страницы работы

Фрагмент текста работы

Инициализация параметра осуществляется только один раз — когда цикл FOR начинает выполняться. Проверка условия окончания осуществляется перед каждым возможным выполнением тела цикла. Когда выражение становится ложным (равным нулю), цикл завершается. Можно опустить одно или несколько выражений, но нельзя опускать точку с запятой, разделяющие три составляющие цикла. Коррекция параметра осуществляется в конце каждого выполнения тела цикла. Параметр может как увеличиваться, так и уменьшаться. Параметры, находящиеся в выражениях в заголовке цикла можно изменить при выполнении операции в теле цикла. В цикле FOR может использоваться операция запятая (,) для разделения нескольких выражений. Это позволяет включить в спецификацию цикла несколько инициализирующих или корректирующих выражений. Выражения, к которым применяется операция запятая, будут вычисляться слева направо.

Цикл DO ... WHILE — это цикл с постусловием, где истинность выражения проверяется после выполнения всех операций, включенных в блок, ограниченный фигурными скобками. Тело цикла выполняется до тех пор, пока выражение не станет ложным, то есть тело цикла с постусловием выполнится хотя бы один раз. Использовать цикл DO ... WHILE лучше в тех случаях, когда должна быть выполнена хотя бы одна итерация либо, когда инициализация объектов, участвующих в проверке условия, происходит внутри тела цикла.

АНАЛИЗ ЗАДАЧИ И АЛГОРИТМ:

Входные данные:

Диапазон значений аргумента: от 0,1 до 1,0 с шагом 0,1. Точность расчёта – 4 знака после запятой.

Результат:

Вывод на экран консоли в виде таблицы значений аргумента, результата работы моей и библиотечной функций.

Метод решения:

Приближённое вычисление степенных рядов и, с помощью коэффициента разложения, суммирование элементов ряда для нахождения очередного значения функции.

Форматный вывод полученных результатов.

Алгоритм решения:

Для каждого значения аргумента функции нужно найти сумму всех элементов ряда. При написании программы мной использован параметрический цикл FOR для передачи значений аргумента в функцию вычисления суммы ряда и вывода результатов на экран консоли. Каждое очередное значение аргумента передаётся в функцию, где выполняется циклическое вычисление значения элементов ряда для этого аргумента и суммируется в переменной-накопителе. Внутри функции вычисления суммы ряда использован цикл с постусловием DO/WHILE, в котором для продолжения работы цикла требуется, чтобы очередной элемент ряда был больше заданной точности. При невыполнении этого условия происходит выход из тела цикла, и функция возвращает полученный результат. Этот результат, наряду со значением аргумента и результатом работы библиотечной функции выводится на экран консоли по заданным правилам форматирования.

ОПИСАНИЕ ПРОГРАММНОЙ РЕАЛИЗАЦИИ:

В начале программы директивой define я определил входные данные – значения констант START и END (начальное и конечное значения аргумента х) и ACCURACY (точность вычисления суммы ряда). Затем расположены реализации функций arcTg (расчёт суммы ряда) и show (вывод результатов).

Так же для реализации построенного алгоритма мной были использованы следующие стандартные функции:

atan() – арктангенс (math.h);

fabs() – функция возвращает абсолютную величину аргумента (math.h);

_getch() – программа ожидает нажатия любой клавиши, это нужно, чтобы увидеть результат вывода на экран до того, как программа закончит свою работу и закроется.

#include <stdlib.h>

#include <stdio.h>

#include <math.h>

#include <conio.h>                                  

#define ACCURACY .0001                               // точность вычисления

#define START .1                                     // начальное значение

#define END 1.                                       // конечное значение аргумента функции

double arcTg(double x) {                             /* функция расчёта суммы элементов ряда Маклорена*/

double sum = 0;                                    // сумма ряда

double element = x;                               // первый элемент равен Х

double t;                                          // коэффициент разложения

int n = 0;                                         // номер элемента        

do  {

t = -1 * x * x * (2 * n + 1) / (2 * n + 3);  // формула коэффициента разложения

       sum += element;                                // суммируем элементы

       element *= t;                                        // расчёт следующего элемента

       n++;

} while (fabs(element) > ACCURACY);               /* цикл работает, пока значения элементов больше нужной точности */

return sum;                                        // возвращаем сумму всех элементов ряда

}

voidshow(doublex, doublearcTg) {                        // функция вывода результатов

printf("\nX = %.1f", x);                      // значение Х

printf("    arcTg(X)=%.4f", arcTg);               // результат моей функции

printf("    ATAN(X)=%.4f \n\n", atan(x));        /* результат библиотечной функции

ATAN(x) */

}

int main()

{

   for (double x = START; x < END; x+=.1) {         // диапазонзначенийХсшагом 0.1

show(x, arcTg(x));                            // вызов функции вывода

}

_getch();

return 0;

}

ПРИМЕР РАБОТЫ ПРОГРАММЫ:

ВЫВОДЫ:

В ходе выполнения лабораторной работы задание выполнено, мной были

Похожие материалы

Информация о работе