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

Побочная диагональ матрицы - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 39, средняя оценка - 4.97
Rom1ch
0 / 0 / 0
Регистрация: 04.07.2011
Сообщений: 12
04.07.2011, 15:51     Побочная диагональ матрицы #1
Подскажите, как в динамической квадратной матрице поменять элементы главной и побочной диагонали между собой?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
04.07.2011, 15:55     Побочная диагональ матрицы #2
C++
1
2
for(size_t i = 0; i < N; ++i)
  std::swap(matr[i][i], matr[n - i - 1][n - i - 1]);
Rom1ch
0 / 0 / 0
Регистрация: 04.07.2011
Сообщений: 12
04.07.2011, 20:59  [ТС]     Побочная диагональ матрицы #3
делаю так:
for(size_t i = 0; i < n; ++i)
std::swap(matr[i][i], matr[n - i - 1][n - i - 1]);
for(i=0;i<n;i++)
{for(j=0;j<n;j++)
printf("%d ",matr[i][j]); cout<<endl;}

Чёто не меняет, выводит ту же исходную матрицу,
вообще мы в универе такой записью (std::swap) не пользовались , т.е. надо как-то через циклы решить без использования (std::swap)
C++ знаю полгода, поэтому туплю...
ValeryS
Модератор
6375 / 4841 / 443
Регистрация: 14.02.2011
Сообщений: 16,044
04.07.2011, 21:19     Побочная диагональ матрицы #4
Цитата Сообщение от asics Посмотреть сообщение
std::swap(matr[i][i], matr[n - i - 1][n - i - 1]);
из одной и тойже диагонали значения
может так
C++
1
std::swap(matr[i][i], matr[n - i - 1][ i ]);
Добавлено через 53 секунды
Цитата Сообщение от Rom1ch Посмотреть сообщение
т.е. надо как-то через циклы решить
через цикл и решено

Добавлено через 1 минуту
Цитата Сообщение от Rom1ch Посмотреть сообщение
без использования (std::swap)
если матрица из типов int
То пиши
C++
1
matr[i][i]= matr[n - i - 1][i];
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
04.07.2011, 21:21     Побочная диагональ матрицы #5
Цитата Сообщение от ValeryS Посмотреть сообщение
из одной и тойже диагонали значения
Что-то я сомневаюсь в этом.
ValeryS
Модератор
6375 / 4841 / 443
Регистрация: 14.02.2011
Сообщений: 16,044
04.07.2011, 21:28     Побочная диагональ матрицы #6
Цитата Сообщение от asics Посмотреть сообщение
Что-то я сомневаюсь в этом.
допустим
n=10
i=0
то
std::swap(matr[0][0], matr[9][9]);
главная диагональ
а при моей записи
std::swap(matr[0][0], matr[9][0]);
столбец один строки разные
т.е разные диагонали
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
04.07.2011, 21:35     Побочная диагональ матрицы #7
Да да, пардон, туплю.
Rom1ch
0 / 0 / 0
Регистрация: 04.07.2011
Сообщений: 12
04.07.2011, 21:45  [ТС]     Побочная диагональ матрицы #8
Всё, спасибо, я сделал) Через вспомогательный двумерный массив.

Вот конец проги:
for(i = 0; i < n; i++)
for(j=0;j<n;j++)
if (i==j) {zammatr[i][j]=matr[i][i]; matr[i][i]=matr[i][n-i-1]; matr[i][n-i-1]=zammatr[i][j];}

for(i=0;i<n;i++)
{for(j=0;j<n;j++)
printf("%10d ",matr[i][j]); cout<<endl;}
almazsr
232 / 169 / 7
Регистрация: 13.11.2010
Сообщений: 425
04.07.2011, 21:48     Побочная диагональ матрицы #9
Rom1ch, зачем через массив, еще и 2х-мерный? Просто переменную, если уж на то пошло.
neske
04.07.2011, 21:49
  #10

