Rozpoznawanie obrazu. Teraz opiszemy jak działa robot.

Podobne dokumenty
Autostradowe opłaty. Szczegóły implementacyjne. highway

utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,

XML i nowoczesne technologie zarządzania treścią 2007/08

Podstawy informatyki. Elektrotechnika I rok. Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia

W Brisbane grasują wielkie zmutowane wombaty. Pomóż ocalić ludzi od tej plagi torbaczy.

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Skrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać

Część 4 życie programu

1 Rejestrator czasu pracy

Schematy blokowe I. 1. Dostępne bloki: 2. Prosty program drukujący tekst.

4. Funkcje. Przykłady

- wszystkie elementy - wszystkie elementy

UTK Można stwierdzić, że wszystkie działania i operacje zachodzące w systemie są sterowane bądź inicjowane przez mikroprocesor.

#include <iostream> using namespace std; void ela(int); int main( ); { Funkcja 3. return 0; }

Python: JPEG. Zadanie. 1. Wczytanie obrazka

Biblioteka standardowa - operacje wejścia/wyjścia

Zestaw 1: Organizacja plików: Oddajemy tylko źródła programów (pliki o rozszerzeniach.adb i.ads)!!! Zad. 1: Zad. 2: 2,2,2 5,5,5,5,5,5 Zad.

Zadanie 2: Arytmetyka symboli

Ćwiczenie: JavaScript Cookies (3x45 minut)

Laboratorium nr 4: Arytmetyka liczb zespolonych

Języki i techniki programowania Ćwiczenia 2

INFORMATYKA Z MERMIDONEM. Programowanie. Moduł 5 / Notatki

Argumenty wywołania programu, operacje na plikach

International Olympiad in Informatics 2013

Tablice. Jones Stygar na tropie zmiennych

Blockly Kodowanie pomoc.

Zadania do wykonania. Rozwiązując poniższe zadania użyj pętlę for.

po ostatnim dopisaniu na standardowe wyjście (cout) powinien zostać wyprowadzony komunikat "Skonczylem";

Deklaracja struktury w C++

Zadanie nr 3: Sprawdzanie testu z arytmetyki

1 Powtórzenie wiadomości

Zamawianie Taxi Aktywator Instrukcja użytkownika

Technologie Informacyjne - Linux 2

Zadania język C++ Zad. 1. Napisz program wczytujący z klawiatury wiek dwóch studentów i wypisujący informację o tym, który z nich jest starszy.

Sortowanie zewnętrzne

Algorytm. a programowanie -

Wielomian interpolacyjny Hermite a

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 6. Karol Tarnowski A-1 p.

I. Podstawy języka C powtórka

Podstawy obiektowości

Wyrażenie nawiasowe. Wyrażenie puste jest poprawnym wyrażeniem nawiasowym.

2. Tablice. Tablice jednowymiarowe - wektory. Algorytmy i Struktury Danych

Pomorski Czarodziej 2016 Zadania. Kategoria C

Wydział Matematyki I Informatyki ul. Słoneczna Olsztyn

8. Wektory. Przykłady Napisz program, który pobierze od użytkownika 10 liczb, a następnie wypisze je w kolejności odwrotnej niż podana.

Zmienne powłoki. Wywołanie wartości następuje poprzez umieszczenie przed nazwą zmiennej znaku dolara ($ZMIENNA), np. ZMIENNA=wartosc.

Pzetestuj działanie pętli while i do...while na poniższym przykładzie:

Tablice, funkcje - wprowadzenie

Zadanie: FIL Ścieżki. Wejście. polish. BOI 2015, dzień 2. Dostępna pamięć: 256 MB

Tablice (jedno i wielowymiarowe), łańcuchy znaków

Wiadomości i umiejętności

Wprowadzenie do projektu QualitySpy

Pliki. Informacje ogólne. Obsługa plików w języku C

Zadanie nr 2: Arytmetyka liczb zespolonych

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

Program 14. #include <iostream> #include <ctime> using namespace std;

