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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 105, средняя оценка - 4.92
Oliga_19
5 / 5 / 0
Регистрация: 28.11.2009
Сообщений: 25
#1

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

13.11.2010, 12:18. Просмотров 17177. Ответов 40
Метки нет (Все метки)

1 6 7
2 5 8
3 4 9.
Язык программирования Си.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.11.2010, 12:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Поменять местами две строки матрицы (C++):

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

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

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

Разработать функцию, позволяющую поменять местами две произвольные строки матрицы - C++
Имеется код: #include <iostream> #include <stdio.h> using namespace std; char **s = new char* , *t; int i, j, n; int main() {...

Двумерный массив: поменять местами две строки - C++
В матрице из целых положительных чисел поменять местами две строки: строка, которая содержит максимальный элемент матрицы, и строку,...

Двумерный массив: поменять местами две строки - C++
Нужно поменять местами две строки в массиве:строку, которая содержит максимальный элемент матрицы, и строку, содержащую минимальный ...

40
valeriikozlov
Эксперт С++
4677 / 2503 / 322
Регистрация: 18.08.2009
Сообщений: 4,550
13.11.2010, 21:42 #16
по моему вы как раз стебетесь над моим топорными методами решения=)
relok, ничего подобного, просто иногда нужно не топорный метод, а что-нибудь гибкое (что-бы уложиться по времени или по памяти). Ваш метод хорош в том что он не оспариваемый. (я над ним не стебусь - ЧЕСТНО!!!!)
0
relok
2 / 2 / 0
Регистрация: 13.11.2010
Сообщений: 25
13.11.2010, 21:46 #17
valeriikozlov, человеку, задающему такие вопросы (найти сумму всех нечетных 3-ех значных) гибкий метод незачем=) ему нужно разобраться, что такое трехзначные числа, что такое сумма и что такое нечетные числа

типа как в притче - не давай человеку рыбу, а дай удочку
0
almazsr
232 / 169 / 7
Регистрация: 13.11.2010
Сообщений: 425
13.11.2010, 21:46 #18
Цитата Сообщение от M128K145 Посмотреть сообщение
almazsr, спасибо за ответ, но я хочу увидеть ответ volovzi, а ваш код, извините, но ни в какие ворота по перфомансу не лезет
Это была ирония. Задание было поменять строки. Дальше пошли придирки.
0
M128K145
Эксперт С++
8309 / 3529 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
13.11.2010, 22:03 #19
volovzi, понимаете, это простое действие, но если вы будете делать принципиально одинаковые действия, но посложнее обычного обмена строк, но по разному - это к добру не приведет, надо стремится к однообразию в коде, а не созданием множества методов/функций на каждый чих, тем более если проигрыш в быстродействии минимален.
Просто понимаете, проводя аналогию с вашим решением - вот такой код:
C++
1
2
3
4
5
6
7
8
9
int mul(int firstNumber, int secondNumber){
    return firstNumber * secondNumber; 
}
 
int mulExp2(int firstNumber, int secondNumber){
    int i;
    while(secondNumber >>= 1) ++i;
    return firstNumber << i;
}
Так вот, обычному программисту хватило бы первой функции, вы бы использовали еще и вторую функцию, потому что битовые операции якобы быстрее. Это утрировано конечно, но тем не менее
0
volovzi
268 / 170 / 8
Регистрация: 14.03.2010
Сообщений: 501
13.11.2010, 22:17 #20
M128K145, обмен строк и столбцов не являются принципиально одинаковыми действиями ни с точки зрения реализации, ни с точки зрения интерфейса. Для этих действий в любом случае будут написаны две разные функции. А как функция реализована внутри — неважно. Главное, чтобы она была удобна в использовании и работала быстро.
А разница в быстродействии в данном случае огромна — у меня время константное, а у тебя — линейное.

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

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


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

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

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

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

Между прочим, редактирование нескольких однотипных функций как раз более опасно, чем нескольких разнотипных (что-то сродни антипаттерну copy-paste). Можно легко перепутать, что ты сейчас редактируешь, поставить не тот итератор и т.п. Вот здесь как стоило бы посидеть над каждой функцией. А своп я даже проверять не буду .
0
M128K145
Эксперт С++
8309 / 3529 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
13.11.2010, 23:56 #27
volovzi, когда мы начали обсуждать использования способа обмена и методы организации решения - то мы начали обсуждать принципы программирования, а не конкретную задачу на конкретном языке. Я же не зря в начале своего поста поставил цитату, на нее стоит обратить внимание. В этом разделе как бы не только бесплатно решают задачки, тут еще и учатся программированию, поэтому обсуждать отталкиваясь только от свопа и матрицы - не серьезно. Все же ответьте на весь предыдущий пост, не теряя цитаты
0
volovzi
268 / 170 / 8
Регистрация: 14.03.2010
Сообщений: 501
14.11.2010, 00:19 #28
M128K145, ты в какие-то дебри ушёл. Я утверждаю, что простая в понимании функция, работающая за константное время, лучше, чем более сложная, работающая за линейное.
А размер функции от размера проекта вообще не зависит.
0
M128K145
Эксперт С++
8309 / 3529 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
14.11.2010, 00:23 #29
volovzi, речь идет о целесообразности применения разных решений для практически одинаковых действий
0
volovzi
268 / 170 / 8
Регистрация: 14.03.2010
Сообщений: 501
14.11.2010, 00:34 #30
В данном случае это целесообразно, и я уже объяснил почему.
0
14.11.2010, 00:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.11.2010, 00:34
Привет! Вот еще темы с ответами:

В матрице поменять местами две строки с заданными номерами - C++
2)Из элементов полученной матрицы, которые лежат на главной диагонали и под ней, сформировать нижнюю треугольную матрицу С; 3)Из...

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

Поменять местами максимальный элемент каждой строки матрицы с первым элементом строки - C++
Написать функцию, которая меняет местами максимальный элемент каждой строки матрицы С(5,5) с первым элементом соответствующей строки.

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


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

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

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