| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Центр помощи > [Алгоритм] алгоритм работы с матрицей |
| Автор: Determinant 6.11.2011, 11:21 | ||
| По ходу программы пришлось столкнутся с обработкой матрицы... необходимо преобразовать матрицу по заданному количеству одинаковых элементов...то есть, например: имеется входящая матрица: 1 1 2 2 0 3 3 0 4 4 5 5 0 6 6 0 в данном случае максимальное количество разных эелементов в матрице 2, именно (1 и 2) в первой строке, (4 и 5) во второй, вопрос теперь в том как сделать что б пользователь вводил максимальное количество одинаковых элементов и данная матрица трансформировалась, например если ввести количество таких элементов равных 1, то данная матрица должна принять вид: 1 1 0 0 0 0 2 2 0 3 3 0 4 4 0 0 0 0 5 5 0 6 6 0 то есть в каждой строке не более 1 разного элемента... вот как такой алгоритм сделать, уже совсем запутался...может кто сталкивался с таким, очень прошу помощи! Вот если что кусок кода где я пытался это сделать:
желательно на С++ Builder заранее спасибо!!! |
| Автор: _Y_ 6.11.2011, 11:57 |
| Сначала вопрос - а что должно быть сделано, если, например, пользователь ввел ограничение 2, а одна из строк выглядит как-то так: 5 5 5 5 т.е. что делать с лишними элентами? Для приведенного же примера алгоритм довольно прост 1. Создаем новый массив с тем же количеством столбцов и нулем строк. 2. Берем следующую строку матрицы (по порядку начиная с первой) 3. Собираем в отдельный список уникальные элементы 4. Берем следующий по порядку элемент этого уникального списка (начиная с первого элемента) 5. Присоединяем вниз новой матрицы нашу строку. 6. Заменяем в присоединенной строке все элементы не равными элементы неравные взятому в пункте 4 нулями. 7. Если список уникальных элементов не кончился возвращаемся к пункту 4. 8. Если исходная матрица не закончилась возвращаемся к пункту 2. Теперь осталось вставить кусочек для обработки ответа на мой первый вопрос |
| Автор: Determinant 6.11.2011, 12:30 | ||||
тогда оставляем данную строку без изменений, так как количество неодинаковых (уникальных) элементов равно 1, что меньше 2...
все равно как то запутанно получаеться |
| Автор: Determinant 6.11.2011, 14:53 | ||
вот попытался сделать, kil - это та переменная что вводит пользователь, количество тех самых неодинаковых элементов...
но выводит вот что: 1 1 2 2 0 0 0 вместо: 1 1 0 0 0 0 2 2 0 3 3 0 4 4 0 0 0 0 5 5 0 6 6 0 |
| Автор: _Y_ 6.11.2011, 17:17 |
Несколько странно спрашивать код, не зная на каком языке человек пишет. Код LabVIEW устроит? |
| Автор: Determinant 6.11.2011, 17:51 | ||
можно и такой, но жаль, что не С++, мне на нем делать, но попытаюсь перевести если что... |
| Автор: _Y_ 6.11.2011, 22:07 |
| Determinant, вы когда-нибудь LabVIEW код видели? |
| Автор: Determinant 6.11.2011, 22:22 | ||
увы нет, не видел...С++ во основном занимаюсь...вот пробовал, пример выслал, что пытался...никак не выходит, я уже несколько недель себе репу чешу как сделать, дальше в курсовой все от этого должно идти... |
| Автор: _Y_ 7.11.2011, 10:00 |
| Ну если очень надо, я могу на Java написать (при не очень большом уровне срочности) - на таком-то уровне я его вспомню. С++ мне практически не знаком - никогда не сталкивался с задачами, для которых он бы мне понадобился. Поэтому вопросы: Разберетесь с Java? Коллекции в С++ бывают? А то кажется мне что с массивами возиться долго придется. |
| Автор: Determinant 8.11.2011, 22:21 |
| коллекций нет в С++...но сам С на java очень похож...так что нормально, срочности нет как таковой...так что если не трудно, был бы очень благодарен... |