Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование в широком смысле слова > Алгоритмика

Алгоритмика Об алгоритмах вообще; методы, обсуждения способов решения

Ответ
 
Опции темы
Старый 14.11.2012, 14:55   #1
MoteX
Нуждающийся
 
Аватар для MoteX
 
Регистрация: 21.10.2009
Сообщений: 51
Написано 6 полезных сообщений
(для 8 пользователей)
Вопрос Как быть если нет поддержки двумерных массивов?

Здравствуйте господа
Уже как час мучаюсь но не могу разобраться сам - как реализовать псевдо-двумерный массив через простой?
Просто это прямо беда какая та
(Offline)
 
Ответить с цитированием
Старый 14.11.2012, 15:03   #2
moka
.
 
Регистрация: 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)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
MoteX (14.11.2012)
Старый 14.11.2012, 15:11   #3
MoteX
Нуждающийся
 
Аватар для MoteX
 
Регистрация: 21.10.2009
Сообщений: 51
Написано 6 полезных сообщений
(для 8 пользователей)
Ответ: Как быть если нет поддержки двумерных массивов?

Слушай,а реально получилось! набросал на листке...почти гладкопочему-то правда на строку выше но это фигня! разберемся спасибо за дельный совет старина!)
(Offline)
 
Ответить с цитированием
Старый 14.11.2012, 15:20   #4
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Как быть если нет поддержки двумерных массивов?

На строку выше? Или ниже?
Не забудь что индекс начинается с 0 и заканчивается width - 1 включая. То есть если у тебя ширина массива 32, то последний столбец будет по индексу 31, а первый 0.
(Offline)
 
Ответить с цитированием
Старый 14.11.2012, 15:35   #5
MoteX
Нуждающийся
 
Аватар для MoteX
 
Регистрация: 21.10.2009
Сообщений: 51
Написано 6 полезных сообщений
(для 8 пользователей)
Ответ: Как быть если нет поддержки двумерных массивов?

я сделал с 1 по 785 то есть 28 на 28 получилось так (x+y*ширина)-ширина - работаетты мне помог просто нереально)
__________________
(ьсипдоп утэ йатич ен,йенгиф йадартс ен
(Offline)
 
Ответить с цитированием
Старый 14.11.2012, 16:06   #6
MoteX
Нуждающийся
 
Аватар для MoteX
 
Регистрация: 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
moka
.
 
Регистрация: 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)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
MoteX (14.11.2012)
Старый 14.11.2012, 16:52   #8
MoteX
Нуждающийся
 
Аватар для MoteX
 
Регистрация: 21.10.2009
Сообщений: 51
Написано 6 полезных сообщений
(для 8 пользователей)
Ответ: Как быть если нет поддержки двумерных массивов?

omg..вообщем почти все понял кроме этого x = index % height...я не правильно делаю,пишу x=171*Abs(28 ) видно либо модуль я понял не так либо умножение ну вообще не в тему я безнадежен пока ..
__________________
(ьсипдоп утэ йатич ен,йенгиф йадартс ен
(Offline)
 
Ответить с цитированием
Старый 14.11.2012, 16:58   #9
MoteX
Нуждающийся
 
Аватар для MoteX
 
Регистрация: 21.10.2009
Сообщений: 51
Написано 6 полезных сообщений
(для 8 пользователей)
Ответ: Как быть если нет поддержки двумерных массивов?

Отставить я пошел другим путем!) большое спасибо..чет я сразу не додумался просто решить уравнение с известным Y )Дожился facepalm
__________________
(ьсипдоп утэ йатич ен,йенгиф йадартс ен
(Offline)
 
Ответить с цитированием
Старый 14.11.2012, 18:17   #10
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Как быть если нет поддержки двумерных массивов?

Сообщение от MoteX Посмотреть сообщение
omg..вообщем почти все понял кроме этого x = index % height...я не правильно делаю,пишу x=171*Abs(28 ) видно либо модуль я понял не так либо умножение ну вообще не в тему я безнадежен пока ..
Моя ошибка, это не модуль. А остаток. Пиши так: x = 171 Mod 28.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
MoteX (15.11.2012)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 11:20.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com