maIn
1

Транспонирование матрицы относительно главной и побочной диагоналей

18.10.2009, 01:17. Показов 27251. Ответов 19
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите как, транспонировать значения квадратной матрицы, относительно главной и побочной диагоналей.
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.10.2009, 01:17
Ответы с готовыми решениями:

Поменять местами элементы главной и побочной диагоналей, симметричные относительно центра матрицы
Задана квадратичная матрица размером nxn поменять местами элементы главной и побочной диагоналей ...

Транспонирование матрицы относительно побочной диагонали
Здравствуйте уважаемые знатоки. У меня есть код матрицы в С++ #include <stdafx.h> #include...

Заменить элементы главной и побочной диагоналей матрицы на минимальный элемент ниже главной диагонали
В квадратной матрице А заменить элементы главной и побочной диагоналей на минимальный элемент,...

Среднее арифметическое главной и побочной диагоналей матрицы
Здравствуйте, помогите пожалуйста разобраться с ошибкой :) В текстовом файле на первой строке...

19
Эксперт С++
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
18.10.2009, 07:39 2
Лучший ответ Сообщение было отмечено как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>
#include <windows.h>
 
using namespace std;
 
int main ()
{
    int **mas, n, i,j;
 
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    cout<<"Ââåäèòå êîëè÷åñòâî ñòðîê è ñòîëáöîâ ìàòðèöû: "<< endl;
    cin>>n;
    mas=new int*[n];
 
    for(i=0; i<n; i++)
       mas[i]=new int[n];
    cout<<"Ââåäèòå ýëåìåíòû ìàòðèöû: "<< endl;
    for(i=0; i<n; i++)
       for(j=0; j<n; j++)
       {
          cout<<"["<<i<<"]["<<j<<"]= ";
          cin>>mas[i][j];
       }
        cout<<"èñõîäíàÿ ìàòðèöà"<<endl;
    for(i=0; i<n; i++)
        {
       for(j=0; j<n; j++)
          cout<<mas[i][j]<<" ";
          cout<<endl;
        }
    cout<<"Òðàíñïîíèðîâàíàÿ ìàòðèöà ïî ãëàâíîé äèàãîíàëè:"<<endl;
    for(i=0; i<n; i++)
    {
       for(j=0; j<n; j++)
           cout<<mas[j][i]<<" ";
       cout<<endl;
    }
    cout<<"Òðàíñïîíèðîâàíàÿ ìàòðèöà ïî ïîáî÷íîé äèàãîíàëè:"<<endl;
    for(i=0; i<n; i++)
    {
       for(j=0; j<n; j++)
           cout<<mas[n-1-j][n-1-i]<<" ";
       cout<<endl;
    }
    cout<<endl; 
    return 0; 
}
4
0 / 0 / 1
Регистрация: 23.09.2010
Сообщений: 31
12.12.2010, 14:40 3
Кто может переписать на СИ ?
0
Эксперт С++
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
12.12.2010, 14:52 4
Лучший ответ Сообщение было отмечено как решение

Решение

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <stdio.h>
#include <malloc.h>
int main ()
{
    int **mas, n, i,j;
    printf("n= ");
    scanf("%d", &n);
 
    mas=(int**) malloc(n*sizeof(int*)); 
    for(i=0; i<n; i++)
       mas[i]=(int*) malloc(n*sizeof(int));
    for(i=0; i<n; i++)
       for(j=0; j<n; j++)
       {
           printf("[%d][%d]= ", i, j);
           scanf("%d", &mas[i][j]);
       }
        printf("Ishodn matr:\n");
    for(i=0; i<n; i++)
    {
        for(j=0; j<n; j++)
            printf("%d ", mas[i][j]);
        printf("\n");
    }
    printf("Transp matr po glavn diag:\n");
    for(i=0; i<n; i++)
        {
       for(j=0; j<n; j++)
            printf("%d ", mas[j][i]);
        printf("\n");
        }
    printf("Transp matr po pobochn diag:\n");
    for(i=0; i<n; i++)
        {
       for(j=0; j<n; j++)
            printf("%d ", mas[n-1-j][n-1-i]);
        printf("\n");
        }
        printf("\n");
    return 0; 
}
3
848 / 190 / 18
Регистрация: 01.08.2011
Сообщений: 505
01.08.2011, 20:45 5
Транспонирование матрицы:

C
1
2
3
4
5
6
7
8
9
   int a[n][n];
 
   for(i = 1; i < n; i++)
      for(j = 0; j < i; j++)
      {
         a[i][j] ^= a[j][i];
         a[j][i] ^= a[i][j];
         a[i][j] ^= a[j][i];
      }
