Переписать положительные элементы матрицы в одномерный массив - 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;
- завершение работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д