Программа по определению прогрессии
Ниже представлен полный код, на выводе в экран всегда пишет, что последовательность является и той и той прогрессией. Не могу понять в чем ошибка.
static void definition(double[] Mass,int Elements)
{
double d = Mass[Elements -1] - Mass[Elements - 2];
double q = Mass[Elements -1] / Mass[Elements - 2];
int count1 = 0;
int count2 = 0;
for (int i = 0; i < Elements; i++)
{
if (Mass[i] == Mass[0] + d * (i - 1))
{
count1++;
}
else
{
continue;
}
if (Mass[i] == Mass[0] * Math.Pow(q, i - 1))
{
count2++;
}
else
{
continue;
}
}
if (count1 == count2)
{
Console.WriteLine("\nДанная прогрессия является и арифметической и геометрической");
Console.ReadKey();
}
else if (count2 == Elements)
{
Console.WriteLine("\nЭто геометрическая прогрессия");
Console.ReadKey();
}
else if (count1 == Elements)
{
Console.WriteLine("\nЭто арифметическая прогрессия ");
Console.ReadKey();
}
else
{
Console.WriteLine("\nДанная последовательность не является ни одной из прогрессий");
Console.ReadKey();
}
}
static void Main(string[] args)
{
Console.WriteLine("Введите кол-во символов:");
int numberofE = int.Parse(Console.ReadLine());
// Проверка на кол-во элементов
if (numberofE <= 1)
{
Console.WriteLine("Это не является последовательностью, запустите программу снова");
Console.ReadKey();
}
else
{
double[] sequence = new double[numberofE];
for (int i = 0; i < numberofE; i++)
{
Console.WriteLine("Введите {0}-е число", i + 1);
sequence[i] = double.Parse(Console.ReadLine());
}
Console.WriteLine("Ваш набор чисел:");
for (int i = 0; i < numberofE; i++)
{
Console.Write(sequence[i]);
}
Console.ReadKey();
definition(sequence, numberofE);
}
}
Ответы (1 шт):
Автор решения: Igor
→ Ссылка
Выведите в консоль count1 и count2 и поймете.
... (i - 1)) - почему "минус один"?
Mass[i] == ... - точная проверка на равенство чисел с плавающей точкой редко работает как ожидается.