@dandropov95

Как правильно написать программу нахождения «суммы» значений в последовательности?

Есть такая задача из книги:
5b9fe3b61d104857982490.png

Объясните пожалуйста, что конкретно требуется найти в данной задаче?
И объясните к чему в тексте задачи указана "Подсказка"?

И не понятно к какому значению должны сходиться последовательности. (если вообще должны)

Я вроде как написал решение, но что то кажется не так как нужно.
Вариант решения 1
#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <conio.h>

int main(void)
{
	float value = 1.0;
	int length;
	float result_1 = 0.0;
	float result_2 = 0.0;
	float number = 1.0;

	printf("Input length: ");

	while (scanf("%d", &length) == 1 && length > 0)
	{
		for (int i = 0; i < length; i++, number++)
		{
			result_1 += (value / number);

			if (i % 2 == 0)
				result_2 += (value / number);
			else
				result_2 -= (value / number);
		}

		printf("1.0 + 1.0 / 2.0 + ... = %f\n", result_1);
		printf("1.0 - 1.0 / 2.0 + ... = %f\n", result_2);
		printf("Input the next length: ");
	}

	printf("Done!");

	_getch();

	return 0;
}

Вариант решения 2
#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <conio.h>

int main(void)
{
	float value = 1.0;
	int length;
	float result_1 = 0.0;
	float result_2 = 0.0;
	float number = 1.0;

	printf("Input length: ");

	while (scanf("%d", &length) == 1 && length > 0)
	{
		for (int i = 0; i < length; i++, number++)
		{
			result_1 += (value / number);
		}

		number = 1.0;

		for (int i = 0; i < length; i++, number++)
		{
			if (i % 2 == 0)
				result_2 += (value / number);
			else
				result_2 -= (value / number);
		}

		printf("1.0 + 1.0 / 2.0 + ... = %f\n", result_1);
		printf("1.0 - 1.0 / 2.0 + ... = %f\n", result_2);
		printf("Input the next length: ");
	}

	printf("Done!");

	_getch();

	return 0;
}



Вроде как результаты должны совпадать, но почему то результаты запуска двух решений разные. Подскажите пожалуйста, почему результаты разные (MSVC)? Просто же вычисления разделены на два цикла с теми же условиями.

PS. Скомпилировал оба варианта другим компилятором (GCC). Результат оказался одинаковый в обоих случаях. Почему так?

PSS. Что то я вообще запутался. Попытался слегка по разному записать "одно и тоже", в итоге все результаты оказались разными.
Попробовал сначала во втором цикле заменить i на j. Результат другой получился. Потом попробовал привести перед вторым циклом переменные в значению по умолчанию. В итоге опять другой результат.
Такое чувство как будто при запуске циклы работают в перемешку и все данные смешиваются в кучу...
  • Вопрос задан
  • 128 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы