Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

 

Задача C#

Featured Replies

Здравейте! Много моля за помощта Ви! Изобщо не мога да я схвана тази задача, ако може да ме ориентирате по някакъв начин... Благодаря предварително! :cry: :cry:

Напишете програма за изчисляване на сумата:
1-1/2+1/3-1/4+...+1/99999-1/100000
Изчисленията да се проведат по следните 4 начина:
1) членовете се сумират отляво надясно;
2) членовете се сумират отдясно наляво;
3) отделно положителните, отделно отрицателните отляво надясно;
4) както в 3), но сумирането да става отдясно наляво.

Сравнете получените резултати и обяснете различията.

Разрешен от IvanIvanovBG

  • Автор
преди 3 часа, mr mcwolf написа:

А въпрос смяташ ли да зададеш?

Въпросът ми е по какъв начин може да се реши задачата? Както казах вече, задачата ме затруднява.. не мога да се справя сама. Моля за помощ, подсказка…как мога да я реша, какво трябва да използвам? . Не искам готово решение. Уча програмиране от скоро и все още някои неща са ми неясни. 

  • Решение
using System;

namespace kaldata_task_1_console
{
    // Напишете програма за изчисляване на сумата:
    // 1 - 1 / 2 + 1 / 3 - 1 / 4 + ...+1 / 99999 - 1 / 100000
    // Изчисленията да се проведат по следните 4 начина:
    // 1) членовете се сумират отляво надясно;
    // 2) членовете се сумират отдясно наляво;
    // 3) отделно положителните, отделно отрицателните отляво надясно;
    // 4) както в 3), но сумирането да става отдясно наляво.
    // Сравнете получените резултати и обяснете различията.
    class Program
    {
        private static int getSign(int num)
        {
            return num % 2 == 0 ? -1 : 1;
        }

        private static void calcWithDouble()
        {
            double sum_left_to_right = 0;

            for (int i = 1; i <= 100000; i++)
            {
                sum_left_to_right += 1.0 / i * getSign(i);
            }
            Console.WriteLine("Left to right");
            Console.WriteLine(sum_left_to_right.ToString());

            double sum_right_to_left = 0;

            for (int i = 100000; i >= 1; i--)
            {
                sum_right_to_left += 1.0 / i * getSign(i);
            }
            Console.WriteLine("Right to left");
            Console.WriteLine(sum_right_to_left.ToString());

            double sum_left_to_right_sep = 0;

            for (int i = 1; i <= 100000; i += 2)
            {
                sum_left_to_right_sep += 1.0 / i;
            }
            for (int i = 2; i <= 100000; i += 2)
            {
                sum_left_to_right_sep += -1.0 / i;
            }
            Console.WriteLine("Left to right , first positives, then negatives");
            Console.WriteLine(sum_left_to_right_sep.ToString());

            double sum_right_to_left_sep = 0;

            for (int i = 99999; i >= 1; i -= 2)
            {
                sum_right_to_left_sep += 1.0 / i;
            }
            for (int i = 100000; i >= 1; i -= 2)
            {
                sum_right_to_left_sep += -1.0 / i;
            }
            Console.WriteLine("Right to left , first positives, then negatives");
            Console.WriteLine(sum_right_to_left_sep.ToString());
        }

        private static void calcWithDecimal()
        {
            Decimal sum_left_to_right = 0;

            for (int i = 1; i <= 100000; i++)
            {
                sum_left_to_right += (Decimal)(1.0 / i * getSign(i));
            }
            Console.WriteLine("Left to right");
            Console.WriteLine(sum_left_to_right.ToString());

            Decimal sum_right_to_left = 0;

            for (int i = 100000; i >= 1; i--)
            {
                sum_right_to_left += (Decimal)(1.0 / i * getSign(i));
            }
            Console.WriteLine("Right to left");
            Console.WriteLine(sum_right_to_left.ToString());

            Decimal sum_left_to_right_sep = 0;

            for (int i = 1; i <= 100000; i += 2)
            {
                sum_left_to_right_sep += (Decimal)(1.0 / i);
            }
            for (int i = 2; i <= 100000; i += 2)
            {
                sum_left_to_right_sep += (Decimal)(-1.0 / i);
            }
            Console.WriteLine("Left to right , first positives, then negatives");
            Console.WriteLine(sum_left_to_right_sep.ToString());

            Decimal sum_right_to_left_sep = 0;

            for (int i = 99999; i >= 1; i -= 2)
            {
                sum_right_to_left_sep += (Decimal)(1.0 / i);
            }
            for (int i = 100000; i >= 1; i -= 2)
            {
                sum_right_to_left_sep += (Decimal)(-1.0 / i);
            }
            Console.WriteLine("Right to left , first positives, then negatives");
            Console.WriteLine(sum_right_to_left_sep.ToString());
        }
        static void Main(string[] args)
        {
            Console.WriteLine("Using doubles :");
            calcWithDouble();
            Console.WriteLine();
            Console.WriteLine();
            Console.WriteLine("Using decimals :");
            calcWithDecimal();
            Console.WriteLine("The difference in the sums when using doubles is because of the way doubles are represented in binary. Press any key to exit...");
            Console.ReadKey();
        }
    }
}

 

  • Автор
