Форум программистов, компьютерный форум 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++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
volovzi
266 / 168 / 8
Регистрация: 14.03.2010
Сообщений: 501
13.11.2010, 12:34     Поменять местами две строки матрицы #2
Если массив динамический, то поменять местами указатели, а если статический, то последовательным свопом.
relok
2 / 2 / 0
Регистрация: 13.11.2010
Сообщений: 23
13.11.2010, 12:40     Поменять местами две строки матрицы #3
если бездумно и безпошадно:

C++
1
2
3
4
5
6
7
8
int m[3][3]={
{1, 6, 7},
{2, 5, 8},
{3, 4, 9}};
int tmp[3]={m[0][0],m[0][1],m[0][2]}; //сохраняем первую строку
 
m[0][0]=m[1][0];m[0][1]=m[1][1];m[0][2]=m[1][2]; //в первую строку записываем вторую строку
m[1][0]=tmp[0];m[1][1]=tmp[1];m[1][2]=tmp[2]; //во вторую строку записываем сохраненную первую
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
13.11.2010, 19:56     Поменять местами две строки матрицы #4
Oliga_19, вот так это делается в цивилизованном мире
C++
1
2
3
4
5
6
7
8
9
int i, firstRow, secondRow, rowCount, columnCount, tempCell;
int** matr;
// ввод и создание массива
for(i = 0; i < columnCount; ++i)
{
    tempCell = matr[firstRow][i];
    matr[firstRow][i] = matr[secondRow][i];
    matr[secondRow][i] = tempCell;
}
relok
2 / 2 / 0
Регистрация: 13.11.2010
Сообщений: 23
13.11.2010, 20:50     Поменять местами две строки матрицы #5
ну так любой может! =)
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
13.11.2010, 20:55     Поменять местами две строки матрицы #6
ну так любой может! =)
Так и сделали бы. Читая посты до M128K145 сложилось впечатление, что так любой не может.
relok
2 / 2 / 0
Регистрация: 13.11.2010
Сообщений: 23
13.11.2010, 20:57     Поменять местами две строки матрицы #7
я сделал так, чтобы человеку было понятно, что он хочет сделать
а почитав форы и кучу левых переменных - он тупо скопирует, не поняв сути задачи
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
13.11.2010, 21:03     Поменять местами две строки матрицы #8
relok, кстати за это вот : Найти сумму всех нечетных трехзначных чисел уважаю. (серьезно, без издевки). Отдельная благодарность от меня.
volovzi
266 / 168 / 8
Регистрация: 14.03.2010
Сообщений: 501
13.11.2010, 21:06     Поменять местами две строки матрицы #9
M128K145, не знаю, как в вашем, а в нашем цивилизованном мире это делается так:
C
1
2
3
int ** matrix;
...
swap(matrix[oneRow], matrix[anotherRow]);
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
13.11.2010, 21:08     Поменять местами две строки матрицы #10
relok, знаете, насколько я могу судить, люди и Хеллоу Ворлд тупо копируют, не разбираясь, а потом не могут ответить, что это за принтэф там такой...
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
13.11.2010, 21:24     Поменять местами две строки матрицы #11
volovzi, а теперь ваш вариант, но только для обмена столбцов
relok
2 / 2 / 0
Регистрация: 13.11.2010
Сообщений: 23
13.11.2010, 21:30     Поменять местами две строки матрицы #12
valeriikozlov, по моему вы как раз стебетесь над моим топорными методами решения=)
almazsr
232 / 169 / 7
Регистрация: 13.11.2010
Сообщений: 425
13.11.2010, 21:32     Поменять местами две строки матрицы #13
Цитата Сообщение от M128K145 Посмотреть сообщение
volovzi, а теперь ваш вариант, но только для обмена столбцов
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void transp(int** a, int** b, int n, int m)
{
    int** result=new int*[n];
    for(int i=0; i<n; i++)
    {
        result[i]=new int[m];
        for(int j=0; j<m; j++)
        {
            result[i][j]=a[j][i];
        }
    }
}
 
void main()
{
    ...
    transp(matrix,tr,n,m);
    swap(tr[i], tr[j]);
    transp(tr,matrix,n,m);
    ...
}
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
13.11.2010, 21:36     Поменять местами две строки матрицы #14
almazsr, спасибо за ответ, но я хочу увидеть ответ volovzi, а ваш код, извините, но ни в какие ворота по перфомансу не лезет
volovzi
266 / 168 / 8
Регистрация: 14.03.2010
Сообщений: 501
13.11.2010, 21:41     Поменять местами две строки матрицы #15
M128K145, вопрос был про строки. Твой вариант, очевидно, неоптимален для строк. Если используешь указатели, так используй их до конца.
Со столбцами по-другому. Не надо стремиться решить все задачи универсальным способом, иначе выйдет как у "шутника" almazsr'a.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
13.11.2010, 21:42     Поменять местами две строки матрицы #16
по моему вы как раз стебетесь над моим топорными методами решения=)
relok, ничего подобного, просто иногда нужно не топорный метод, а что-нибудь гибкое (что-бы уложиться по времени или по памяти). Ваш метод хорош в том что он не оспариваемый. (я над ним не стебусь - ЧЕСТНО!!!!)
relok
2 / 2 / 0
Регистрация: 13.11.2010
Сообщений: 23
13.11.2010, 21:46     Поменять местами две строки матрицы #17
valeriikozlov, человеку, задающему такие вопросы (найти сумму всех нечетных 3-ех значных) гибкий метод незачем=) ему нужно разобраться, что такое трехзначные числа, что такое сумма и что такое нечетные числа

типа как в притче - не давай человеку рыбу, а дай удочку
almazsr
232 / 169 / 7
Регистрация: 13.11.2010
Сообщений: 425
13.11.2010, 21:46     Поменять местами две строки матрицы #18
Цитата Сообщение от M128K145 Посмотреть сообщение
almazsr, спасибо за ответ, но я хочу увидеть ответ volovzi, а ваш код, извините, но ни в какие ворота по перфомансу не лезет
Это была ирония. Задание было поменять строки. Дальше пошли придирки.
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
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;
}
Так вот, обычному программисту хватило бы первой функции, вы бы использовали еще и вторую функцию, потому что битовые операции якобы быстрее. Это утрировано конечно, но тем не менее
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.11.2010, 22:17     Поменять местами две строки матрицы
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
volovzi
266 / 168 / 8
Регистрация: 14.03.2010
Сообщений: 501
13.11.2010, 22:17     Поменять местами две строки матрицы #20
M128K145, обмен строк и столбцов не являются принципиально одинаковыми действиями ни с точки зрения реализации, ни с точки зрения интерфейса. Для этих действий в любом случае будут написаны две разные функции. А как функция реализована внутри — неважно. Главное, чтобы она была удобна в использовании и работала быстро.
А разница в быстродействии в данном случае огромна — у меня время константное, а у тебя — линейное.

А пример не катит. Вообще-то, в стандартной библиотеке есть разные функции для степени двойки и произвольной степени.
Yandex
Объявления
13.11.2010, 22:17     Поменять местами две строки матрицы
Ответ Создать тему
Опции темы

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