Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/40: Рейтинг темы: голосов - 40, средняя оценка - 4.93
1 / 1 / 0
Регистрация: 16.10.2017
Сообщений: 33

Вычисление суммы ряда

16.10.2017, 21:55. Показов 7957. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Составьте 3 варианта программ циклической структуры типа for , while, do…while и сравните полученные результаты.

Вобщем есть идеи с чего стоит начать(ввести N и х и то не уверен), но не знаю как определить cosix и соответственно что писать дальше. Надеюсь на вашу помощь.
Изображения
 
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.10.2017, 21:55
Ответы с готовыми решениями:

Вычисление частичной суммы ряда (для n членов ряда)
Напишите пожалуйста метод вычисления частичной суммы ряда. Необходимо узнать последовательность действий не для особого примера, а в целом...

Вычисление суммы ряда
Вычислить сумму ряда

Вычисление суммы ряда
написать программу

15
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18307 / 14231 / 5368
Регистрация: 17.03.2014
Сообщений: 28,904
Записей в блоге: 1
16.10.2017, 22:38
Цитата Сообщение от Rednaksi Посмотреть сообщение
не знаю как определить cosix
https://www.cyberforum.ru/cgi-bin/latex.cgi?\cos(ix) =  {e^{-x} + e^{x} \over 2}
Взято из википедии
0
1 / 1 / 0
Регистрация: 16.10.2017
Сообщений: 33
17.10.2017, 11:25  [ТС]
Спасибо, но легче не очень стало стало, я все еще не понял как писать цикл, и тем более использовать то что Вы написали.
0
97 / 98 / 58
Регистрация: 29.09.2016
Сообщений: 410
17.10.2017, 11:58
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Взято из википедии
Здесь разве i - играет роль мнимой единицы?
1
677 / 479 / 216
Регистрация: 06.09.2013
Сообщений: 1,312
17.10.2017, 12:01
Rednaksi, нет, это конечно не мнимая единица, просто параметр суммирования:
C#
1
2
3
4
double sum = 0.0;
for (int i = 1; i <= N; i++) {              
    sum += (-1.0 + Math.Cos (i * x)) / (i * i * i); 
}
N и x должен задать пользователь.
0
1 / 1 / 0
Регистрация: 16.10.2017
Сообщений: 33
17.10.2017, 12:06  [ТС]
Цитата Сообщение от woldemas Посмотреть сообщение
N и x должен задать пользователь.
Это я знаю, но вот соль, что задавать именно x или cosx? если x то через double? а cos я задавать не умею
0
677 / 479 / 216
Регистрация: 06.09.2013
Сообщений: 1,312
17.10.2017, 12:12
Цитата Сообщение от Rednaksi Посмотреть сообщение
что задавать именно x или cosx?
Конечно x! Cos программа посчитает.

Добавлено через 3 минуты
Как-то так:
C#
1
2
3
4
5
6
7
8
9
Console.Write("Введите X: ");
double x = double.Parse (Console.ReadLine ());
Console.Write("Введите N: ");
int N = int.Parse (Console.ReadLine ());
double sum = 0.0;
for (int i = 1; i <= N; i++) {              
    sum += (-1.0 + Math.Cos (i * x)) / (i * i * i);
}
Console.WriteLine ("Сумма: {0}", sum.ToString ());
1
1 / 1 / 0
Регистрация: 16.10.2017
Сообщений: 33
17.10.2017, 13:46  [ТС]
Цитата Сообщение от woldemas Посмотреть сообщение
sum.ToString ()
А будет ли ошибкой просто sum оставить?

Добавлено через 1 минуту
Вот что у меня получилось, добавив цикл while и do while, вроде же все правильно?
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Введите число N:");
            int N=int.Parse(Console.ReadLine());
            Console.WriteLine("Введите число x:");
            double x = int.Parse(Console.ReadLine());
            double sum = 0;
            int i = 1;
            if (N>0)
            { 
            for (; i<=N; i++)
                {
                sum += (-1.0 + Math.Cos(i * x)) / (i * i * i);
                    }
            Console.WriteLine("Сумма: {0}", sum.ToString());
            }
            else
            {
            Console.WriteLine("N не должен быть отрицательным или равным 0");
            }
            
            while (i<=N)
            {
                i++;
                sum += (-1.0 + Math.Cos(i * x)) / (i * i * i);
            }
            Console.WriteLine("Сумма: {0}", sum.ToString());
 
            do
            {
                ++i;
                sum += (-1.0 + Math.Cos(i * x)) / (i * i * i);
            }
            while (i <= N);
            Console.WriteLine("Сумма: {0}", sum.ToString());
        }
    }
}
0
677 / 479 / 216
Регистрация: 06.09.2013
Сообщений: 1,312
17.10.2017, 14:07
Лучший ответ Сообщение было отмечено Rednaksi как решение

Решение

Цитата Сообщение от Rednaksi Посмотреть сообщение
А будет ли ошибкой просто sum оставить?
Нет, не будет. Я так пишу по привычке. Поскольку метод принимает тип object, при передаче ему параметра - значения, по крайней мере в первых версиях C#, происходил такой процесс как упаковка-распаковка в динамическую память, что занимало некоторое время, поэтому я сразу давал ссылку на динамическую переменную. Не знаю как сейчас с этим дело обстоит. Ну и к тому же можно формат провайдер конкретный указать.
Цитата Сообщение от Rednaksi Посмотреть сообщение
Вот что у меня получилось, добавив цикл while и do while, вроде же все правильно?
Нет, исправил с комментариями
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Введите число N:");
            int N=int.Parse(Console.ReadLine());
            Console.WriteLine("Введите число x:");
            double x = int.Parse(Console.ReadLine());
            double sum = 0;
            if (N<0)
            { 
                Console.WriteLine("N не должен быть отрицательным или равным 0");
                return; // Заканчиваем работу программы
            }
            int i = 1;
            for (; i<=N; i++) 
            {
                sum += (-1.0 + Math.Cos(i * x)) / (i * i * i);
            }
            Console.WriteLine("Сумма: {0}", sum.ToString());
            i = 1; // Нужно снова присвоить начальные значения
            sum = 0.0;
            while (i<=N)
            {                   
                sum += (-1.0 + Math.Cos(i * x)) / (i * i * i);
                i++; // Если сначала инкримент у вас лишнее слагаемое посчитается
            }
            Console.WriteLine("Сумма: {0}", sum.ToString());
            i = 1;
            sum = 0.0;
            do
            {                   
                sum += (-1.0 + Math.Cos(i * x)) / (i * i * i);
                i++;
            }while (i <= N);
            Console.WriteLine("Сумма: {0}", sum.ToString());
        }
    }
}
Добавлено через 4 минуты
Rednaksi, Я там ошибся вначале, сейчас правильно вроде.

Добавлено через 7 минут
Нет все-таки первый раз я правильно написал.
1
1 / 1 / 0
Регистрация: 16.10.2017
Сообщений: 33
17.10.2017, 14:07  [ТС]
Цитата Сообщение от woldemas Посмотреть сообщение
Нет, исправил с комментариями
Благодарю. По поводу инкременты, я так сделал потому что в примере, в методичке, стоит с постфиксом и идет перед суммой, по этому ошибся.
А по поводу других моментов: например определив int i=1 один раз, разве она не будет одной для всех? (прошу отнестисть с пониманием , если вопросы глупые, я просто учусь)
0
677 / 479 / 216
Регистрация: 06.09.2013
Сообщений: 1,312
17.10.2017, 14:09
Rednaksi, вот сейчас правильная версия, я сам запутался с этим инкрементом, везде - надо делать после просчета.

Добавлено через 1 минуту
Цитата Сообщение от Rednaksi Посмотреть сообщение
например определив int i=1 один раз, разве она не будет одной для всех?
Нет конечно, она изменяет значения с каждым инкрементом. Поэтому перед циклом, нужно снова устанавливать начальное значение. Это же одна и та же переменная.
0
1 / 1 / 0
Регистрация: 16.10.2017
Сообщений: 33
17.10.2017, 14:20  [ТС]
А почему мы убираем else и заканчиваем работу после : Console.WriteLine("N не должен быть отрицательным или равным 0");, какая ошибка была в моем варианте? Там же это было просто дополнительной условностью для красоты.

