Метки и траблы с перемещением, юзая GOTO - C#
Формулировка задачи:
Собсна мой код, который по идее должен позволять по формуле вычислять значение переменной F, которой присвоен тип Double. Но не линкуются условия - зеленый exception вылезает на M-ке сверху, до инициализации, ругается на отсутствие ссылки. И после GOTO шлет меня в дали далекие, выдавая уже красный exception. Как исправить? Я чайничек, на первом курсе сижу. Кое-что смыслю уже, конечно, но вот успеть самому разобраться ну никак не получается.
М: int j, h, g, r, d; //вот тут как раз зеленый exception
j = 0;
Double F;
Console.Write("h=");
h = Convert.ToInt32(Console.ReadLine());
Console.Write("r=");
r = Convert.ToInt32(Console.ReadLine());
Console.Write("g=");
g = Convert.ToInt32(Console.ReadLine());
if (h > 2 * r)
{
Console.WriteLine("Начинаем заново, значение недопустимо");
}
goto M; //тут красный exception
if (g+g<h*h)
{
Console.WriteLine("Начинаем заново, значение недопустимо");
}
F = Math.Sqrt(Math.Log(r-2*h)/(2*g-h*h))-(g+h)/Math.Sin(2*r);
Console.WriteLine("F=" + F);
Console.ReadLine();
Console.Write("Начать заново?=");
d = Convert.ToInt32(Console.ReadLine());
if (d > j)
{
Console.WriteLine("Начинаем заново");
}
goto M; //тут красный exceptionРешение задачи: «Метки и траблы с перемещением, юзая GOTO»
textual
Листинг программы
while (true)
{
int j, h, g, r, d;
j = 0;
Double F;
while (true)
{
Console.Write("h=");
h = Convert.ToInt32(Console.ReadLine());
Console.Write("r=");
r = Convert.ToInt32(Console.ReadLine());
Console.Write("g=");
g = Convert.ToInt32(Console.ReadLine());
if ((h > 2 * r) || (g + g < h * h))
Console.WriteLine("Начинаем заново, значение недопустимо");
else
break;
}
F = Math.Sqrt(Math.Log(r - 2 * h) / (2 * g - h * h)) - (g + h) / Math.Sin(2 * r);
Console.WriteLine("F=" + F);
Console.ReadLine();
Console.Write("Начать заново?=");
d = Convert.ToInt32(Console.ReadLine());
if (d > j)
Console.WriteLine("Начинаем заново");
else
break;
}