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

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

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

Нужно проверить, есть ли в матрице хотя бы одна строка, содержащая элемент, равный нулю, и найти ее номер. Уменьшить все элементы матрицы на значение первого элемента найденной строки. Вроде бы написал, но почему-то выводит общее количество строк, а не конкретную, где нулевое значение. Что не так?
#include <stdio.h>
#include <locale>
#include <string.h>
 
int menu(); 
int x[50][50];
int vvod(int x[50][50], int n1,int m1); 
int vivod(int x[50][50], int n1, int m1);
void kol(char *s); 
int zad7_1(int x[50][50], int n1, int m1);
 
int main()
{   
    int k1=0,n,m, switcher=999, z=0;
    setlocale (LC_ALL, "Russian");
    char s1[20];
    while (switcher!=0)
    {
        switch(menu()) 
        {       
        case 1:
            {
                system ("cls");
                printf("Введите количество строк и столбцов.\n");
                scanf_s("%d%d",&n,&m); 
                vvod(x, n, m);
                system("pause");
                break;
            }
        case 2:
            {
                system ("cls");
                zad7_1 (x, n, m);
                system("pause");
                break;
            }
        case 3:
            {
                system("cls");
                vivod(x, n, m); 
                system("pause");
                break;
            }
        case 4:
            {
                fflush(stdin);
                system ("cls");
                printf("Введите строку: \n");
                gets_s(s1);
                kol(s1);      
                system("pause");
                break;
            }
        case 5: 
            printf ("До свидания!\n"); 
            return 0;
        default:
            {
                system ("cls");
                printf ("Нет такого пункта!\n");
                system("pause");
            }
        }
    }
}
int menu() 
{
    int i;
    system ("cls");
    printf("Меню\n");
    printf("1. Ввести новый массив.\n2. Выполнить задание 1.\n3. Вывод массива.\n4. Выполнить задание 2.\n5. Выход.\nВаш выбор?\n");
    scanf_s("%d",&i);  
    return i;  
}
int zad7_1(int x[50][50], int n1, int m1)
{   
    int z, indnul;
    for (z=0;z<n1;z++)
    {
        if (x[n1][m1]==0) 
        {
            indnul=n1;
        }
    }
    printf ("Номер строки с нулевым элементом %d\n", n1);
    return n1;
}
void kol(char *s)
{   
    printf("Длина = %d\n", strlen(s)); 
 
}
int vvod(int x[50][50], int n1, int m1) 
{   
    int z,j;
    for (z=0;z<n1;z++)
        for (j=0;j<m1;j++)
        {
            printf("Введите элемент [%d,%d]\n", z+1, j+1);
            scanf_s("%d",&x[z][j]);
        }
        return 0;
}
int vivod(int x[50][50], int n1, int m1)
{   
    int z,j;
    for (z=0;z<n1;z++)
    {
        for (j=0;j<m1;j++)
            printf("%d ", x[z][j]);
        printf("\n");
    }
    return 0;
}

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

textual
Листинг программы
int zad7_1(int x[50][50], int n1, int m1)
{   
    int z, indnul;
    for (z=0;z<n1;z++)
    {
        if (x[n1][m1]==0) 
        {
            indnul=n1;
             printf ("Номер строки с нулевым элементом %d\n", indnull);
break; esli stroka takaja odna
        }
    }
   
    return indnull;
}

Объяснение кода листинга программы

В данном коде реализована функция, которая проверяет наличие в матрице строки, содержащей элемент, равный нулю. Если такая строка найдена, функция выводит на экран её номер и завершает выполнение. Если строка не найдена, функция возвращает значение 0. Список элементов кода выглядит следующим образом:

  1. Входные параметры функции: матрица x, размерность матрицы по строкам n1 и по столбцам m1.
  2. Переменная z инициализируется значением 0. Переменная используется для перебора строк матрицы.
  3. Цикл for перебирает строки матрицы от 0 до n1-1.
  4. В каждой строке проверяется значение элемента x[n1][m1]. Если элемент равен нулю, выполняются следующие действия: — Переменной indnul присваивается значение n1. — Выводится на экран сообщение Номер строки с нулевым элементом и значение переменной indnul. — Цикл прерывается с помощью оператора break.
  5. Если после выполнения цикла for значение переменной indnul не изменилось, ей присваивается значение 0.
  6. Функция возвращает значение переменной indnul.

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


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

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

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