А, понял, так удобней с логической точки зрения?
0
677 / 479 / 216
Регистрация: 06.09.2013
Сообщений: 1,312
17.10.2017, 14:24
Цитата Сообщение от Rednaksi Посмотреть сообщение
А почему мы убираем else и заканчиваем работу после
В вашем варианте после вывода сообщения в ветви else программа продолжала работать и пыталась запустить еще два цикла (но они не запускались, потому что i было равно N + 1). Можно оставить if/else но тогда все три цикла нужно внести в первую ветвь if, что усилит вложенность и да, на мой взгляд будет не так красиво.
0
1 / 1 / 0
Регистрация: 16.10.2017
Сообщений: 33
17.10.2017, 14:34  [ТС]
Так, вроде все работает, спасибо большое, только еще для себя хотел уточнить, как сделать так, что бы я мог сколько угодно раз проводить вычисления, пока не напишу например команду exit?
0
677 / 479 / 216
Регистрация: 06.09.2013
Сообщений: 1,312
17.10.2017, 14:44
Цитата Сообщение от Rednaksi Посмотреть сообщение
как сделать так, что бы я мог сколько угодно раз проводить вычисления, пока не напишу например команду exit
Все загоняете под один цикл, когда вводится вместо одного из чисел "exit", завершается работа.
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
static void Main(string[] args)
{
    while (true) {
        Console.WriteLine ("Введите число N:");
        string str = Console.ReadLine ();
        if("EXIT".Equals(str.ToUpper())) 
            return;
        int N = int.Parse (str);
        Console.WriteLine ("Введите число x:");
        str = Console.ReadLine ();
        if("EXIT".Equals(str.ToUpper())) 
            return;
        double x = int.Parse (str);
        double sum = 0;
        if (N < 0) { 
            Console.WriteLine ("N не должен быть отрицательным или равным 0");
            return; // Заканчиваем работу программы
        }
        int i = 1;
        for (; i <= N; i++) {
            sum += (-1.0 + Math.Cos (i * x)) / (i * i * i);
        }
        Console.WriteLine ("Сумма: {0}", sum.ToString ());
        i = 1; // Нужно снова присвоить начальные значения
        sum = 0.0;
        while (i <= N) {                    
            sum += (-1.0 + Math.Cos (i * x)) / (i * i * i);
            i++; // Если сначала инкримент у вас лишнее слагаемое посчитается
        }
        Console.WriteLine ("Сумма: {0}", sum.ToString ());
        i = 1;
        sum = 0.0;
        do {                    
            sum += (-1.0 + Math.Cos (i * x)) / (i * i * i);
            i++;
        } while (i <= N);
        Console.WriteLine ("Сумма: {0}", sum.ToString ());
    }
}
0
1 / 1 / 0
Регистрация: 16.10.2017
Сообщений: 33
17.10.2017, 15:36  [ТС]
Цитата Сообщение от woldemas Посмотреть сообщение
.Equals(str.ToUpper()
Вот сложный момент, но попробую разобраться, мое почтение
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.10.2017, 15:36
Помогаю со студенческими работами здесь

Вычисление суммы ряда
Неободимо вычислить сумму ряда: , где n – натуральное число

Вычисление суммы ряда
Напишу дословно задание: Составить и отладить программу для приближѐнного вычисления заданной функции y(x) путѐм суммирования...

Вычисление суммы ряда
Добрый день. Не получается решить задачу по С#, что только уже не пробовал. Помогите пожалуйста!

Вычисление суммы ряда
Помогите с решением ;) Создать вспомогательный класс . Класс содержит метод , в котором находится алгоритм вычисления суммы ряда. ...

Вычисление суммы ряда
подскажите пожалуйста как реаизовать кодом S=3x+8x^2+...+n(n+2)x^n+...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru