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

Поменять местами две строки матрицы - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 105, средняя оценка - 4.92
Oliga_19
5 / 5 / 0
Регистрация: 28.11.2009
Сообщений: 25
13.11.2010, 12:18     Поменять местами две строки матрицы #1
1 6 7
2 5 8
3 4 9.
Язык программирования Си.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.11.2010, 12:18     Поменять местами две строки матрицы
Посмотрите здесь:

Поменять местами две любые строки матрицы C++
C++ Разработать функцию, позволяющую поменять местами две произвольные строки матрицы
C++ Разработать функцию, позволяющую поменять местами две произвольные строки двухмерного массива
Двумерный массив: поменять местами две строки C++
Двумерный массив: поменять местами две строки C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
almazsr
232 / 169 / 7
Регистрация: 13.11.2010
Сообщений: 425
13.11.2010, 22:19     Поменять местами две строки матрицы #21
M128K145, вы не в ту степь пошли. По вашему когда в std есть функция swap ею не надо пользоваться, а нужно заменять все кусками "однородного" кода?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
13.11.2010, 22:58     Поменять местами две строки матрицы #22
almazsr, логично, что swap надо использовать не всегда, он удобен, например, для быстрого обмена объектов, а не для таких легких действий. В общем не буду никого ни в чем убеждать, но потом, когда на серьезном проекте с таким столкнетесь, где кода будет не 2 строки, а 102, тогда поймете к чему я это говорил, и как вы потом будете вносить изменения и решать проблемы, вызванные подобными изменениями.

volovzi, вам все равно как будет выглядеть функция внутри? Простите, а вы кто по профессии? Вы разве не программист? Тогда как вы можете говорить, что вам все равно как она выглядит внутри? А кто будет саппортить код потом? Кто будет вносить изменения в код?


Цитата Сообщение от volovzi Посмотреть сообщение
в стандартной библиотеке есть разные функции для степени двойки и произвольной степени.
А где вы увидели степень? Я вообще-то числа просто умножал.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
13.11.2010, 22:59     Поменять местами две строки матрицы #23
Полностью солидарен с M128K145.
volovzi
266 / 168 / 8
Регистрация: 14.03.2010
Сообщений: 501
13.11.2010, 23:13     Поменять местами две строки матрицы #24
Цитата Сообщение от M128K145 Посмотреть сообщение
volovzi, вам все равно как будет выглядеть функция внутри? Простите, а вы кто по профессии? Вы разве не программист? Тогда как вы можете говорить, что вам все равно как она выглядит внутри? А кто будет саппортить код потом? Кто будет вносить изменения в код?
Это уже эмоции, а не аргументы.

Не надо выдёргивать слова из контекста. Неважно, как выглядит функция с точки зрения единообразности кода. Естественно, желательно, чтобы она легко читалась и понималась. Но и в данном случае читать, понимать и поддерживать своп двух указателей проще, чем цикл с несколькими действиями.

А где вы увидели степень? Я вообще-то числа просто умножал.
Да, невнимательно посмотрел. Тем не менее, пример всё равно плохой.
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
13.11.2010, 23:28     Поменять местами две строки матрицы #25
Цитата Сообщение от M128K145 Посмотреть сообщение
но потом, когда на серьезном проекте с таким столкнетесь, где кода будет не 2 строки, а 102
volovzi, ваши действия? Вам удобнее саппортить две функции, выполняющие практически одни и те же действия(отойдем временно от языка С++ и его хранения данных в памяти, потому как например в паскале вы не сможете обменять указатели на строки, т.к. там двумерный массив хранится в памяти линейно), коими и являются обмен строк и столбцов в матрице, которые написаны одинаково и требуют однотипных изменений, или же двух функций, но разных в реализации и, следовательно, разных изменений в коде. При этом могут возникнуть баги(все мы люди). И опять же, в первом случае исправление будет однотипным(полчаса с дебаггером), во втором - по полчаса с дебаггером для каждой функции. А пользователь как раз не заметит разницы - перебросили вы указатели или в цикле обменяли значения, зато вы запомните это надолго(читайте, на протяжении всего проекта)

