Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.12.2012, 22:17   #1
ZikkiL
Пользователь
 
Регистрация: 12.10.2012
Сообщений: 22
Лампочка Решение задач на c#.

1).Вычислить сумму ряда с точностью, общий член которого равен An=(2*n-1)/2^n.
2).Вычислить выражение при n=10 : R=(cos1/sin1) x (cos1+cos2/sin1+sin2) x....x (cos1+...+cos n/sin1+...sin n)
Для первой код сделал, но ответ не сходится
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ConsoleApplication_Lab2_1
{
    class Program
    {
        static void Main(string[] args)
        {
            int n = 1;
            double s, a1, an, zn, eps = 0.001;
            a1 = (double)(-1);
            an = a1;
            s = a1;
            while (Math.Abs(an) >= eps & n < 100)
            {
                zn = (double)(2*n-1)/(4*n-5);
                an *= zn;
                s += an;
                n++;
            }
            Console.WriteLine();
            Console.WriteLine("Сумма ряда s={0}", s);
            Console.WriteLine("Число членов ряда n={0}", n);
            Console.WriteLine("Последний член ряда an={0}", an);
            Console.ReadLine();
            FileStream u = new FileStream("rez1.txt", FileMode.Create);
            StreamWriter Wr = new StreamWriter(u);
            Wr.WriteLine("Сумма ряда s={0}", s);
            Wr.WriteLine("Число членов ряда n={0}", n);
            Wr.WriteLine("Последний член ряда an={0}", an);
            Wr.Close();
            u.Close();
        }
    }
}
Ко второй не знаю, как подступиться, но вот пример решения:
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ConsoleApplication_Lab2_2
{
    class Program
    {
        static void Main(string[] args)
        {
            int k, n = 10;
            double a = 5, s = 0, R = 0;
            for (k = 1; k <= n; k++)
            {
                s += k;
                R += Math.Sqrt(a + s) / Math.Tan(k);
            }
            Console.WriteLine();
            Console.WriteLine("Выражение имеет значение R={0}", R);
            Console.ReadLine();
            FileStream u = new FileStream("rez2.txt", FileMode.Create);
            StreamWriter Wr = new StreamWriter(u);
            Wr.WriteLine("Выражение имеет значение R={0}", R);
            Wr.Close();
            u.Close();
        }
    }
}
Буду благодарен.
ZikkiL вне форума Ответить с цитированием
Старый 26.12.2012, 12:01   #2
ZikkiL
Пользователь
 
Регистрация: 12.10.2012
Сообщений: 22
По умолчанию

Никто не поможет?
ZikkiL вне форума Ответить с цитированием
Старый 26.12.2012, 12:12   #3
bormot
 
Регистрация: 10.10.2012
Сообщений: 9
По умолчанию

А почему 4*n-5?
bormot вне форума Ответить с цитированием
Старый 26.12.2012, 12:25   #4
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Код:
while (Math.Abs(an) >= eps && n < 100)
Кто Вам наврал, что это - вычисление суммы ряда с точностью eps? Это во-первых и в-главных.
Во-вторых, обратите внимание, что в C# есть два разных оператора: &&, "логическое И" и &, "поразрядное И". Вам нужен первый.
В-третьих, соотношение a_n=a_(n-1)*(2*n-1)/(4*n-5) неверно. Проверьте для n=1,2,3; пересчитайте.

Во второй задаче либо в условии забыты скобки, либо очень странное выражение. Совет: вынесите расчёт k-го множителя в отдельную функцию и используйте её в основной программе.
Abstraction вне форума Ответить с цитированием
Старый 26.12.2012, 12:51   #5
ZikkiL
Пользователь
 
Регистрация: 12.10.2012
Сообщений: 22
По умолчанию

В том то и дело, что пересчитывал, непонятно как выводить рекуррентную формулу, вроде бы вот так получается, всё равно ответ не тот z_n=a_n/a_n-1=(2*n-1)/(4*n-6). И как вынесите расчёт k-го множителя в отдельную функцию?

