Переписать положительные элементы матрицы в одномерный массив - C (СИ)
Формулировка задачи:
Дана матрица размерности 2 на 3. Положительные элементы матрицы переписать подряд в одномерный массив.
Решение задачи: «Переписать положительные элементы матрицы в одномерный массив»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define M 2
#define N 3
int main()
{
int arr[N][M], i, j, *ptr, count = 0, k = 0;
srand(time(NULL));
for(i = 0; i < N; i++, putchar('\n'))
for(j = 0; j < M; j++){
printf("%3d", arr[i][j] = rand() % 10 - 5);
if(arr[i][j] > 0)
count++;
}
if(count){
ptr = malloc(count * sizeof*ptr);
if(!ptr)
fprintf(stderr, "Error memory allocate");
for(i = 0; i < N; i++)
for(j = 0; j < M; j++)
if(arr[i][j] > 0){
*(ptr + k) = arr[i][j];
k++;
}
putchar('\n');
for(i = 0; i < count; i++)
printf("%d ", *(ptr + i));
free(ptr);
}
else
puts("Positive elements not found");
return 0;
}
Объяснение кода листинга программы
В этом коде выполняется следующая последовательность действий:
- Объявление переменных и массива:
int arr[N][M]- двумерный массивarrразмеромNнаM, гдеN=2иM=3.int i, j- переменные для хранения индексов массива.int *ptr- указатель на первый элемент массиваptr.int count- счетчик для подсчета положительных элементов матрицы.int k- счетчик для хранения индекса положительного элемента в массивеptr.
- Инициализация генератора случайных чисел:
srand(time(NULL))- инициализация генератора случайных чисел текущим временем. - Заполнение матрицы случайными числами:
for(i = 0; i < N; i++, putchar('\n'))- цикл, который проходит по каждой строке матрицы и выводит символ новой строки после каждой строки.for(j = 0; j < M; j++){- вложенный цикл, который проходит по каждому столбцу строки.printf(%3d, arr[i][j] = rand() % 10 - 5);- генерация случайного числа от -5 до 4 и присвоение его элементу матрицы. - Подсчет положительных элементов матрицы:
if(arr[i][j] > 0)- проверка, является ли элемент положительным.count++;- увеличение счетчика, если элемент положительный. - Выделение памяти под массив для положительных элементов:
ptr = malloc(count * sizeof*ptr);- выделение памяти под массивcountэлементов, каждый элемент имеет типint. - Копирование положительных элементов из матрицы в массив:
for(i = 0; i < N; i++)- цикл, который проходит по каждой строке матрицы.for(j = 0; j < M; j++){- вложенный цикл, который проходит по каждому столбцу строки.if(arr[i][j] > 0){- проверка, является ли элемент положительным.*(ptr + k) = arr[i][j];- копирование положительного элемента в массив.k++;- увеличение индекса для следующего элемента в массиве. - Вывод массива положительных элементов:
putchar('\n');- вывод символа новой строки.for(i = 0; i < count; i++)- цикл, который проходит по каждому элементу массива.printf(%d, *(ptr + i));- вывод элемента массива. - Освобождение памяти:
free(ptr);- освобождение памяти, выделенной под массив. - Проверка наличия положительных элементов:
if(count == 0)- проверка, есть ли положительные элементы в матрице.puts(Positive elements not found);- вывод сообщения, если положительные элементы отсутствуют. - Завершение программы:
return 0;- завершение работы программы.