Programowanie Obiektowe

Podobne dokumenty
Zadania z podstaw programowania obiektowego

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

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

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

Wyjątki (exceptions)

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

Projektowanie klas c.d. Projektowanie klas przykład

Wstęp do wiadomości teoretycznych (nie, nie jest to masło maślane ani wstęp, wstępów proszę cierpliwie czytać)

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

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

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

W przypadku STL w specyfikacji nazwy pliku nagłówkowego brak rozszerzenia tj. <string> <string.h> zamiast

Programowanie - wykład 4

Mechanizm dziedziczenia

Programowanie komputerowe. Zajęcia 1

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

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

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

DANE TEKSTOWE W JĘZYKU C/C++ - TABLICE ZNAKOWE

Wstęp do programowania. Wykład 1

Aby uzyskać zaliczenie w pierwszym terminie (do 30 stycznia 2018) rozliczyć trzeba co najmniej 8 projektów, po 4 z każdej z części: C++ oraz Python.

Pytania sprawdzające wiedzę z programowania C++

Zadanie 2: Arytmetyka symboli

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

Wprowadzenie do programowania i programowanie obiektowe

Wykład 1. Program przedmiotu. Programowanie Obiektowe (język C++) Literatura. Program przedmiotu c.d.:

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 5. Karol Tarnowski A-1 p.

Wykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

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

Programowanie obiektowe i C++ dla matematyków

Zaawansowane programowanie w C++ (PCP)

Część 4 życie programu

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

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

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

Nazwa wariantu modułu (opcjonalnie): Laboratorium programowania w języku C++

Programowanie komputerowe. Zajęcia 4

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

I - Microsoft Visual Studio C++

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {

Szablony funkcji i szablony klas

Technologie cyfrowe semestr letni 2018/2019

Programowanie obiektowe

Podstawy Programowania

Zaliczenie przedmiotu:

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

dr inż. Jarosław Forenc

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

Programowanie obiektowe

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

PARADYGMATY PROGRAMOWANIA Wykład 3

Dodatkowo klasa powinna mieć destruktor zwalniający pamięć.

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

Programowanie w C++ Wykład 6. Katarzyna Grzelak. kwiecień K.Grzelak (Wykład 6) Programowanie w C++ 1 / 40

Podstawy Programowania Obiektowego

Język C++ wykład VIII

Język C++ Różnice między C a C++

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Laboratorium 1. Wprowadzenie, środowisko programistyczne, pierwsze programy

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

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

Programowanie w C++ Wykład 6. Katarzyna Grzelak. 1 kwietnia K.Grzelak (Wykład 6) Programowanie w C++ 1 / 43

Laboratorium 1. Programowanie II - Kierunek Informatyka. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { zdefiniuje. Integer::operator=(ri);

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

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 7 maja K.Grzelak (Wykład 8) Programowanie w C++ 1 / 31

Wstęp do programowania

Wykład 1. Program przedmiotu. Programowanie (język C++) Literatura. Program przedmiotu c.d.:

STL: Lekcja 1&2. Filozofia STL

Programowanie i struktury danych

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:

Szablony klas, zastosowanie szablonów w programach

dr inż. Jarosław Forenc

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

Zajęcia nr 5 Algorytmy i wskaźniki. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this

Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1

Aplikacje w środowisku Java

Jzyk C++ cz 3. Jarosław Gramacki Instytut Informatyki i Elektroniki ( $)*)+' *, - ( ' )*'.' '',*/ *, ','*0) 1 / ) %*+ 2'' 2" ( $%%) )'20 )*0) 1 / )

Wstęp do programowania

1 Podstawy c++ w pigułce.

Aplikacje w środowisku Java

Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium:

Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04

Programowanie w języku C++

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

referencje Wykład 2. Programowanie (język C++) Referencje (1) int Num = 50; zdefiniowano zmienną Num (typu int) nadając jej wartość początkową 50.

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

Podstawy Programowania C++

Wstęp do informatyki- wykład 12 Funkcje (przekazywanie parametrów przez wartość i zmienną)

Bibliografia 1. B. Stroustrup. Jezyk C++. Wydawnictwo Naukowo-Techniczne, Warszawa,

Szablony funkcji i klas (templates)

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

PROGRAMOWANIE NISKOPOZIOMOWE. Struktury w C. Przykład struktury PN.06. c Dr inż. Ignacy Pardyka. Rok akad. 2011/2012

TEMAT : KLASY DZIEDZICZENIE

Laboratorium 1 - Programowanie proceduralne i obiektowe

Wykład 5 Wybrane zagadnienia programowania w C++ (c.d.)

1 Podstawy c++ w pigułce.

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

Transkrypt:

