Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Развернуть матрицу используя скалярные выражения

38K
09 сентября 2014 года
Telsystems
20 / / 13.11.2012
Добрый день.

Есть задание:

Дана квадратная матрица размерности N, Например:
| 5 |12|88|
|65|54|43|
|81|92|56|

Нужно ее развернуть на 90 градусов, чтобы вышло:
|81|65| 5 |
|92|54|12|
|56|43|88|

Вопрос: как это сделать не копируя матрицу в память и без использования любых динамических структур? Можна использовать счетное количество скалярных переменных, не зависящее от размерности матрицы.

UPD:

Делаю так:


Код:
public static void Rotate()
{
    int tmp;
    for (int i = 0; i < n/2; i++)
    {
        for (int j = i; j < n - 1 - i; j++)
        {
            tmp = matrix[i,j];
            matrix[i,j] = matrix[n - j - 1,i];
            matrix[n - j - 1,i] = matrix[n - i - 1,n - j - 1];
            matrix[n - i - 1,n - j - 1] = matrix[j,n - i - 1];
            matrix[j, n - i - 1] = tmp;
        }
     }
}

На сколько такое решение правильно?
Спасибо!
392
11 сентября 2014 года
cronya
421 / / 03.01.2009
вопросы с ходу.
1) сие творение работает?
2) что вам даст нечетное n - типа integer, которое делите на 2?
3) чем не угодили массивы?
4) зачем все эту лабуду хранить в скалярных переменных, когда к массивам доступ проще?
САМЫЙ ГЛАВНЫЙ ВОПРОС?
Кто придумал такое убогое задание????

идея такая

Код:
void TransposedMatrix(int size, int** arr)
{
    int **tMatrix = AllocateMemmory(size);
    for (int idx = 0; idx < size; idx++)
    {
        for (int jdx = 0; jdx < size; jdx++)
        {
            tMatrix[jdx][idx] = arr[idx][jdx];
        }
    }
    cout << "nNew Matrix" << endl;
    PrintMatrix(size, tMatrix);
    FreeMemmory(size, tMatrix);
}
Вест код

Код:
#include <iostream>
#include <cstdlib>
#include <ctime>

using std::cout;
using std::endl;
using std::system;

int** AllocateMemmory(int size);
void FeelMatrix(int size, int** arr);
void PrintMatrix(int size, int** arr);
void FreeMemmory(int size, int** arr);
void TransposedMatrix(int size, int** arr);

int main()
{
    srand((unsigned)time(NULL));
    //int size = rand()%8+2;
    int size = 3;
    int **arr = AllocateMemmory(size);
    FeelMatrix(size, arr);
    cout << "Matrix" << endl;
    PrintMatrix(size, arr);
    TransposedMatrix(size, arr);   
    FreeMemmory(size, arr);
    cout << endl;
    system("pause");
    return 0;
}

int** AllocateMemmory(int size)
{  
    int ** arr = new int*[size];
    for (int idx = 0; idx < size; idx++)
    {
        arr[idx] = new int[size];      
    }
   
    return arr;
}

void FeelMatrix(int size, int** arr)
{
    for (int idx = 0; idx < size; idx++)
    {
        for (int jdx = 0; jdx < size; jdx++)
            arr[idx][jdx] = rand() % 100;
    }
}

void PrintMatrix(int size, int** arr)
{
    for (int idx = 0; idx < size; idx++)
    {
        for (int jdx = 0; jdx < size; jdx++)
            cout << arr[idx][jdx] << "t";
        cout << endl;
    }
}

void TransposedMatrix(int size, int** arr)
{
    int **tMatrix = AllocateMemmory(size);
    for (int idx = 0; idx < size; idx++)
    {
        for (int jdx = 0; jdx < size; jdx++)
        {
            tMatrix[jdx][idx] = arr[idx][jdx];
        }
    }
    cout << "nNew Matrix" << endl;
    PrintMatrix(size, tMatrix);
    FreeMemmory(size, tMatrix);
}

void FreeMemmory(int size, int** arr)
{
    for (int idx = 0; idx < size; idx++)
    {
        delete[] arr[idx];
    }
    delete[] arr;
}
Результат

Код:
Matrix
94      90      88      96
37      73      81      69
29      32      38      60
48      85      15      58

New Matrix
94      37      29      48
90      73      32      85
88      81      38      15
96      69      60      58

Для продолжения нажмите любую клавишу . . .
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог