Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 62, средняя оценка - 4.94
maIn
Сообщений: n/a
#1

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

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

Подскажите как, транспонировать значения квадратной матрицы, относительно главной и побочной диагоналей.
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.10.2009, 01:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Транспонирование матрицы относительно главной и побочной диагоналей (C++):

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

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

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

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

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

Переписать поочередно элементы главной и побочной диагоналей матрицы в массив - C++
вот сама задача: Переписать поочередно элементы главной и побочной диагоналей матрицы Аi,j в массив В

19
valeriikozlov
Эксперт С++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
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
DimaSoldier
0 / 0 / 0
Регистрация: 23.09.2010
Сообщений: 31
12.12.2010, 14:40 #3
Кто может переписать на СИ ?
0
valeriikozlov
Эксперт С++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
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
Olga_
842 / 184 / 16
Регистрация: 01.08.2011
Сообщений: 502
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];
      }
0
grizlik78
Эксперт С++
1957 / 1450 / 116
Регистрация: 29.05.2011
Сообщений: 3,012
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
Olga_
842 / 184 / 16
Регистрация: 01.08.2011
Сообщений: 502
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
grizlik78
Эксперт С++
1957 / 1450 / 116
Регистрация: 29.05.2011
Сообщений: 3,012
01.08.2011, 21:18 #8
По мне, так xor ещё более скучен.
0
Olga_
842 / 184 / 16
Регистрация: 01.08.2011
Сообщений: 502
01.08.2011, 21:20 #9
Цитата Сообщение от grizlik78 Посмотреть сообщение
По мне, так xor ещё более скучен.
На операции XOR очень много криптографических алгоритмов построено, так что не надо тут...
0
diagon
Higher
1929 / 1195 / 49
Регистрация: 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
grizlik78
Эксперт С++
1957 / 1450 / 116
Регистрация: 29.05.2011
Сообщений: 3,012
01.08.2011, 21:26 #11
Цитата Сообщение от Olga_ Посмотреть сообщение
На операции XOR очень много криптографических алгоритмов построено, так что не надо тут...
Я про использование его для обмена. Даже в виде ассемблерной вставки выгоды почти нет.
0
Kastaneda
Форумчанин
Эксперт С++
4655 / 2863 / 228
Регистрация: 12.12.2009
Сообщений: 7,275
Записей в блоге: 2
Завершенные тесты: 1
01.08.2011, 21:27 #12
Olga_, если не секрет, что вас сподвигло поднять тему 3-х (!!!) годичной давности ?
0
Olga_
842 / 184 / 16
Регистрация: 01.08.2011
Сообщений: 502
01.08.2011, 21:31 #13
Цитата Сообщение от Kastaneda Посмотреть сообщение
Olga_, если не секрет, что вас сподвигло поднять тему 3-х (!!!) годичной давности ?
Просто ее до конца-то не решили. В задаче ясно говорилось транспонировать, а не вывести на экран в таком виде, вот и усе.
0
Kastaneda
01.08.2011, 21:38
  #14

Не по теме:

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

0
Olga_
842 / 184 / 16
Регистрация: 01.08.2011
Сообщений: 502
01.08.2011, 23:18 #15
Цитата Сообщение от grizlik78 Посмотреть сообщение
Я про использование его для обмена. Даже в виде ассемблерной вставки выгоды почти нет.
Это верно, сейчас компьютеры быстро работают, разницы почти никакой. Просто операция полезная. Я не со зла
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.08.2011, 23:18
Привет! Вот еще темы с ответами:

Найти сумму элементов матрицы, лежащих выше главной и побочной диагоналей - C++
Универсальный алгоритм поиска элементов матрицы расположенных верхней половине матрицы без диагональных элементов исходя из ее размера...

Найти максимальные элементы главной и побочной диагоналей матрицы и поменять их местами - C++
Дана матрица nxn. Найти максимальные элементы главной и побочной диагоналей матрицы и поменять их местами. Нашел максимальные элементы,...

Заполнить секторы матрицы лежащие влево и вправо от главной и побочной диагоналей - C++
Заполнить секторы матрицы А(9,9), которые лежат влево и вправо от главной и побочной диагоналей ЛП, от левого верхнего угла вправо - вниз....

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


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
01.08.2011, 23:18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru