double F(double x)
{
return x*x+6*x+12;
}
double E = 0.8, l = 0.08;
double a = -8, b = 4;
double x=0, z=0,L=0;
P1:
x = (a + b - E) / 2;
z = (a + b + E) / 2;
if (F(x) <= F(z))
{
b = z;
goto P2;
}
else
{
a = x;
goto P2;
}
P2:
L = Math.Abs(b - a);
if (L<=l)
{
x = (a + b) / 2;
textBox1.Text = Convert.ToString(x);
}
else
{
goto P1;
}
В чем ошибка C#
Я реализовал метод поиска минимума функции по методу дихотомии.Но при запуске программы происходит зацикливание. Компилятор ничего не выдает. Подскажите плиз в чем проблема.
Ээммм... Позвольте полюбопытствовать, что заставило вас написать порнографию с goto?
а что с goto неправильно? P2 для страховки)))
[ATTACH=CONFIG]5382[/ATTACH]
Цитата: Alm3n
Негласным кодексом программистов запрещено использовать этот оператор.
))) Тогда как еще возвращаться в нужное мне место?
Грамотно используя функции и return. :)
Цитата: Dinar1623
))) Тогда как еще возвращаться в нужное мне место?
Циклы нужно использовать: http://msdn.microsoft.com/ru-ru/library/32dbftby.aspx
или рекурсию: http://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D1%8F
пример рекурсии в C#: http://www.sernam.ru/book_csharp.php?id=54
Код:
double F(double x)
{
return x*x+6*x+12;
}
double E = 0.8,z=0,x=0;
double a = -8, b = 4;
double l = 0.08,L=2;
while (L >= l)
{
x = (a + b - E) / 2;
z = (a + b + E) / 2;
if (F(x) <= F(z))
{
b = z;
}
else {
a = x;
}
L = Math.Abs(b - a);
k++;
}
textBox4.Text = Convert.ToString(k);//количество итераций
textBox1.Text = Convert.ToString(x);// точка минимума
{
return x*x+6*x+12;
}
double E = 0.8,z=0,x=0;
double a = -8, b = 4;
double l = 0.08,L=2;
while (L >= l)
{
x = (a + b - E) / 2;
z = (a + b + E) / 2;
if (F(x) <= F(z))
{
b = z;
}
else {
a = x;
}
L = Math.Abs(b - a);
k++;
}
textBox4.Text = Convert.ToString(k);//количество итераций
textBox1.Text = Convert.ToString(x);// точка минимума
попробуйте использовать отладчик и сразу станет понятно правильно вы используете while или нет
а зачем переменная l ?
Цитата: Shrek19877
попробуйте использовать отладчик и сразу станет понятно правильно вы используете while или нет
Как использовать отладчик?
Цитата: Shrek19877
а зачем переменная l ?
l-это заданная точность