ЗЫ. никаких эмоций, только хорошие намерения
volovzi
266 / 168 / 8
Регистрация: 14.03.2010
Сообщений: 501
13.11.2010, 23:46     Поменять местами две строки матрицы #26
M128K145, от языка Си++ отходить не надо . Здесь обсуждается решение конкретной задачи на конкретном языке.

Между прочим, редактирование нескольких однотипных функций как раз более опасно, чем нескольких разнотипных (что-то сродни антипаттерну copy-paste). Можно легко перепутать, что ты сейчас редактируешь, поставить не тот итератор и т.п. Вот здесь как стоило бы посидеть над каждой функцией. А своп я даже проверять не буду .
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
13.11.2010, 23:56     Поменять местами две строки матрицы #27
volovzi, когда мы начали обсуждать использования способа обмена и методы организации решения - то мы начали обсуждать принципы программирования, а не конкретную задачу на конкретном языке. Я же не зря в начале своего поста поставил цитату, на нее стоит обратить внимание. В этом разделе как бы не только бесплатно решают задачки, тут еще и учатся программированию, поэтому обсуждать отталкиваясь только от свопа и матрицы - не серьезно. Все же ответьте на весь предыдущий пост, не теряя цитаты
volovzi
266 / 168 / 8
Регистрация: 14.03.2010
Сообщений: 501
14.11.2010, 00:19     Поменять местами две строки матрицы #28
M128K145, ты в какие-то дебри ушёл. Я утверждаю, что простая в понимании функция, работающая за константное время, лучше, чем более сложная, работающая за линейное.
А размер функции от размера проекта вообще не зависит.
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
14.11.2010, 00:23     Поменять местами две строки матрицы #29
volovzi, речь идет о целесообразности применения разных решений для практически одинаковых действий
volovzi
266 / 168 / 8
Регистрация: 14.03.2010
Сообщений: 501
14.11.2010, 00:34     Поменять местами две строки матрицы #30
В данном случае это целесообразно, и я уже объяснил почему.
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
14.11.2010, 09:03     Поменять местами две строки матрицы #31
volovzi, не буду переубеждать, но столкнетесь - вспомните
volovzi
266 / 168 / 8
Регистрация: 14.03.2010
Сообщений: 501
14.11.2010, 11:28     Поменять местами две строки матрицы #32
M128K145, если ты так упрямо не хочешь признаваться, что написал плохой пример, то, может, спросим "зал"? Тут можно опросы делать?
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
14.11.2010, 11:51     Поменять местами две строки матрицы #33
то, может, спросим "зал"? Тут можно опросы делать?
А смысл? Оба приведенных варианта обмена строк правильные и оба могут применяться к матрицам любых размеров и типов. Вариант с swap() более современный и проще в написании. Но и вариант который привел M128K145 тоже нужно знать - т.к. существуют близкие задачи к обмену двух строк, но swap() там уже не сможешь использовать, а подойдет немного переделанный вариант M128K145.
volovzi
266 / 168 / 8
Регистрация: 14.03.2010
Сообщений: 501
14.11.2010, 11:58     Поменять местами две строки матрицы #34
Цитата Сообщение от valeriikozlov Посмотреть сообщение
А смысл? Оба приведенных варианта обмена строк правильные и оба могут применяться к матрицам любых размеров и типов. Вариант с swap() более современный и проще в написании. Но и вариант который привел M128K145 тоже нужно знать - т.к. существуют близкие задачи к обмену двух строк, но swap() там уже не сможешь использовать, а подойдет немного переделанный вариант M128K145.
Сортировка пузырьком — тоже "правильна" и может применяться к массиву любой размерности. Так почему же ей не пользуются?
Ничего современного в обмене указателей нет. Этот способ — ровесник языка Си.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
14.11.2010, 12:22     Поменять местами две строки матрицы #35
Сортировка пузырьком — тоже "правильна" и может применяться к массиву любой размерности. Так почему же ей не пользуются?
Почему не пользуются, я и сам иногда пользуюсь. Хотя обычно отдаю предпочтение другим сортировкам.
Например вот задача:
Дан массив размером N. Одним обменом называется обмен соседних элементов в массиве. Найдите минимальное кол-во обменов которое нужно совершить чтобы матрица стала упорядоченной по возрастанию.
По-моему для этой задачи как раз подойдет сортировка пузырьком.
volovzi
266 / 168 / 8
Регистрация: 14.03.2010
Сообщений: 501
14.11.2010, 12:32     Поменять местами две строки матрицы #36
valeriikozlov, ага, принцип я понял.
Задача:
Дана матрица N x M. Обменом строк матрицы называется последовательный обмен соответствующих элементов строки.
Обменять строки под номерами i и j.

