1 / 1 / 2
Регистрация: 25.03.2013
Сообщений: 49
|
||||||
1 | ||||||
Отсортировать строку по возрастанию15.09.2013, 13:54. Показов 1483. Ответов 15
Метки нет (Все метки)
Не получается выполнить задание. Дана целочисленная матрица размера MхN. Расставить по возрастанию элементы заданной строки.
Написал вот такой код:
0
|
15.09.2013, 13:54 | |
Ответы с готовыми решениями:
15
Отсортировать строки в матрице по возрастанию Отсортировать строку по возрастанию Отсортировать строку по по возрастанию Отсортировать 1 строку матрицы и 2 столбик по возрастанию |
15.09.2013, 14:47 | 2 |
Стоит попробовать один из алгоритмов сортировки, а не эту ерунду.
Алгоритмы сортировок
0
|
1 / 1 / 2
Регистрация: 25.03.2013
Сообщений: 49
|
||||||
15.09.2013, 15:11 [ТС] | 3 | |||||
BRcr, если бы это был одномерный массив, я бы еще смог отсортировать, а тут двумерный и я не очень понимаю как это сделать.
Вот написал по аналогии методом обмена:
0
|
Супер-модератор
|
||||||
15.09.2013, 15:35 | 4 | |||||
Dmitry0150,
Сказали же, не надо велосипедов, есть готовые методы сортировки списков...
1
|
1 / 1 / 2
Регистрация: 25.03.2013
Сообщений: 49
|
|
15.09.2013, 17:11 [ТС] | 5 |
Спасибо!
А можете помочь сделать, чтобы номер строки, которую я хочу отсортировать, я указывал сам (а то он сортирует всегда последнюю строку) вот здесь:
0
|
Супер-модератор
|
|
15.09.2013, 17:18 | 6 |
Это неправда. Он сортирует строку, индекс которой введен в Edit1. У тебя это поле просто называется по-другому, скорее всего. Подставь свое название - будет работать как нужно...
1
|
1 / 1 / 2
Регистрация: 25.03.2013
Сообщений: 49
|
||||||
15.09.2013, 18:10 [ТС] | 7 | |||||
UI, и правда, спасибо большое!
Добавлено через 45 минут UI, а как можно изменить этот код чтобы удалить столбец?
0
|
1 / 1 / 2
Регистрация: 25.03.2013
Сообщений: 49
|
||||||
15.09.2013, 18:57 [ТС] | 8 | |||||
Я изменил ваш код вот так:
0
|
15.09.2013, 19:26 | 9 | |||||
Сообщение было отмечено как решение
Решение
Это тихий ужас... Очень советую почитать про оператор delete.
Ближе к теме. На самом деле нет простого и совсем адекватного способа удалять строки и столбцы в стринггриде, эту возможность разработчики почему-то исключили. Есть легкий способ на основе interceptor-классов, но я уже побаиваюсь наткнуться на ответ "я не понимаю и не пойму"... Все же вот этот способ. У класса TStringGrid есть защищенные методы DeleteRow() и DeleteColumn(). Чтобы их использовать можно унаследоваться от класса и открыть их, а затем обманывать родителя с помощью каста указателя:
3
|
Почетный модератор
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
|
|
16.09.2013, 09:39 | 10 |
А как они, интересно, реализованы? Может они точно так же очищают ячейки, сдвигают все последующие уменьшают на один общее количество?
0
|
Супер-модератор
|
||||||
16.09.2013, 10:26 | 11 | |||||
Какая разница? Зато они реализованы и протестированы (потому что используются для внутренних нужд VCL) разработчиками из Embarcadero, а не написаны на коленке. Так что предпочтительно - не переписывать очередной велосипед, а использовать готовое средство...
P.S. Вот реализация:
0
|
Почетный модератор
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
|
|
16.09.2013, 10:35 | 12 |
Да интересно. Может они там какую-нибудь магию делают. )
Соглашусь. Только почему они тогда не public? Ну практически так я и думал. Только бы еще на MoveColumn и MoveRow посмотреть бы.
0
|
Супер-модератор
|
||||||
16.09.2013, 10:48 | 13 | |||||
0
|
Почетный модератор
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
|
|
16.09.2013, 11:05 | 14 |
Но хотя уже впринципе понятно. И смею громко заявить, что обычный велосипед со смещением в один проход всех строк и декремента общего значения будет работать точно так же, может еще и даже лучше. Я не вижу здесь магии: где суперзащиты от всего подряд? Безусловно, скорее всего я ошибаюсь, но пока не вижу этого явно. И случай со стриггридом как раз туда не вписался.
0
|
Супер-модератор
|
|
16.09.2013, 11:21 | 15 |
Очень громкое заявление. Этот твой велосипед не будет рассматривать ничего, кроме как тупо пойти и удалить все ячейки столбца. Ну, навскидку: что, если у меня на ячейку, которую ты удалишь, был назначен свой InplaceEditor? "Фиг с ней, с утечкой, зато мой велосипед проще", правда? В том-то и преимущество НЕвелосипедного программирования: тебе не надо заботиться о том, о чем уже позаботились разработчики VCL.
Да блин... Что ж вы такие все зашоренные-то? Ну protected - это не "скрытый", вот если бы Embarcadero объявило методы в private-секции, то я бы посмотрел, как бы ты тогда заплясал. Тебе бы каждый раз пришлось переписывать тонны кода. А так - наследование, изменение видимости, и используй все, что явно не запретили использовать. Это же принцип работы с VCL (и с FMX, кстати тоже): расширение возможностей именно за счет наследования. В общем, ясно... "Пишу как хочу, это мой выбор", но когда программа начинает глючить или код раздувается до невозможности - "это виноваты разработчики"... Очень удобная позиция. Продолжай в том же духе...
0
|
Почетный модератор
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
|
|
16.09.2013, 11:52 | 16 |
И я как раз об этом. Реализацию DeleteRow я и хотел посмотреть, чтобы сравнить, что она еще делает, помимо перечисленного мной.
Ну давайте у кнопок OnClick наследовать. Аналогия ясна?
0
|
16.09.2013, 11:52 | |
16.09.2013, 11:52 | |
Помогаю со студенческими работами здесь
16
Отсортировать указанную строку матрицы по возрастанию Отсортировать каждую строку матрицы по возрастанию Отсортировать в матрице по возрастанию серединную строку Отсортировать каждую строку матрицы по возрастанию Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |