![]() |
Как быть если нет поддержки двумерных массивов?
Здравствуйте господа :)
Уже как час мучаюсь но не могу разобраться сам - как реализовать псевдо-двумерный массив через простой? :''(( Просто это прямо беда какая та |
Ответ: Как быть если нет поддержки двумерных массивов?
Используй одномерный (Flat Array) как двумерный с простой арифметикой нахождения индекса.
Например тебе нужен массив с 32, 32 размером. Это будет 32 ^ 2 = 1024 переменных. Заводишь массив на 1024 переменных. Затем индекс получаешь по такой формуле: y * width + x. Width = это ширина массива, 32 (он у нас квадратный). Получается если тебе нужна переменная по координате 2,10 то ты просто выбираешь переменную по индексу 10 * 32 + 2 = 322. Думаю идея понятна. Можешь на листике нарисовать простой массив 4, 4. И продумать арифметику. Так будет лучше и проще - поймёшь суть паковки данных в один массив. |
Ответ: Как быть если нет поддержки двумерных массивов?
Слушай,а реально получилось! набросал на листке...почти гладко:)почему-то правда на строку выше но это фигня! разберемся:) спасибо за дельный совет старина!)
|
Ответ: Как быть если нет поддержки двумерных массивов?
На строку выше? Или ниже?
Не забудь что индекс начинается с 0 и заканчивается width - 1 включая. То есть если у тебя ширина массива 32, то последний столбец будет по индексу 31, а первый 0. |
Ответ: Как быть если нет поддержки двумерных массивов?
я сделал с 1 по 785 то есть 28 на 28 :) получилось так (x+y*ширина)-ширина - работает:)ты мне помог просто нереально)
|
Ответ: Как быть если нет поддержки двумерных массивов?
что то я совсем туплю теперь...пробую получить обратно числа - и туплю....
вот у меня получается ( 3+7*28 )-28=171...теперь мне нужно получить числа x и y, т.е. ( x+y*28 )-28=171 Но исходя из того что школу я слабо помню мне это не удается :-D можешь помочь?:)или как то по другому можно найти их? |
Ответ: Как быть если нет поддержки двумерных массивов?
Не отнимай 28 - это "не красиво", делай лучше тогда так, если твой индекс начинается с 1:
3 + (7 - 1) * 28 = 171 Далее, чтобы получить из индекса x и y вот формула: x = index % height y = floor(index / width) + 1 % - это floor - это стандартная функция округления до нижнего целого числа. Но ещё раз - рекомендую придерживаться индексов от 0 до 27 (в твоём случае), иначе эти - 1 и + 1 будут очень путать. ЗЫ, я и вообще школу не закончил, официально у меня 8 классов. Это не имеет значения, тут не школьная программа, а логика, которую программист просто обязан тренировать. |
Ответ: Как быть если нет поддержки двумерных массивов?
omg..вообщем почти все понял кроме этого x = index % height...я не правильно делаю,пишу x=171*Abs(28 ) видно либо модуль я понял не так либо умножение ну вообще не в тему :)я безнадежен пока ..
|
Ответ: Как быть если нет поддержки двумерных массивов?
Отставить я пошел другим путем!) большое спасибо:)..чет я сразу не додумался просто решить уравнение с известным Y )Дожился facepalm
|
Ответ: Как быть если нет поддержки двумерных массивов?
Цитата:
|
Часовой пояс GMT +4, время: 14:19. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot