Zadanie nr 3: Sprawdzanie testu z arytmetyki

Podobne dokumenty
Laboratorium nr 4: Arytmetyka liczb zespolonych

Zadanie 2: Arytmetyka symboli

Zad. 3: Układ równań liniowych

Zadanie nr 2: Arytmetyka liczb zespolonych

Zad. 5: Układ równań liniowych liczb zespolonych

Zad. 3: Rotacje 2D. Demonstracja przykładu problemu skończonej reprezentacji binarnej liczb

Zad. 4: Rotacje 2D. 1 Cel ćwiczenia. 2 Program zajęć. 3 Opis zadania programowego

Laboratorium nr 5: Mnożenie wektorów i macierzy

Układ równań liniowych

Zad. 5: Sterowanie dronem

Zad. 7: Fabryka obiektów i singleton

Zad. 7: Fabryka obiektów i singleton

Zad. 5: Sterowanie robotem mobilnym

Zad. 6: Sterowanie robotem mobilnym

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

Zad. 4: Szablonu dla układu równań liniowych

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

Zad. 7: Sterowanie manipulatorem przypadek 3D

Pliki wykład 2. Dorota Pylak

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

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

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

Zad. 10: Sterowanie manipulatorem cz. 2 i 3

Laboratorium 10: Maszyna stanów

Semantyka i Weryfikacja Programów - Laboratorium 3

Kilka prostych programów

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec

Zajęcia nr 1 Podstawy programowania. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Wstęp do programowania obiektowego. Przekazywanie parametrów do funkcji w C++ Metody i funkcje operatorowe Strumienie: standardowe, plikowe, napisowe

MATERIAŁY DO ZAJĘĆ I. Podstawowe pojęcia. Algorytm. Spis treści Przepis

Definicje. Algorytm to:

Podstawy Programowania.

LABORATORIUM PROCESORY SYGNAŁOWE W AUTOMATYCE PRZEMYSŁOWEJ. Zasady arytmetyki stałoprzecinkowej oraz operacji arytmetycznych w formatach Q

Lab 9 Podstawy Programowania

Smarty PHP. Leksykon kieszonkowy

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

Podstawy Programowania

Bash - wprowadzenie. Bash - wprowadzenie 1/39

1. Wprowadzenie do C/C++

Operacje wykonywane są na operandach (argumentach operatorów). Przy operacji dodawania: argumentami operatora dodawania + są dwa operandy 2 i 5.

Ćwiczenie: JavaScript Cookies (3x45 minut)

Rekurencja (rekursja)

Wstęp do informatyki- wykład 2

Języki programowania zasady ich tworzenia

Pomorski Czarodziej 2016 Zadania. Kategoria C

TEMAT : KLASY DZIEDZICZENIE

Odczyt danych z klawiatury Operatory w Javie

Formy dialogowe w środowisku Gnome

Nazwa implementacji: Nauka języka Python wyrażenia warunkowe. Autor: Piotr Fiorek. Opis implementacji: Poznanie wyrażeń warunkowych if elif - else.

Algorytm. a programowanie -

Zad. 6: Sterowanie robotami mobilnymi w obecności przeszkód

Systemy operacyjne II Laboratorium. Część 1: Pliki wsadowe Windows

Rozliczanie kosztów księgowania wg filtrów kont

Instrukcje warunkowe i skoku. Spotkanie 2. Wyrażenia i operatory logiczne. Instrukcje warunkowe: if else, switch.

System operacyjny UNIX Ćwiczenie 1. Podstawowe polecenia systemu Unix

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 21 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 24

4. Wyrzuć wyjątek jeśli zmienna ist nie istnieje bloki: try, catch i wyrzucanie wyjątku

1. Wprowadzenie do C/C++

Sieci i systemy operacyjne I Ćwiczenie 1. Podstawowe polecenia systemu Unix

Wstęp do Programowania, laboratorium 02

Zakładka Obmiar jest dostępna dla pozycji kosztorysowej w dolnym panelu. Służy do obliczania ilości robót (patrz też p ).

Programowanie w języku C++ Agnieszka Nowak Brzezińska Laboratorium nr 2

C++ wprowadzanie zmiennych

Programowanie w Javie 1 Wykład i Ćwiczenia 2 Przegląd podstawowych klas w Javie (elementy programowania obiektowego) Płock, 16 października 2013 r.

Zad. 7: Sterowanie robotami mobilnymi w obecności przeszkód

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Delphi Laboratorium 3

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec

Programowanie C++ Wykład 2 - podstawy języka C++ dr inż. Jakub Możaryn. Warszawa, Instytut Automatyki i Robotyki

Programowanie komputerowe. Zajęcia 4

2 Przygotował: mgr inż. Maciej Lasota

Programowanie w języku Python. Grażyna Koba

Programowanie w języku C++ Grażyna Koba

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

1 Przygotował: mgr inż. Maciej Lasota

Pliki wykład 2. Dorota Pylak

Zad. 4: Rotacje 3D. 1 Cel ćwiczenia. 2 Program zajęć. 3 Opis zadania programowego

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut.

1 Podstawy c++ w pigułce.

Użycie Visual Basic for Applications ("VBA")

Instrukcje wyboru. Tworzenie programu, Schematy blokowe, Instrukcje wyboru, Operatory logiczne

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

Część 4 życie programu

Podstawy i języki programowania

EGZAMIN MATURALNY Z INFORMATYKI

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

Rozpoznawanie obrazu. Teraz opiszemy jak działa robot.

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Zad. 5: Rotacje 3D. 1 Cel ćwiczenia. 2 Program zajęć. 3 Opis zadania programowego

Operacje wejścia/wyjścia odsłona pierwsza

Instrukcje wyboru. Tworzenie programu, Schematy blokowe, Instrukcje wyboru, Operatory logiczne

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

1 Podstawy c++ w pigułce.

Ćwiczenia Skopiować do swojego folderu plik cwiczenia-kl.ii.xls, a następnie zmienić jego nazwę na imię i nazwisko ucznia

Aproksymacja funkcji a regresja symboliczna

Ćwiczenie 3 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

Układy VLSI Bramki 1.0

Mathcad c.d. - Macierze, wykresy 3D, rozwiązywanie równań, pochodne i całki, animacje

Zasady programowania Dokumentacja

Transkrypt:

Zadanie nr 3: Sprawdzanie testu z arytmetyki 1 Cel zadania Zadanie wymusza praktyczne przećwiczenia dostosowania formatu i formy wyświetlania informacji dla własnych typów danych. Ma ono pokazać potencjalne możliwości adaptowania operacji na standardowym strumieniu wejściowym i wyjściowym do własnych potrzeb. Ma ono również dać wyobrażenie o mechanizmie hermetyzacji oraz tworzenie właściwego interfejsu do struktur danych. 2 Program zajęć Materiały pomocnicze do zajęć znajdują się w kartotece bk/edu/kpo/zad/z3. Występujące w dalszej części opisu nazwy podkatalogów odnoszą się do zasobów występujących we wcześniej wspomnianej kartotece. Ocena realizacji zadania z poprzedniego laboratorium ocenie podlega poprawność realizacji zadania, styl pisania programu oraz opisy. Ocena przygotowania do bieżacych zajęć ocenie podlega konstrukcja ogólnego schematu blokowego (lub diagramu czynności) dla aktualnego zadania. Diagram ten nie musi zawierać szczegółowo opisanych wszystkich operacji (patrz wyjaśnienie w rozdziale 6). Modyfikacja programu wg wskazań osoby prowadzacej ocenie będzie podlegała poprawność realizacji modyfikacji. Pracę nad modyfikacją programu (wszystkie operacje należy wykonywać na kopii) należy rozpocząć już w trakcie pierwszej fazy laboratorium, gdyż prowadzący nie będzie w stanie ocenić wcześniejszego programu wszystkim jednocześnie. Realizacja wstępnej fazy prac nad nowym zadaniem wykorzystując przekazywane parametrów przez referencję należy napisać, opisać i przetestować funkcję, która wczytuje symbol z wejścia standardowego, jak też funkcję, która wypisuje znak na wyjściu standardowym. Prototypy tych funkcji powinny mieć postać: bool WczytajSymbol(Symbol &Sym); void WyswietlSymbol(Sybmol Sym); Zakładamy, że pierwsza z funkcji będzie zwracać true, gdy wczytanie zakończyło się poprawnie i false w przypadku przeciwnym. Pracę nad funkcjami należy rozpocząć już w trakcie pierwszej fazy laboratorium, o ile uda się zakończyć wcześniej pracę nad modyfikacją pierwszego programu, a prowadzący nie zdąży ocenić wcześniejszego programu wszystkim osobom. Ocena realizacji wstępnej wersji programu 1

3 Opis zadania Należy napisać program, który umożliwia sprawdzenie listy działań na symbolach. Lista ta czytana jest z wejścia standardowego. Zakładamy, że w osobnych liniach wpisywane są działania wg schematu: argument 1 operator argument 2 = wynik Zakładamy ponadto, że wykorzystywane są tylko dwuargumentowe operatory arytmetyczne tj. +,,, /. W trakcie wczytywania kolejnych działań program rozpoznaje je, wykonuje i sprawdza, czy faktycznie wpisany wynik jest zgodny z definicją działania. Następnie wyświetla to co wczytał z dodatkową informacją, czy wynik jest poprawny. Jeśli tak nie jest, to dodatkowo informuje jaki jest właściwy wynik tej operacji. Ponadto program musi zliczać ilość operacji związanych z poszczególnymi operatorami oraz ilość poprawnych i błędnych wyników. Program musi też umieć pomijać te wyrażenia, które są błędnie zapisane i zliczać ile takich wyrażeń wystąpiło. Uznajemy, że wprowadzanie danych zostało zakończone, jeśli użytkownik wcisnął klawisze Ctrl-D. Kod generowany przez wciśnięcie kombinacji tych klawiszy jest kodem oznaczającym koniec pliku. W programie należy więc sprawdzić, czy wystąpił koniec pliku dla wejścia standardowego (lepszym określeniem jest koniec strumienia). Po zakończeniu fazy wprowadzania danych należy na wyjściu standardowym wypisać pełną statystykę testu. Powinna ona zawierać następujące informacje: ilość wszystkich wyrażeń, ilość wyrażeń, które były poprawnie zapisane pod względem składni, ilość wyrażeń z poprawnie zapisanym wynikiem, procentowy wskaźnik poprawnie zapisanych wyrażeń z poprawnym wynikiem w stosunku do wszystkich wyrażeń, które były poprawnie zapisane pod względem składni, ilość operacji dodawania i odejmowania, ilość operacji mnożenia i dzielenia. Mimo przedstawionego opisu celem programu nie jest bezpośrednia interakcja z użytkownikiem, a jedynie sprawdzenie testu, który może być w różny sposób podany na wejście standardowe programu. Jednym z nich jest bezpośrednie wprowadzenie z klawiatury, tak jak to zostało opisane. Opis ten został tak sformułowany dla lepszego zrozumienia istoty działania programu. Innym sposobem jest zapisanie listy działań do pliku i jego przekierowanie na wejście standardowe programu, np../sprawdzenie_testu < lista_dzialan.txt lub cat lista_dzialan.txt./sprawdzenie_testu Uwaga: Pokazane sposoby wywołania programu nie wymagają żadnych dodatkowych zmian w jego kodzie. W szczególności nie ma potrzeby odwoływania się do operacji na plikach w kodzie programu. Wszystkie operacje muszą być realizowane na wejściu standardowym reprezentowanym przez obiekt std::cin. 2

4 Przykład działania programu Poniżej przedstawiony przykład wyznacza formę komunikatów i ich forma jest obligatoryjny dla programu tworzonego w ramach niniejszego zadania. diablo>./sprawdzenie_testu Start sprawdzianu testu arytmetyki symboli a + c = b Odczytano wyrazenie: a + c = b Wynik poprawny a * x = d Blad skladni wyrazenia. Niepoprawny drugi argument. a + d > a Blad skladni wyrazenia. Brak znaku =. a & a = b Blad skladni wyrazenia. Niedozwolony znak operatora. a * a = b Odczytano wyrazenie: a * a = b Wynik niepoprawny. Wlasciwy wynik to: a b * b = a Odczytano wyrazenie: b * b = a Wynik poprawny ^D Statystyka: Ilosc wszystkich wyrazen: 6 Ilosc poprawnie zapisanych wyrazen: 3 Ilosc wyrazen z poprawnym wynikiem: 2 Procentowo ilosc poprawnych wynikow: 66.7% Ilosc operacji odejmowania i dodawania: 1 Ilosc operacji mnozenia i dzielenia: 2 Przykład wywołania wsadowego (przekierowanie zawartości pliku na wejście standardowe programu). diablo> cat lista_dzialan.txt a + c = d a * x = d a + d > a a & a = b a * a = b b * b = d diablo>./sprawdzenie_testu < lista_dzialan.txt Start sprawdzianu testu arytmetyki symboli Odczytano wyrazenie: a + c = d Wynik poprawny Blad skladni wyrazenia. Niepoprawny drugi argument. Blad skladni wyrazenia. Brak znaku =. Blad skladni wyrazenia. Niedozwolony znak operatora. Odczytano wyrazenie: a * a = b Wynik niepoprawny. Wlasciwy wynik to: a Odczytano wyrazenie: b * b = d Wynik poprawny 3

Statystyka: Ilosc wszystkich wyrazen: 6 Ilosc poprawnie zapisanych wyrazen: 3 Ilosc wyrazen z poprawnym wynikiem: 2 Procentowo ilosc poprawnych wynikow: 66.7% Ilosc operacji odejmowania i dodawania: 1 Ilosc operacji mnozenia i dzielenia: 2 5 Wymagania co do konstrukcji Należy pamiętać, że komunikaty o błędach należy kierować na wyjście standard error (reprezentowane jest ono przez obiekt std::cerr). Na wyjście standardowe reprezentowane przez obiekt std::cout kierujemy tylko komunikaty odpowiadające poprawnemu działaniu. Należy zdefiniować struktury danych modelujące odpowiednio wrażenie algebraiczne oraz zestawienie statystyk. Konieczne jest również zdefiniowanie typu wyliczeniowego reprezentującego operatory (uwaga: elementami tego typu nie mogą być znaki +, -, *, /; muszą być nimi odpowiednie napisy, np. op_dodawania, op_odejmowania itd.). Należy zdefiniować rodzaj interfejsu dla zmiennych typów odpowiadających poszczególnym strukturom. Ma on postać funkcji, które wykonują odpowiednie operacje na tych strukturach. Wszystkie funkcje związane z daną strukturą powinny być zdefiniowane w osobnym module, np. WyrazenieAlgeb.hh <- definicja struktury WyrazenieAlgeb oraz prototypy funkcji zdefiowane w module. WyrazenieAlgeb.cpp <- definicja funkcji operujących na strukturze WyrazenieAlgeb Przykład prototypów funkcji realizujących odpowiednie operacje dla struktury WyrazenieAlgeb. bool InterpretujOperacjeIPorownajWynik( WyrazenieAlgeb Wyrazenie ); void WstawElementyWyrazenia( WyrazenieAlgeb &Wyrazenie, Symbol Arg1, Operator Op, Symbol Arg2, Symbol Wynik ); Przykład prototypów funkcji realizujących odpowiednie operacje dla struktury Statystyka. void InkrementujLiczbeOperDodOdej( Statystyka &Stat ); void WyswietlStatystyke( Statystyka Stat ); Uwaga: Poza modułami w pozostałej części programu nie powinno być operacji, które są bezpośrednio wykonywane na polach zmiennej typu WyrazenieAlgeb lub Statystyka. Nazwy typów nie są obligatoryjne. Można je dobierać wg własnego uznania. Istotne jest, aby modelowały właściwe pojęcia. Wszystkie funkcje oraz przeciążenia operatorów muszą być opisane. Wspomniany opis musi zawierać: 1. ogólną informację co dana funkcja robi, 4

2. warunki wstępne (o ile są konieczne), 3. opis parametrów wywołania funkcji, 4. opis tego co dana funkcja zwraca. W trakcie kompilacji finalnej wersji programu nie moga generować się żadne ostrzeżenia. Kompilację należy wykonywać z opcjami -Wall, -std=c++11 oraz -pedantic. 6 Przygotowanie do zajęć 6.1 Tydzień 0 Przed zajęciami należy napisać schemat blokowy (lub diagram czynności) przedstawiający ideę działania programu bez wchodzenia nadmiernie w detale, np. operacja wyświetlenia statystyki powinna być pojedynczym bloczkiem. Ważniejsze jest, aby zastanowić się co się ma stać, gdy nie powiedzie się wczytanie wyrażenia. Należy je rozpatrywać jako całość bez wchodzenia w szczegóły, czy nie powiodło się czytanie pierwszego argumentu, czy też jakiegoś innego elementu tego wyrażenia. 6.2 Tydzień 1 Przed zajęciami muszą zostać przygotowane następujące elementy zadania. Wszystko co będzie ponad to będzie oceniane in plus. Należy przygotować możliwie szczegółowy schemat blokowy (lub diagram czynności) całego programu. Głównie chodzi o właściwą reakcję na błędy napotykane przy czytaniu wyrażenia. Wyświetlenie statystyki należy potraktować jako pojedynczy bloczek. Podobnie operację czytania symbolu należy również potraktować jako jeden bloczek. Nie wchodzimy w szczegóły jak konkretnie jest to realizowane. Ważne są reakcje na to, czy ta operacja powiodła się, czy też nie. Należy napisać osobny schemat blokowy (lub diagram czynności) czytania symbolu z wejścia standardowego, który będzie podstawą realizacji przeciążenia operatora >> dla typu Symbol. Na podstawie wcześniejszego schematu blokowego (lub diagramu czynności) należy napisać kod przeciążenia operatora czytania symbolu ze strumienia istream oraz zapisu do strumienia ostream. Należy napisać schemat blokowy (lub diagram czynności) dla operacji czytania wyrażenia algebraicznego, który będzie podstawą realizacji przeciążenia operatora >> dla typu WyrazenieAlgeb. 6.3 Tydzień 2 Rozliczenie się z gotowego programu i rozpoczęcie następnego zadania (tydzień 0 dla zadania nr 4). 5