Здесь корректнее сказать зеркально отразить матрицу относительно обратной диагонали:

C
1
2
3
4
5
6
7
   for(i = 0; i < n - 1; i++)
      for(j = 0; j < n - 1 - i; j++)
      {
         a[i][j] ^= a[n - 1 - j][n - 1 - i];
         a[n - 1 - j][n - 1 - i] ^= a[i][j];
         a[i][j] ^= a[n - 1 - j][n - 1 - i];
      }
1
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
01.08.2011, 21:04 6
Цитата Сообщение от Olga_ Посмотреть сообщение
Транспонирование матрицы:

C
1
2
3
4
5
6
7
8
9
   int a[n][n];
 
   for(i = 1; i < n; i++)
      for(j = 0; j < i; j++)
      {
         a[i][j] ^= a[j][i];
         a[j][i] ^= a[i][j];
         a[i][j] ^= a[j][i];
      }
Выгода от подобных трюков сомнительна
C
1
2
3
4
5
6
7
8
9
   int a[n][n];
 
   for(i = 1; i < n; i++)
      for(j = 0; j < i; j++)
      {
         int tmp = a[i][j];
         a[i][j] = a[j][i];
         a[j][i] = tmp;
      }
либо
C++
1
2
3
4
5
   int a[n][n];
 
   for(i = 1; i < n; i++)
      for(j = 0; j < i; j++)
         std::swap(a[i][j], a[j][i]);
Добавлено через 4 минуты
Да, забыл добавить, что реальное транспонирование в памяти почти никогда не нужно и достаточно просто изменить индексы при использовании, но это уже было в коде valeriikozlov
0
848 / 190 / 18
Регистрация: 01.08.2011
Сообщений: 505
01.08.2011, 21:12 7
Цитата Сообщение от grizlik78 Посмотреть сообщение
Выгода от подобных трюков сомнительна
C
1
2
3
4
5
6
7
8
9
   int a[n][n];
 
   for(i = 1; i < n; i++)
      for(j = 0; j < i; j++)
      {
         int tmp = a[i][j];
         a[i][j] = a[j][i];
         a[j][i] = tmp;
      }
либо
C++
1
2
3
4
5
   int a[n][n];
 
   for(i = 1; i < n; i++)
      for(j = 0; j < i; j++)
         std::swap(a[i][j], a[j][i]);
Добавлено через 4 минуты
Да, забыл добавить, что реальное транспонирование в памяти почти никогда не нужно и достаточно просто изменить индексы при использовании, но это уже было в коде valeriikozlov
Сомнительного будет мало, если сделать ассемблерную вставку. А использование буфера уже скучно...
0
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
01.08.2011, 21:18 8
По мне, так xor ещё более скучен.
0
848 / 190 / 18
Регистрация: 01.08.2011
Сообщений: 505
01.08.2011, 21:20 9
Цитата Сообщение от grizlik78 Посмотреть сообщение
По мне, так xor ещё более скучен.
На операции XOR очень много криптографических алгоритмов построено, так что не надо тут...
0
Higher
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
01.08.2011, 21:25 10
Цитата Сообщение от grizlik78 Посмотреть сообщение
По мне, так xor ещё более скучен.
Зато с ним самые краткие коды получаются.
Например, вычисление НОД:
C++
1
2
for (int a = 24, b = 42; b^=a^=b^=a%=b ;);
std::cout << a;
0
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
01.08.2011, 21:26 11
Цитата Сообщение от Olga_ Посмотреть сообщение
На операции XOR очень много криптографических алгоритмов построено, так что не надо тут...
Я про использование его для обмена. Даже в виде ассемблерной вставки выгоды почти нет.
0
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
01.08.2011, 21:27 12
Olga_, если не секрет, что вас сподвигло поднять тему 3-х (!!!) годичной давности ?
0
848 / 190 / 18
Регистрация: 01.08.2011
Сообщений: 505
01.08.2011, 21:31 13
Цитата Сообщение от Kastaneda Посмотреть сообщение
Olga_, если не секрет, что вас сподвигло поднять тему 3-х (!!!) годичной давности ?
Просто ее до конца-то не решили. В задаче ясно говорилось транспонировать, а не вывести на экран в таком виде, вот и усе.
0
Kastaneda
01.08.2011, 21:38
  #14

Не по теме:

Цитата Сообщение от Olga_ Посмотреть сообщение
Просто ее до конца-то не решили.
У вас на этом форуме большой простор для деятельности, всмысле подобных тем много:)