Последний раз редактировалось ZikkiL; 26.12.2012 в 12:55.
ZikkiL вне форума Ответить с цитированием
Старый 26.12.2012, 13:26   #6
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
z_n=a_n/a_n-1=(2*n-1)/(4*n-6)
Ну вот это больше похоже на правду.
А что тогда получается не так? Сумма этого ряда при n от нуля до бесконечности - 2. При n от 1 до бесконечности - 3. Вы считаете от нуля, хотя первый член у Вас почему-то назван a1.
Цитата:
И как вынесите расчёт k-го множителя в отдельную функцию?
Пишете отдельную функцию
Код:
 static double SequenceFactor(int k){/*...*/}
Она должна возвращать значение k-го множителя. В основной функции в цикле домножаете result на SequenceFactor(k), где k пробегает от 1 до n.
Abstraction вне форума Ответить с цитированием
Старый 26.12.2012, 13:54   #7
ZikkiL
Пользователь
 
Регистрация: 12.10.2012
Сообщений: 22
По умолчанию

Код:
int n = 1;
            double s, a1, an, zn, eps = 0.001;
            a1 = (double)(1/-2);
            an = a1;
            s = a1;
Вот здесь я подставляют вместо n единицу, так? Тоесть a1=(-1/2)
ZikkiL вне форума Ответить с цитированием
Старый 26.12.2012, 14:00   #8
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Почти. Только не забудьте, что в цикле Вы считаете an до увеличения n, так что надо либо перенести инструкцию увеличения n повыше, либо в начале присваивать n=2.
И почему a1=-1/2? a1=(2*1-1)/2^1=1/2, минусов нет.

Сейчас-то, до всех этих изменений, близкий к 2 результат получается?

И всё же... Постарайтесь осознать, что Math.Abs(an) меньше eps и (A_(n+1)+A_(n+2)+...) - т.е. погрешность, - меньше eps, это две большие разницы.
Abstraction вне форума Ответить с цитированием
Старый 26.12.2012, 14:08   #9
ZikkiL
Пользователь
 
Регистрация: 12.10.2012
Сообщений: 22
По умолчанию

Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ConsoleApplication_Lab2_1
{
    class Program
    {
        static void Main(string[] args)
        {
            int n = 1;
            double s, a1, an, zn, eps = 0.001;
            a1 = (double)1 / 2;
            an = a1;
            s = a1;
            while (Math.Abs(an) >= eps && n < 100)
            {
                zn = (double)(2*n+1)/(4*n-2);
                an *= zn;
                s += an;
                n++;
            }
            Console.WriteLine();
            Console.WriteLine("Сумма ряда s={0}", s);
            Console.WriteLine("Число членов ряда n={0}", n);
            Console.WriteLine("Последний член ряда an={0}", an);
            Console.ReadLine();
            FileStream u = new FileStream("rez1.txt", FileMode.Create);
            StreamWriter Wr = new StreamWriter(u);
            Wr.WriteLine("Сумма ряда s={0}", s);
            Wr.WriteLine("Число членов ряда n={0}", n);
            Wr.WriteLine("Последний член ряда an={0}", an);
            Wr.Close();
            u.Close();
        }
    }
}
Всё исправил, сделал zn=a_n+1/a_n. Ответ сошёлся, щас вторую попробую.

Последний раз редактировалось ZikkiL; 26.12.2012 в 14:17.
ZikkiL вне форума Ответить с цитированием
Старый 26.12.2012, 14:33   #10
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Сошёлся ответ, но n=16, должно быть 15
n++ же. Последнее слагаемое посчиталось при n=15, потом n увеличилось на 1, только потом произошёл выход из цикла.

Но при суммировании до n=15 погрешность составит 0.001007, что больше 0.001.
Abstraction вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение задач на с++ nameless2152 Фриланс 1 27.03.2012 23:15
Решение задач X-QuadrO Паскаль, Turbo Pascal, PascalABC.NET 1 22.02.2011 17:17
решение задач в tp junger@ Помощь студентам 0 25.11.2010 14:48
решение задач tp junger@ Помощь студентам 4 16.11.2010 16:29
решение задач sonic2609 Помощь студентам 4 12.10.2010 18:52