Witam. Mam zadanie:
W pliku dane.txt znajduje się 200 wierszy. Każdy wiersz zawiera 320 liczb naturalnych
z przedziału od 0 do 255, oddzielonych znakami pojedynczego odstępu (spacjami).
Przedstawiają one jasności kolejnych pikseli czarno-białego obrazu o wymiarach 320 na 200
pikseli (od 0 – czarny do 255 – biały).
6.4 - Sąsiednie piksele to takie, które leżą obok siebie w tym samym wierszu lub w tej samej
kolumnie. Dwa sąsiednie piksele nazywamy kontrastującymi, jeśli ich wartości różnią się
o więcej niż 128. Podaj liczbę wszystkich takich pikseli, dla których istnieje przynajmniej jeden
kontrastujący z nim sąsiedni piksel.
Poprawny wynik to 753 z kodu prawidłowego, natomiast w moim wychodzi 764. Czy mógł by mi ktoś pomóc w znalezieniu błędu w moim kodzie, przez który otrzymuje ten niepoprawny wynik? Bo wydaje mi się, że założenia w pętlach zrobiłem prawidłowo.
Dodam, że cały obrazek znajduje się w tabeli dwuwymiarowej -> tab[200][320];
Kod prawidłowy:
int licznik=0, kontrastujacy;
for(int i=0;i<200;i++)
{
for(int j=0;j<320;j++)
{
kontrastujacy=0;
//czy lewy
if(j>0){
if(abs(tab[i][j] - tab[i][j-1])>128)
kontrastujacy=1;}
//czy prawy
if(j<319){
if(abs(tab[i][j] - tab[i][j+1])>128)
kontrastujacy=1;}
//czy gora
if(i>0){
if(abs(tab[i][j] - tab[i-1][j])>128)
kontrastujacy=1;}
//czy dol
if(i<199){
if(abs(tab[i][j] - tab[i+1][j])>128)
kontrastujacy=1;}
if(kontrastujacy==1)
licznik++;
}
}
Kod mój:
int licznik=0;
for(int i=0;i+2<200;i++)
{
for(int j=0;j+2<320;j++)
{
if( abs(tab[i][j+1] - tab[i][j+2])>128
||abs(tab[i][j+1] - tab[i][j])>128
||abs(tab[i+1][j] - tab[i][j])>128
||abs(tab[i+1][j] - tab[i+2][j])>128 )
licznik++;
}
}