|
Алгоритмика Об алгоритмах вообще; методы, обсуждения способов решения |
14.11.2012, 14:55
|
#1
|
Нуждающийся
Регистрация: 21.10.2009
Сообщений: 51
Написано 6 полезных сообщений (для 8 пользователей)
|
Как быть если нет поддержки двумерных массивов?
Здравствуйте господа
Уже как час мучаюсь но не могу разобраться сам - как реализовать псевдо-двумерный массив через простой?
Просто это прямо беда какая та
|
(Offline)
|
|
14.11.2012, 15:03
|
#2
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Как быть если нет поддержки двумерных массивов?
Используй одномерный (Flat Array) как двумерный с простой арифметикой нахождения индекса.
Например тебе нужен массив с 32, 32 размером. Это будет 32 ^ 2 = 1024 переменных.
Заводишь массив на 1024 переменных.
Затем индекс получаешь по такой формуле: y * width + x. Width = это ширина массива, 32 (он у нас квадратный).
Получается если тебе нужна переменная по координате 2,10 то ты просто выбираешь переменную по индексу 10 * 32 + 2 = 322.
Думаю идея понятна. Можешь на листике нарисовать простой массив 4, 4. И продумать арифметику. Так будет лучше и проще - поймёшь суть паковки данных в один массив.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
14.11.2012, 15:11
|
#3
|
Нуждающийся
Регистрация: 21.10.2009
Сообщений: 51
Написано 6 полезных сообщений (для 8 пользователей)
|
Ответ: Как быть если нет поддержки двумерных массивов?
Слушай,а реально получилось! набросал на листке...почти гладко почему-то правда на строку выше но это фигня! разберемся спасибо за дельный совет старина!)
|
(Offline)
|
|
14.11.2012, 15:20
|
#4
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Как быть если нет поддержки двумерных массивов?
На строку выше? Или ниже?
Не забудь что индекс начинается с 0 и заканчивается width - 1 включая. То есть если у тебя ширина массива 32, то последний столбец будет по индексу 31, а первый 0.
|
(Offline)
|
|
14.11.2012, 15:35
|
#5
|
Нуждающийся
Регистрация: 21.10.2009
Сообщений: 51
Написано 6 полезных сообщений (для 8 пользователей)
|
Ответ: Как быть если нет поддержки двумерных массивов?
я сделал с 1 по 785 то есть 28 на 28 получилось так (x+y*ширина)-ширина - работает ты мне помог просто нереально)
__________________
(ьсипдоп утэ йатич ен,йенгиф йадартс ен
|
(Offline)
|
|
14.11.2012, 16:06
|
#6
|
Нуждающийся
Регистрация: 21.10.2009
Сообщений: 51
Написано 6 полезных сообщений (для 8 пользователей)
|
Ответ: Как быть если нет поддержки двумерных массивов?
что то я совсем туплю теперь...пробую получить обратно числа - и туплю....
вот у меня получается ( 3+7*28 )-28=171...теперь мне нужно получить числа x и y, т.е. ( x+y*28 )-28=171 Но исходя из того что школу я слабо помню мне это не удается можешь помочь? или как то по другому можно найти их?
__________________
(ьсипдоп утэ йатич ен,йенгиф йадартс ен
|
(Offline)
|
|
14.11.2012, 16:26
|
#7
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Как быть если нет поддержки двумерных массивов?
Не отнимай 28 - это "не красиво", делай лучше тогда так, если твой индекс начинается с 1:
3 + (7 - 1) * 28 = 171
Далее, чтобы получить из индекса x и y вот формула:
x = index % height
y = floor(index / width) + 1
% - это модуль остаток от деления.
floor - это стандартная функция округления до нижнего целого числа.
Но ещё раз - рекомендую придерживаться индексов от 0 до 27 (в твоём случае), иначе эти - 1 и + 1 будут очень путать.
ЗЫ, я и вообще школу не закончил, официально у меня 8 классов. Это не имеет значения, тут не школьная программа, а логика, которую программист просто обязан тренировать.
Последний раз редактировалось moka, 14.11.2012 в 18:16.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
14.11.2012, 16:52
|
#8
|
Нуждающийся
Регистрация: 21.10.2009
Сообщений: 51
Написано 6 полезных сообщений (для 8 пользователей)
|
Ответ: Как быть если нет поддержки двумерных массивов?
omg..вообщем почти все понял кроме этого x = index % height...я не правильно делаю,пишу x=171*Abs(28 ) видно либо модуль я понял не так либо умножение ну вообще не в тему я безнадежен пока ..
__________________
(ьсипдоп утэ йатич ен,йенгиф йадартс ен
|
(Offline)
|
|
14.11.2012, 16:58
|
#9
|
Нуждающийся
Регистрация: 21.10.2009
Сообщений: 51
Написано 6 полезных сообщений (для 8 пользователей)
|
Ответ: Как быть если нет поддержки двумерных массивов?
Отставить я пошел другим путем!) большое спасибо ..чет я сразу не додумался просто решить уравнение с известным Y )Дожился facepalm
__________________
(ьсипдоп утэ йатич ен,йенгиф йадартс ен
|
(Offline)
|
|
14.11.2012, 18:17
|
#10
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Как быть если нет поддержки двумерных массивов?
Сообщение от MoteX
omg..вообщем почти все понял кроме этого x = index % height...я не правильно делаю,пишу x=171*Abs(28 ) видно либо модуль я понял не так либо умножение ну вообще не в тему я безнадежен пока ..
|
Моя ошибка, это не модуль. А остаток. Пиши так: x = 171 Mod 28.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 11:20.
|