Циклические операции приращения для репликации сахарного тростника - PullRequest
0 голосов
/ 22 января 2019

Я создаю алгоритм для расчета площади для репликации сахарного тростника.

У меня начальная площадь посадки 5 га.Эти 5 гектаров будут срезаны после полного выращивания, а затем клонированы в пропорции 1: 7. Таким образом, моя вторая область будет иметь 35 гектаров (5 * 7)

.становится ниже при каждом разрезе.

Таким образом, третья область будет (5 * 6) + (35 * 7) четвертой областью: (5 * 5) + (35 * 6) + (245 * 7) искоро.Пользователь будет вводить число для итерации и пропорции для умножения.

делая вручную, было бы что-то вроде этого:

area[0] = initialArea;
            area[1] = area[0] * proportion[0]; // = 35
            area[2] = area[0] * proportion[1] + area[1] * proportion[0];
            area[3] = (area[0] * proportion[2]) + (area[1] * proportion[1]) + (area[2] * proportion[0]);
            area[4] = (area[0] * proportion[3]) + (area[1] * proportion[2]) + (area[2] * proportion[1]) + (area[3] * proportion[0]);
            area[5] = (area[0] * proportion[4]) + (area[1] * proportion[3]) + (area[2] * proportion[2]) + (area[3] * proportion[1]) + (area[4] * proportion[0]);

Есть ли способ поместить это в цикл?

1 Ответ

0 голосов
/ 23 января 2019

Да, вы можете превратить это в цикл for.

Цикл для каждой итерации:

for (int n = 0; n < iteration; n++)
{
    area[iteration] += area[n] * proportion[iteration - n - 1];
}

, который вы можете обернуть с количеством итераций:

for (int i = 1; i <= iterations; i++)
{
    for (int n = 0; n < i; n++)
    {
        area[i] += area[n] * proportion[i - n - 1];
    }
}

вам придется инициализировать с area[0] = intialArea. С вводом:

Console.Write("Enter inital area: ");
double initialArea = double.Parse(Console.ReadLine());
Console.Write("Enter proportions, separate each proportion with spaces: ");
string input = Console.ReadLine();
double[] proportion = input.Split(' ').Select(x => double.Parse(x)).ToArray();
int iterations = proportion.Length;
Console.WriteLine($"Using {iterations} iterations");

double[] area = new double[proportion.Length + 1];
area[0] = initialArea;

for (int i = 1; i <= iterations; i++)
{
    Console.Write($"Iteration = {i}: ");

    for (int n = 0; n < i; n++)
    {
        area[i] += area[n] * proportion[i - n - 1];

        Console.Write($"area[{n}] = {area[n]} ");
    }

    Console.WriteLine();
}

Console.ReadLine();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...