Dzień dobry
Proszę o pomoc z zadaniem 6.3
https://arkusze.pl/maturalne/informatyka-2017-maj-matura-rozszerzona-2.pdf
Nie mam innego pomysłu niż rozpisanie na 9 przypadków, ale w takim wypadku kod jest nadmiernie skomplikowany. Bo piksel w tablicy może być w jednym z czterech rogów, może nie być w rogu ale być na zewnętrznej krawędzi tablicy, a może być też z każdej strony otoczony innymi pikselami.
Myślałam, żeby pomieszać ify ze switchami. Wyglądałoby to tak. Jeden duży switch, który by się zmieniał w zależności od wiersza i byłyby 3 przypadki - pierwszy wiersz, ostatni i default. W każdym z przypadków wstawiłabym kolejnego switcha tym razem od kolumny i też trzy przypadki - pierwsza kolumna, ostatnia i default. W takim wypadku kod wygląda dużo lepiej, ale wciąż pozostaje problem z ifami.
I nie wiem, czy moje rozumienie problemu jest słuszne. Dwa piksele są kontrastujące jak różnią się o więcej niż 128. I trzeba takie piksele policzyć. Tylko jak? Zakładam, że jeżeli mam iterację numer 1 i piksele numer 1 i 2 ze sobą kontrastują, to liczę piksel numer 1 a numer 2 zostanie policzony osobno w kolejnej iteracji. Funkcja if dla przypadku dziewiątego, czyli kiedy piksel jest otoczony z każdej strony, wygląda tak:
/// j - numer wiersza
/// i - numer kolumny
/// tab[j][i] - dany piksel w tablicy dwuwymiarowej
if ( tab[j][i]-tab[j][i+1]>128 || tab[j][i]-tab[j][i+1]<-128 || tab[j][i]-tab[j][i-1]>128 || tab[j][i]-tab[j][i-1]<-128 || tab[j][i]-tab[j-1][i]>128 || tab[j][i]-tab[j-1][i]<-128 || tab[j][i]-tab[j+1][i]>128 || tab[j][i]-tab[j+1][i]<-128)
ile++;
Jak widać to jest zbyt skomplikowane. Czy da się to jakoś uprościć? Zrobić funkcję? Jeśli tak to jaką?