Я реально не понимаю, что вы так сопротивляетесь?
Своп указателей в данном случае лучше не только по скорости, но и с соображений семантики.
Цель — обменять строки. Пишем — swap(row1, row2), что с языка Си на русский переводится как обмен двух строк. Проще и понятнее не бывает.
Да, к сожалению, со столбцами так не получается, поэтому приходится городить циклы.
А вы тут целую теорию подвели под своё плохое решение.
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
14.11.2010, 12:42     Поменять местами две строки матрицы #37
Цитата Сообщение от volovzi Посмотреть сообщение
Сортировка пузырьком — тоже "правильна" и может применяться к массиву любой размерности.
Опять же вопрос целесообразности. Какой смысл использовать тот же quickSort для массива в 10 элементов, если пузырек намного проще и эффективнее на таких наборах?

volovzi, вы имели опыт реальной разработки, или это то, что вам рассказывают в ВУЗе на лекциях? А то что вы назвали "теорией" - это реальность, с которой вы столкнетесь
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
14.11.2010, 12:46     Поменять местами две строки матрицы #38
Своп указателей в данном случае лучше не только по скорости, но и с соображений семантики.
Я об этом не спорю, наоборот уже писал, что в этих случаях swap() лучше.
Но остаюсь при своем мнении что вариант M128K145 тоже нужный (в других близких задачах лучше будет этот вариант).
А вы тут целую теорию подвели под своё плохое решение.
Я еще никаких решений не выдавал по этому вопросу.
volovzi
266 / 168 / 8
Регистрация: 14.03.2010
Сообщений: 501
14.11.2010, 12:54     Поменять местами две строки матрицы #39
M128K145, предложение спросить народ в силе.

Цитата Сообщение от valeriikozlov Посмотреть сообщение
Я об этом не спорю, наоборот уже писал, что в этих случаях swap() лучше.
Но остаюсь при своем мнении что вариант M128K145 тоже нужный (в других близких задачах лучше будет этот вариант).
Никаких "близких" задач здесь не рассматривалось. Речь шла о конкретной задаче. Такой вариант обмена строк динамического массива на языке Си или Си++ плох (устал объяснять, почему), а потому не нужен.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.11.2013, 17:52     Поменять местами две строки матрицы
Еще ссылки по теме:

C++ В матрице поменять местами две строки с заданными номерами
Поменять местами две средние строки матрицы с первой и последней C++
C++ Поменять местами две заданные строки матрицы

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

Или воспользуйтесь поиском по форуму:
Super GT
4 / 4 / 0
Регистрация: 23.12.2012
Сообщений: 131
09.11.2013, 17:52     Поменять местами две строки матрицы #40
Познавательно

Добавлено через 1 минуту
Правда поэлементный обмен в динамическом массиве не прокатывает, странно.
Yandex
Объявления
09.11.2013, 17:52     Поменять местами две строки матрицы
Ответ Создать тему
Опции темы

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