using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Kepler
{
class Kepler
{
static void Main(string[] args)
{
//Variables
double M = 0; //Anomalia
double e = 0; //Excentricidad
double e0 = 0; //Excentricidad Corregida
//double E1=0;
double E0 = 0; //
Console.WriteLine("Ingresa M:");
string m = Console.ReadLine();
M = Convert.ToDouble(m);
Console.WriteLine("Ingresa e:");
string ee = Console.ReadLine();
e = Convert.ToDouble(ee);
//Calculo de e0
e0 = e * 180 / Math.PI;
Console.WriteLine("Ingresa E0:");
string EE0 = Console.ReadLine();
E0 = Convert.ToDouble(EE0);
//calculo de las funciones trigonometricas
double sin = Math.Sin((E0 * Math.PI / 180));
double cos = Math.Cos((E0 * Math.PI / 180));
int cuenta = 0;
Console.Clear();
double total = Kep(M, e, sin, cos, e0, E0, ref cuenta);
Console.WriteLine("Total=" + total);
Console.ReadLine();
}
static double Kep(double M, double e, double sin, double cos, double e0, double E0, ref int cuenta)
{
double E1 = 0;
for (cuenta = 0; cuenta <= 50; cuenta++)
{
E1 = E0 + ((M + e0 * sin - E0) / (1 - e * cos));
Console.WriteLine("E1 hasta ahora" + E1);
}
return Kep(M, e, sin, cos, e0, E1, ref cuenta);
}
}
}
答案 0 :(得分:1)
在double E1
循环之前声明变量for
,然后在循环内分配它。确保初始化变量以保持编译器满意。无关紧要,因为它将在第一次迭代中被覆盖。
另外,请注意,for
循环执行51次,而不是50次。如果您希望执行50次,请将for循环中的<=
更改为<
。
另外,正如Lior Raz指出的那样(好的捕获),你需要在Kep
函数中添加一个停止条件,因为递归调用将永远持续,最终导致堆栈溢出。
答案 1 :(得分:0)
将变量E1
移到循环外部,即将其放在循环之前
问题是它与return语句不在同一个上下文中,它不知道它存在
即
// initialize E1 in the case cuenta is greater than or equal to 50
double E1 = 0;
for (cuenta=0; cuenta <= 50; cuenta++)
{
E1 = E0 + ((M + e0 * sin - E0) / (1 - e * cos));
Console.WriteLine("E1 hasta ahora" + E1);
}