Создание нового массива, заполнение средним арифметическим,выход за границу

  1. Дан массив A размера N. Сформировать новый массив B того же размера по следующему правилу: элемент B[K] равен среднему арифметическому элементов массива A с номерами от 1 до K.

В цикле всегда заходит за границу массив, можете помочь с задачей?

Отладка:

  • элементы массива {1;2;3;4;5;6;7;8;9;10}
  • должно получиться {1;1.5;2;2.5;3;3.5;4;4.5;5;5.5}
using System;

namespace Zadacha28_LR9
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                double[] A = new double[10];
                double[] B = new double[10];
                Input(A);
                Algorhythm(A, B);
                Console.WriteLine("Массив B:");
                Output(B);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
        static void Input(double[] A)
        {
            for (int i = 0; i < A.Length; ++i)
            {
                Console.WriteLine("Введите {0} элемент массива", i);
                A[i] = int.Parse(Console.ReadLine());
            }

        }
        static void Output(double[] B)
        {
            for (int i = 0; i < B.Length; i++)
            {
                Console.Write("{0}", B[i]);
            }
        }
        static void Algorhythm(double[] A, double[] B)
        {
            double sum = 0;
            B[0] = A[0];
            int count = 1;
            
            for(int i = 1;i<A.Length && i < B.Length;)
            {
                i++;
                sum = A[i] + A[i - 1];
                count++;
                B[i] = sum / count;
                Console.WriteLine(count);

                if (i == A.Length && i == B.Length)
                {
                    break;
                }
            }
        }
    }
}

Ответы (3 шт):

Автор решения: Yaroslav

Во первых, не с 1 до К, а с 0!

Во вторых, что за K?... Какое-то?? i!

double[] Base = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
double[] Target = new double[Base.Length];
for (int i = 0; i < Base.Length; i++) {
    double[] Range = new double[i+1];
    Array.Copy(Base, Range, i+1);
    Target[i] = Range.Sum()/(double)Range.Length;
}
→ Ссылка
Автор решения: vp_arth
static double[] Avgs(double[] arr) {
    double sum = 0.0;
    double[] result = new double[arr.Length];
    for (int i = 0; i < arr.Length; ++i) {
        sum += arr[i];
        result[i] = sum / (i+1);
    }
    return result;
}
static void Output(double[] B)
{
    for (int i = 0; i < B.Length; i++)
    {
        Console.Write("{0} ", B[i]);
    }
}
static void Main() {
    double[] input = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    double[] result = Avgs(input);
    Output(result);
}

1 1.5 2 2.5 3 3.5 4 4.5 5 5.5

→ Ссылка
Автор решения: aepot

Вы немного перемудрили, i++ надо было делать при декларации цикла, а не в его теле, так как в этом случае оно происходит после выполнения блока цикла, а не в самом начале его тела. Так же я исправил вычисление результата.

class Program
{
    static void Main(string[] args)
    {
        try
        {
            Console.Write("Введите N: ");
            int N = int.Parse(Console.ReadLine());
            double[] A = new double[N];
            double[] B = new double[N];
            Input(A);
            Algorhythm(A, B);
            Console.WriteLine("Массив B:");
            Output(B);
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }
    }

    static void Input(double[] A)
    {
        for (int i = 0; i < A.Length; ++i)
        {
            Console.Write("Введите A[{0}]: ", i);
            A[i] = int.Parse(Console.ReadLine());
        }
    }

    static void Output(double[] B)
    {
        for (int i = 0; i < B.Length; i++)
        {
            Console.Write("{0} ", B[i]);
        }
    }

    static void Algorhythm(double[] A, double[] B)
    {
        double sum = 0;

        for (int i = 0; i < A.Length; i++)
        {
            sum += A[i];
            B[i] = sum / (i + 1);
        }
    }
}

Вывод в консоль

Введите N: 10
Введите A[0]: 1
Введите A[1]: 2
Введите A[2]: 3
Введите A[3]: 4
Введите A[4]: 5
Введите A[5]: 6
Введите A[6]: 7
Введите A[7]: 8
Введите A[8]: 9
Введите A[9]: 10
Массив B:
1 1,5 2 2,5 3 3,5 4 4,5 5 5,5

Так же в будущем вам поможет отладка.

→ Ссылка