1. Operacje logiczne A B A OR B

WSTĘP. Budowa bramki NAND TTL, ch-ka przełączania, schemat wewnętrzny, działanie 2

Zestaw 1 ZESTAWY A. a 1 a 2 + a 3 ± a n, gdzie skªadnik a n jest odejmowany, gdy n jest liczb parzyst oraz dodawany w przeciwnym.

Metody zawarte w klasie File: boolean createnewfile() tworzy nowy, pusty plik, ale tylko jeśli on wcześniej nie istniał. boolean delete() usuwa dany

Laboratorium 10: Maszyna stanów

Metody numeryczne Laboratorium 2

Tablice jednowymiarowe

Napisz program wypisujący na standardowym wyjściu następujący napis: Napis zawierający różne dziwne znaczki // \ \$ &%.

ANALIZA I INDEKSOWANIE MULTIMEDIÓW (AIM)

Java pierwszy program w Eclipse «Grzegorz Góralski strona własna

Warsztaty dla nauczycieli

Podstawy OpenCL część 2

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

Wymagania edukacyjne z informatyki dla klasy szóstej szkoły podstawowej.

Język skryptowy: Laboratorium 1. Wprowadzenie do języka Python

Egzamin maturalny z informatyki Poziom rozszerzony

Zadania z podstaw programowania obiektowego

Programowanie w języku Java

Podstawy programowania skrót z wykładów:

1 Moduł Inteligentnego Głośnika

Zestaw 1-1 Organizacja plików: Oddajemy tylko źródła programów (pliki o rozszerzeniach.cpp)!!!

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Zestaw A-1: Organizacja plików: Oddajemy tylko źródła programów (pliki o rozszerzeniach.adb i.ads)!!! Zad. 1: 4,3,3 2,2,1 Zad. 2: 3,3,3 Zad.

Ćwiczenie nr 6. Poprawne deklaracje takich zmiennych tekstowych mogą wyglądać tak:

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Algorytmy i struktury danych Laboratorium Nr 4

GRUPA ĆWICZENIOWA (ZAKREŚL ODPOWIEDNIĄ): MG8 MG13 MB13 MD13 BT13

Zapis algorytmów: schematy blokowe i pseudokod 1

> C++ dynamiczna alokacja/rezerwacja/przydział pamięci. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki

1 Wskaźniki. 1.1 Główne zastosowania wskaźników

1 Moduł Inteligentnego Głośnika 3

Wstęp do Informatyki i Programowania Laboratorium: Lista 0 Środowisko programowania

1 Moduł Modbus ASCII/RTU 3

lekcja 8a Gry komputerowe MasterMind

International Olympiad in Informatics July 2011, Pattaya City, Thailand Competition Tasks Day 2 Polish 1.3.

do instrukcja while (wyrażenie);

Baltie 3. Podręcznik do nauki programowania dla klas I III gimnazjum. Tadeusz Sołtys, Bohumír Soukup

Materiały: kartki papieru (5 x 5 kolorów), piłeczki pingpongowe (5 x 5 kolorów), worek (nieprzeźroczysty).

Liczby losowe i pętla while w języku Python

Zaprojektować i zaimplementować algorytm realizujący następujące zadanie.

Mikrooperacje. Mikrooperacje arytmetyczne

Wyszukiwanie binarne

Zajęcia 6 pliki tekstowe

Transkrypt:

