Почему программа выводит значение 0 вместо ожидаемого результата?

Можете ли вы помочь мне разобраться с проблемой вывода нулей при создании двух новых массивов - одного с положительными, а другого с отрицательными элементами исходного массива? 

Вот мой код:

```csharp
class Program
{
    static void Main(string[] args)
    {
        Random rand = new Random();
        int Pos = 0;
        int Neg = 0;
        int kolPos = 0;
        int kolNeg = 0;
        int[] massiv;
        Console.WriteLine("Вывод исходного массива:\n");
        massiv = new int[13];
        for (int i = 0; i < 13; i++)
        {
            massiv[i] = (int)rand.Next(-100, 100);
            if (massiv[i] > 0) kolPos++;
            if (massiv[i] < 0) kolNeg++;
            Console.Write($"{massiv[i]}  ");
        }
        Console.WriteLine("\nВывод массивов отрицательных и положительных чисел\n");

        int[] massiv2 = new int[kolPos];

        for (int x = 0; x < massiv2.Length; x++)
        {
            if (massiv[x] > 0)
            {
                massiv2[Pos] = massiv[x];
                Pos++;
            }
        }
        for (int x = 0; x < kolPos; x++)
        {
            Console.Write($"{massiv2[x]}  ");
        }

        Console.WriteLine();

        int[] massiv3 = new int[kolNeg];

        for (int x = 0; x < massiv3.Length; x++)
        {
            if (massiv[x] < 0)
            {
                massiv3[Neg] = massiv[x];
                Neg++;
            }
        }
        for (int x = 0; x < kolNeg; x++)
        {
            Console.Write($"{massiv3[x]}  ");
        }
        Console.ReadLine();
    }
}
```
Изображение к вопросу
  • 19 ноября 2023 г. 11:10
Ответы на вопрос 2
Проблема возникает из-за неправильного использования индексов во втором и третьем циклах. 

В коде первого цикла вы определяете количество положительных и отрицательных чисел, сохраняя их в переменных "kolPos" и "kolNeg" соответственно. Однако, во втором цикле вы используете переменную "Pos" в качестве индекса для массива "massiv2" и увеличиваете ее значение после каждой итерации. Так же и для переменной "Neg" и массива "massiv3" в третьем цикле. 

Проблема заключается в том, что переменные "Pos" и "Neg" не соответствуют нужным вам индексам, так как они увеличиваются после каждой итерации циклов, в то время как индексы массивов должны начинаться с 0.

Чтобы исправить это, вам нужно изменить код второго цикла следующим образом:

```csharp
for (int x = 0; x < massiv.Length; x++)
{
    if (massiv[x] > 0)
    {
        massiv2[x] = massiv[x];
    }
}
```

А код третьего цикла нужно изменить следующим образом:

```csharp
for (int x = 0; x < massiv.Length; x++)
{
    if (massiv[x] < 0)
    {
        massiv3[x] = massiv[x];
    }
}
```

Теперь программа должна выводить ожидаемые результаты.
При переборе элементов массива, используйте длину того же самого массива.
Похожие вопросы