Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/114: Рейтинг темы: голосов - 114, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 04.07.2011
Сообщений: 12
1

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

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

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

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

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

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

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

20
Freelance
Эксперт С++
2891 / 1826 / 356
Регистрация: 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
0 / 0 / 0
Регистрация: 04.07.2011
Сообщений: 12
04.07.2011, 20:59  [ТС] 3
делаю так:
C++
1
2
3
4
5
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
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
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
Freelance
Эксперт С++
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
04.07.2011, 21:21 5
Цитата Сообщение от ValeryS Посмотреть сообщение
из одной и тойже диагонали значения
Что-то я сомневаюсь в этом.
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
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
Freelance
Эксперт С++
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
04.07.2011, 21:35 7
Да да, пардон, туплю.
0
0 / 0 / 0
Регистрация: 04.07.2011
Сообщений: 12
04.07.2011, 21:45  [ТС] 8
Всё, спасибо, я сделал) Через вспомогательный двумерный массив.

Вот конец проги:
C++
1
2
3
4
5
6
7
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
236 / 173 / 25
Регистрация: 13.11.2010
Сообщений: 425
04.07.2011, 21:48 9
Rom1ch, зачем через массив, еще и 2х-мерный? Просто переменную, если уж на то пошло.
0
neske
04.07.2011, 21:49
  #10

Не по теме:

жеесть)

0
0 / 0 / 0
Регистрация: 04.07.2011
Сообщений: 12
04.07.2011, 21:57  [ТС] 11
Хах, да, можно и через переменную, сам усложняю себе жизнь))
А если не через переменную, то как выглядит текст проги?
0
Эксперт С++
342 / 306 / 36
Регистрация: 16.06.2009
Сообщений: 486
04.07.2011, 22:01 12
Цитата Сообщение от Rom1ch Посмотреть сообщение
А если не через переменную, то как выглядит текст проги?
В смысле, не через переменную? А через что?
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
04.07.2011, 22:02 13
nameless,
C++
1
2
3
a = a + b;
b = a - b;
a = a - b;
0
Эксперт С++
342 / 306 / 36
Регистрация: 16.06.2009
Сообщений: 486
04.07.2011, 22:06 14
neske, В этом смысле. А то посмотрев реализацию через доп. матрицу, подумал, что автор придумал, еще более извращенные вещи..
0
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;
0
Эксперт С++
342 / 306 / 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
0 / 0 / 0
Регистрация: 04.07.2011
Сообщений: 12
04.07.2011, 23:22  [ТС] 17
Да, работает, только он такой должен быть
a ^= b;
b ^= a;
a ^= b;
0
Эксперт С++
342 / 306 / 36
Регистрация: 16.06.2009
Сообщений: 486
04.07.2011, 23:26 18
Rom1ch, Ну да. Прошу прощения, опечатолсо..
0
0 / 0 / 0
Регистрация: 04.07.2011
Сообщений: 12
04.07.2011, 23:37  [ТС] 19
А способ действительно хорош
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
05.07.2011, 00:16 20
Цитата Сообщение от Rom1ch Посмотреть сообщение
классный код, но где он используется и зачем? Ведь проще и нагляднее так:
выбирай любой
1 выпендрится
2 запутать тех кто будет ломать программу
3 самое главное сэкономить ячейку памяти
в микроконтролерах её ой как мало
0
05.07.2011, 00:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.07.2011, 00:16
Помогаю со студенческими работами здесь

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

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

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

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

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

Диагональ матрицы с минимальным элементом
Всем добрый день. Задача такова: надо найти в квадратной матрице диагональ с минимальным...


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

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