Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Циклы, управляемые условиями



Тема: Программирование алгоритмов циклической структуры.

Цель работы: Освоить программирование циклических алгоритмов с циклами, управляемыми условиями: циклами с предусловиями и циклами с постусловиями.
Освоить программирование циклических алгоритмов с вложенными циклами. Освоить методику тестирования программ.

 

Задание на лабораторную работу

  1. Получить задание в соответствии с номером своего варианта.
  2. Вывести рекуррентную формулу вычисления суммы ряда.
  3. Определить общее слагаемое суммы и выразить его через предыдущее, использовав переходной коэффициент (для удаления факториалов из формулы).
  4. Составить схему алгоритма решения задачи.
  5. Написать код программы на языке Паскаль в среде Borland Pascal for Windows.
  6. Осуществить компиляцию, и отладку программы. Провести структурное тестирование программы (тестирование как белого ящика): составить тестовые наборы для тестирования

- в нормальных условиях,

- при граничных условиях,

- при некорректных входных данных,

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

- по критерию покрытия условий – все возможные результаты каждой логической операции в условиях были получены хотя бы по одному разу.

  1. Получить результат.
  2. Оформить отчет по лабораторной работе.

 

Пример оформления работы

1. Составить алгоритм и написать код программы, вычисляющей значения суммы ряда S при заданных с консоли начальном и конечном значениях аргумента x(x_nach, x_kon), шаге его изменения delta_x и точности вычислений eps. Вычисленные значения ряда сравнить со значениями функции f=cos(x). Результаты вычислений вывести в виде таблицы с заголовком.

- разложение функции cos(x) в ряд Тейлора.

Накопление суммы производим по рекуррентной формуле – каждая последующая сумма вычисляется через предыдущую:

Общий вид слагаемого суммы может быть записан в следующем виде:

Для сокращения объема вычислений выразим его через предыдущее слагаемое:

Сомножитель , называемый переходным коэффициентом, можно определить из предыдущего соотношения:

Раскроем эту формулу:

 

 

 

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

Начальное значение находим подстановкой в формулу для общего члена значения n=0:

Начальное значение суммы можно принять равным первому члену ряда, то есть . Учитывая, что значение текущего члена ряда и суммы при n=0 уже определены, номер члена ряда n примем равным единице.

Задачу решим вложенными циклами:

- во внешнем цикле – цикле с постусловием – будем изменять значение аргумента от начального до конечного с заданным шагом,

- во внутреннем цикле – цикле с предусловием – будем определять значение суммы ряда с заданной точностью для отдельных точек – значений аргумента.

 

 

  1. Схема алгоритма решения задачи:

  1. Код программы

 

3.1. На языке Паскаль:

 

Program Variant_0;

Uses WinCRT;

Var x, s, f, x_nach, x_kon, delta_x, eps, t: Real;

n: Word;

Begin

WriteLn('Лабораторная работа №3');

WriteLn('Вариант №0');

WriteLn('ИС-11-1');

WriteLn('Пупкин Василий');

WriteLn;

{ввод исходных данных}

WriteLn(‘Ввод исходных данных: ’);

Write('x_nach=');

ReadLn(x_nach);

Write('x_kon=');

ReadLn(x_kon);

Write('delta_x=');

ReadLn(delta_x);

Write('eps=');

ReadLn(eps);

WriteLn;

{эхо-печать}

WriteLn('Для x=', x_nach: 0: 3, ' до ', x_kon: 0: 3, ' шаг=', delta_x: 0: 3, ' точность=', eps: 0: 5);

WriteLn;

WriteLn(' x n s f');

WriteLn('-----------------------------------');

x: =x_nach;

Repeat

{внешний цикл – изменение аргумента}

t: =1.0; {первое слагаемое}

s: =1.0; {начальное значение суммы}

n: =1;

f: =cos(x); {точное значение суммы}

While (Abs(t)> eps) Do

{внутренний цикл – вычисление суммы ряда в отдельной точке}

Begin

t: =-t*x*x/(2.0*n*(2.0*n-1.0)); {очередное слагаемое}

s: =s+t; {очередная сумма}

n: =n+1;

End;

WriteLn(x: 0: 3, ' ', n: 3, ' ', s: 0: 6, ' ', f: 0: 6);

x: =x+delta_x; {изменение значения аргумента}

Until(x> x_kon);

End.

3.2. На языке Си:

#include < stdio.h> //директивы препроцессора

#include < conio.h>

#include < math.h>

Int main()

{

//описание переменных

float x, s, f, x_nach, x_kon, delta_x, eps, temp;

int n;

printf(" \nЛабораторная работа №3" );

printf(" \nВариант №0" );

printf(" \nПО-11-1" );

printf(" \nПупкин Василий\n" );

printf(" \nВвод исходных данных: \n" ); //ввод исходных данных

printf(" \nx_nach=" );

scanf(" %f", & x_nach); //начальное значение аргумента

printf(" \nx_kon=" );

scanf(" %f", & x_kon); //конечное значение аргумента

printf(" \ndelta_x=" );

scanf(" %f", & delta_x); //шаг изменения аргумента

printf(" \neps=" );

scanf(" %f", & eps); //точность вычислений

//эхо-печать

printf(" \nДля x=%5.3f до %5.3f с шагом %5.3f и точностью %5.3f\n", x_nach, x_kon, delta_x, eps);

printf(" \n x n s f" );

printf(" \n--------------------------------------" );

x = x_nach;


Поделиться:



Популярное:

Последнее изменение этой страницы: 2017-03-11; Просмотров: 651; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.024 с.)
Главная | Случайная страница | Обратная связь