|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
07.05.2009, 03:31 | #1 |
Форумчанин
Регистрация: 28.04.2009
Сообщений: 186
|
Конкурс им. Парсифаля - н-мерные массивы.
Дорогие друзья, у меня, видимо, какое-то осложнение на н-мерные динамические массивы - наверное, потому что каждый день в них увязаю.
На дворе 3 часа ночи и мне все еще не дает покоя задача об объявлении н-мерного динамического массива (N*N*N*N*...*N - n раз - N-мерный куб со сторонами N). Хочется услышать Ваши решения этой задачи. Естественно, n вводится пользователем и заранее неизвестно. Итак, от Вас требуется создать массив необходимого размера и попробовать обращаться к нему как к н-мерному массиву! Тот, кто предложит самое красивое решение этой задачи, будет объявлен Рыцарем Агнца и, собственно, выиграет состязание. Завтра к полуночи я приведу собственное решение.
Ruft ihm es zu durch alle Land', Der durch dies Wunder Gnade fand!
Hoch uber aller Welt ist Gott, Und Sein Erbarmen ist kein Spott |
07.05.2009, 14:12 | #2 |
Форумчанин
Регистрация: 28.04.2009
Сообщений: 186
|
Ни у кого даже предположений нет?(
Ruft ihm es zu durch alle Land', Der durch dies Wunder Gnade fand!
Hoch uber aller Welt ist Gott, Und Sein Erbarmen ist kein Spott |
07.05.2009, 14:24 | #3 | |
В тени
Старожил
Регистрация: 19.12.2008
Сообщений: 5,788
|
Я вот что не могу понять.
Предположим, мы сделали это. Есть некая функция, которая по заданному N создает N-мерный массив. Как вы будете обращаться к его элементам? Ведь для этого нужно знать его размерность. Ведь массив нужно объявить. А для этого нужно знать размерность. Нельзя же написать как-то так: Код:
Код:
Цитата:
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем. ___________________________________ ___________________________________ _______ [=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль] |
|
07.05.2009, 15:05 | #4 |
В тени
Старожил
Регистрация: 19.12.2008
Сообщений: 5,788
|
Вот. Сочинил кое-что. Это на уровне идеи (но приведенный код работает).
Правда, почему-то некорректно выводится последний элемент, если вводить размерность 1 или 2. Код:
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем. ___________________________________ ___________________________________ _______ [=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль] Последний раз редактировалось Sazary; 07.05.2009 в 16:54. |
07.05.2009, 16:41 | #5 |
Форумчанин
Регистрация: 09.03.2008
Сообщений: 127
|
У меня тут тоже только идея, но я не проверял, может что то где то провтыкал:
Код:
int **mas=new int*[n]; for(int i=0;i<n;++i) mas[i]=new int[n]; то при обращении допустим к mas[3][2] запись преобразуется к *((mas+3*sizeof(int))+2*sizeof(int) ) отличее только в том, что здесть даные в памяти располагаются каждый массив отдельно((mas+3*sizeof(int)) - адрес 4-ого масива *((mas+3*sizeof(int))+2*sizeof(int) ) -адрес 3-его элемента в 4-ом массиве ), а в классе (см. выше) все в один ряд Последний раз редактировалось |{ot; 07.05.2009 в 17:28. |
07.05.2009, 16:46 | #6 | |
Форумчанин
Регистрация: 28.04.2009
Сообщений: 186
|
Цитата:
Друзья, а можно давать комментарии к коду? А то разбираться в нем - занимает немалое время для непрофи.
Ruft ihm es zu durch alle Land', Der durch dies Wunder Gnade fand!
Hoch uber aller Welt ist Gott, Und Sein Erbarmen ist kein Spott |
|
07.05.2009, 17:06 | #7 |
Форумчанин
Регистрация: 09.03.2008
Сообщений: 127
|
|
07.05.2009, 17:15 | #8 | |
Пользователь
Регистрация: 18.03.2009
Сообщений: 89
|
Цитата:
На самом деле, по-моему, задача не имеет смысла. N-мерный массив должен использоваться под конкретные цели. Абстрактно можно придумать только что-то вроде того, что написал |{ot, но использовать не забитую в программу индексацию, а динамическую, создаваемую по ходу исполнения. В общем, там что-то гениальное вряд ли получится. По-любому, если размерность вводится извне, то и индексация берется оттуда же. Будет просто куча массивов, которые передаются туда-сюда. |{ot, Я тоже начал придумывать нечто подобное, только вместо строк можно еще использовать специальную структуру для индексации, у которой будет конструктор с переменным количеством аргументов. Типа такого: Код:
Последний раз редактировалось Pashan; 07.05.2009 в 17:32. |
|
07.05.2009, 17:47 | #9 | |
В тени
Старожил
Регистрация: 19.12.2008
Сообщений: 5,788
|
А я вот что еще накатал. По-моему, неплохо вышло )
Код:
Как пользоваться: Объявляем массив. Например, 3-мерный массив, размерности 1x2x3. Объявляется так: Код:
Ну а обращение, как в Делфи или паскале - A[0,1,1]; =================================== =========== Цитата:
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем. ___________________________________ ___________________________________ _______ [=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль] |
|
07.05.2009, 17:59 | #10 |
Пользователь
Регистрация: 18.03.2009
Сообщений: 89
|
Sazary, а что за компилятор? У меня VS 2005 и она выдает, что оператор [] не может иметь переменное количество аргументов.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
2-х мерные массивы (С++) | TheWanderer | Помощь студентам | 5 | 05.12.2008 14:35 |
Помогите кто может (Массивы 2-х мерные) | raccooni | Общие вопросы C/C++ | 15 | 25.11.2008 23:55 |
помогите в QBasic'е 2-мерные массивы | Sergmodern | Помощь студентам | 1 | 05.06.2007 08:39 |
конкурс программистов ! (первый конкурс) | Alar | Свободное общение | 129 | 18.03.2007 00:50 |