Другие языки программирования и технологии

C#. Нужна помощь.

namespace ggg

{

class Program

{

static void Main(string[] args)

{

Random rnd = new Random();

int n = rnd.Next(5, 14);

double[] a = new double[n];

Console.WriteLine("Исходный массив");

Console.ForegroundColor = ConsoleColor.Red;

for (int i = 0; i < n; i++)

{

Console.Write("{0,6}", i);

}

Console.ForegroundColor = ConsoleColor.White;

Console.WriteLine();

for (int i = 0; i < n; i++)

{

a[i] = -10 + 20 * rnd.NextDouble();

Console.Write("{0,6:f2}", a[i]);

}

Console.WriteLine();

double max = a[0];

int iMax = 0;

for (int i = 1; i < n; i++)

{

if (a[i] > max)

{

max = a[i]; iMax = i;

}

}

Console.WriteLine("\nМаксимальный элемент = {0,6:f2}, а его номер = {1,5}", a[iMax], iMax);

Console.WriteLine("Элементы до последнего положительного: ");

int sMax = 0;

for (int i = a.Length - 1; i > 0; i--)

if (a[i] > 0)

{

for (int j = 0; j < i; j++)

Console.Write("{0,6:f2}", a[j]);

sMax += a[j];

}

Console.WriteLine("\nИх сумма = {0,6:f2}", sMax);

Console.ReadKey();

помогите пожалуйста, ошибка вот в этом куске:

Console.WriteLine("Элементы до последнего положительного: ");
int sMax = 0;
for (int i = a.Length - 1; i > 0; i--)
if (a[i] > 0)
{
for (int j = 0; j < i; j++)
Console.Write("{0,6:f2}", a[j]);
sMax += a[j];
}

Поиск и вывод элементов до последнего положительного.

И как сжать массив, удалив из него все элементы, модуль которых находится в интервале [а, b]. Напишите хотя бы алгоритм как это делается, не понимаю (
using System;

namespace TestArray
{
class MainClass
{
public static void Main (string[] args)
{
Random rnd = new Random ();
double[] arr = new double[rnd.Next (5, 14)];

//Заполнение, поиск последнего полож. и вывод на экран исходного массива
int index = -1;
for(int i=0; i<arr.Length; i++) {
double value = -10 + 20 * rnd.NextDouble();
arr[i] = value;
Console.Write ("{0,6:f2}", value);
if (value >= 0) index = i;
}
Console.WriteLine();

//Вывод массива от 0 до последнего позитивного (включительно)
Console.WriteLine("[0..LastPositive]");
//Если был хоть один положительный
if (index >= 0) {
//Обрезаем массив
Array.Resize(ref arr, index + 1);
//Выводим
Array.ForEach(arr, x => Console.Write ("{0,6:f2}", x));
} else Console.WriteLine("Not found");

//Ищем все элементы в диапазоне a,b, если элемент берется по модулю
Console.WriteLine();
Console.WriteLine("x=abs(x) ; x E [a,b]");
double a = 1.0; double b = 3.0;
arr = Array.FindAll(arr, x => (Math.Abs(x)>=a && Math.Abs(x)<=b));
Array.ForEach(arr, x => Console.Write ("{0,6:f2}", x));

Console.ReadKey();
}
}
}

Пруф ;)



Если что - пишите на почту.
Алексей Зрядчиков
Алексей Зрядчиков
84 764
Лучший ответ
Я так понял нужно вывести часть массива до последнего положительного положительного элемента. Что тебе мешает в предыдущем цикле, где ты максимальный искал, заодно посчитать индекс последнего положительного? И после этого уже просто использовать его в новом цикле.

И зачем сжимать массив? Тебе просто нужно вывести его не полностью, вот и выводи.

for (int i = 0; i < a.Length; i++)
{
if (Math.Abs(a[i]) >= a && Math.Abs(a[i]) <= b)
Console.Write(a[i]);
}
Демьян Сычёв
Демьян Сычёв
18 381
преобразуйте в List и из него удаляйте методом Remove
а потом в новый массив можете записать (метод ToArray)

или изначально работать с List вместо массива
VS
Vasilly Safonov
4 543