Проверить, есть ли в матрице хотя бы одна строка, содержащая элемент, равный нулю, и найти ее номер - 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. Список элементов кода выглядит следующим образом:
- Входные параметры функции: матрица x, размерность матрицы по строкам n1 и по столбцам m1.
- Переменная z инициализируется значением 0. Переменная используется для перебора строк матрицы.
- Цикл for перебирает строки матрицы от 0 до n1-1.
- В каждой строке проверяется значение элемента x[n1][m1]. Если элемент равен нулю, выполняются следующие действия:
— Переменной indnul присваивается значение n1.
— Выводится на экран сообщение
Номер строки с нулевым элементоми значение переменной indnul. — Цикл прерывается с помощью оператора break. - Если после выполнения цикла for значение переменной indnul не изменилось, ей присваивается значение 0.
- Функция возвращает значение переменной indnul.