Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МетодичкаФИН kosh.doc
Скачиваний:
29
Добавлен:
15.02.2016
Размер:
3.16 Mб
Скачать

Пример программы, вычисляющей сумму ряда

В качестве примера создадим приложение, которое вычисляет сумму ряда с заданной точностью.

Возьмем ряд ,

который сходится к синусу гиперболическому sh x.

1.Спроектируйте диало­го­вое окно как показано на ри­сун­ке.

Исходными данными являются x и точность (eps).

В качестве результата выведем сумму ряда и контрольное значение – синус гиперболический от x, который мы вычислим с помощью встроенной математической функции.

2. Свяжите с окнами редактирования переменные:

Рис.57

double x; double eps; CString sum; CString control;

3. Добавьте в начало программы #include <math.h>

4. Добавьте функцию для кнопки <Вычислить> и вставьте в тело функции операторы, показанные ниже.

void C…Dlg::OnBnClickedOk()

{

const int MaxIter = 1000;

/* Зададим максимально допустимое число итераций (повторений тела цикла), чтобы не допустить зацикливания программы в случае ошибки */

UpdateData();

double copyeps = eps;

/* Вычислим количество цифр после точки при выводе результата (оно зависит от задан­ной точности */

int n = 0; // количество цифр

while (copyeps < 1)

{

copyeps *= 10; // например, для eps = .001 получим n = 3

n++;

}

// Вычислим сумму ряда, используя рекурентные соотношения:

double s = x; // Начальное значение суммы

double slag = x; // Начальное значение слагаемого

double z = 2;

// Переменная, с помощью которой мы получим факториал в знаменателе

int counter = 0; // Счетчик итераций

do

{

slag = slag*x*x/(z*(z+1));

// вычисляем новое значение слагаемого, используя его предыдущее значение

s += slag; // добавляем слагаемое к сумме

TRACE(_T("Очередной член ряда = %.*f \n"), n, slag);

z += 2; // Изменяем вспомогательную переменную

counter++;

if (counter > MaxIter)

{

sum = _T("Ряд расходится");

break;

// прерываем выплнение цикла, если сделано уже слишком много итераций

}

}while (fabs(slag) >= eps);

/* добавляем слагаемые к сумме, пока модуль очередного слагаемого еще больше допустимой погрешности */

if (counter <= MaxIter) sum.Format("%.*f", n, s);

// если вычисления завершились нормально, выводим полученное значение суммы ряда

control.Format("%.*f", n, sinh(x));

// выводим контрольное значение

UpdateData(false);

}

Запустите программу и задайте значение x (например -2) и точность (на­при­мер 1e-6). Хотя точных ограничений на x нет, однако sh является быстро рас­тущей функцией и не стоит задавать x>20. Вставьте самосто­я­тельно опе­ра­то­ры для проверки исходных данных на допустимость и вывод сообщения об ошибке.

Задания для самостоятельного выполнения

  1. Создать диалоговое приложение, которое считывает размер вклада и про­цент годового начисления. Вывести размеры вклада через 1 год (с точностью до копеек) при ежемесячном начислении процентов (слож­ные проценты) и при условии, что проценты начисляются только 1 раз в год.

  2. Создать диалоговое приложение, которое считывает начальный размер вклада, ежемесячный платеж (один и тот же весь период) и про­цент го­дового начисления. Вывести размеры вклада (с точ­ностью до копеек) через заданное количество месяцев.

  3. Создать диалоговое приложение, которое считывает начальный размер вклада, ежемесячный платеж (один и тот же весь период) и про­цент го­дового начисления. Определить, за какое время вклад вырастет в 10 раз.

  4. Создать диалоговое приложение, которое проверяет, является ли вво­димое с клавиатуры натуральное число совершенным, (совершенным называется число, которое равно сумме своих делителей, например: 6 = 1 + 2 + 3). Вывести на экран делители числа с помощью оператора TRACE.

  5. Создать диалоговое приложение для вычисления суммы ряда: с заданной точностью. Контрольное значение отобразить в окнеEdit, исполь­зуя функцию exp(). Вывести значения слагаемых, ис­поль­зуя оператор TRACE.

  6. Создать диалоговое приложение, которое подсчитывает сумму цифр натурального числа. Вывести на экран цифры с помощью оператора TRACE.

  7. Создать диалоговое приложение, которое подсчитывает количество цифр натурального числа. Вывести на экран цифры с помощью оператора TRACE.

  8. Создать диалоговое приложение, которое извлекает кубический корень из заданного положительного числа, используя рекуррентное соот­ноше­ние: с заданной точностью. Вывести на экран последовательность значенийу, используя оператор TRACE.

  9. Создать диалоговое приложение для вычисления суммы ряда: с заданной точностью. Контрольное значение отобразить в окнеEdit, используя функцию exp(). Вывести значения слагаемых, используя оператор TRACE.

  10. Создать диалоговое приложение, которое подсчитывает произведение ненулевых цифр натурального числа. Вывести цифры на экран с помощью команды TRACE.

  11. Создать диалоговое приложение для вычисления суммы ряда: с заданной точностью. Контрольное значение отобразить в окнеEdit, исполь­зуя функцию sin(x). Вывести значения слагаемых, ис­поль­зуя функцию TRACE.

  12. Создать диалоговое приложение, которое определяет, является ли вводимое с клавиатуры натуральное число простым, т.е. таким, которое делится только само на себя и на 1. Если у числа найден делитель, вывести его с помощью оператора TRACE.

  13. Создать диалоговое приложение для вычисления суммы ряда: , гдеn вводится с клавиатуры . Контрольное значение отобразить в окне Edit, используя функцию exp(). Вывести значения слагаемых, используя функцию TRACE.

  14. Создать диалоговое приложение, которое определяет, является ли вводимое с клавиатуры натуральное число квадратом натурального числа. Результаты промежу­точ­ных вычислений вывести на экран с помощью оператора TRACE.

  15. Создать диалоговое приложение, которое вычисляет , используя рекуррентное соотношение:с заданной точностью. Вывести на экран последовательность значенийу, используя оператор TRACE.

  16. Создать диалоговое приложение для вычисления суммы ряда: значение n ввести с клавиатуры. Контрольное значение отобразить в окне Edit, используя значение PI = 3.1415926535. Вывести значения слагаемых, используя оператор TRACE.

  17. Создать диалоговое приложение, которое определяет, является ли вводимое с клавиатуры натуральное число степенью двойки (1, 2, 4, 8,….). Результаты промежу­точ­ных вычислений вывести на экран с помощью оператора TRACE.

  18. Создать диалоговое приложение, которое извлекает корень n-ой степени из заданного положительного числа, используя рекуррентное соотношение: с заданной точностью. Вывести на экран последовательность значенийу, используя оператор TRACE.

  19. Создать диалоговое приложение, которое находит наибольший общий делитель двух натуральных чисел. Результаты промежуточных вычислений вывести на экран с помощью оператора TRACE.

  20. Создать диалоговое приложение, которое находит наименьшее общее кратное двух натуральных чисел. Результаты промежуточных вычислений вывести на экран с помощью оператора TRACE.

  1. Создать диалоговое приложение, которое определяет, можно ли заданное натуральное число представить в виде суммы квадратов двух натуральных чисел. Результаты промежуточных вычислений вывести на экран с помощью оператора TRACE.