Переписать положительные элементы матрицы в одномерный массив - 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;
}

Объяснение кода листинга программы

В этом коде выполняется следующая последовательность действий:

  1. Объявление переменных и массива:
    • int arr[N][M] - двумерный массив arr размером N на M, где N=2 и M=3.
    • int i, j - переменные для хранения индексов массива.
    • int *ptr - указатель на первый элемент массива ptr.
    • int count - счетчик для подсчета положительных элементов матрицы.
    • int k - счетчик для хранения индекса положительного элемента в массиве ptr.
  2. Инициализация генератора случайных чисел: srand(time(NULL)) - инициализация генератора случайных чисел текущим временем.
  3. Заполнение матрицы случайными числами: for(i = 0; i < N; i++, putchar('\n')) - цикл, который проходит по каждой строке матрицы и выводит символ новой строки после каждой строки. for(j = 0; j < M; j++){ - вложенный цикл, который проходит по каждому столбцу строки. printf(%3d, arr[i][j] = rand() % 10 - 5); - генерация случайного числа от -5 до 4 и присвоение его элементу матрицы.
  4. Подсчет положительных элементов матрицы: if(arr[i][j] > 0) - проверка, является ли элемент положительным. count++; - увеличение счетчика, если элемент положительный.
  5. Выделение памяти под массив для положительных элементов: ptr = malloc(count * sizeof*ptr); - выделение памяти под массив count элементов, каждый элемент имеет тип int.
  6. Копирование положительных элементов из матрицы в массив: for(i = 0; i < N; i++) - цикл, который проходит по каждой строке матрицы. for(j = 0; j < M; j++){ - вложенный цикл, который проходит по каждому столбцу строки. if(arr[i][j] > 0){ - проверка, является ли элемент положительным. *(ptr + k) = arr[i][j]; - копирование положительного элемента в массив. k++; - увеличение индекса для следующего элемента в массиве.
  7. Вывод массива положительных элементов: putchar('\n'); - вывод символа новой строки. for(i = 0; i < count; i++) - цикл, который проходит по каждому элементу массива. printf(%d , *(ptr + i)); - вывод элемента массива.
  8. Освобождение памяти: free(ptr); - освобождение памяти, выделенной под массив.
  9. Проверка наличия положительных элементов: if(count == 0) - проверка, есть ли положительные элементы в матрице. puts(Positive elements not found); - вывод сообщения, если положительные элементы отсутствуют.
  10. Завершение программы: return 0; - завершение работы программы.

Оцени полезность:

8   голосов , оценка 3.25 из 5
Похожие ответы