• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Gdzie błąd zadanie 6 Matura informatyka 2017?

Object Storage Arubacloud
0 głosów
594 wizyt
pytanie zadane 29 kwietnia 2018 w C i C++ przez Seyn Początkujący (300 p.)

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++;
        }
    }

 

1 odpowiedź

0 głosów
odpowiedź 29 kwietnia 2018 przez koniak20 Początkujący (390 p.)
edycja 29 kwietnia 2018 przez koniak20

Gdy w pętli  i+2 i j+2 to nie omija wtedy przypadku gdy j=198 lub j=199 tak samo z i?

Domyślam się ,że miał to być warunek dzięki któremu nie sprawdzi szufladki której niema, ale czy wtedy przy okazji nie omija ,,paru" szufladek w tablicy?

A na dodatek tutaj :

abs(tab[i+1][j] - tab[i][j])>128

sprawdza dolny tak?

A tu:

abs(tab[i+1][j] - tab[i+2][j])>128

Jeszcze niższy?

komentarz 1 maja 2018 przez Seyn Początkujący (300 p.)
W pierwszym cytacie sprawdza wyższy a w drugim sprawdza niższy. Dokładnie takie założenia wpisałem aby właśnie nieistniejących szufladek nie sprawdzać.
Muszę to jeszcze raz przeanalizować natomiast skoro nawet parę szufladek zostało by pominiętych.. to wynik powinien moim zdaniem być niższy od prawidłowego.

Podobne pytania

+5 głosów
1 odpowiedź 5,668 wizyt
0 głosów
1 odpowiedź 804 wizyt
0 głosów
1 odpowiedź 2,038 wizyt
pytanie zadane 19 sierpnia 2018 w Python przez MazdyxX Nowicjusz (190 p.)

92,576 zapytań

141,426 odpowiedzi

319,650 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...