Rozpoznawanie obrazu Implementujesz oprogramowanie do rozpoznawania obrazu dla robota. Za każdym razem, gdy robot robi zdjęcie kamerą, jest ono zapisywane jako czarno-biały obraz w pamięci robota. Każdy obraz jest siatką piksli, której wiersze są numerowane od do, a kolumny od do. Na każdym obrazie są dokładnie dwa czarne piksle, a wszystkie pozostałe piksle są białe. Robot przetwarza każdy obraz za pomocą programu złożonego z prostych instrukcji. Dane są wartości, oraz dodatnia liczba całkowita. Twoim celem jest napisanie funkcji generującej program dla robota, który dla dowolnego obrazu stwierdza, czy odległość między dwoma czarnymi pikslami jest równa dokładnie. Odległość między pikslem w wierszu i kolumnie oraz pikslem w wierszu i kolumnie jest zdefiniowana jako. W powyższym wzorze oznacza wartość bezwzględną, czyli jeśli oraz gdy. Teraz opiszemy jak działa robot. Pamięć robota to dostatecznie duża tablica komórek indeksowanych od. Każda komórka może przechowywać lub, a jej zawartość po ustawieniu nie jest już nigdy zmieniana. Obraz jest przechowywany wiersz po wierszu w komórkach o indeksach od do. Pierwszy wiersz jest przechowywany w komórkach o indeksach od do, a ostatni wiersz w komórkach o numerach od do. Konkretnie, jeśli piksel w wierszu oraz kolumnie jest czarny, to w komórce o indeksie jest przechowywane, w przeciwnym wypadku znajduje się tam. Program robota jest ciągiem instrukcji, które są numerowane kolejnymi liczbami całkowitymi, zaczynając od. Po uruchomieniu programu, instrukcje są wykonywane jedna po drugiej. Każda instrukcja wczytuje zawartość jednej lub wielu komórek (wczytane wartości nazywamy wejściami instrukcji) i produkuje jedną wartość równą lub (którą nazywamy wyjściem instrukcji). Wyjście instrukcji jest zapisywane w komórce. Wejście instrukcji może pochodzić tylko z komórek, które opisują piksle lub przechowują wyjścia wcześniejszych instrukcji, to znaczy komórki od do. Są cztery typy instrukcji: NOT : ma tylko jedno wejście. Jej wyjście to dla wejścia równego, a w przeciwnym przypadku. AND : ma jedno lub więcej wejść. Jej wyjście to wtedy i tylko wtedy, gdy Vision (1 of 5)

wszystkie wejścia to. OR : ma jedno lub więcej wejść. Jej wyjście to przynajmniej jedno wejście to. XOR : ma jedno lub więcej wejść. Jej wyjście to nieparzyście wiele wejść to. wtedy i tylko wtedy, gdy wtedy i tylko wtedy, gdy Wyjściem ostatniej instrukcji programu powinno być, gdy odległość między dwoma czarnymi pikslami to dokładnie, a w przeciwnym przypadku. Szczegóły implementacyjne Twoim zadaniem jest zaimplementowanie następującej procedury: void construct_network(int H, int W, int K) : wymiary każdego obrazu pochodzącego z kamery robota : dodatnia liczba całkowita Procedura powinna wygenerować program robota. Dla każdego obrazu pochodzącego z kamery robota, program powinien określić, czy odległość między dwoma czarnymi pikslami na tym obrazie to dokładnie. Ta procedura powinna wywoływać jedną lub więcej z poniższych funkcji, aby dopisywać instrukcje do programu robota (który początkowo jest pusty): int add_not(int N) int add_and(int[] Ns) int add_or(int[] Ns) int add_xor(int[] Ns) Dopisuje (odpowiednio) instrukcję NOT, AND, OR lub XOR. (dla funkcji add_not ): indeks komórki, z której dopisywana instrukcja NOT wczytuje wejście (dla funkcji add_and, add_or, add_xor ): tablica zawierająca indeksy komórek, z których dopisywana instrukcja AND, OR lub XOR wczytuje swoje wejścia Wynikiem działania każdej funkcji jest indeks komórki, która przechowuje wyjście danej instrukcji. Wynikami kolejnych wywołań tych funkcji są kolejne liczby całkowite, zaczynając od. Program robota może się składać z co najwyżej instrukcji. Sumaryczna liczba wartości odczytanych przez wszystkie instrukcje nie może przekroczyć. Mówiąc inaczej, sumaryczna długość tablic we wszystkich wywołaniach funkcji add_and, add_or oraz add_xor plus liczba wywołań funkcji add_not nie może przekroczyć. Procedura construct_network powinna zakończyć swoje działanie po wypisaniu Vision (2 of 5)

