XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Общение> Трактир
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
Skino

offline
Опыт: 4,683
Активность:
Простая математическая задачка.
Итак, У нас есть массив i[4], в каждом массиве записаны буквы по порядку, i[1]=a, i[2]=b...
Кароче выглядит он так:
Код:
1 2 3 4
a b c d

Допусти мне нужно обратится к букве "a", я записываю это вот так:
Код:
G = i[1]

Теперь представим что нам нужно обратится к той же букве, но теперь массив смещен (именно смещен а не перемешен)
Код:
1 2 3 4
d a b c


Щяс приведу пример:
Код:
1 2 3 4
a b c d

G=d, G[i] всегда равно d, т.е. сейчас i=4, [i]=d
P=4

// Что нужно сделать с P чтобы ниже приведенные приравнивания всегда себе соответствовали.
// Желательно алгоритм

A = G[P-3] (a)
B = G[P-2] (b)
C = G[P-1] (c)
D = G[P]    (d)


[i]Skino добавил:

кароче вот эту дребедень нужно записать в виде алгоритма
Код:
int d[4];
        if (i==1) // смещение вправо на 1
        {
            d[1]=i[4];
            d[2]=i[1];
            d[3]=i[2];
            d[4]=i[3];
        }
        if (i==2) // смещение вправо на 2
        {
            d[1]=i[3];
            d[2]=i[4];
            d[3]=i[1];
            d[4]=i[2];
        }
        if (i==2) // смещение влево  на 1
        {
            d[1]=i[2];
            d[2]=i[3];
            d[3]=i[4];
            d[4]=i[1];
        }
        if (i==4) // смещения нету
        {
            d[1]=i[1];
            d[2]=i[2];
            d[3]=i[3];
            d[4]=i[4];
        }

Отредактировано Skino, 30.03.2011 в 16:27.
Старый 30.03.2011, 16:52
ShadoW DaemoN

offline
Опыт: 37,078
Активность:
Условия написаны криво. Нумерацию массива лучше бы делать с нуля.
offset - сдвиг.
((код cpp
d[1] = i[(4 - offset + 0) % 4 + 1];
d[2] = i[(4 - offset + 1) % 4 + 1];
d[3] = i[(4 - offset + 2) % 4 + 1];
d[4] = i[(4 - offset + 3) % 4 + 1];
% - остаток от деления, если кто не знает.
))
По-хорошему так (при условии нумерации с 0-ого индекса):
((код cpp
. . .
int array_size = 4; размер массива
int offset = 2; смещение
. . .
num - индекс нужного элемента, принимает значения от 0 до array_size-1
d[num] = i[(array_size - offset + num) % arr_size];
))
Старый 30.03.2011, 17:33
Skino

offline
Опыт: 4,683
Активность:
Неработает, допустим у меня offset = 1, т.е. 4й элемент расположен в 1ой ячейке массива, первый элемент соответственно во 2й ячейке массива, пользуясь твоими формулами у меня вылетает фатал =\
Записываю я вот так.
Код:
unsigned long int PlayerState[5];
int BufferCount;

BufferCount++;
if (BufferCount==5)
    BufferCount=1;
PlayerState[BufferCount]=RegBufferEBX; // çàïîìèíàåò ïîñëåäíèå 4 ñòðîêè

int d[4]; // âîñòàíàâëèâàåì ìàññèâ ïî ïîðÿäêó
d[1] = (int)PlayerState[(4 - BufferCount + 0) % 4 + 1];
d[2] = (int)PlayerState[(4 - BufferCount + 1) % 4 + 1];
d[3] = (int)PlayerState[(4 - BufferCount + 2) % 4 + 1];
d[4] = (int)PlayerState[(4 - BufferCount + 3) % 4 + 1];

Хотя это у меня где то косяк*

Отредактировано Skino, 31.03.2011 в 08:43.
Старый 31.03.2011, 08:22
ShadoW DaemoN

offline
Опыт: 37,078
Активность:
Комменты в кривой кодировке.
((код cpp
unsigned long int PlayerState[5];
. . .
int d[4];
))
Почему размеры массивов не совпадают?
Кроме того, в С++ (как и в большинстве языков), индексация массивов С НУЛЯ, А НЕ С ЕДИНИЦЫ. Зачем ты извращаешься так - неясно.
((код cpp
#define ARRAY_SIZE 4
unsigned long int PlayerState[ARRAY_SIZE];
int BufferCount;
. . .
BufferCount++;
if (BufferCount > ARRAY_SIZE)
BufferCount = 0;
PlayerState[BufferCount] = RegBufferEBX;
int d[ARRAY_SIZE];
d[0] = (int)PlayerState[(ARRAY_SIZE - BufferCount + 0) % ARRAY_SIZE];
d[1] = (int)PlayerState[(ARRAY_SIZE - BufferCount + 1) % ARRAY_SIZE];
d[2] = (int)PlayerState[(ARRAY_SIZE - BufferCount + 2) % ARRAY_SIZE];
d[3] = (int)PlayerState[(ARRAY_SIZE - BufferCount + 3) % ARRAY_SIZE];
))
Как-то так.
Старый 03.04.2011, 13:35
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

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

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 22:40.