C#. Нужна помощь с методами, сделать надо через return. Хоть с некоторыми из них помогите, пожалуйста.
Коротко на русском:
- одномерный массив вводится с консоли
- метод, который посчитает среднее арифметическое
- метод, что посчитает сумму и произведение элементов до последнего положительного
- метод, сжимает массив, удаляя все элементы которые находятся в промежутке [а,b], заполнить освободившееся места в конце нулями.
Answers & Comments
using System;
using System.Linq;
namespace restless
{
class Program
{
static double Average(double[] arr)
{
double _sum = 0;
for (int i = 0; i < arr.Length; i++)
_sum += arr[i];
return _sum / arr.Length;
}
static Tuple<double, double> SumProdToLastPositive(double[] arr)
{
double _sum = 0, _prod = 1;
int i = arr.Length - 1;
while(arr[i] <= 0)
{
i--;
}
for (int j = 0; j <= i; j++)
{
_sum += arr[j];
_prod *= arr[j];
}
return Tuple.Create(_sum, _prod);
}
static double[] RemoveElements(double[] arr, double a, double b)
{
int startSize = arr.Length;
var tmp = arr.Cast<double>().ToList();
for (int i = 0; i < tmp.Count; i++)
{
if (arr[i] >= a && arr[i] <= b)
{
tmp.Remove(arr[i]);
}
}
for (int i = 0; i < tmp.Count; i++)
{
arr[i] = tmp[i];
}
for (int i = tmp.Count; i < startSize; i++)
arr[i] = 0;
return arr;
}
static void Main()
{
Random rnd = new Random();
double[] arr = new double[10];
Console.WriteLine("Введите элементы массива (каждый на новой строке): ");
for (int i = 0; i < 10; i++)
arr[i] = Convert.ToDouble(Console.ReadLine());
/*Для удобства проверки сделана генерация только целых чисел*/
Console.Write("Исходный массив: ");
for (int i = 0; i < 10; i++)
{
Console.Write($"{arr[i]} ");
}
Console.WriteLine();
//функция, которая вернет нам среднее арифметическое
Console.WriteLine($"Среднее арифметическое: {Average(arr)}");
//функция, которая вернет нам сумму и произведение элементов до последнего положительного
Console.WriteLine($"Сумма и произведение до последнего положительного: {SumProdToLastPositive(arr)}");
/*Последняя функция возвращает массив, мы его запишем в переменную g, а затем выведем на экран.
Хотя можно было передать массив с модификатором ref и изменять его, ну так тоже пойдёт.
*/
Console.Write("Изменённый массив после удаления элементов из промежутка [a, b]: ");
var g = RemoveElements(arr, 2.0, 5.0);
for (int i = 0; i < g.Length; i++)
Console.Write(g[i] + " ");
}
}
}