Programowanie Obiektowe Szczegółowy harmonogram laboratorium Poniższy harmonogram precyzuje terminy oddania programów wymienionych w programie laboratorium na stronie domowej przedmiotu: Zajęcia Program nad którym pracujemy Program do oddania Kolokwium 1 Hello world, Konkatenacja - - 2 Wyznacznik Konkatenacja - 3 Wyznacznik - - 4 Stos C Wyznacznik - 5 Stos C++ - Kolokwium 1 (15 min) 6 Complex Stos C, Stos C++ - 7 Complex - Kolokwium 2 (10 min) 8 Macierz Complex - 9 Macierz - - 10 Tablica asocjacyjna Macierz - 11 Tablica asocjacyjna - - 12 Wzorzec tablicy asocjacyjnej Tablica asocjacyjna - 13 - - Kolokwium 3 (60 min) 14 Wzorzec tablicy asocjacyjnej Wzorzec tablicy asocjacyjnej -

Szczegółowe zasady wystawiania oceny końcowej Student ma prawo do jednej nieusprawiedliwionej nieobecności w semestrze. Każdy program ma ustalony termin oddania i jest oceniany w skali 0-100% jak poniżej: 100% - poprawny program oddany w terminie 60% - poprawny program oddany po terminie 0% - plagiat (niedopuszczalna jest sytuacja gdzie student prezentuje program i nie potrafi wyjaśnić każdej pojedynczej linii kodu) Ocenianie programów przez prowadzącego rozpoczyna się na początku zajęć wypadających w dniu terminu oddania. Programy nie są oceniane na godzinach konsultacji za wyjątkiem ostatniego tygodnia zajęć. Programy nie są oceniane w sesji egzaminacyjnej. Oceny ze wszystkich programów maja jednakowe wagi dające w sumie wagę 65%. Kolokwia maja wagi zróżnicowane jak na stronie domowej przedmiotu dające w sumie wagę 35%. Końcowa ocena procentowa przeliczana jest na ocenę w skali 2-5 zgodnie z przelicznikiem podanym na stronie przedmiotu. Szczegółowe zasady kolokwiów Kolokwium 1 Zgodnie z informacjami na stronie domowej przedmiot u zadaniem jest: Zdefiniowanie funkcji standardowej z nagłówka <string.h> lub <ctype.h>. Napisanie deklaracji określonego wskaźnika do funkcji. Lista funkcji których NIE będzie na kolokwium: string.h: memmove memcmp strcoll strxfrm memchr strcspn strpbrk strspn strstr strtok strerror ctype.h: iscntrl isgraph isprint ispunct isxdigit

Na kolokwium studenci nie korzystają z żadnych własnych materiałów. Jeżeli zadanie będzie tego wymagało to studenci otrzymują wydruk tabeli kodu ASCII. Kolokwium 2 Studenci otrzymują fragmenty kodu, zawierającego błędy. Należy je wskazać oraz uzasadnić odpowiedź. Kolokwium 3 Studenci otrzymują fragment programu wykorzystującego pewną klasę oraz mają za zadanie napisanie tej klasy tak, aby podany fragment kompilował się i działał poprawnie. Ogólne zasady pisania programów Program ma być napisany przejrzyście i czytelnie. Program ma być wyraźnie podzielony na funkcje odpowiadające za poszczególne zadania. Unikaj długich funkcji. Staraj się pisać funkcje zawierające kilka, maksymalnie kilkanaście linii kodu. Unikaj duplikacji kodu. Nazwy funkcji mają być dobrane tak aby wyjaśniały co dana funkcja wykonuje. Nazwy zmiennych mają być dobrane tak aby wyjaśniały co dana zmienna reprezentuje. Nie ma nic złego w stosowaniu dłuższych nazw funkcji i zmiennych zbudowanych z kilku słów. Zastanów się jaką konwencję nazewnictwa chcesz stosować i stosuj ją konsekwentnie w swoich programach. Staraj się nie pisać komentarzy na rzecz lepszego nazewnictwa typów, funkcji i zmiennych. Nie używaj w programie "liczb magicznych". Poprawnie stosuj wcięcia w programie (aby uporządkować wcięcia: zaznacz blok kodu w edytorze tekstowym, wciśnij Tab lub Shift+Tab). Wskazówki do wybranych zadań Konkatenacja Wskazówka: implementując funkcję konkatenacji możesz skorzystać z funkcji dostępnych w bibliotece standardowej. Wymaganie: za pomocą programu valgrind sprawdź czy poprawnie zarządzasz pamięcią. Wyznacznik Wymaganie: za pomocą programu valgrind sprawdź czy poprawnie zarządzasz pamięcią.

