Задача по двумерному массиву - 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;
}
Объяснение кода листинга программы
В этом коде генерируется двумерный массив случайных целых чисел, затем выполняется сортировка этого массива по второму измерению (строкам) с помощью сортировки пузырьком. Затем выводится отсортированный массив. Вот список номеров и названий переменных с их значениями:
- N, M - определяют размерность массива (7 строк и 9 столбцов соответственно)
- 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')) - цикл для прохода по строкам массива A1 и вывода каждой строки на новой строке
- for(j = 0; j < M; j++) - цикл для прохода по столбцам текущей строки
- printf(
%3d, A1[i][j] = rand() % 30 + 1) - вывод значения элемента массива A1 и его генерация случайным образом от 1 до 30 - for(i = 0; i < N; i++, q = 0){ - цикл для прохода по строкам массива A2 (отсортированного массива)
- 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 нулями
- A2[i][q] = 0; - заполнение оставшихся элементов массива A2 нулями
- putchar('\n'); - переход на новую строку после вывода каждой строки массива A2
- for(i = 0; i < N; i++,putchar('\n')) - цикл для прохода по строкам массива A2 и вывода каждой строки на новой строке
- for(j = 0; j < M; j++) - цикл для прохода по столбцам текущей строки
- printf(
%3d, A2[i][j]) - вывод значения элемента массива A2 - return 0; - завершение программы