Создание нового массива, заполнение средним арифметическим,выход за границу
- Дан массив
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
Так же в будущем вам поможет отладка.