Zadanie 2: Arytmetyka symboli

Podobne dokumenty
Zadanie nr 3: Sprawdzanie testu z arytmetyki

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

Laboratorium nr 4: Arytmetyka liczb zespolonych

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

Programowanie - wykład 4

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

> C++ wskaźniki. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki 26 kwietnia 2017

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

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

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

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

Paostwowa Wyższa Szkoła Zawodowa w Płocku Dariusz Wardowski

1. Wypisywanie danych

Zad. 5: Sterowanie robotem mobilnym

Część 4 życie programu

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

Języki programowania zasady ich tworzenia

Wstęp do programowania

Zad. 6: Sterowanie robotem mobilnym

Wykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz

Zad. 7: Fabryka obiektów i singleton

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

Programowanie komputerowe. Zajęcia 1

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

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

Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw

Przeciążanie operatorów

C++ wprowadzanie zmiennych

Wstęp do programowania. Wykład 1

1.1 Definicja. 1.2 Przykład. 1.3 Definicja. Niech G oznacza dowolny, niepusty zbiór.

public: // interfejs private: // implementacja // składowe klasy protected: // póki nie będziemy dziedziczyć, // to pole nas nie interesuje

Podstawy języka C++ Maciej Trzebiński. Praktyki studenckie na LHC IFJ PAN. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. M. Trzebiński C++ 1/16

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27

1 Podstawy c++ w pigułce.

I - Microsoft Visual Studio C++

Wstęp do Programowania 2

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

0 + 0 = 0, = 1, = 1, = 0.

Szablony funkcji i szablony klas

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Przekazywanie argumentów wskaźniki

Czym jest całka? Całkowanie numeryczne

TEMAT : KLASY DZIEDZICZENIE

Programowanie w C++ Wykład 3. Katarzyna Grzelak. 12 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 35

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

Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

MACIERZE. Sobiesiak Łukasz Wilczyńska Małgorzata

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

C++ - [1-3] Debugowanie w Qt Creator

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

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

Wykład 2. Informatyka Stosowana. 10 października Informatyka Stosowana Wykład 2 10 października / 42

Techniki Programowania wskaźniki

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

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

Wykład 2. Informatyka Stosowana. 9 października Informatyka Stosowana Wykład 2 9 października / 42

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

Wyjątki (exceptions)

Zad. 5: Sterowanie dronem

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

Metody Metody, parametry, zwracanie wartości

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?

1 Podstawy c++ w pigułce.

Rozdział 4 KLASY, OBIEKTY, METODY

Operatory w C++ Operatory arytmetyczne. Operatory relacyjne (porównania) Operatory logiczne. + dodawanie - odejmowanie * mnożenie / dzielenie % modulo

Szablony funkcji i klas (templates)

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

Systemy liczbowe używane w technice komputerowej

Typy wyliczeniowe Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Prof. Danuta Makowiec Instytut Fizyki Teoretycznej i Astrofizyki pok. 353, tel danuta.makowiec at gmail.com

Podstawowe struktury algebraiczne

Wyliczanie wyrażenia obiekty tymczasowe

Przeciążenie (przeładowanie nazw) funkcji

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 10 Kurs C++

Podstawy Programowania Obiektowego

Język ludzki kod maszynowy

Ok. Rozbijmy to na czynniki pierwsze, pomijając fragmenty, które już znamy:

Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki

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

15. Macierze. Definicja Macierzy. Definicja Delty Kroneckera. Definicja Macierzy Kwadratowej. Definicja Macierzy Jednostkowej

Programowanie w C++ Wykład 1. Katarzyna Grzelak. 26 luty K.Grzelak (Wykład 1) Programowanie w C++ 1 / 28

Programowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006)

Programowanie strukturalne i obiektowe. Funkcje

Bogdan Kreczmer. Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska

Pytania sprawdzające wiedzę z programowania C++

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

Wstęp do Programowania 2

Podstawy Programowania

PARADYGMATY PROGRAMOWANIA Wykład 3

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

12. Rekurencja. UWAGA Trzeba bardzo dokładnie ustalić <warunek>, żeby mieć pewność, że ciąg wywołań się zakończy.

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

3. Wykład Układy równań liniowych.

Wykład 4. Określimy teraz pewną ważną klasę pierścieni.

Transkrypt:

1 Cel ćwiczenia Zadanie 2: Arytmetyka symboli Wykształcenie umiejętności abstrahowania operacji arytmetycznych. Zapoznanie się i przećwiczenie mechanizmu tworzenia przeciążeń funkcji operatorowych. Utrwalenie umiejętności tworzenie opisów funkcji. 2 Program zajęć Materiały pomocnicze do zajęć znajdują się w kartotece bk/edu/kpo/zad/z2. 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 przygotowania do bieżacych zajęć w ramach przygotowania do zajęć należy napisać kod definicji operacji dodawania symboli. Szczegółowy opis wymaganego przygotowania do zajęć znajduje się w podrozdziale 5. Ocenie podlegać będzie poprawność definicji i kompilacji pliku. Realizacja wstępnej fazy prac nad nowym zadaniem W ramach wstępnej fazy pracy nad programem należy napisać funkcję realizującą wyliczanie elementu przeciwnego względem operacji dodawania. W oparciu o nią należy zdefiniować operację odejmowania (definicja funkcji i przeciążenie operatora - ). Należy też w funkcji main przetestować wywołanie tej funkcji oraz realizacji operacji dodawania z wykorzystaniem wspomnianego operatora. Opis zadania znajduje się w podrozdziale 3. Stworzone funkcje i przeciążenia operatorów powinny zostać odpowiednio opisane. Ocena realizacji wstępnej wersji programu 3 Opis zadania programowego przeciażanie operatorów Należy oprogramować operacje arytmetyczne takie jak dodawanie, odejmowanie, mnożenie i dzielenie. Operacje te mają być realizowane na zbiorze symboli S = {e, a, b, c, d} reprezentowanych przez wybrane litery alfabetu. W programie należy dokonać odpowiedniego przecia- żenia operatorów +,,,/, aby zaimplementować wcześniej wymienione operacje. Należy je również zaimplementować za pomocą funkcji Dodaj, PrzeciwnyDodawania, Odejmuj, Mnoz, OdwrotnyMnozenia, Dziel. W programie należy te same wyrażenie arytmetyczne podane przez prowadzącego zapisać w postaci: 1. zwyczajowego zapisu wyrażeń arytmetycznych (będzie to możliwe dzięki przeciążeniu operatorów), 2. wywołań funkcji, 3. jawnych wywołań przeciążonych funkcji operatorowych. Wynik obliczeń powinien zostać porównany i wyświetlony komunikat, czy wyniki obliczeń są identyczne, czy też nie. 1

3.1 Operacja dodawania Operacja dodawania zadana jest w postaci tabelki, która uwzględnia wszystkie możliwe kombinacje argumentów tej operacji. Ma ona następującą postać: Działanie "+" e a b c d e e a b c d a a d e b c b b e c d a c c b d a e d d c a e b Tabelkę tę należy czytać w następujący sposób argument_1 wiersz operator argument_2 kolumna = element_macierzy wiersz,kolumna. Na przykład dla operacji dodawania mamy b + d = a. Należy zauważyć, że elementem neutralnym tej operacji jest symbol e, tzn. niezależnie do jakiego symbolu dodamy symbol e wynikiem będzie pierwszy z symboli, np. b + e = b. Warto też zauważyć, że dla każdego elementu istnieje element przeciwny, których suma da element neutralny. Na przykład dla b takim elementem jest c, gdyż zgodnie z tabelką działania b + a = e. Zbiór S z tak zdefiniowanym działaniem dodawania tworzy strukturę algebraiczną (S, +) zwaną grupa. Ze względu na to, że działanie to jest przemienne, to strukturę taką nazywamy grupa przemienna lub grupa abelowa. 3.2 Operacja odejmowania Bazując na wcześniej zdefiniowanej operacji dodawania, odejmowanie możemy zdefiniować jako operację dodawania elementu przeciwnego. Podstawową własnością elementu przeciwnego jest to, że dodając go do danego elementu otrzymamy element neutralny. Dla przykładu rozważmy element b i oznaczmy element przeciwny do niego jako ( b). Mając na uwadze wcześniej opisaną własność mamy b + ( b) = e. Ze zdefiniowanej tabelki dodawania wynika, że elementem, który możemy wstawić w miejsce ( b), gdyż spełnia przedstawiony warunek, jest a. Mamy więc ( b) = a. Tak więc przykładową operację odejmowania można zapisać jako c b = c + ( b) = c + a = b. 2

3.3 Operacja mnożenia Operację mnożenia, podobnie jak operację dodawania, zdefiniujemy poprzez tabelkę (odpowiednik tabliczki mnożenia ;-) Działanie " " e a b c d e e e e e e a e a b c d b e b a d c c e c d b a d e d c a b Można zauważyć, że w tym przypadku elementem neutralnym tej operacji (pełniącym rolę jedności) jest symbol a. A więc gdy przemnożymy dowolny symbol przez a zawsze otrzymamy ten sam symbol, np. a b = b. To pozwala nam zdefiniować pojęcie symbolu odwrotnego do danego symbolu. Rozważmy symbol d. Symbol do niego odwrotny względem mnożenia oznaczmy jako d 1. Tak więc po przemnożeniu tych dwóch symboli powinniśmy otrzymać symbol neutralny względem operacji mnożenia, a więc symbol a. Łatwo zauważyć, że w tym przypadku takim symbolem jest symbol c, a więc c d = a. 3.4 Operacja dzielenia Operację dzielenia możemy rozumiemy analogicznie jak operację odejmowania. A więc operacja podzielenia b przez c odpowiada przemnożeniu b przez element odwrotny do c względem mnożenia. Oznaczmy taki element jako c 1. Tak więc mamy b/c = b c 1 = b d = c. Uwaga: W przypadku operacji mnożenia nie wszystkie elementy mają swój element odwrotny (jaki to jest element w tym przypadku?). Należy to odpowiednio uwzględnić implementując operację wyszukiwania elementu odwrotnego oraz operacji dzielenia. 3.5 Materiały pomocnicze W podkatalogu oper znajduje się plik dzialania.cpp. Jest on szkieletem programu, który należy uzupełnić tak, aby utworzyć program implementujący wymienione wcześniej działania. Ponadto dodatkowe materiały, które mogą być pomocne można znaleźć w dokumencie pod adresem: http://rab.ict.pwr.wroc.pl/ kreczmer/po/materialy/operatory-cz1.pdf 3.6 Zawartość pliku dzialania.cpp #include <iostream> using namespace std; 3

