Для заданной матрицы А размерности M⨯N написать программу перестановки двух произвольных столбцов - C (СИ)
Формулировка задачи:
Сгенерировал матрицу
как осуществить перестановку двух столбцов в этой матрице??
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int strok(int x)
{
scanf("%d", &x);
return x;
}
int stolb(int y)
{
printf("%d\t", y);
return 0;
}
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int m, n, i, j; //m-число строк, n-число столбцов
do {
printf("Введите размер массива MXN\n");
printf("Количество строк: ");
scanf("%d",&m);
printf("Количество столбцов: ");
scanf("%d",&n);
if (m<1 || n<1) printf("Размеры введены некорректно\n");
}while (m<1 || n<1);
int matrix[m][n];
for (i=0;i<m;i++){
for (j=0;j<n;j++){
printf("matrix[%d][%d]=",i+1,j+1);
matrix[i][j]=strok(matrix[i][j]);
}
}
for (i=0;i<m;i++){
for (j=0;j<n;j++){
stolb(matrix[i][j]);
}
printf("\n");
}
return 0;
}
Извиняюсь, программа на языке СИ нужна
Решение задачи: «Для заданной матрицы А размерности M⨯N написать программу перестановки двух произвольных столбцов»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#define N 20 //размер массива
int strok(int x)
{
scanf("%d", &x);
return x;
}
int stolb(int y)
{
printf("%d\t", y);
return 0;
}
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int m =0 , n, i, j, j1, j2, temp; //m-число строк, n-число столбцов
int matrix[N][N];
do {
printf("Введите размер массива MxN [max(M,N) = %d min(M,N) = %d]\n",N,1);
printf("Количество строк: ");
scanf("%d", &m);
printf("Количество столбцов: ");
scanf("%d", &n);
} while ((m<1 || n<1 || m>N || n>N) && printf("Размеры введены некорректно!\n"));
for (i = 0;i<m;i++) {
for (j = 0;j<n;j++) {
printf("matrix[%d][%d]=", i + 1, j + 1);
matrix[i][j] = strok(matrix[i][j]);
}
}
printf("\n");
for (i = 0;i < m;i++) {
for (j = 0;j < n;j++)
printf("%3d ", matrix[i][j]);
printf("\n");
}
do {
printf("\nВведите номера столбцов через пробел, которые нужно переставить: ");
scanf("%d %d", &j1, &j2);
} while ((j1<1 || j2<1 || j1>m || j2>n) && printf("Номера столбцов введены некорректно!\n"));
printf("\n");
for (i = 0;i < m;i++)
{
temp = matrix[i][j1-1];
matrix[i][j1-1] = matrix[i][j2-1];
matrix[i][j2-1] = temp;
}
for (i = 0;i < m;i++) {
for (j = 0;j < n;j++)
printf("%3d ", matrix[i][j]);
printf("\n");
}
return 0;
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы
- Определяем размер матрицы NxN
- Функция strok считывает целочисленное значение из стандартного ввода и возвращает его
- Функция stolb выводит целочисленное значение в стандартный вывод, после чего возвращает 0
- В функции main устанавливаем кодировку консоли на 1251
- Инициализируем переменные m, n, i, j, j1, j2, temp со значениями 0
- В цикле do-while запрашиваем у пользователя ввод размеров матрицы MxN и проверяем корректность введенных значений
- Если размеры введены некорректно, выводим сообщение об ошибке и повторно запрашиваем ввод размеров
- Когда размеры введены корректно, считываем значения матрицы из стандартного ввода
- Выводим значения матрицы в консоль
- В цикле do-while запрашиваем у пользователя ввод номеров столбцов для перестановки и проверяем корректность введенных значений
- Если номера столбцов введены некорректно, выводим сообщение об ошибке и повторно запрашиваем ввод номеров столбцов
- Когда номера столбцов введены корректно, меняем значения элементов матрицы местами
- Выводим измененные значения матрицы в консоль
- Возвращаем 0, чтобы прекратить выполнение программы