Получить транспонированную матрицу - C (СИ)
Формулировка задачи:
Дана квадратная матрица размера nxn. Получить транспонированную матрицу. Почему компилятор пишет ошибку:Run-Time Check Failure #2 - Stack around the variable 'arr' was corrupted. Каким еще способом можно траспорнировать мтарицу, не используя данный способ?
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#define F 3
int main()
{
int arr[F][F],i,j;
srand(time(NULL));
printf("Array: \n");
for(i=0;i<F;i++);
{
printf("\n");
for(j=0;j<F;j++)
{
arr[i][j]=rand()%100/10.0;
printf("%3d ",arr[i][j]);
}
}
printf("\n \n");
for(i=0;i<F;i++);
{
printf("\n");
for(j=0;j<F;j++)
{
arr[i][j]=rand()%100/10.0;
printf("%3d ",arr[j][i]);
}
}
return 0;
}Решение задачи: «Получить транспонированную матрицу»
textual
Листинг программы
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#define F 3
int main()
{
int arr[F][F],i,j;
srand(time(NULL));
printf("Array: \n");
for(i=0;i<F;i++)
{
printf("\n");
for(j=0;j<F;j++)
{
arr[i][j]=rand()%100/10.0;
printf("%3d ",arr[i][j]);
}
}
int temp, a, b;
for (i=0;i<3;i++)
for (j=0;j<3;j++)
for (a=0;a<3;a++)
for (b=0;b<3;b++)
if (arr[a][b]<arr[i][j])
{
temp=arr[a][b];
arr[a][b]=arr[i][j];
arr[i][j]=temp;
}
printf("\n \n");
for(i=0;i<F;i++)
{
printf("\n");
for(j=0;j<F;j++)
{
printf("%3d ",arr[i][j]);
}
}
return 0;
}
Объяснение кода листинга программы
В данном коде реализована функция для получения транспонированной матрицы.
- Создается матрица arr[F][F] и инициализируется случайными числами с помощью функции rand()%100/10.0.
- Выводится на экран исходная матрица arr[F][F].
- Создаются временные переменные temp, a, b для проведения операций сравнения и обмена элементов матрицы.
- Происходит двойная переборка элементов матрицы с целью сравнения и обмена элементов в соответствии с формулой: если arr[a][b]<arr[i][j], то производится обмен элементов arr[a][b] и arr[i][j].
- Выводится на экран полученная транспонированная матрица arr[F][F].
- Возвращается 0, что означает успешное завершение работы программы.