Транспонирование прямоугольной матрицы - C (СИ)

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

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

Доброго времени суток! Возникла проблема при транспонировании прямоугольной матрицы. Транспонировать квадратную матрицу могу, но вот с прямоугольной проблема. Подскажите как написать, так, что бы транспонировалась прямоугольная матрица. Заранее спасибо!
#include <stdio.h>
#include <stdlib.h>
void EnterMatrix_B(int *A, int *B); //  прямокутна матриця
void print(int **matrix, int a, int b); // виведення матриці на екран
void transpMatrix(int a, int b); // транспонування матриці В
 
static int **matrixB;
 
int main(void)
{
    int a, b;
 
    EnterMatrix_B(&a, &b); // введення прямокутної матриці
    print(matrixB, a, b); // виведення матриці на екран
    transpMatrix(a, b); // транспонування матриці
    free(matrixB);
    return 0;
}

EnterMatrix_B(int *A, int *B) // створення двомірного динамічного масиву (прямокутня матриця В)
{
        char space; // для вилучення пробілу з буфера введення
        int i, j; // лічильники
    printf("Enter your height of rectangular matrix B: ");
    scanf("%d", &*A); // введення довжини стовбців
    printf("Enter your length of rectangular matrix B: ");
    scanf("%d", &*B); // введення кількості рядків
    matrixB = (int**)calloc(*A, sizeof(int*)); // виділення пам'яті для масиву вказівників (а елемантів)
    for(i = 0; i < *A; i++)
    {
        matrixB[i] = (int*)calloc(*B, sizeof(int)); // елементу масиву присвоюється b кількість комірок
        printf("Enter number [%d]:\n", i);
        for(j = 0; j < *B; j++) // вводяться значення в масив
        {
            printf("[%d][%d]=", i, j);
            scanf("%d%c", &matrixB[i][j], &space);
        }
    }
 
}

transpMatrix(int a, int b) // транспонування матриці В
{
        int i, j;
        int temp;
    printf("Transposition of matrix B:\n");
    for(i = 0; i < a; i++)
        for(j = i; j < b; j++)
        {
            temp = matrixB[i][j];
            matrixB[i][j] = matrixB[j][i];
            matrixB[j][i] = temp;
        }
 
    print(matrixB,  a, b);
}
 
void print(int **matrix, int a, int b) // виведення матриці
{
        int i, j;
    for(i = 0; i < a; i++)
    {
        for(j = 0; j < b; j++)
            printf("%4d", matrix[i][j]);
        printf("\n");
    }
}
Функция транспонирования отдельно:
transpMatrix(int a, int b) // транспонування матриці В
{
        int i, j;
        int temp;
    for(i = 0; i < a; i++)
        for(j = i; j < b; j++)
        {
            temp = matrixB[i][j];
            matrixB[i][j] = matrixB[j][i];
            matrixB[j][i] = temp;
        }
 
    print(matrixB,  a, b);
}

Решение задачи: «Транспонирование прямоугольной матрицы»

textual
Листинг программы
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
 
int **transp (int n, int m, int **a) { //a[n][m] => at[m][n]
 int **at=(int**)malloc(m*sizeof(int *));
 int i,j;
 if (at==NULL) return NULL;
 for (i=0; i<m; i++) {
  at[i]=(int*)malloc(n*sizeof(int));
  if (at[i]==NULL) return NULL;
  
 }
 for (i=0; i<n; i++) for (j=0; j<m; j++) at[j][i]=a[i][j];
 return at;
}
 
void print_matrix(int n,int m,int **a) {
 int i,j;
 for (i=0; i<n; i++) {
  printf ("\n");
  for (j=0; j<m; j++) printf ("%d ",a[i][j]);
 }
}
 
int main () {
 const int n=3,m=2;
 int **a,i,j;
 a=(int**)malloc(n*sizeof(int *));
 for (i=0; i<n; i++) a[i]=(int*)malloc(m*sizeof(int));
 a[0][0]=1; a[0][1]=2;
 a[1][0]=3; a[1][1]=4;
 a[2][0]=5; a[2][1]=6;
 print_matrix(n,m,a);
 int **at=transp(n,m,a);
 print_matrix(m,n,at);
 fflush(stdin); getchar(); return 0;
}

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

  1. Объявлены две функции: transp и print_matrix.
  2. В функции transp выделяется память под массив указателей на int с помощью malloc, затем в цикле выделяется память под каждый int.
  3. В функции transp происходит транспонирование матрицы a в матрицу at.
  4. В функции print_matrix происходит вывод элементов матрицы a на экран.
  5. В функции main создается матрица a с помощью malloc, затем заполняется значениями 1,2,3,4,5,6.
  6. Вызывается функция print_matrix для вывода начальной матрицы.
  7. Создается транспонированная матрица at с помощью функции transp.
  8. Вызывается функция print_matrix для вывода транспонированной матрицы.
  9. В конце программы вызывается функция fflush для очистки буфера ввода и вывода, и getchar для ожидания нажатия любой клавиши.
  10. Программа завершается возвратом значения 0.

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


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

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

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