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