Цикл While проскакивает ограничения - C#

Узнай цену своей работы

Формулировка задачи:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SimpleCounter
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Set a limit");
            double C = Convert.ToDouble(Console.ReadLine());
            Console.WriteLine("Set a start point");
            double A = Convert.ToDouble(Console.ReadLine());
            double B = A / 2;
            double Asum = A + B;
            double AsumControl = 0;
            int counter = 0;

            Console.WriteLine("На шаге номер " + counter + " сумма была равна: " + Asum);
            B = B / 2;

            while (Asum !=AsumControl)
                {
                AsumControl = Asum;
                Asum = Asum + B;
                counter++;
                Console.WriteLine("На шаге номер " + counter + " сумма была равна: " + Asum);
                B = B / 2;
                if (Asum >= C) break;
                }
            Console.ReadKey();
        }
    }
}
Когда-то, давным-давно, в далёкой-далёкой галактике, в какой-то книге я вычитал, что из пункта А в пункт Б невозможно дойти, если каждый последующий шаг будет в 2 раза короче предыдущего. Понятное дело, что это true/false этого утверждения зависит от дистанции и длинны первого шага, но не в том суть. Решил я значит от совсем нечего делать написать программку которая бы считала пройденное расстояние по заданному алгоритму. Вопрос в следующем: У условиях while четко указано, что цикл повторяется только пока пройденное расстояние продолжает изменяться с последующим шагом. Но, к примеру, при дистанции 25, длине первого шага 7, цикл продолжает выводить неизменный ответ 7 раз. Хотя не должен бы. Почему? Есть предположение, что дело в хитром округлении, но хотелось бы несколько более грамотного объяснения. Спасибо.

Решение задачи: «Цикл While проскакивает ограничения»

textual
Листинг программы
Console.WriteLine("На шаге номер {0} сумма была равна: {1}", counter, Asum);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.875 из 5