В заданной матрице найти количество отрицательных элементов в строках, содержащих хотя бы один нулевой элемент - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Ребята, помогите пожалуйста. Вопрос такой: можно ли так писать программу, именно так располагая цикл по t. Помогите оптимизировать решение задачи, работает не совсем правильно. Условие задачи: Дана целочисленная прямоугольная матрица. Определить количество отрицательных элементов в тех строках,которые содержат хотя бы один нулевой элемент.
#include <stdio.h>
#define n 3
#define m 4
int main ()
{
    
    int s,i,j,k,num,f,t,a[n][m];
     for( int i = 0; i < n; i++)
         {
            for( int j = 0; j < m; j++)
        {
          scanf("%d",&a[j][i]);
            }
          }
       f=0; //для проверки,был ли 0
     for( int i = 0,num=-1; i < n; i++)
     {
         k=0; // флаг для нулевого элемента
         s=0; // счётчик отрицательных значений
      for( int j = 0; j < m; j++)
      {
        if( a[i][j] == 0 ) 
        {
                        k=1;
            f=1;
            num=i;
            t=j;
            j=m;
        }
      }
      if(k==0)
      {
         j=t;
            for( int t = 0,i=num; t<m; t++) // строка,в которой нулевой элемент
                if( a[i][t] < 0 ) 
                {
                    s++;
                }
      }
    }
     if(f==0)
     {
         printf("Не было нулей\n");
     }
     printf("s=%d",s);
}
Заранее прошу не ругаться сильно за мой г@вно-код

Решение задачи: «В заданной матрице найти количество отрицательных элементов в строках, содержащих хотя бы один нулевой элемент»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdbool.h>
 
#define N 5
#define M 6
 
int main(void)
{
    srand(time(NULL));
    int matrix[N][M];
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < M; j++)
        {
            printf("%d\t", matrix[i][j] = rand() % 6 - 3);
        }
        putchar('\n');
    }
    for (int i = 0; i < N; i++)
    {
        bool contains_zero = false;
        int count_negatives = 0;
        for (int j = 0; j < M; j++)
        {
            if (matrix[i][j] < 0) { count_negatives++; }
            contains_zero = contains_zero || matrix[i][j] == 0;
        }
        printf("%d\n", contains_zero ? count_negatives : -1);
    }
    return 0;
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.143 из 5
Похожие ответы