Wróć do informacji o e-podręczniku Wydrukuj Pobierz materiał do PDF Pobierz materiał do EPUB Pobierz materiał do MOBI Zaloguj się, aby dodać do ulubionych Zaloguj się, aby skopiować i edytować materiał Zaloguj się, aby udostępnić materiał Zaloguj się, aby dodać całą stronę do teczki

Powtórzenie informacji o tablicach dwuwymiarowych

Tablice jednowymiarowe służą do przechowywania danych tego samego typu, takich jak liczby, napisy itd.

Tablice dwuwymiarowetablica dwuwymiarowaTablice dwuwymiarowe są w istocie tablicami jednowymiarowymi, których komórki zawierają inne tablice jednowymiarowe. Tablice dwuwymiarowe są zatem tablicami tablic jednowymiarowych.

Przykładem tablicy dwuwymiarowej jest tablica jednowymiarowa przechowująca trzy pomiary temperatur wykonane przez ostatnie 10 dni. Przykładowo, w języku C++ deklaracja takiej tablicy dwuwymiarowej może wyglądać następująco:

Linia 1. int temperatury otwórz nawias kwadratowy 10 zamknij nawias kwadratowy otwórz nawias kwadratowy 3 zamknij nawias kwadratowy średnik.

Analogiczna deklaracja w języku Java:

Linia 1. int otwórz nawias kwadratowy zamknij nawias kwadratowy otwórz nawias kwadratowy zamknij nawias kwadratowy temperatury znak równości new int otwórz nawias kwadratowy 10 zamknij nawias kwadratowy otwórz nawias kwadratowy zamknij nawias kwadratowy średnik. Linia 2. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny 10 średnik i plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 3. temperatury otwórz nawias kwadratowy i zamknij nawias kwadratowy znak równości new int otwórz nawias kwadratowy 3 zamknij nawias kwadratowy średnik. Linia 4. zamknij nawias klamrowy.

I deklaracja w języku Python:

Linia 1. temperatury znak równości otwórz nawias kwadratowy otwórz nawias kwadratowy 0 for x in range otwórz nawias okrągły 3 zamknij nawias okrągły zamknij nawias kwadratowy for y in range otwórz nawias okrągły 10 zamknij nawias okrągły zamknij nawias kwadratowy.

W informatyce w postaci tablicy dwuwymiarowej bardzo często przedstawia się macierzemacierzmacierze, np.:

Linia 1. otwórz nawias kwadratowy 1 zamknij nawias kwadratowy otwórz nawias kwadratowy 7 zamknij nawias kwadratowy otwórz nawias kwadratowy 3 zamknij nawias kwadratowy. Linia 2. otwórz nawias kwadratowy 0 zamknij nawias kwadratowy otwórz nawias kwadratowy 2 zamknij nawias kwadratowy otwórz nawias kwadratowy 5 zamknij nawias kwadratowy. Linia 3. otwórz nawias kwadratowy 4 zamknij nawias kwadratowy otwórz nawias kwadratowy 9 zamknij nawias kwadratowy otwórz nawias kwadratowy 7 zamknij nawias kwadratowy. Linia 4. otwórz nawias kwadratowy 5 zamknij nawias kwadratowy otwórz nawias kwadratowy 8 zamknij nawias kwadratowy otwórz nawias kwadratowy 3 zamknij nawias kwadratowy.

Zadanie 1. Piksele (11 pkt.)

Treść zadania

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).

RublKAi8yPwDR

Plik tekstowy z wypisanymi wartościami liczbowymi.

Plik TXT o rozmiarze 223.62 KB w języku polskim

Napisz program(y), który(e) da(dzą) odpowiedzi do poniższych zadań.

Zadanie zostało opracowane przez Centralną Komisję Egzaminacyjną i pojawiło się na egzaminie maturalnym z informatyki w maju 2017 roku (poziom rozszerzony). Cały arkusz, wraz ze schematem oceniania, można znaleźć na stronie internetowej CKE.

Na egzaminie maturalnym uczeń ma swobodę wyboru języka programowania. Nie będziemy zatem przedstawiać rozwiązania w konkretnym języku. Zamiast tego zaprezentujemy rozwiązanie zapisane za pomocą pseudokodu.

Twoje zadanie polega na przełożeniu zaproponowanego algorytmu na język, w którym programujesz.

Przygotowanie

Każde z zadań, które omówimy, wymaga wczytania danych z załączonego pliku. Dane będziemy umieszczać w tablicy przechowującej liczby całkowite składającej się z 200 wierszy. Każdy wiersz zbudowany będzie z 320 kolumn (zgodnie z definicją pliku zawartą w poleceniu).

Zaczynamy od zadeklarowania tablicy. Tablicę będziemy indeksować od 0. Każdą z jej komórek wypełniamy wartością 0.

Linia 1. piksele otwórz nawias kwadratowy 200 zamknij nawias kwadratowy otwórz nawias kwadratowy 320 zamknij nawias kwadratowy prawy ukośnik prawy ukośnik deklaracja nowej tablicy liczb całkowitych. Linia 3. dla i znak równości 0 przecinek 1 przecinek kropka kropka kropka 199 wykonuj dwukropek. Linia 4. dla j znak równości 0 przecinek 1 przecinek kropka kropka kropka 319 wykonuj dwukropek. Linia 5. piksele otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy j zamknij nawias kwadratowy znak równości 0.

Następnie w trybie do odczytu otwieramy plik. Odczytujemy z niego kolejne wiersze, dzielimy tekst na pojedyncze liczby i uzupełniamy tablicę piksele zamienionymi na liczby całkowite wartościami.

Linia 1. piksele otwórz nawias kwadratowy 200 zamknij nawias kwadratowy otwórz nawias kwadratowy 320 zamknij nawias kwadratowy prawy ukośnik prawy ukośnik deklaracja nowej tablicy liczb całkowitych. Linia 3. dla i znak równości 0 przecinek 1 przecinek kropka kropka kropka 199 wykonuj dwukropek. Linia 4. dla j znak równości 0 przecinek 1 przecinek kropka kropka kropka 319 wykonuj dwukropek. Linia 5. piksele otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy j zamknij nawias kwadratowy znak równości 0. Linia 7. plik znak równości otwórz plik cudzysłów dane kropka txt cudzysłów. Linia 9. dla numerWiersza znak równości 0 przecinek 1 przecinek kropka kropka kropka 199 wykonuj dwukropek. Linia 10. wiersz znak równości odczytaj z plik wiersz o numerze numerWiersza. Linia 11. liczby znak równości podziel wiersz na części rozdzielone przy pomocy znaku cudzysłów cudzysłów otwórz nawias okrągły spacji zamknij nawias okrągły. Linia 12. dla numerKolumny znak równości 0 przecinek 1 przecinek kropka kropka kropka 319 wykonuj dwukropek. Linia 13. piksele otwórz nawias kwadratowy numerWiersza zamknij nawias kwadratowy otwórz nawias kwadratowy numerKolumny zamknij nawias kwadratowy znak równości liczbaCałkowita otwórz nawias okrągły liczby otwórz nawias kwadratowy numerKolumny zamknij nawias kwadratowy zamknij nawias okrągły. Linia 15. zamknij plik.

Rozwiązując kolejne zadania, będziemy zakładali, że tablica piksele została uzupełniona danymi z pliku.

Zadanie 1.1

Podaj jasność najjaśniejszego i jasność najciemniejszego piksela.

Rozwiązanie

Zadanie polega na odnalezieniu w całej tablicy wartości największej i najmniejszej. Implementację rozwiązania zaczniemy od zadeklarowania dwóch zmiennych: minmax. Obie zainicjalizujemy wartością znajdującą się w tablicy piksele pod indeksem 0, 0.

Linia 1. min znak równości max znak równości piksele otwórz nawias kwadratowy 0 zamknij nawias kwadratowy otwórz nawias kwadratowy 0 zamknij nawias kwadratowy.

Tworzymy dwie zagnieżdżone pętle dla. Zadaniem pętli zewnętrznej będzie wskazywanie, który wiersz jest aktualnie przetwarzany, z kolei wewnętrzna wskazuje przetwarzaną kolumnę.

Linia 1. min znak równości max znak równości piksele otwórz nawias kwadratowy 0 zamknij nawias kwadratowy otwórz nawias kwadratowy 0 zamknij nawias kwadratowy. Linia 3. dla wiersz znak równości 0 przecinek 1 przecinek kropka kropka kropka 199 wykonuj dwukropek. Linia 4. dla kolumna znak równości 0 przecinek 1 przecinek kropka kropka kropka 319 wykonuj dwukropek.

Wewnątrz pętli dodajemy dwie instrukcje warunkowe. Pierwsza będzie sprawdzać, czy wartość zmiennej min jest większa od wartości kryjącej się w piksele[wiersz][kolumna]. Jeżeli warunek zostanie spełniony, oznacza to, że znaleźliśmy nową najmniejszą wartość – zapisujemy ją do zmiennej min.

Druga instrukcja warunkowa porównuje wartość zapisaną w piksele[wiersz][kolumna] z wartością max. Jeżeli max jest mniejszy od piksele[wiersz][kolumna], wówczas zapisujemy do zmiennej max wartość pobraną z tablicy – jest to nowa wartość największa.

Linia 1. min znak równości max znak równości piksele otwórz nawias kwadratowy 0 zamknij nawias kwadratowy otwórz nawias kwadratowy 0 zamknij nawias kwadratowy. Linia 3. dla wiersz znak równości 0 przecinek 1 przecinek kropka kropka kropka 199 wykonuj dwukropek. Linia 4. dla kolumna znak równości 0 przecinek 1 przecinek kropka kropka kropka 319 wykonuj dwukropek. Linia 5. jeżeli min zamknij nawias ostrokątny piksele otwórz nawias kwadratowy wiersz zamknij nawias kwadratowy otwórz nawias kwadratowy kolumna zamknij nawias kwadratowy wykonaj dwukropek. Linia 6. min znak równości piksele otwórz nawias kwadratowy wiersz zamknij nawias kwadratowy otwórz nawias kwadratowy kolumna zamknij nawias kwadratowy. Linia 8. jeżeli max otwórz nawias ostrokątny piksele otwórz nawias kwadratowy wiersz zamknij nawias kwadratowy otwórz nawias kwadratowy kolumna zamknij nawias kwadratowy wykonaj dwukropek. Linia 9. max znak równości piksele otwórz nawias kwadratowy wiersz zamknij nawias kwadratowy otwórz nawias kwadratowy kolumna zamknij nawias kwadratowy.

Po wykonaniu kodu zmienna min przechowuje wartość najmniejszą, z kolei max największą. Ostatnią operacją, jaką musimy wykonać, jest wydrukowanie wyniku.

Linia 1. min znak równości max znak równości piksele otwórz nawias kwadratowy 0 zamknij nawias kwadratowy otwórz nawias kwadratowy 0 zamknij nawias kwadratowy. Linia 3. dla wiersz znak równości 0 przecinek 1 przecinek kropka kropka kropka 199 wykonuj dwukropek. Linia 4. dla kolumna znak równości 0 przecinek 1 przecinek kropka kropka kropka 319 wykonuj dwukropek. Linia 5. jeżeli min zamknij nawias ostrokątny piksele otwórz nawias kwadratowy wiersz zamknij nawias kwadratowy otwórz nawias kwadratowy kolumna zamknij nawias kwadratowy wykonaj dwukropek. Linia 6. min znak równości piksele otwórz nawias kwadratowy wiersz zamknij nawias kwadratowy otwórz nawias kwadratowy kolumna zamknij nawias kwadratowy. Linia 8. jeżeli max otwórz nawias ostrokątny piksele otwórz nawias kwadratowy wiersz zamknij nawias kwadratowy otwórz nawias kwadratowy kolumna zamknij nawias kwadratowy wykonaj dwukropek. Linia 9. max znak równości piksele otwórz nawias kwadratowy wiersz zamknij nawias kwadratowy otwórz nawias kwadratowy kolumna zamknij nawias kwadratowy. Linia 11. wypisz cudzysłów Najciemniejszy piksel dwukropek cudzysłów plus min. Linia 12. wypisz cudzysłów Najjaśniejszy piksel dwukropek cudzysłów plus max.

Schemat oceniania:

Obszar standardów

Opis wymagań

Rozwiązywanie problemów i podejmowanie decyzji z wykorzystaniem komputera, stosowanie podejścia algorytmicznego

Zdający:

1) analizuje, modeluje i rozwiązuje sytuacje problemowe z różnych dziedzin;

2) stosuje podejście algorytmiczne do rozwiązywania problemu.

Poprawna odpowiedź:

Wartość najjaśniejszego piksela 221.

Wartość najciemniejszego piksela 7.

Schemat punktowania:

  • 2 pkt – za prawidłową odpowiedź, w tym 1 pkt za podanie wartości najjaśniejszego piksela i 1 pkt za podanie wartości najciemniejszego piksela.

  • 0 pkt – za odpowiedź błędną albo za brak odpowiedzi.

Zadanie 1.2

Podaj, ile wynosi najmniejsza liczba wierszy, które należy usunąć, żeby obraz miał pionową oś symetrii. Obraz ma pionową oś symetrii, jeśli w każdym wierszu i‑ty piksel od lewej strony przyjmuje tę samą wartość, co i‑ty piksel od prawej strony, dla dowolnego .

Rozwiązanie

Zadanie można rozwiązać na wiele sposobów. W zaprezentowanym rozwiązaniu wykorzystamy fakt, że każda linia, która nie powinna zostać usunięta musi być palindromem. Aby rozwiązać zadanie będziemy porównywać i‑ty piksel z lewej strony z jego odpowiednikiem z prawej. Jeżeli którakolwiek z badanych par nie będzie identyczna oznacza to, że linia nie posiada pionowej osi symetrii – należy ją usunąć.

Zaczniemy od stworzenia i zainicjalizowania dwóch zmiennych. Pierwsza: ileUsunac będzie zliczać, ile wierszy należy zgodnie z poleceniem usunąć, aby obraz miał pionową oś symetrii. Druga zmienna: polowa posłuży nam do wskazania numeru kolumny, na której powinniśmy zakończyć sprawdzanie. Zapisujemy do niej wartość wynikającą z działania (liczba kolumn w wierszu dzielona przez dwa).

Linia 1. ileUsunac znak równości 0. Linia 3. polowa znak równości 320 prawy ukośnik 2.

Tworzymy dwie zagnieżdżone pętle dla. Pierwsza będzie wskazywać numer przetwarzanego wiersza, druga numer badanej kolumny. Zauważmy, że iterator wewnętrznej pętli kolumna będzie przyjmował wartości z zakresu <0, polowa).

Linia 1. ileUsunac znak równości 0. Linia 3. polowa znak równości 320 prawy ukośnik 2. Linia 5. dla wiersz znak równości 0 przecinek 1 przecinek kropka kropka kropka 199 wykonuj dwukropek. Linia 6. dla kolumna znak równości 0 przecinek 1 przecinek kropka kropka kropka polowa wykonuj dwukropek.

Korzystając z instrukcji warunkowej, porównujemy dwie wartości: i‑tą z lewej strony (tę wartość odczytujemy z piksele[wiersz][kolumna]), z i‑tą z prawej strony (piksele[wiersz][320 - 1 - kolumna]). Jeżeli wartości są różne, wówczas zwiększamy wartość zmiennej ileUsunac oraz przerywamy wewnętrzną pętlę.

Linia 1. ileUsunac znak równości 0. Linia 3. polowa znak równości 320 prawy ukośnik 2. Linia 5. dla wiersz znak równości 0 przecinek 1 przecinek kropka kropka kropka 199 wykonuj dwukropek. Linia 6. dla kolumna znak równości 0 przecinek 1 przecinek kropka kropka kropka polowa wykonuj dwukropek. Linia 7. jeżeli piksele otwórz nawias kwadratowy wiersz zamknij nawias kwadratowy otwórz nawias kwadratowy kolumna zamknij nawias kwadratowy wykrzyknik znak równości piksele otwórz nawias kwadratowy wiersz zamknij nawias kwadratowy otwórz nawias kwadratowy 320 minus 1 minus kolumna zamknij nawias kwadratowy wykonaj dwukropek. Linia 8. ileUsunac znak równości ileUsunac plus 1. Linia 9. przerwij wewnętrzną pętlę.

Poza pętlami drukujemy wynik – wartość zmiennej ileUsunac.

Linia 1. ileUsunac znak równości 0. Linia 3. polowa znak równości 320 prawy ukośnik 2. Linia 5. dla wiersz znak równości 0 przecinek 1 przecinek kropka kropka kropka 199 wykonuj dwukropek. Linia 6. dla kolumna znak równości 0 przecinek 1 przecinek kropka kropka kropka polowa wykonuj dwukropek. Linia 7. jeżeli piksele otwórz nawias kwadratowy wiersz zamknij nawias kwadratowy otwórz nawias kwadratowy kolumna zamknij nawias kwadratowy wykrzyknik znak równości piksele otwórz nawias kwadratowy wiersz zamknij nawias kwadratowy otwórz nawias kwadratowy 320 minus 1 minus kolumna zamknij nawias kwadratowy wykonaj dwukropek. Linia 8. ileUsunac znak równości ileUsunac plus 1. Linia 9. przerwij wewnętrzną pętlę. Linia 11. wypisz ileUsunac.

Schemat oceniania:

Obszar standardów

Opis wymagań

Rozwiązywanie problemów i podejmowanie decyzji z wykorzystaniem komputera, stosowanie podejścia algorytmicznego

Zdający:

1) analizuje, modeluje i rozwiązuje sytuacje problemowe z różnych dziedzin;

2) stosuje podejście algorytmiczne do rozwiązywania problemu.

Poprawna odpowiedź:

149

Schemat punktowania:

  • 2 pkt – za prawidłową odpowiedź.

  • 0 pkt – za odpowiedź błędną albo za brak odpowiedzi.

Uwaga: nie przyznaje się 1 pkt.

Słownik

macierz
macierz

zbiór liczb lub wyrażeń zapisanych w postaci prostokątnej tablicy

tablica dwuwymiarowa
tablica dwuwymiarowa

jest to tablica jednowymiarowa przechowująca w swoich komórkach inne tablice jednowymiarowe (np. łańcuch znaków)