Задачи из справочника по математике

Конечные суммы

Код

using System;

using System. Collections. Generic;

using System. Linq;

using System. Text;

namespace cnslSecond

{

class SomeSums

{

/// <summary>

/// Хранит текущее значение числа слагаемых

/// </summary>

static double n;

/// <summary>

/// Вычисляет текущий член суммы

/// </summary>

/// <param name="problem">

/// Номер задачи

/// </param>

/// <param name="k">

/// Номер слагаемого

/// </param>

/// <returns>

/// Текущий член суммы

/// </returns>

static double curTerm(int problem, double k)

{

switch (problem)

{

case 1: return k;

case 2: return 2 * k - 1;

case 3: return k * k;

case 4: return (2 * k - 1) * (2 * k - 1);

case 5: return k * k * k;

case 6: return (2 * k - 1) * (2 * k - 1) * (2 * k - 1);

default: return Double. NaN;

}

}

/// <summary>

/// Аналитическая формула результата суммирования

/// </summary>

/// <param name="problem">

/// Номер задачи

/// </param>

/// <returns>

/// результат суммирования

/// </returns>

static double precRes(int problem)

{

switch (problem)

{

case 1: return n * (n + 1) / 2;

case 2: return n * n;

case 3: return n * (n + 1) * (2 * n + 1) / 6;

case 4: return n * (4 * n * n - 1) / 3;

case 5: return n * n * ( n + 1) * (n + 1) * .25;

case 6: return n * n * (2 * n * n - 1);

default: return Double. NaN;

}

}

static void Main(string[] args)

НЕ нашли? Не то? Что вы ищете?

{

Random rnd = new Random();// Хранит объект, создающий последовательность псевдослучайных чисел

// Цикл вариантов счета до нажатия клавиши esc

do

{

//Возможен вариант, в котором номер задачи вводится с клавиатуры

//Console. Write("Введите номер задачи ");

// текущий номер задачи в интервале [1;6]

int nmb = rnd. Next(6) + 1; //int. Parse(Console. ReadLine());

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

//Console. Write("Введите n ");

// число суммируемых слагаемых в интервале [10;1000000]

n = rnd. Next(999991) + 10; //int. Parse(Console. ReadLine());

Console. WriteLine

("Номер задачи = {0}; Число слагаемых = {1}", nmb, n);

double myRes = 0;// Сумматор результата вначале обнуляется

// Цикл суммирования в интервале [1;n]

for (int k = 1; k <= n; k++)

myRes += curTerm(nmb, k);

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

Console. WriteLine(

"Полученный результат = {0}; точный результат = {1}",

myRes, precRes(nmb));

Console. WriteLine("Нажмите esc для выхода или другую клавишу для продолжения");

}

while (Console. ReadKey(true).Key!= ConsoleKey. Escape);

}

}

}

Суммы числовых последовательностей

Код

using System;

using System. Collections. Generic;

using System. Linq;

using System. Text;

namespace cnslThird

{

class SomeSeries

{

/// <summary>

/// вычисляет текущий множитель, на который отличаются члены ряда

/// </summary>

/// <param name="problem">

/// номер задачи

/// </param>

/// <param name="k">

/// номер члена ряда

/// </param>

/// <returns>

/// текущий множитель

/// </returns>

static double curFactor(int problem, double k)

{

switch (problem)

{

case 1: return k;

case 2: return - k;

case 3: return (2 * k - 1) * 2 * k;

case 4: return -(2 * k - 1) * 2 * k;

case 5: return k == 1 ? 1 : (2 * k - 2) * (2 * k - 1);

case 6: return k == 1 ? 1 : -(2 * k - 2) * (2 * k - 1);

default: return Double. NaN;

}

}

/// <summary>

/// Вычисляет точную сумму ряда

/// </summary>

/// <param name="problem">

/// номер задачи

/// </param>

/// <returns>

/// сумма ряда

/// </returns>

static double precRes(int problem)

{

switch (problem)

{

case 1: return Math. E;

case 2: return 1.0 / Math. E;

case 3: return Math. Cosh(1);

case 4: return Math. Cos(1);

case 5: return Math. Sinh(1);

case 6: return Math. Sin(1);

case 7: return Math. PI * Math. PI / 6;

case 8: return Math. PI * Math. PI / 8;

case 9: return Math. PI * Math. PI / 12;

case 10: return Math. PI * Math. PI * Math. PI * Math. PI / 90;

case 11: return Math. Pow(Math. PI, 6) / 945;

case 12: return Math. Pow(Math. PI, 8) / 9450;

default: return Double. NaN;

}

}

/// <summary>

/// вычисляет текущий член ряда

/// </summary>

/// <param name="problem">

/// номер задачи

/// </param>

/// <param name="k">

/// номер члена ряда

/// </param>

/// <returns>

/// текущий член ряда

/// </returns>

static double Term(int problem, double k)

{

switch (problem)

{

case 7: return 1 / k / k;

case 8: return 1 / (2 * k - 1) / (2 * k - 1);

case 9: return (k % 2 == 1 ? 1 : -1) * 1 / k / k;

case 10: return 1 / k / k / k / k;

case 11: return Math. Pow(k, -6);

case 12: return Math. Pow(k, -8);

default: return Double. NaN;

}

}

static void Main(string[] args)

{

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

double epsMin = 1e-14, epsMax = .001;

Random rnd = new Random();// хранит объект случайных чисел

do

{

int nmb = rnd. Next(1,13); // случайный номер задачи

Console. WriteLine("Номер задачи: {0}",nmb);

// случайное значение погрешности

double eps = (epsMax - epsMin) * rnd. NextDouble() + epsMin;

Console. WriteLine("eps = {0}",eps);

// начальное значение суммы и текущего члена

double

myRes = nmb < 5 ? 1 : 0, curTerm = 1;

int k = 1;// начальный номер слагаемого

while (Math. Abs(curTerm / myRes) > eps)

// пока относительная погрешность больше заданной

{

if (nmb < 7)

// в первых 6-ти задачах текущий член ряда вычисляет

// путем умножения на соответствующий множитель

curTerm /= curFactor(nmb, k);

else

// в задачах с 7 по 12 вычисляется текущий член ряда

curTerm = Term(nmb, k);

k++;// на единицу увеличивается номер члена ряда

myRes += curTerm;// текущий член добавляется к сумматору

}

Console. WriteLine(

"Приближенный результат = {0:r};" +

" точный результат = {1:f5};{1:g7};{1:e8}",

myRes, precRes(nmb));

Console. WriteLine("Press esc to exit or any key to redo");

}

while (Console. ReadKey(true).Key!= ConsoleKey. Escape);

}

}

}