Дана матрица. Выделите для нее динамическую память.
1)Найти номер первой из ее строк, содержащий одинаковое количество положительных и отрицательных элементов (нулевые элементы не учитываются). Если таких строк нет, вывести 0.
Высвободите динамическую память
C/C++
Задача на Си
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main()
{
int N,M,**A,num = 0,count_plus,count_minus;
do
{
printf("Количество столбцов: ");
scanf("%d",&N);
}while(N<2);
do
{
printf("Количество строк: ");
scanf("%d",&M);
}while(M<2);
/* выделение памяти */
A = (int**) malloc(sizeof(int*) * N);
for(int x = 0; x < N; x++)
A[x] = (int*) malloc(sizeof(int) * M);
/* генерация значений и вывод на экран */
srand(time(NULL));
rand();
for(int x = 0; x < N; x++)
{
count_plus = count_minus = 0; /* обнуляем счётчики положительных и отрицательных элементов */
for(int y = 0; y < M; y++)
{
A[x][y] = rand() % 31 - 15;
printf("%d\t",A[x][y]);
if(A[x][y] > 0) count_plus++;
else if(A[x][y] < 0) count_minus++;
}
putchar('\n');
/*
если строка ещё не найдена
и если количество положительных элементов равно количеству отрицательных элементов
и это количество больше нуля
*/
if(num == 0 && count_plus == count_minus && count_plus > 0)
num = x + 1; /* помечаем найденный номер строки */
}
putchar('\n');
/* вывод номера строки на экран или вывод нуля */
printf("%d\n",num);
/* освобождение памяти */
if(A == (int**) NULL) exit(1);
for(int x = 0; x < N; x++)
{
if(A[x] == (int*) NULL) exit(1);
free(A[x]);
A[x] = (int*) NULL;
}
free(A);
A = (int**) NULL;
return 0;
}
#include <time.h>
#include <stdlib.h>
int main()
{
int N,M,**A,num = 0,count_plus,count_minus;
do
{
printf("Количество столбцов: ");
scanf("%d",&N);
}while(N<2);
do
{
printf("Количество строк: ");
scanf("%d",&M);
}while(M<2);
/* выделение памяти */
A = (int**) malloc(sizeof(int*) * N);
for(int x = 0; x < N; x++)
A[x] = (int*) malloc(sizeof(int) * M);
/* генерация значений и вывод на экран */
srand(time(NULL));
rand();
for(int x = 0; x < N; x++)
{
count_plus = count_minus = 0; /* обнуляем счётчики положительных и отрицательных элементов */
for(int y = 0; y < M; y++)
{
A[x][y] = rand() % 31 - 15;
printf("%d\t",A[x][y]);
if(A[x][y] > 0) count_plus++;
else if(A[x][y] < 0) count_minus++;
}
putchar('\n');
/*
если строка ещё не найдена
и если количество положительных элементов равно количеству отрицательных элементов
и это количество больше нуля
*/
if(num == 0 && count_plus == count_minus && count_plus > 0)
num = x + 1; /* помечаем найденный номер строки */
}
putchar('\n');
/* вывод номера строки на экран или вывод нуля */
printf("%d\n",num);
/* освобождение памяти */
if(A == (int**) NULL) exit(1);
for(int x = 0; x < N; x++)
{
if(A[x] == (int*) NULL) exit(1);
free(A[x]);
A[x] = (int*) NULL;
}
free(A);
A = (int**) NULL;
return 0;
}