Страницы

Поиск по вопросам

понедельник, 1 апреля 2019 г.

Как реализовать замкнутый массив на C++?

Необходимо реализовать на C++ такой массив, например размерности 4 (с индексами 0 1 2 3), чтобы в дальнейшем при обращении к несуществующему элементу 4 программа выдавала значение с индексом 0.
Как это реализовать с условием ясно — нужно выразить доступ к элементам с помощью формулы.
Возможно некорректно поставлен вопрос, но в итоге нужна заготовка программы, которая должна создать двумерный массив, замкнутый по всем концам (как в фигуре Тор), для того, чтобы в дальнейшем реализовать определение покрытий для карты Карно.


Ответ

Для неотрицательных значений:
const int SIZE = 4; int a[SIZE]; for(int i=0;i<15;i++) cout << a[i%SIZE] << " ";
% — остаток от деления, значения 0,1,2,3,0,1,2,3,0,...
Для отрицательных значений:
ряд чисел которые мы должны преобразовать:
-5,-4,-3,-2,-1,0,1,2,3,4,5...
Что мы должны получить (для SIZE=4):
3,0,1,2,3,0,1,2,3,0,1...
Вышеуказанный способ нам выдаст следующие значения:
-1,0,-3,-2,-1,0,1,2,3,0,1...
Мы можем ко всем этим значениям прибавить SIZE, и тогда у нас все значения будут положительными, и вторично берем по модулю:
for(int i=-5;i<=5;i++) { j=( (i%SIZE) + SIZE )%SIZE; cout << a[j] << " "; }
Для упрощения понимания кода: чтобы в коде часто не встречались непонятные формулы, используйте функцию (или макрос), которая будет преобразовывать индексы.
Например макрос:
#define GetIndex(_index,_size) ( ( (_index%_size) + _size )%_size )
Для двумерного случая:
const int X_SIZE = 4; const int Y_SIZE = 10; int a[X_SIZE][Y_SIZE]; cin >> x >> y; cout << a[GetIndex(x,X_SIZE)][GetIndex(y,Y_SIZE)];

Комментариев нет:

Отправить комментарий