как работать с итерацией ? то есть пошагово показывать результаты цикла
Mоя каляка маляка при вводе цифры выводит надпись Чтобы остановить введите 0, а чтобы продолжить введите 1, ну еще переменная proda при печати не увеличивается, а все время показывает цифру 1
bool Stop = true;
double ch = 0;
while (Stop)
{
double proda = 1;
Console.WriteLine("Введите x: ");
double x = double.Parse(Console.ReadLine());
Console.WriteLine("Введите y: ");
double y = double.Parse(Console.ReadLine());
Console.WriteLine("Введите длину ряда: ");
int n = int.Parse(Console.ReadLine());
double p = 0;
int k = 0;
int l = 1;
for (int i = 1; i <= n; i++)
{
k = k + 2;
l = l + 2;
proda++;
if (i % 2 == 0)
p += Math.Pow(x, k) * Math.Sin((Math.Pow(y, i))) / (k * l);
Console.WriteLine("Чтобы остановить нажмите 0, а чтобы продолжить введите {0}", proda);
double s = double.Parse(Console.ReadLine());
if (ch == s)
break;
if (s==proda)
Console.WriteLine($"P = {p}");
if (i % 2 == 1)
p -= Math.Pow(x, k) * Math.Sin((Math.Pow(y, i))) / (k * l);
Console.WriteLine("Чтобы остановить нажмите 0, а чтобы продолжить введите {0}", proda);
if (ch == s)
break;
if (s == proda)
Console.WriteLine($"P = {p}");
}
Console.WriteLine($"P = {p}");
Ответы (1 шт):
Автор решения: Bulson
→ Ссылка
static void Main(string[] args)
{
Console.WriteLine("Вычисление ряда.");
Console.WriteLine(new string('-', 40));
var calc = new SeriesCalculator(Console.ReadLine, Console.WriteLine);
while (calc.RunNewSeries())
{
calc.Calculate();
}
Console.ReadLine();
}
class SeriesCalculator
{
private readonly Func<string> _input;
private readonly Action<string> _output;
private bool _isFirstTime = true;
private double _x;
private double _y;
private int _n;
public SeriesCalculator(Func<string> input, Action<string> output)
{
_input = input;
_output = output;
}
internal bool RunNewSeries()
{
if (_isFirstTime)
{
_isFirstTime = false;
}
else
{
_output("Новый ряд? yes/no");
string answer = _input();
if (answer.StartsWith("n",
StringComparison.InvariantCultureIgnoreCase))
{
_output("Хорошо. Закончили.");
return false;
}
}
SetNewSeries();
return true;
}
private void SetNewSeries()
{
_output("Введите x: ");
_x = double.Parse(_input());
_output("Введите y: ");
_y = double.Parse(_input());
_output("Введите длину ряда: ");
_n = int.Parse(_input());
}
internal void Calculate()
{
double p = 0;
int k = 0;
int l = 1;
for (int i = 1; i <= _n; i++)
{
k += 2;
l += 2;
if (i % 2 == 0)
{
p += Math.Pow(_x, k) * Math.Sin((Math.Pow(_y, i))) / (k * l);
}
else
{
p -= Math.Pow(_x, k) * Math.Sin((Math.Pow(_y, i))) / (k * l);
}
_output($"P = {p}");
_output("Для остановки 0, для продолжения любую цифру");
var goOn = _input();
if (goOn.StartsWith("0"))
{
break;
}
}
}
}
