elementy ujemne w tablicy

0

Witam, mam dosyć banalny problem, ale może znajdzie się jego sprytniejsze rozwiązanie.

W moim programie mam tablicę 10x10, problem polega na tym że wartość b[i][l] to suma wartości sąsiednich pól, a więc chcąc nie chcąc również pól [-1][-1] i im podobnych :/ mój kompilator krzyczy że tak nie wolno, zresztą ma rację. czy da się jakoś sprytnie nadać te ujemne wartości żeby program się skompilował?

( jest rozwiązanie w którym po prostu musiałbym dodać jedno wolne pole i przesunąć wszystko o jeden, ale czekałaby mnie wtedy dłuuuga edycja całego kodu... )

0

Brzydki hax - zamień tablice na wskaźniki:

const size_t TAB_SIZE = 69;

int tab_[TAB_SIZE+1]; // tablica z dodatkowym marginesem
int *tab = tab_ + 1; // wskaźnik przesunięty o 1 (margines) to użytku zamiast oryginalnej tablicy.

Chociaż kij wie czy i wskaźników się kompilator nie czepi.

0

Mała uwaga. Warto zauważyć, że jeśli robisz to bez powyższej deklaracji musisz wcześniej zadeklarować przynajmniej 1 element czyli b[1][1] aby funkcja miała od czego zacząć :) reszte tablicy można wypełnić zerami a następnie podmieniać 0 na sumę sąsiednich komórek.

0

Niewątpliwie sumujesz w pętli. Rozpocznij ją od postawienia warunków np:
if((i-1<0) || (j-1<0)) continue;
ewentualnie break; w zależności od wymagań.

0

Zadeklaruj tablicę 12x12 a operuj na indeksach od 1 do 10. Wtedy w każdą stronę masz po elemencie marginesu, który możesz ignorować.
W ten sposób tablica ma – niestety – aż 144 elementy zamiast 100, ale pozbywasz się ifów.

0
Azarien napisał(a)

Zadeklaruj tablicę 12x12 a operuj na indeksach od 1 do 10. Wtedy w każdą stronę masz po elemencie marginesu, który możesz ignorować.
W ten sposób tablica ma – niestety – aż 144 elementy zamiast 100, ale pozbywasz się ifów.

A jeżeli mamy większą tablicę i mamy dodać n sąsiednich elementów? Tablica będzie się niepomiernie rozrastała. Stosowanie if'ów jest eleganckie i zawsze polecane.

1 użytkowników online, w tym zalogowanych: 0, gości: 1