Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.06.2017, 23:39   #1
shkap
 
Регистрация: 01.06.2017
Сообщений: 4
По умолчанию 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;
Console.Write("Введите значение a = ");
a = Convert.ToDouble(Console.ReadLine());
Console.Write("Введите значение b = ");
b = Convert.ToDouble(Console.ReadLine());
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);
Console.ReadKey();
}
} 
}

Последний раз редактировалось Аватар; 07.06.2017 в 14:11.
shkap вне форума Ответить с цитированием
Старый 07.06.2017, 00:06   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
Сообщение от shkap Посмотреть сообщение
Код:
for (double i = 1; i <= k; i++)
В чём сакральный смысл использовать тут double?! По большому счёту это вообще лишний цикл, как и переменная k.

И зачем вы разделяете i и I? В целом формула выглядит как сумма членов (-1)^i * 1/i

И ещё: -1 в степени i даст либо 1 либо -1 - имеет ли смысл вызывать Pow, если проще и быстрее определить знак по чётности i?
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...

Последний раз редактировалось Sciv; 07.06.2017 в 00:11.
Sciv вне форума Ответить с цитированием
Старый 07.06.2017, 11:16   #3
shkap
 
Регистрация: 01.06.2017
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Sciv Посмотреть сообщение
В чём сакральный смысл использовать тут double?! По большому счёту это вообще лишний цикл, как и переменная k.

И зачем вы разделяете i и I? В целом формула выглядит как сумма членов (-1)^i * 1/i

И ещё: -1 в степени i даст либо 1 либо -1 - имеет ли смысл вызывать Pow, если проще и быстрее определить знак по чётности i?
А как тогда нужно сделать?
shkap вне форума Ответить с цитированием
Старый 07.06.2017, 13:32   #4
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
Сообщение от shkap Посмотреть сообщение
А как тогда нужно сделать?
Предполагаю, что как-то так (писано на коленке в Борман Си):

Код:
#include <stdio.h>
#include <iostream>


int getSign(int num){
  if (num % 2 == 0) {
	   return 1;
  }
  else{
	  return -1;
  }
}

double getCurrentNumber(int num){
	return  1 / (float)num;
}

int main(int argc, _TCHAR* argv[])
{
	using namespace std;

	double a,b, result;
	int count = 0;
	double sum = 0;
	int i = 1;

	cout << "Enter a: ";
	cin >> a;
	cout << "Enter b: ";
	cin >> b;
	while (count < 3){
		sum = sum + getCurrentNumber(i);
		result = getSign(i) * sum;
		if ((result < a)||(result > b)) {
			count++;
			cout << "Number #" << count << " = " << result << "\n";
		}
		i++;
	}

	cout << "Result Number = " << result << "\n";
	system("pause");
}
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 07.06.2017, 18:41   #5
shkap
 
Регистрация: 01.06.2017
Сообщений: 4
По умолчанию

Спасибо!)
shkap вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Метод Ньютона (касательных), программа выдает неправильный результат Alexandr- Помощь студентам 3 01.12.2016 00:19
[Очередь] Помогите найти ошибку...программа после компиляции и ввода значения не выдает ответ Калючка Паскаль, Turbo Pascal, PascalABC.NET 8 07.11.2016 16:57
Выдает неправильный ответ - метод половинного деления. Срочно!!! cyx Помощь студентам 0 15.05.2015 23:56
Программа выдает неверный ответ(c++) inmanika Помощь студентам 5 17.11.2011 21:23
Можете объяснить? Bayram_662 Компоненты Delphi 1 12.01.2010 22:51