ostatniej instrukcji. Następnie program robota będzie sprawdzony na pewnej liczbie obrazów. Zestaw testowy zostanie uznany za prawidłowo rozwiązany, jeśli dla każdego z tych obrazów wyjście ostatniej instrukcji to wtedy i tylko wtedy, gdy odległość między dwoma czarnymi pikslami jest równa. Efektem oceniania Twojego rozwiązania może być jeden z poniższych komunikatów w języku angielskim, których znaczenie jest wyjaśnione poniżej: Instruction with no inputs : argumentem funkcji add_and, add_or lub add_xor była pusta tablica. Invalid index : nieprawidłowy (być może ujemny) indeks komórki został podany w argumencie funkcji add_and, add_or, add_xor lub add_not. Too many instructions : Twoja procedura dopisała więcej niż instrukcji. Too many inputs : sumaryczna liczba wartości odczytanych przez instrukcje przekracza. Przykład Załóżmy, że,,. Mamy tylko dwa możliwe obrazy, dla których odległość między czarnymi pikslami jest równa. 0 1 2 3 4 5 0 1 2 3 4 5 Przypadek 1: czarne piksle to Przypadek 2: czarne piksle to oraz oraz Jednym z możliwych rozwiązań jest zbudowanie programu robota za pomocą następujących wywołań: 1. add_and([0, 5]) dodające instrukcję, której wyjściem jest wtedy i tylko wtedy, gdy mamy do czynienia z Przypadkiem 1. Wyjście jest zapisywane w komórce. 2. add_and([2, 3]) dodające instrukcję, której wyjściem jest wtedy i tylko wtedy, gdy mamy do czynienia z Przypadkiem 2. Wyjście jest zapisywane w komórce. 3. add_or([6, 7]) dodające instrukcję, której wyjściem jest wtedy i tylko wtedy, gdy mamy do czynienia z Przypadkiem 1 lub 2. Ograniczenia Vision (3 of 5)

Podzadania 1. (10 punktów) 2. (11 punktów) 3. (11 punktów) 4. (15 punktów) 5. (12 punktów) 6. (8 punktów) Na każdym obrazie piksel w wierszu i kolumnie jest czarny. 7. (14 punktów) 8. (19 punktów) Brak dodatkowych założeń. Przykładowa sprawdzaczka Przykładowa sprawdzaczka wczytuje wejście w następującym formacie: ostatni wiersz: Każdy wiersz za wyjątkiem pierwszego i ostatniego opisuje obraz zawierający dwa czarne piksle. Obraz opisany przez wiersz nazywamy obrazem. Jeden czarny piksel jest w wierszu i kolumnie, podczas gdy drugi jest w wierszu i kolumnie. Przykładowa sprawdzaczka najpierw wywołuje procedurę construct_network(h, W, K). Jeśli construct_network(h, W, K) narusza ograniczenia z treści zadania, przykładowa sprawdzaczka wypisuje jeden z komunikatów błędów wypisanych na końcu fragmentu poświęconego szczegółom implementacyjnym, a następnie kończy działanie. W przeciwnym przypadku, efekt działania przykładowej sprawdzaczki jest dwojaki. Po pierwsze, przykładowa sprawdzaczka wypisuje wyjście ostatniej instrukcji programu robota w następującym formacie: wyjście ostatniej instrukcji w programie robota uruchomionym dla obrazu ( lub ). Po drugie, przykładowa sprawdzaczka tworzy w bieżącym katalogu plik log.txt, którego format jest następujący: Sekwencja podana w wierszu opisuje wartości przechowywane w komórkach pamięci robota po wykonaniu programu robota na obrazie. Konkretnie, to wartość przechowywana w komórce. Długość sekwencji to plus liczba Vision (4 of 5)

instrukcji w programie robota. Vision (5 of 5)