Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 39, средняя оценка - 4.97
Rom1ch
0 / 0 / 1
Регистрация: 04.07.2011
Сообщений: 12
#1

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

04.07.2011, 15:51. Просмотров 8015. Ответов 20
Метки нет (Все метки)

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

Матрица (побочная диагональ)
Создать матрицу, все элементы, которые ниже побочной диагонали сложить и этим...

Двумерный массив. Матричные вычисления. Побочная диагональ
Дан массив действительных чисел размером nхn(n<10). Найти наименьшее из...

Главная диагональ, побочная и наименьшее из значений элементов побочной диагонали
Дан массив действительных чисел размера nxn (n<=10) а) Найти сумму элементов...

Найти сумму элементов матрицы и заменить ею главную диагональ матрицы
Вот что я написал: // ConsoleApplication17.cpp: определяет точку входа для...

Дан двумерный массив А(4,4) в виде квадратной матрицы. Составьте программу, обнуляющую побочную диагональ матрицы, если в ней найдется хоть один отриц
Дан двумерный массив А(4,4) в виде квадратной матрицы. Составьте программу,...

Главная диагональ матрицы
Добрый вечер! Есть пару задач, с которыми не могу справиться, помогите плиз......

20
asics
Freelance
Эксперт С++
2854 / 1789 / 355
Регистрация: 09.09.2010
Сообщений: 3,841
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]);
0
Rom1ch
0 / 0 / 1
Регистрация: 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++ знаю полгода, поэтому туплю...
0
ValeryS
Модератор
7130 / 5398 / 669
Регистрация: 14.02.2011
Сообщений: 18,218
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];
0
asics
Freelance
Эксперт С++
2854 / 1789 / 355
Регистрация: 09.09.2010
Сообщений: 3,841
04.07.2011, 21:21 #5
Цитата Сообщение от ValeryS Посмотреть сообщение
из одной и тойже диагонали значения
Что-то я сомневаюсь в этом.
0
ValeryS
Модератор
7130 / 5398 / 669
Регистрация: 14.02.2011
Сообщений: 18,218
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]);
столбец один строки разные
т.е разные диагонали
1
asics
Freelance
Эксперт С++
2854 / 1789 / 355
Регистрация: 09.09.2010
Сообщений: 3,841
04.07.2011, 21:35 #7
Да да, пардон, туплю.
0
Rom1ch
0 / 0 / 1
Регистрация: 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;}
0
almazsr
232 / 169 / 25
Регистрация: 13.11.2010
Сообщений: 425
04.07.2011, 21:48 #9
Rom1ch, зачем через массив, еще и 2х-мерный? Просто переменную, если уж на то пошло.
0
neske
04.07.2011, 21:49
  #10

Не по теме:

жеесть)

0
Rom1ch
0 / 0 / 1
Регистрация: 04.07.2011
Сообщений: 12
04.07.2011, 21:57  [ТС] #11
Хах, да, можно и через переменную, сам усложняю себе жизнь))
А если не через переменную, то как выглядит текст проги?
0
nameless
Эксперт С++
338 / 302 / 36
Регистрация: 16.06.2009
Сообщений: 486
04.07.2011, 22:01 #12
Цитата Сообщение от Rom1ch Посмотреть сообщение
А если не через переменную, то как выглядит текст проги?
В смысле, не через переменную? А через что?
0
neske
1527 / 894 / 192
Регистрация: 26.03.2010
Сообщений: 3,074
04.07.2011, 22:02 #13
nameless,
C++
1
2
3
a = a + b;
b = a - b;
a = a - b;
0
nameless
Эксперт С++
338 / 302 / 36
Регистрация: 16.06.2009
Сообщений: 486
04.07.2011, 22:06 #14
neske, В этом смысле. А то посмотрев реализацию через доп. матрицу, подумал, что автор придумал, еще более извращенные вещи..
0
Rom1ch
0 / 0 / 1
Регистрация: 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;
0
nameless
Эксперт С++
338 / 302 / 36
Регистрация: 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;

0
Rom1ch
0 / 0 / 1
Регистрация: 04.07.2011
Сообщений: 12
04.07.2011, 23:22  [ТС] #17
Да, работает, только он такой должен быть
a ^= b;
b ^= a;
a ^= b;
0
nameless
Эксперт С++
338 / 302 / 36
Регистрация: 16.06.2009
Сообщений: 486
04.07.2011, 23:26 #18
Rom1ch, Ну да. Прошу прощения, опечатолсо..
0
Rom1ch
0 / 0 / 1
Регистрация: 04.07.2011
Сообщений: 12
04.07.2011, 23:37  [ТС] #19
А способ действительно хорош
0
ValeryS
Модератор
7130 / 5398 / 669
Регистрация: 14.02.2011
Сообщений: 18,218
05.07.2011, 00:16 #20
Цитата Сообщение от Rom1ch Посмотреть сообщение
классный код, но где он используется и зачем? Ведь проще и нагляднее так:
выбирай любой
1 выпендрится
2 запутать тех кто будет ломать программу
3 самое главное сэкономить ячейку памяти
в микроконтролерах её ой как мало
0
05.07.2011, 00:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.07.2011, 00:16
Привет! Вот еще темы с решениями:

Диагональ двумерной матрицы
Привет всем! На сегодняшний день уже второй раз обращаюсь и мне очень неловко....

Главная диагональ матрицы
Даны две квадратные матрицы. Напечатать ту из них, которая имеет минимальный...

Заменить главную диагональ матрицы
Нужна помощь. Не могу заменить главную диагональ матрицы минимальным элементом,...

Главная диагональ и транспонирование матрицы
Дана целочисленная матрица размерности (n x n) . Если максимальные элементы...


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

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

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