Переписать положительные элементы матрицы в одномерный массив - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Дана матрица размерности 2 на 3. Положительные элементы матрицы переписать подряд в одномерный массив.

Решение задачи: «Переписать положительные элементы матрицы в одномерный массив»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #define M 2
  5. #define N 3
  6. int main()
  7. {
  8.     int arr[N][M], i, j, *ptr, count = 0, k = 0;
  9.     srand(time(NULL));
  10.     for(i = 0; i < N; i++, putchar('\n'))
  11.         for(j = 0; j < M; j++){
  12.             printf("%3d", arr[i][j] = rand() % 10 - 5);
  13.             if(arr[i][j] > 0)
  14.                 count++;
  15.         }
  16.     if(count){
  17.         ptr = malloc(count * sizeof*ptr);
  18.         if(!ptr)
  19.             fprintf(stderr, "Error memory allocate");
  20.         for(i = 0; i < N; i++)
  21.             for(j = 0; j < M; j++)
  22.                 if(arr[i][j] > 0){
  23.                     *(ptr + k) = arr[i][j];
  24.                     k++;
  25.                 }
  26.         putchar('\n');
  27.         for(i = 0; i < count; i++)
  28.             printf("%d ", *(ptr + i));
  29.         free(ptr);
  30.     }
  31.     else
  32.         puts("Positive elements not found");
  33.     return 0;
  34. }

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

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

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы