-2

Есть двумерный массив состоящий из вещественных чисел, вычислить: количество отрицательных элементов в тех строках, где хотя бы один элемент равен нулю

        double[,] massiv = new double[,]
         {
             {-13.2, 0, 10.5, -2.4, 5.8 },
             {10.0, 5.6, -4.10, 3.3, -20.13},
             {16.5, 19.3, 0, -11.0, -8.0 }
          };
    int height = massiv.GetLength(0);
    int width = massiv.GetLength(1);
    for (int y = 0; y < height; y++)
    {
        for (int x = 0; x < width; x++)
        {
            Console.Write(massiv[y, x] + "\t");
        }
        Console.WriteLine();
    }


    int z = 0;
    // Действие
    for(int i = 0; i < massiv.Length; i++)
    {
        for(int b = 0; b < massiv.Length; b++)
        {
            if(b == 0 && i < 0)
            {


            }


        }
    }

jojooj
  • 21
  • 2
    Вещественные числа не проверяют на равенство, потому что может быть 0,0000000000000000000000001, и это не равно 0. Вещественные числа проверяют на вхождение в диапазон значений с нужной точностью. – aepot May 18 '21 at 22:43
  • double[,] massiv = new double[,] { {-13.2, 0, 10.5, -2.4, 5.8 }, {10.0, 5.6, -4.10, 3.3, -20.13}, {16.5, 19.3, 0, -11.0, -8.0 } }; могу ли в этом массиве провести эту операцию? – jojooj May 18 '21 at 22:45
  • 2
  • Можете, 2 цикла, 1 условие. Но для начала отредактируйте вопрос, добавьте туда ваш массив и код, который вы написали, и он не работает, и опишите, что именно не получается, какие ошибки в каких строках кода возникают. – aepot May 18 '21 at 22:55
  • ошибок нет вроде, не могу условие понять как записать – jojooj May 18 '21 at 23:11
  • 1
    Берете int счетчик для строки и bool флаг, и начинаете считать в строке отрицательные числа, как только встретили ноль, ставите флаг в true, а как прошли всю строку, проверяете флаг, если тру, то добавляете сумму строки к общему счетчику, который и будет впоследствии нужным вам результатом. – aepot May 18 '21 at 23:37
  • моя проблема в том что я не могу понять как это в коде отобразить, а так это всё я понимаю – jojooj May 18 '21 at 23:45

1 Answers1

1
int[] rows_with_query = new int[height];
for (int y = 0; y < height; y++)
{
    bool haszero = false;
    int belowzero = 0;
    for (int x = 0; x < width; x++)
    {
        if (massiv[y, x] == 0) haszero=true;
        if (massiv[y, x] < 0) belowzero++;
        Console.Write($"{massiv[y, x]}\t");
    }
    if (haszero)
    {
        rows_with_query[y] = belowzero;
        Console.Write($"Minuses = {belowzero}");
    }
    Console.WriteLine();
}
Console.WriteLine(string.Join(" ", rows_with_query.Select(s=>s.ToString())));
Blackmeser
  • 2,033
  • Точно не помню, но по-соему Select(s=>s.ToString()) - лишнее. – aepot May 19 '21 at 11:28
  • @aepot В принципе да, лишнее, просто привычка, но кто знает какая там версия фреймворка и не захочет ли Join сделать внутри int+separator без приведения int к string – Blackmeser May 20 '21 at 02:35