Kakeru
@Kakeru

Как сформировать массив, длина которого будет равна количеству элементов, удовлетворяющих условию?

Мой код
using System;

namespace lab5
{
    class Program
    {
        static void Main()
        {
            static double SearchAverage(double[] array, int n) 
            {
                double s = 0;

                for (int i = 0; i < n; i++)
                {
                    s += array[i];
                }

                double a = Convert.ToDouble(s / array.Length);

                return a;
            }

            int n;

            Console.Write("Введите значение a: ");
            double a = double.Parse(Console.ReadLine());

            Console.Write("Введите значение b: ");
            double b = double.Parse(Console.ReadLine());

            Console.Write("Введите размер массива: ");
            n = Convert.ToInt32(Console.ReadLine());

            double[] numbers = new double [n];

            Console.WriteLine("Введите элементы исх. массива: ");

            for (int i = 0; i < n; i++)
            {
                numbers[i] = double.Parse(Console.ReadLine());
            }

            Console.WriteLine("Элементы исходного массива: ");
            for (int i = 0; i < n; i++)
            {
                Console.Write(numbers[i] + " ");
            }

            Console.WriteLine("\nЗначение среднего арифметического исх. массива: " + SearchAverage(numbers, n));
                
            double[] n_numbers = new double [n];

            int k = 0;

            for (int i = 0; i < n; i++)
            {
                if ((numbers[i] > 0) && (numbers[i] > a) && (numbers[i] < b)){
                    n_numbers[k] = numbers[i];
                }
                
                k++;
            }

            Console.WriteLine("\nЭлементы нового массива: ");
            for (int i = 0; i < n; i++)
            {
                Console.Write(n_numbers[i] + " ");
            }

            Console.WriteLine("\nЗначение среднего арифметического нового массива: " + SearchAverage(n_numbers, n));
        }
    }
}


Мне нужно, чтобы в новом массиве, его длина была равна количеству элементов удовлетворяющих условию, и, чтобы эта длина так же передавалась в SearchAverage, например:
Исходный массив, длиной 5, выглядит так: [12 -1 50 -23 43]; a = 10, b = 45; Среднее арифметическое: 16,2

Тогда новый должен иметь вид [12 43]; Среднее арифметическое: 27,5

Сейчас же у меня и среднее арифметическое нового массива считает с ошибкой из-за длины, и, сам массив выглядит не так, как мне надо. Помогите пожалуйста, после питона одна головная боль с массивами в шарпе..
  • Вопрос задан
  • 81 просмотр
Решения вопроса 1
@alexalexes
Самое ленивое исправление - заменить n на k в двух местах.
Console.WriteLine("\nЭлементы нового массива: ");
for (int i = 0; i < n /* тут заменить на k */; i++)
            {
                Console.Write(n_numbers[i] + " ");
            }

            Console.WriteLine("\nЗначение среднего арифметического нового массива: " + SearchAverage(n_numbers, n /* тут заменить на k */));
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
ayazer
@ayazer
Sr. Software Engineer
все же проще

var min = 10;
var max = 45;

var array = new int[]
{
    12, -1, 50, -23, 43
};
var avg = array.Average(); //16.2

var newArray = array.Where(c => c > min && c < max && c > 0).ToArray(); // [12, 43]
var newAvg = newArray.Average(); //27.5
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы