Задача по двумерному массиву - C (СИ)

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

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

Создать матрицу B[1..N,1..M] из целых чисел. Из каждой строки напечатать числа, которых нет в следующей строке. Числа эти записать построчно в новую матрицу, заполняя нулями недостающие значения до конца строки.
#include <stdio.h>
#include "stdafx.h"
#include <locale.h>
#include <stdlib.h>
#include <ctime>
 
int main()
{
    setlocale(0, "russian");
    int i, j,k;
    const int m=5, n=4;
    int NotMyArray[m][n] = { 0 };
    int myArray[m][n];
    srand(unsigned(time(NULL)));
 
    for (i = 0; i < m; i++) {
        for (j = 0; j < n; j++)
            myArray[i][j] = ((rand() % 10));
    }
 
    printf("Массив:\n");
    for (i = 0; i < m; i++) {
        for (j = 0; j < n; j++)
 
            printf("A[%d][%d]=%d ", i, j, myArray[i][j]);
 
          printf("\n");
          }
          
    for (i = 0; i < m; i++) 
        for (j = 0; j < n; j++) 
            {
                if (myArray[i][j] != myArray[i + 1][j])
                {
                    NotMyArray[i][j] = myArray[i][j];
                }
 
                else { NotMyArray[i][j] = 0; }

            }
            printf("Второй массив: \n");
            for (i = 0; i < m; i++) {
                for (j = 0; j < n; j++)
 
                    printf("B[%d][%d]=%d ", i, j, NotMyArray[i][j]);
 
                printf("\n");
            }
               getchar();
}

Решение задачи: «Задача по двумерному массиву»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 7
#define M 9
int main()
{
    int i, j, k, q = 0, flag = 0, A1[N][M], A2[N][M];
    srand(time(NULL));
    for(i = 0; i < N; i++,putchar('\n'))
        for(j = 0; j < M; j++)
            printf("%3d", A1[i][j] = rand() % 30 + 1);
    for(i = 0; i < N; i++, q = 0){
        for(j = 0; j < M; j++, flag = 0){
            for(k = 0; k < M; k++){
                if(i == N - 1){
                    if(A1[i][j] == A1[0][k]){
                        flag = 1; break;
                    }
                }
                else
                    if(A1[i][j] == A1[i + 1][k]){
                        flag = 1; break;
                    }
            }
            if(!flag)
                A2[i][q++] = A1[i][j];
        }
        for(; q < M; q++)
            A2[i][q] = 0;
    }
    putchar('\n');
    for(i = 0; i < N; i++,putchar('\n'))
        for(j = 0; j < M; j++)
            printf("%3d", A2[i][j]);
    return 0;
}

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

В этом коде генерируется двумерный массив случайных целых чисел, затем выполняется сортировка этого массива по второму измерению (строкам) с помощью сортировки пузырьком. Затем выводится отсортированный массив. Вот список номеров и названий переменных с их значениями:

  1. N, M - определяют размерность массива (7 строк и 9 столбцов соответственно)
  2. int i, j, k, q = 0, flag = 0 - это целочисленные переменные, используемые в качестве счетчиков и флагов в циклах
  3. A1[N][M], A2[N][M] - это двумерные массивы для хранения случайных и отсортированных значений соответственно
  4. srand(time(NULL)) - инициализация генератора случайных чисел текущим временем
  5. for(i = 0; i < N; i++,putchar('\n')) - цикл для прохода по строкам массива A1 и вывода каждой строки на новой строке
  6. for(j = 0; j < M; j++) - цикл для прохода по столбцам текущей строки
  7. printf(%3d, A1[i][j] = rand() % 30 + 1) - вывод значения элемента массива A1 и его генерация случайным образом от 1 до 30
  8. for(i = 0; i < N; i++, q = 0){ - цикл для прохода по строкам массива A2 (отсортированного массива)
  9. for(j = 0; j < M; j++, flag = 0){ - цикл для прохода по столбцам текущей строки
  10. for(k = 0; k < M; k++){ - цикл для прохода по столбцам для проверки на идентичность элементов
  11. if(i == N - 1){ - проверка, является ли текущая строка последней
  12. if(A1[i][j] == A1[0][k]){ - проверка на идентичность с первым столбцом
  13. flag = 1; break; - установка флага, если элемент найден
  14. }
  15. }
  16. else - проверка, является ли текущая строка не последней
  17. if(A1[i][j] == A1[i + 1][k]){ - проверка на идентичность с следующим столбцом
  18. flag = 1; break; - установка флага, если элемент найден
  19. }
  20. if(!flag) - проверка, установлен ли флаг
  21. A2[i][q++] = A1[i][j]; - добавление элемента в отсортированный массив
  22. for(; q < M; q++) - инициализация счетчика для заполнения оставшихся элементов массива A2 нулями
  23. A2[i][q] = 0; - заполнение оставшихся элементов массива A2 нулями
  24. putchar('\n'); - переход на новую строку после вывода каждой строки массива A2
  25. for(i = 0; i < N; i++,putchar('\n')) - цикл для прохода по строкам массива A2 и вывода каждой строки на новой строке
  26. for(j = 0; j < M; j++) - цикл для прохода по столбцам текущей строки
  27. printf(%3d, A2[i][j]) - вывод значения элемента массива A2
  28. return 0; - завершение программы

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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