Вопрос № 173690: Здравствуйте эксперты! Дана матрица n x m если в матрице есть строки,в которых элементы упорядочены по возрастанию,переставить эти строки в начало матрицы. Заранее большое спасибо!...
Вопрос № 173690:
Здравствуйте эксперты! Дана матрица n x m если в матрице есть строки,в которых элементы упорядочены по возрастанию,переставить эти строки в начало матрицы. Заранее большое спасибо!
Отвечает Micren, Бакалавр :
Здравствуйте, Akum2008. Программа. С++. MS VS 2008.
В программе используются стандартные массивы С++. Перестановка строк в таких массивах весьма трудоемка. Легче было бы сделать это на контейнерных типах данных, но т.к. Вы не указали, что конкретно требуется то и сделал на стандартных массивах.
// Решение
задачи здесь template<size_t _dim1,size_t _dim2> void solve(int (&matrix)[_dim1][_dim2]) { // Строка в которую будем переносить упорядоченную строку size_t to=0; for(size_t i=0;i<_dim1;++i) { // Флаг. Если упорядочена по возрастанию. bool ascending=true; // Проверяем на упорядоченность for(size_t j=1;j<_dim2 && ascending;++j) { // Строго по возрастанию. Если надо по не убыванию сделайте <= ascendi
ng=matrix[i][j-1]<matrix[i][j]; } // Если упорядочена if(ascending) { // Индекс строки которую переносим size_t from=i; // Перенос осуществляется постепенным сдвигом строки вверх, // не нарушая порядок остальных строк // Пока не переместили куда надо while(from!=to) { // Сдвигаем вверх for(size_t j=0;j<_dim2;++j) { swap(matrix[from][j],matrix[from-1][j]); } --from; } // Строка перемещена,
значит в следующий раз перемещать будем на строку ниже ++to; } } }
int main() { srand(static_cast<unsigned int>(time(0))); setlocale(LC_ALL,"russian"); // Матрица int matrix[5][3]; // Заполняем generateMatrix(matrix); // Выводим cout<<"Исходная матрица:"<<endl<<setw(4)<<matrix<<endl; // Решаем задачу solve(matrix); // Выводим результат cou
t<<"Результат:"<<endl<<setw(4)<<matrix<<endl; system("PAUSE"); return 0; }
Ответ отправил: Micren, Бакалавр
Ответ отправлен: 26.10.2009, 02:04
Оценка ответа: 5 Комментарий к оценке: Спасибо большое!
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 255848
на номер 1151 (Россия) |
Еще номера »
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Отвечает vladisslav, 5-й класс :
Здравствуйте, Akum2008. Вариант на C с использованием для сортировки массива указателей и без привязки к конкретному типу элемента.
Приложение:
Ответ отправил: vladisslav, 5-й класс
Ответ отправлен: 26.10.2009, 10:30
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 255857
на номер 1151 (Россия) |
Еще номера »
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Отвечает Ashotn, 1-й класс :
Здравствуйте, Akum2008. Я напишу завтра программу. Согласны заплатить?
Первоначальный ответ. Был удален. По настойчивой просьбе автора восстановлен и скорректирован.
Статус : непрочитанное Дата : 26.10.2009, 16:15 От кого : Ashotn, 1-й класс Тема : Без темы Сообщение : // matrica.cpp : Defines the entry point for the console application. //
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.