0
848 / 190 / 18
Регистрация: 01.08.2011
Сообщений: 505
01.08.2011, 23:18 15
Цитата Сообщение от grizlik78 Посмотреть сообщение
Я про использование его для обмена. Даже в виде ассемблерной вставки выгоды почти нет.
Это верно, сейчас компьютеры быстро работают, разницы почти никакой. Просто операция полезная. Я не со зла
0
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
01.08.2011, 23:31 16
Да я вроде тоже без злорадства. Просто не очень хочется видеть этот явно "олимпиадный" приём в реальных программах. Хотелось бы даже посмотреть на его реализацию в виде ассемблерной вставки, при условии что обмениваемые значения в 2 ячейках памяти. Но максимум что можно с его помощью сэкономить, это 1 регистр, но уж точно не время.
0
848 / 190 / 18
Регистрация: 01.08.2011
Сообщений: 505
01.08.2011, 23:40 17
Цитата Сообщение от grizlik78 Посмотреть сообщение
Да я вроде тоже без злорадства. Просто не очень хочется видеть этот явно "олимпиадный" приём в реальных программах. Хотелось бы даже посмотреть на его реализацию в виде ассемблерной вставки, при условии что обмениваемые значения в 2 ячейках памяти. Но максимум что можно с его помощью сэкономить, это 1 регистр, но уж точно не время.
int x, y;
asm {
mov eax, x
mov edx, y
xor eax, edx
xor edx, eax
xor eax, edx
mov x, eax
mov y, edx
}
0
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
01.08.2011, 23:42 18
Ну а без xor будет так:
int x, y;
asm {
mov eax, x
mov edx, y
mov x, edx
mov y, eax
}
0
848 / 190 / 18
Регистрация: 01.08.2011
Сообщений: 505
02.08.2011, 07:00 19
Цитата Сообщение от grizlik78 Посмотреть сообщение
Ну а без xor будет так:
int x, y;
asm {
mov eax, x
mov edx, y
mov x, edx
mov y, eax
}
Конечно будет так. xor лишь иллюстрирует пример обмена значений между регистрами.
0
935 / 760 / 299
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
02.08.2011, 19:04 20
Как вы думаете Olga, кто больше работы делает ваш код или код grizlik78, лишния битовая операция XOR задействует АЛУ, вообще туда сюда для чего, если всё равно результат будет записан в указанную ячейку памяти, если обменивать данные между регистрами то лучше использовать такую инcтрукцию xchg reg, reg | xchg mem, reg | xchg reg, mem
__asm {
mov eax, x
mov edx, y
xchg eax, edx
mov x, eax
mov y, edx
};


Olga, на счёт быстроты сегоднящних компьютеров, они всё равно не так ещё быстры как мы хотим, для простых прикладных задач не критичных ко времени, для этого хватит и Pentium-3/Duron-1 Ghz, закон Мура работает по другой спирали теперь не в увелечение частоты а добавление дополнительных ядер на счёт частоты почти предел расстояние между транзистора не позволяет уже втиснувать дополнительные транзисторы надо же ещё тепло отвождить чтобы камень не сгорел. Продолжу на счёт производительности как вы думаете на сколько web-сервер потокового видео данных имеет загрузку процессора если одновременно просматривают видео реального времени до 500000 пользователей, благо используют распределительные сервера, можно одному supercomputer или mainframe-мам пришлось бы работать гонять терафлопы свои. Вот где во основном нужна производительность, в криптографических приложениях особенно если длинна ключа будет за 512 бит, обработка многополигольных 3D объектов если разрабатывать с учётом SOFTWARE, если с HARDWARE тут уже работа видеоадаптеров, кодирование и декодирование аудио-видео в большом разрешение больше чем у MPEG-4 вот будет круто-тогда, и конечно Базы Данных должны работать максимально быстро особенно сейчас в нашем мультимедийном мире, ладно что-то расписался здесь.
0
02.08.2011, 19:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.08.2011, 19:04
Помогаю со студенческими работами здесь

Поменять местами элементы главной и побочной диагоналей матрицы
помогите пожайлуста. Поменять местами элементы главной и побочной диагоналей матрицы. делал...

Найти сумму элементов главной и побочной диагоналей матрицы
Составить блок схему для нахождения

Среднее арифметическое положительных элементов главной и побочной диагоналей матрицы
Среднее арифметическое для главной,вроде,считает. Теперь нужно найти для побочной. Вопрос состоит в...

Вычислить произведение максимальных элементов главной и побочной диагоналей матрицы
7 на 7 матрица


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru