Необходимо реализовать на 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)];
Комментариев нет:
Отправить комментарий