Stos C Zaimplementuj w języku C stos liczb całkowitych. Zapewnij następującą funkcjonalność: void init(struct Stack* s) void destroy(struct Stack* s) void push(struct Stack* s, int element) int pop(struct Stack* s) void clear(struct Stack* s) bool isempty(struct Stack* s) - upewnij się ze załączasz plik nagłówkowy stdbool.h - konieczne aby używać typu bool w języku C Użyj dynamicznie alokowanej tablicy do przechowywania elementów na stosie. Gdy tablica się zapełni zwiększaj jej rozmiar dwukrotnie. W razie wystąpienia błędu (np. wywołanie funkcji pop gdy stos jest pusty) wywołuj funkcje assert lub abort aby zakończyć działanie programu. Wskazówka 1: w wykonaniu zadania pomogą ci przykładowe implementacje stosu prezentowane na wykładzie. Wskazówka 2: możesz zdefiniować strukturę z użyciem słowa kluczowego typedef aby nie trzeba było później w programie wszędzie stosować słowa kluczowego struct. Wymaganie 1: podziel program na następujące pliki: Stack.h, Stack.c, main.c. Nie jest wymagane przygotowanie pliku makefile. Wymaganie 2: za pomocą programu valgrind sprawdź czy poprawnie zarządzasz pamięcią. Stos C++ Napisz w jeżyku C++ klasę Stack o funkcjonalności analogicznej jak w poprzednim zadaniu. Wymaganie 1: podziel program na następujące pliki: Stack.h, Stack.cpp, main.cpp. Nie jest wymagane przygotowanie pliku makefile. Wymaganie 2: za pomocą programu valgrind sprawdź czy poprawnie zarządzasz pamięcią. Complex Zaimplementuj klasę Complex reprezentująca liczby zespolone. Zapewnij następująca funkcjonalność: podstawowe operatory arytmetyczne +, -, *, /, +=, -=, *=, /= operator porównujący == operator << funkcje zwracające cześć rzeczywista i urojona funkcje zwracające amplitudę i fazę Starannie przetestuj cala zaimplementowana funkcjonalność. Przetestuj przypadki szczególne jak: a += b += c a * 10 10 * a Wskazówka: implementuj większość funkcjonalności jako funkcje składowe klasy. Pisz funkcje nie składowe tylko gdy jest to uzasadnione. Wymaganie: podziel program na następujące pliki: Complex.h, Complex.cpp, main.cpp.

Matrix Zaimplementuj klasę Matrix reprezentująca macierz liczb rzeczywistych typu double. Zapewnij następująca funkcjonalność: podstawowe operacje arytmetyczne +, -, *, +=, -=, *= konstruktor kopiujący oraz operator przypisania = operator porównania == operator wyświetlania << możliwość wczytywania macierzy z plikowego strumienia wejściowego dostęp do pojedynczego elementu - możesz przeciążyć operator(), tak aby m(2, 3) oznaczało element umieszczony w rzędzie 2, kolumnie 3 obiektu macierzy m. Należy rozróżniać pomiędzy operacja zapisu a odczytu. Jeżeli zaprezentujesz program który traktuje każdy dostęp do elementu jako operacje zapisu możesz uzyskać maksymalnie 60%. Zastosuj w implementacji zliczanie odwołana (ang. reference counting). Obsługa błędów: W razie wystąpienia błędu wyrzucaj wyjątek Rozróżniaj różne rodzaje błędów poprzez wyrzucanie wyjątków różnego typu Zapewnij własne klasy do reprezentacji błędów (jedna klasa na każdy jeden typ błędu) Starannie przetestuj cala zaimplementowana funkcjonalność. Tablica asocjacyjna Zaimplementuj tablice asocjacyjna liczb całkowitych indeksowana łańcuchem tekstowym. Unikając duplikacji kodu zaimplementuj dwie wersje tej tablicy: z rozróżnianiem małych i wielkich liter bez rozróżniania małych i wielkich liter Wymaganie 1: nie wolno używać gotowych kontenerów z biblioteki standardowej. Wymaganie 2: nie wolno duplikować kodu. Rozwiązania z duplikacja kodu nie będą akceptowane. Wskazówka: zamiast duplikować kod należy zaproponować odpowiednia hierarchię klas z wykorzystaniem polimorfizmu. Wzorzec tablicy asocjacyjnej Zaimplementuj wzorzec tablicy asocjacyjnej "Map" oraz klasę "Employee" reprezentująca dane personalne pracownika. Przykładowe użycie wzorca "Map" i klasy "Employee" ilustruje kod: #include <iostream> #include "Employee.h" #include "Map.h" //Defines class Employee //Defines template Map<Key,Value> using namespace std; int main(void) { typedef unsigned int ID; Map<ID,Employee> database; //Identification number of Employee //Database of employees database.add(761028073,employee("jan Kowalski","salesman",28)); employee: name: Jan Kowalski, position: salseman, age: 28, //Add first

database.add(510212881,employee("adam Nowak","storekeeper",54)); //Add second employee: name: Adam Nowak, position: storekeeper, age: 54 database.add(730505129,employee("anna Zaradna","secretary",32)); //Add third employee: name: Anna Zaradna, position: secretary, age: 32 }; cout << database << endl; Map<ID,Employee> newdatabase = database; Employee* pe; pe = newdatabase.find(510212881); pe->position = "salesman"; pe = newdatabase.find(761028073); pe->age = 29; database = newdatabase; cout << database << endl; //Print database //Make a copy of database //Find employee using its ID //Modify the position of employee //Find employee using its ID //Modify the age of employee //Update original database //Print original database