Не по теме:

жеесть)

Rom1ch
0 / 0 / 0
Регистрация: 04.07.2011
Сообщений: 12
04.07.2011, 21:57  [ТС]     Побочная диагональ матрицы #11
Хах, да, можно и через переменную, сам усложняю себе жизнь))
А если не через переменную, то как выглядит текст проги?
nameless
Эксперт C++
 Аватар для nameless
289 / 288 / 14
Регистрация: 16.06.2009
Сообщений: 486
04.07.2011, 22:01     Побочная диагональ матрицы #12
Цитата Сообщение от Rom1ch Посмотреть сообщение
А если не через переменную, то как выглядит текст проги?
В смысле, не через переменную? А через что?
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,692
04.07.2011, 22:02     Побочная диагональ матрицы #13
nameless,
C++
1
2
3
a = a + b;
b = a - b;
a = a - b;
nameless
Эксперт C++
 Аватар для nameless
289 / 288 / 14
Регистрация: 16.06.2009
Сообщений: 486
04.07.2011, 22:06     Побочная диагональ матрицы #14
neske, В этом смысле. А то посмотрев реализацию через доп. матрицу, подумал, что автор придумал, еще более извращенные вещи..
Rom1ch
0 / 0 / 0
Регистрация: 04.07.2011
Сообщений: 12
04.07.2011, 22:28  [ТС]     Побочная диагональ матрицы #15
a = a + b;
b = a - b;
a = a - b;
классный код, но где он используется и зачем? Ведь проще и нагляднее так:
x=a;
a=b;
b=x;
nameless
Эксперт C++
 Аватар для nameless
289 / 288 / 14
Регистрация: 16.06.2009
Сообщений: 486
04.07.2011, 22:34     Побочная диагональ матрицы #16
Цитата Сообщение от Rom1ch Посмотреть сообщение
a = a + b;
b = a - b;
a = a - b;
классный код, но где он используется и зачем? Ведь проще и нагляднее так:
x=a;
a=b;
b=x;

Не по теме:

Есть еще очень красивый способ обмена, с помощью операции xor:

C++
1
2
3
4
5
int a = 10, b = 25;
   
a ^= b;
b ^= a;
b ^= a;

Rom1ch
0 / 0 / 0
Регистрация: 04.07.2011
Сообщений: 12
04.07.2011, 23:22  [ТС]     Побочная диагональ матрицы #17
Да, работает, только он такой должен быть
a ^= b;
b ^= a;
a ^= b;
nameless
Эксперт C++
 Аватар для nameless
289 / 288 / 14
Регистрация: 16.06.2009
Сообщений: 486
04.07.2011, 23:26     Побочная диагональ матрицы #18
Rom1ch, Ну да. Прошу прощения, опечатолсо..
Rom1ch
0 / 0 / 0
Регистрация: 04.07.2011
Сообщений: 12
04.07.2011, 23:37  [ТС]     Побочная диагональ матрицы #19
А способ действительно хорош
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.07.2011, 00:16     Побочная диагональ матрицы
Еще ссылки по теме:

Заменить главную диагональ матрицы C++
C++ Упорядочить по возрастанию главную диагональ матрицы
C++ Двумерный массив. Матричные вычисления. Побочная диагональ

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

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6375 / 4841 / 443
Регистрация: 14.02.2011
Сообщений: 16,044
05.07.2011, 00:16     Побочная диагональ матрицы #20
Цитата Сообщение от Rom1ch Посмотреть сообщение
классный код, но где он используется и зачем? Ведь проще и нагляднее так:
выбирай любой
1 выпендрится
2 запутать тех кто будет ломать программу
3 самое главное сэкономить ячейку памяти
в микроконтролерах её ой как мало
Yandex
Объявления
05.07.2011, 00:16     Побочная диагональ матрицы
Ответ Создать тему
Опции темы

Текущее время: 03:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru