Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Текст программы

Читайте также:
  1. A10. Укажите правильную морфологическую характеристику слова ГОТОВЫ из четвертого (4) предложения текста.
  2. A28. Какое высказывание противоречит содержанию текста?
  3. A28. Какое высказывание противоречит содержанию текста?
  4. A9. Укажите верную характеристику второго (2) предложения текста.
  5. ATTENTION!! тут не описано как проверять партиклы! только модель с текстурами
  6. FontBold, Fontltalic, FontName, FontSize, FontUnderline определяют шрифты текста метки.
  7. John O'Callaghan Feat Sarah Howells — Find Yourself Текст песни

Кафедра вычислительной техники

Отчет о лабораторной работе

по дисциплине

«Программирование»

на тему

«Определение суммы сходящегося числового ряда»

Выполнили:

студенты группы 2891 ________________ (С.С. Мамонтов)

________________ (М.А. Марчук)

________________ (А.М. Синилов)

________________ (В.Б. Сысоев)

Проверил:

________________ ()

Санкт-Петербург, 2012

Содержание

1 Цель работы............................................................................................................................ 3

2 Задача.......................................................................................................................................... 3

3 Алгоритм................................................................................................................................... 3

4 Текст программы................................................................................................................. 5

5 Вывод.......................................................................................................................................... 7


Цель работы

 

Познакомиться со средой разработки Borland C++ 3.1 и основными операторами языка программирования C++. Получить практические навыки в разработке алгоритма и его реализации на языке высокого уровня.

Задача

 

Задан сходящийся числовой ряд, состоящий из членов вида:

Необходимо вычислить сумму данного ряда Sn с заданной точностью Eps. Пользователь вводит переменную x, желаемую точность Eps и максимальное количество членов ряда n, суммированием которых программа должна ограничиться при вычислении.

Алгоритм

 

В заданном ряду существует зависимость очередного члена ряда Xn+1 от предыдущего Xn:

Это позволяет достаточно просто организовать вычисление суммы ряда Sn в цикле, ограниченном веденными пользователем n шагами. Нам необходимо хранить текущее значение суммы Sn и значение текущего члена ряда Xn. На каждом шаге цикла мы вычисляем значение очередного члена ряда Xnn по вышеприведенной формуле и суммируем его с текущим значением Sn, получая текущую сумму ряда. Цикл продолжается пока модуль приращения суммы т.е. в данном случае |Xnn| будет больше заданной точности Eps и не превышено максимальное количество вычисляемых членов n, заданное пользователем.

Блок-схема алгоритма программы приведена на рисунке 1.

Рисунок 1 – Блок-схема алгоритма программы.

В некоторых случаях, когда модуль переменной x меньше Eps, мы уже на первом шаге цикла получим приращение суммы меньше заданной точности. Чтобы корректно вычислять сумму ряда и исключить подобные случаи, введем дополнительное условие на окончание цикла: |Xnn| < |Xn| это означает, что максимальный член ряда уже был просуммирован и приращение суммы убывает по модулю.

 

Текст программы

 

Файл MERRITT.CPP:

#include <stdio.h>

#include <conio.h>

#include <math.h>

 

void main()

{

char ch; //вспомогательный символ для диалогов

int n; //Максимальное количество вычисляемых членов

double eps; //задаваемая точность вычисления суммы

double x; //x, просто x.

double Sn; //Итоговая сумма

double Xn, Xnn; //два последних члена ряда

int i; //вспомогательная переменная

 

clrscr(); //уборка

 

printf("\nВычисление суммы сходимого числового ряда");

printf("\nSn = 1 + x + x^2/2! +... + x^(n-1)/(n-1)!");

printf("\nс заданным максимальным количеством вычисляемых членов n ");

printf("и точностью eps.");

 

do //Начало цикла x

{

x=0; //заведомо не подходящее начальное значение

do //цикл непосредственного ввода х

{

printf("\nВведите х (х<>0):");

scanf("%lf",&x);

fflush(stdin);

}

while (x==0); //конец ввода x, нам нужен х не равный 0

 

do //Начало цикла по точности (eps)

{

eps=-1;//заведомо не подходящее начальное значение

do //цикл непосредственного ввода eps

{

printf("\nВведите eps (eps>=0):");

scanf("%lf",&eps);

fflush(stdin);

}

while (eps<0); //конец ввода eps. нам нужен eps больше или равный 0

//eps=0 допущен специально, для задания недостижимой

//точности

 

do //начало цикла по n

{

n=0; //заведомо не подходящее начальное значение

do //цикл непосредственного ввода n

{

printf("\nВведите максимальное число суммируемых членов n (n>1):");

scanf("%d",&n);

fflush(stdin);

}

while (n<1);//конец ввода n. нам нужно как минимум 2 члена

//поэтому n как минимум равно 2

 

//Основной цикл вычислений

Xnn=1; //Ввод начальных значений

Sn=1;

printf("\nX 0-й = %1.20f, Сумма Sn=%1.20f ",Xnn,Sn); //Вывод X0

for(i=1;i<n;i++) {//Начало цикла. Количество шагов ограничено n

Xn=Xnn; //Сохраняем значение i-1 члена

Xnn=Xn*x/i; //Вычисляем значение текущего i-го члена

Sn=Sn+Xnn; //Вычисляем Сумму

printf("\nX %d-й = %1.20f, Сумма Sn=%1.20f ",i,Xnn,Sn); //Вывод

//выходим из цикла при соблюдении 2 условий

if((fabs(Xnn)<fabs(Xn)) //приращение убывает по модулю

&&(fabs(Xnn)<eps)) break;//приращение меньше заданной погрешности

}//Конец цикла вычислений

 

// Вывод результатов

printf("\n\nВычисленное значение суммы ряда Sn = %1.20f",Sn);

printf("\nЗаданная точность eps = %1.20f",eps);

printf("\nПоследний вычисленный член Xn = %1.20f",Xnn);

 

if(i==n) {// В этом случае цикл отработал максимальное кол-во шагов

// не достигнув заданной точности

printf("\nВычислена сумма %d членов",i);

printf("\nЗаданная точность не достигнута на %d-м члене",i-1);

 

// Возможно нужная точность не достигнута, тк модуль

// приращения возрастал. Проверка и вывод этой инф-и

if(! (fabs(Xnn)<fabs(Xn)))

printf("\nЗначение модуля приращения возрастает");

 

//тк за заданное количество шагов нужная точность не достигнута

//предлагается ввести другое количество шагов

printf("\nЗадать другое максимальное количество членов \

суммы? (y/n):");

ch=getche();

}

else { //В этом случае нужная точность достигнута

printf("\nВычислена сумма %d членов",i+1);

printf("\nЗаданная точность достигнута на %d-м члене!",i);

ch='N'; // Цикл по n повторяться не будет.

}

}

while(ch=='y' || ch=='Y' || ch=='н' || ch=='Н');//конец цикла по n

 

//Возможно пользователь хочет поменять точнось?

printf("\nЗадать другую точность (eps)? (y/n):");

ch=getche();

}

while(ch=='y' || ch=='Y' || ch=='н' || ch=='Н');//конец цикла по eps

 

//Возможно пользователь хочет изменить x?

printf("\nЗадать другой x? (y/n):");

ch=getche();

}

while(ch=='y' || ch=='Y' || ch=='н' || ch=='Н');//конец цикла по x

 

printf("\nДля завершения программы нажмите любую клавишу.");

getch();//на этом все, конец

}

 

Вывод

 

Пример работы программы показан на рисунке 2.

Рисунок 2 – Пример выводимых программой данных.

 


Дата добавления: 2015-10-26; просмотров: 96 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Таким образом, грамотное использование лексических и грамматических единиц позволяет автору более точно реализовать свой замысе.| LES SYMBOLES DE LA FÊTE DE PÂQUES

mybiblioteka.su - 2015-2024 год. (0.016 сек.)