Definicja typu wyliczeniowego "Symbol" dla symboli a, b, c, d, e. Definicja funkcji: Dodaj, PrzeciwnyDodawania, Odejmij, Mnoz, OdwrotnyMnozenia, Dziel. Definicja przeciążeń operatorów void Porownaj(Symbol wynik_alg, Symbol wynik_ope, Symbol wynik_fun) { cout << ((wynik_alg == wynik_fun)? "Identyczne" : "Rozne") << " wyniki wyrazenia algebraicznego i funkcyjnego." << endl; cout << ((wynik_ope == wynik_fun)? "Identyczne" : "Rozne") << " wyniki wyrazenia operatorowego i funkcyjnego." << endl; cout << ((wynik_ope == wynik_alg)? "Identyczne" : "Rozne") << " wyniki wyrazenia operatorowego i algebraicznego." << endl; } int main() { Symbol wynik_alg, wynik_ope, wynik_fun; -------------------- Po wpisaniu odpowiednich wyrażeń znaki komentujące poniższy zestaw instrukcji należy usunąć. wynik_alg = WYRAZENIE_ALG_1; // <- Wyrażenie zapisane w sposób zwyczajowy wynik_fun = WYRAZENIE_FUN_1; // <- Wyrażenie wykorzystujące funkcje wynik_ope = WYRAZENIE_OPE_1; // <- Wyrażenie z jawnym wywołaniem operatorów wynik_alg = WYRAZENIE_ALG_2; // <- Wyrażenie zapisane w sposób zwyczajowy wynik_fun = WYRAZENIE_FUN_2; // <- Wyrażenie wykorzystujące funkcje wynik_ope = WYRAZENIE_OPE_2; // <- Wyrażenie z jawnym wywołaniem operatorów wynik_alg = WYRAZENIE_ALG_3; // <- Wyrażenie zapisane w sposób zwyczajowy wynik_fun = WYRAZENIE_FUN_3; // <- Wyrażenie wykorzystujące funkcje wynik_ope = WYRAZENIE_OPE_3; // <- Wyrażenie z jawnym wywołaniem operatorów 4

wynik_alg = WYRAZENIE_ALG_4; // <- Wyrażenie zapisane w sposób zwyczajowy wynik_fun = WYRAZENIE_FUN_4; // <- Wyrażenie wykorzystujące funkcje wynik_ope = WYRAZENIE_OPE_4; // <- Wyrażenie z jawnym wywołaniem operatorów -------------------- } Przykład realizacji zapisu działań dla wyrażenia: (e + a) * c wynik_alg = (e + a) * c; wynik_fun = Mnoz(Dodaj(e,a),c); wynik_ope = operator * (operator + (e,a), c); 4 Wymagania co do konstrukcji Wszystkie funkcje oraz przeciążenia operatorów muszą być opisane. Wspomniany opis musi zawierać: 1. ogólną informację co dana funkcja robi, 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, -pedantic oraz -std=c++11 5 Przygotowanie do zajęć Przed zajęciami należy napisać kod definicji operacji dodawania symboli. Wspomniana definicja musi być zgodna z dalszym opisem zadania. Należy to zrobić analogicznie do postaci przedstawionej na wykładzie. Operację należy zdefiniować w postaci zwykłej funkcji: Symbol Dodaj(Symbol Arg1, Symbol Arg2); Jak też w postaci funkcji operatorowej jako przeciążenia operatora +. Symbol operator + (Symbol Arg1, Symbol Arg2); Definicje obu tych funkcji należy wpisać do dostarczonego w ramach materiałów pomocniczych plik dzialanie.cpp. Poprawność zapisu należy zweryfikować poprzez skompilowanie pliku. 6 Uproszczenia Jeżeli zakres zadania okaże się zbyt duży, można ograniczyć się do implementacji tylko operacji dodawania i mnożenia (zarówno jeśli chodzi o funkcje, jak też przeciążenia operatorów). Powoduje to jednak otrzymanie niższej oceny. 5