Для заданной матрицы А размерности 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;
}

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

  1. Включаем необходимые заголовочные файлы
  2. Определяем размер матрицы NxN
  3. Функция strok считывает целочисленное значение из стандартного ввода и возвращает его
  4. Функция stolb выводит целочисленное значение в стандартный вывод, после чего возвращает 0
  5. В функции main устанавливаем кодировку консоли на 1251
  6. Инициализируем переменные m, n, i, j, j1, j2, temp со значениями 0
  7. В цикле do-while запрашиваем у пользователя ввод размеров матрицы MxN и проверяем корректность введенных значений
  8. Если размеры введены некорректно, выводим сообщение об ошибке и повторно запрашиваем ввод размеров
  9. Когда размеры введены корректно, считываем значения матрицы из стандартного ввода
  10. Выводим значения матрицы в консоль
  11. В цикле do-while запрашиваем у пользователя ввод номеров столбцов для перестановки и проверяем корректность введенных значений
  12. Если номера столбцов введены некорректно, выводим сообщение об ошибке и повторно запрашиваем ввод номеров столбцов
  13. Когда номера столбцов введены корректно, меняем значения элементов матрицы местами
  14. Выводим измененные значения матрицы в консоль
  15. Возвращаем 0, чтобы прекратить выполнение программы

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

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