Можете объяснить почему программа выдает неправильный ответ? - C#

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

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

Условие задачи: Даны действительные числа a, b ( a << b ). Найти третий член из генерации чисел ((-1)^i) * (1 + 1/2 +.....1/i); (i = 1, 2...), которая не пpинадлежит отрезку [a,b].
namespace ConsoleApplication15
{
class Program
{
static void Main(string[] args)
{
double a = 0, b = 0, r = 0, sum = 0, s = 0, l = 0, k = 32000;
int z;
do
{
Console.WriteLine("- Нажмите 1 и Enter для просмотра условия задачи");
Console.WriteLine("- Нажмите 2 и Enter для ввода отрезка [a, b]");
Console.WriteLine("- Нажмите 3 и Enter для выполнения программы");
Console.WriteLine("- Нажмите 4 и Enter для выхода из программы");
z = Convert.ToInt32(Console.ReadLine());
switch (z)
{
case 1:
Console.WriteLine("Даны действительные числа a, b ( a << b ). Найти третий член из генерации чисел ((-1)^i) * (1 + 1/2 +.....1/i); (i = 1, 2.....) , который не пpинадлежит отрезку [a, b].");
break;
case 2:
Console.Write("Введите значение a = ");
a = Convert.ToDouble(Console.ReadLine());
Console.Write("Введите значение b = ");
b = Convert.ToDouble(Console.ReadLine());
break;
case 3:
for (double i = 1; i <= k; i++)
{
do
{
l = l + 1;
sum += (1 / l);
r = Math.Pow(-1, i) * sum;
if ((r < a) || (r > b))
s++;
}
while (s == 3);
} 
Console.WriteLine("Третье число: " + r);
break; 
}
 
}
while (z < 4);
Console.ReadKey();
}
} 
}

Решение задачи: «Можете объяснить почему программа выдает неправильный ответ?»

textual
Листинг программы
int i = 1;
do
{
  l = l + 1;
  sum += (1 / l);
  r = Math.Pow(-1, i) * sum;
  if ((r < a) || (r > b))
      s++;
  i++;
}
while (s != 3);
Console.WriteLine("Третье число: " + r);
break;

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

15   голосов , оценка 3.867 из 5
Похожие ответы