![]() |
|
|
![]()
|
|
| ДобренькийПапаша |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 14.1.2006 Где: г.Москва Репутация: нет Всего: 7 |
Итак, я уже решил эту задачу в разделе Центр Помощи. Решил поместить сюда, и описать алгоритм.
Может есть короче и лучше, но я подумал, вдруг кого заинтересует.
Алгоритм следующий. Как транспонируется квадратная матрица пояснять не буду, ибо в функции всё понятно и так. Если матрица неквадратная. Юзер вводит размер. Записывается размер в две переменные nrow и ncol. Создаются ещё две переменные b и s, для хранения этого размера, ибо nrow и ncol будут изменены. С помощью двух циклов делаем nrow=ncol, для того чтобы оперировать с квадратной матрицей, при этом заводим счётчик - counter, который хранит количество добавленных строк или столбцов. Создаём двумерный массив [nrow][ncol] - уже квадратный, набиваем нулями в цикле. Даём возможность юзеру, заполнить массив самому, прописывая в цикле (i=0; i<b; i++) (j=0; j<s; j++) - таким образом заполняются те элементы которые хочет транспонировать пользователь, остальный элементы остаются нулями. Далее при помощи того самого счётчика (counter) выводим матрицу без нулей, т.е. такую, какую хочет видеть пользователь. (Всё делается в зависимости от того, что больше, строк больше столбцов, или столбцов больше чем строк). Далее в цикле матрица, уже забитая пользователем транспонируется как квадратная. Потом выводится с помощью того же счётчика (counter) без нулей, но вычитается counter при b>s теперь не из i, а из j, если b<s, то вычитаем counter не из j, а из i, ибо матрица уже транспонирована. Всё. Исходный код можно уменьшить, если хотите оптимизируйте его, мне просто уже лень. -------------------- Меня зовут Себастьян Парейра, торговец чёрным деревом. |
|||
|
||||
| Dov |
|
|||
![]() аСинизатор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1721 Регистрация: 10.5.2003 Где: Эрец-Исраэль Репутация: нет Всего: 88 |
Гениально, просто шедевр. Абсолютно правильное решение, полностью поддерживаю. Только не забудь его запатентовать, если ещё этого не сделал, а то украдут. Ну, это врядли, чуть больше 100 строк, к тому же есть несколько пустых, которые можно смело удалить. -------------------- Тут вечности запах томительный, И свежие фрукты дешевые, А климат у нас – изумительный, И только соседи – #уевые. Игорь Губерман. |
|||
|
||||
| Alagert |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 25.8.2005 Где: Санкт-Петербург Репутация: нет Всего: 1 |
--------------------
[color=blue]BORN TO BE ROOT#[/color] |
|||
|
||||
| ДобренькийПапаша |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 14.1.2006 Где: г.Москва Репутация: нет Всего: 7 |
Вы для одномерного массива делали. А здесь двумерный и алгоритм совсем другой.
-------------------- Меня зовут Себастьян Парейра, торговец чёрным деревом. |
|||
|
||||
| Alagert |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 25.8.2005 Где: Санкт-Петербург Репутация: нет Всего: 1 |
А избыточные алгоритмы писать прикольно, наверно?
Задумайся о сложности своего алгоритма! Юзер вводит столбец 1000000*1. И хочет получить строку. А ты делаешь матрицу 1000000*1000000 и траспонируешь ее! Мне кажется, что происходет несколько лишних операций! ) А еще в нормальных программах, не используются двумерные массивы! Они раскладываются по строкам/столбцам в одномерки. И код веселый у тебя, улыбает! --------------------
[color=blue]BORN TO BE ROOT#[/color] |
|||
|
||||
| ДобренькийПапаша |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 14.1.2006 Где: г.Москва Репутация: нет Всего: 7 |
Код лень оптимизировать)).
Никто вводить 1000000 не будет. Написано ради алгоритма. Двумерные массивы никто не отменял, написано ради интереса, как транспонировать в одном двумерном. -------------------- Меня зовут Себастьян Парейра, торговец чёрным деревом. |
|||
|
||||
| Alagert |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 25.8.2005 Где: Санкт-Петербург Репутация: нет Всего: 1 |
И то правда! Юзера ваще лучше до прог не допускать ) А то еще чего недоброго начнет, чего нить туда вводить) --------------------
[color=blue]BORN TO BE ROOT#[/color] |
|||
|
||||
| ДобренькийПапаша |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 14.1.2006 Где: г.Москва Репутация: нет Всего: 7 |
Кстати, буду премного благодарен если вы напишите прогу, которая будет транспоинровать любую матрицу с использованием одного двумерного массива.
Alagert: Ты лучше придумай другой, чем этот поливать. -------------------- Меня зовут Себастьян Парейра, торговец чёрным деревом. |
|||
|
||||
| Alagert |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 25.8.2005 Где: Санкт-Петербург Репутация: нет Всего: 1 |
Я ссылку дал Извиняй, алгоритма не вижу... Вообще совет на будующее: если ты придумываешь алгоритм, который пытаясь решить задачу, увеличивает размерность задачи в разы, лучше ни кому не показывай его! Я не говорю, что нет алгоритмов быстро решающих задачи, повышением их размерности. Ex: алгоритмы БПФ Ванга-Жу и циклотомический. Только они добавляют все лишь 1 элемент к вектору. Почитай Кормена про анализ алгоритмов! --------------------
[color=blue]BORN TO BE ROOT#[/color] |
|||
|
||||
| SoWa |
|
|||
![]() Харекришна ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2422 Регистрация: 18.10.2004 Репутация: 6 Всего: 74 |
Придумаем...
Действительно, оптимизируй код, ибо найдется юзверь, который введет нереальный массив. -------------------- Всем добра |
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |