Преобразование массива (поворот на 90 градусов) - C (СИ)
Формулировка задачи:
Всем доброго времени суток. Прошу сердечно указать мне на ошибку, никак не могу сообразить, почему не работает
Задание: Целочисленный массив matrixnn повернуть на 90 градусов по часовой стрелке.
при компиляции и запуске выдает перевернутую на 90 градусов транспонированную матрицу, а не исходную
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <time.h>
int main()
{
int i, j, n, m, massiv_min, massiv_max, temp;
time_t t; // текущее время для инициализации
// генератора случайных чисел
srand((unsigned) time(&t)); // инициализация генератора
// случайных чисел
printf("\nVvedite nizhnyuyu granicu diapazona:");
scanf("%d", &massiv_min);
printf("\nVvedite verhnyuyu granicu diapazona:");
scanf("%d", &massiv_max);
printf("\nVvedite razmer matricy:");
scanf("%d", &n);
int massiv[n][n];
int massive[n][n];
printf("\nIshodny massiv:\n");
m = massiv_max-massiv_min + 1;
for (i=0; i<n; i++) // получение случайного числа в диапазоне от vector_min до vector_max
{
for (j=0; j<n; j++)
{
massiv[i][j]=rand()% m + massiv_min;
printf("%5d", massiv[i][j]);
}
printf("\n");
}
//транспонируем матрицу
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
temp=massiv[i][j];
massiv[i][j]=massiv[j][i];
massiv[j][i]=temp;
}
printf("\nTransponirovannaya matrica\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%5d", massiv[j][i]);
printf("\n");
}
printf("\nPerevernutaya matrica\n");
for(j=0;j<n;j++)
for(i=0;i<n/2;i++)
{
temp=massiv[j][i];
massiv[j][i]=massiv[j][n-1-i];
massiv[j][n-1-i]=temp;
}
printf("\n");
for(j=0;j<n;j++)
{
for(i=0;i<n;i++)
printf("%5d", massiv[j][i]);
printf("\n");
}
printf("\n");
getch();
return 0;
}Решение задачи: «Преобразование массива (поворот на 90 градусов)»
textual
Листинг программы
int main(int argc, char *argv[])
{
setlocale(LC_ALL, "RU");
int i, j, n, massiv_min, massiv_max, temp;
srand(time(NULL)); // инициализация генератора
// случайных чисел
printf("Введите нижнюю границу диапазона: ");
scanf("%d", &massiv_min);
printf("Введите верхнюю границу диапазона: ");
scanf("%d", &massiv_max);
printf("Введите размер матрицы: ");
scanf("%d", &n);
int massiv[n][n];
int massive[n][n];
printf("Исходный массив:\n");
for (i = 0; i < n; i++) // получение случайного числа в диапазоне от vector_min до vector_max
{
for (j = 0; j < n; j++)
{
massiv[i][j] = massiv_min + rand()%massiv_max;
printf("%5d", massiv[i][j]);
}
printf("\n");
}
//транспонируем матрицу
for (i = 0; i < n; i++)
for (j = i; j < n; j++)
{
temp = massiv[i][j];
massiv[i][j] = massiv[j][i];
massiv[j][i] = temp;
}
printf("Транспонированная матрица\n");
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
printf("%5d", massiv[i][j]);
printf("\n");
}
printf("Перевёрнутая матрица\n");
for (j = 0; j < n; j++)
for (i = 0; i < n / 2; i++)
{
temp = massiv[j][i];
massiv[j][i] = massiv[j][n - 1 - i];
massiv[j][n - 1 - i] = temp;
}
printf("\n");
for (j = 0; j < n; j++)
{
for (i = 0; i < n; i++)
printf("%5d", massiv[j][i]);
printf("\n");
}
printf("\n");
getch();
return 0;
}
Объяснение кода листинга программы
- Установка локали на русский язык.
- Объявление переменных: i, j, n, massiv_min, massiv_max, temp и массивов massiv и massive.
- Запрос у пользователя нижней и верхней границы диапазона для массива.
- Запрос у пользователя размера матрицы.
- Инициализация массива massiv случайными числами в заданном диапазоне.
- Транспонирование матрицы методом перебора элементов и обмена их местами.
- Вывод транспонированной матрицы.
- Переворот матрицы методом перебора элементов и обмена их местами.
- Вывод перевернутой матрицы.
- Завершение работы программы.