преди 23 минути, IvanIvanovBG написа:
using System;

namespace kaldata_task_1_console
{
    // Напишете програма за изчисляване на сумата:
    // 1 - 1 / 2 + 1 / 3 - 1 / 4 + ...+1 / 99999 - 1 / 100000
    // Изчисленията да се проведат по следните 4 начина:
    // 1) членовете се сумират отляво надясно;
    // 2) членовете се сумират отдясно наляво;
    // 3) отделно положителните, отделно отрицателните отляво надясно;
    // 4) както в 3), но сумирането да става отдясно наляво.
    // Сравнете получените резултати и обяснете различията.
    class Program
    {
        private static int getSign(int num)
        {
            return num % 2 == 0 ? -1 : 1;
        }

        private static void calcWithDouble()
        {
            double sum_left_to_right = 0;

            for (int i = 1; i <= 100000; i++)
            {
                sum_left_to_right += 1.0 / i * getSign(i);
            }
            Console.WriteLine("Left to right");
            Console.WriteLine(sum_left_to_right.ToString());

            double sum_right_to_left = 0;

            for (int i = 100000; i >= 1; i--)
            {
                sum_right_to_left += 1.0 / i * getSign(i);
            }
            Console.WriteLine("Right to left");
            Console.WriteLine(sum_right_to_left.ToString());

            double sum_left_to_right_sep = 0;

            for (int i = 1; i <= 100000; i += 2)
            {
                sum_left_to_right_sep += 1.0 / i;
            }
            for (int i = 2; i <= 100000; i += 2)
            {
                sum_left_to_right_sep += -1.0 / i;
            }
            Console.WriteLine("Left to right , first positives, then negatives");
            Console.WriteLine(sum_left_to_right_sep.ToString());

            double sum_right_to_left_sep = 0;

            for (int i = 99999; i >= 1; i -= 2)
            {
                sum_right_to_left_sep += 1.0 / i;
            }
            for (int i = 100000; i >= 1; i -= 2)
            {
                sum_right_to_left_sep += -1.0 / i;
            }
            Console.WriteLine("Right to left , first positives, then negatives");
            Console.WriteLine(sum_right_to_left_sep.ToString());
        }

        private static void calcWithDecimal()
        {
            Decimal sum_left_to_right = 0;

            for (int i = 1; i <= 100000; i++)
            {
                sum_left_to_right += (Decimal)(1.0 / i * getSign(i));
            }
            Console.WriteLine("Left to right");
            Console.WriteLine(sum_left_to_right.ToString());

            Decimal sum_right_to_left = 0;

            for (int i = 100000; i >= 1; i--)
            {
                sum_right_to_left += (Decimal)(1.0 / i * getSign(i));
            }
            Console.WriteLine("Right to left");
            Console.WriteLine(sum_right_to_left.ToString());

            Decimal sum_left_to_right_sep = 0;

            for (int i = 1; i <= 100000; i += 2)
            {
                sum_left_to_right_sep += (Decimal)(1.0 / i);
            }
            for (int i = 2; i <= 100000; i += 2)
            {
                sum_left_to_right_sep += (Decimal)(-1.0 / i);
            }
            Console.WriteLine("Left to right , first positives, then negatives");
            Console.WriteLine(sum_left_to_right_sep.ToString());

            Decimal sum_right_to_left_sep = 0;

            for (int i = 99999; i >= 1; i -= 2)
            {
                sum_right_to_left_sep += (Decimal)(1.0 / i);
            }
            for (int i = 100000; i >= 1; i -= 2)
            {
                sum_right_to_left_sep += (Decimal)(-1.0 / i);
            }
            Console.WriteLine("Right to left , first positives, then negatives");
            Console.WriteLine(sum_right_to_left_sep.ToString());
        }
        static void Main(string[] args)
        {
            Console.WriteLine("Using doubles :");
            calcWithDouble();
            Console.WriteLine();
            Console.WriteLine();
            Console.WriteLine("Using decimals :");
            calcWithDecimal();
            Console.WriteLine("The difference in the sums when using doubles is because of the way doubles are represented in binary. Press any key to exit...");
            Console.ReadKey();
        }
    }
}

 

Много, много благодаря! 

Регистрирайте се или влезете в профила си за да коментирате

Разглеждащи това в момента 0

  • Няма регистрирани потребители разглеждащи тази страница.

Дарение

  • Подкрепи съществуването на форума - направи дарение
    32%
    Дарени 315 € от нужните 1 000 €

Бюлетин

Получавайте известие, когато има важна промяна или новина свързана с форума.

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.