Zadania z podstaw programowania obiektowego

Podobne dokumenty
Podstawy obiektowości

Dla każdej operacji łącznie tworzenia danych i zapisu ich do pliku przeprowadzić pomiar czasu wykonania polecenia. Wyniki przedstawić w tabelce.

DYNAMICZNE PRZYDZIELANIE PAMIECI

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

Mechanizm dziedziczenia

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

Mechanizm dziedziczenia

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

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

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

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

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

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

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

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Języki programowania imperatywnego

Lab 9 Podstawy Programowania

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

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

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

Projektowanie klas c.d. Projektowanie klas przykład

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

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU

Część 4 życie programu

KLASY cz4. Dorota Pylak. destruktory składowe statyczne przeciążanie operatorów. wskaźniki

Aplikacje w środowisku Java

Egzamin z Podstaw informatyki i programowania 2007/2008

TEMAT : KLASY DZIEDZICZENIE

Programowanie obiektowe. Dr hab. Inż. Marta Gładysiewicz-Kudrawiec Pokój 229 A1 Operatory new delete pliki-odczyt

Jak Windows zarządza pamięcią?

Wyliczanie wyrażenia obiekty tymczasowe

Programowanie 3 - Funkcje, pliki i klasy

Programowanie w języku Java

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

Programowanie obiektowe - zadania

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

Zajęcia 4 procedury i funkcje

Programowanie Obiektowew języku C++ Zadania L4

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

Programowanie w C++ Wykład 14. Katarzyna Grzelak. 3 czerwca K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

PARADYGMATY PROGRAMOWANIA Wykład 3

// Liczy srednie w wierszach i kolumnach tablicy "dwuwymiarowej" // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib.

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

Programowanie obiektowe. Materiały przygotował: mgr inż. Wojciech Frohmberg

Programowanie w języku Java

TEMAT : KLASY POLIMORFIZM

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Biuro Podróży 0. Stwórz projekt aplikacja konsolowa lub WPF (przemyśl wybór, bo zmiana może być czasochłonna). 1. Stwórz abstrakcyjną klasę

STL: Lekcja 1&2. Filozofia STL

Podstawy programowania w języku C++ Zadania

Programowanie komputerowe. Zajęcia 5

C++ wprowadzanie zmiennych

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

Programowanie w C++ Wykład 13. Katarzyna Grzelak. 4 czerwca K.Grzelak (Wykład 13) Programowanie w C++ 1 / 26

Biuro Podróży 0. Stwórz projekt aplikacja konsolowa lub WPF (przemyśl wybór, bo zmiana może być czasochłonna). 1. Stwórz abstrakcyjną klasę

Programowanie obiektowe Wykład 3. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21

Zajęcia 6 wskaźniki i tablice dynamiczne

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

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

Programowanie II. Lista 3. Modyfikatory dostępu plik TKLientBanku.h

Programowanie komputerowe. Zajęcia 7

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

Programowanie komputerowe. Zajęcia 4

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

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

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

Języki i techniki programowania Ćwiczenia 2

dr inż. Jarosław Forenc

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

Podstawy i języki programowania

typ y y p y z łoż o on o e n - tab a lice c e w iel e owym m ar a o r we, e stru r kt k ury

Pola i metody statyczne

Języki programowania obiektowego Nieobiektowe elementy języka C++

Zad.30. Czy można utworzyć klasę, która implementuje oba interfejsy?

Wykład 8: klasy cz. 4

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

Funkcje. Wprowadzenie. Mirosław Ochodek

Programowanie w języku C++

Przeciążanie funkcji. Przykład 1: #include <iostream> using namespace std; double srednia(double n1, double n2) { return ((n1 + n2)/2.

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

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

Programowanie obiektowe

Zaawansowane programowanie w języku C++ Programowanie obiektowe

Język ludzki kod maszynowy

Rozdział 4 KLASY, OBIEKTY, METODY

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

Podstawy programowania obiektowego

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU

Techniki Programowania wskaźniki 2

ZASADY PROGRAMOWANIA KOMPUTERÓW

I - Microsoft Visual Studio C++

Podstawy Programowania Obiektowego

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Programowanie, część I

Laboratorium 1 - Programowanie proceduralne i obiektowe

Dziedziczenie Dana jest klasa Punkt w pliku o nazwie Punkt.java:

Programowanie w języku C++

Wstęp do programowania. Dariusz Wardecki, wyk. X

Podstawy programowania w języku C++

Transkrypt:

Zadania z podstaw programowania obiektowego 1. Napisać klasę Lista, której zadaniem będzie przechowywanie listy liczb całkowitych. Klasa ta ma mieć następujące pola prywatne: int* liczby; tablica, w której przechowywane będą liczby, int pojemnosc; maksymalna liczba elementów, możliwych do przechowywania, int rozmiar; aktualna liczba przechowywanych elementów. Klasa Lista powinna mieć również następujące metody: konstruktor z parametrem określającym pojemność, który przydziela pamięć dla tablicy liczby oraz ustala wartości pozostałych pól klasy; destruktor zwalniający pamięć przydzieloną dla tablicy liczb; metodę dodajelement, która przyjmuje dokładnie jeden element liczbę całkowitą, która dodawana jest do listy; w przypadku, gdy lista jest pełna powinien zostać wyświetlony komunikat o błędzie; metodę znajdz, której jedynym parametrem powinna być szukana liczba, natomiast wynikiem pozycja podanej liczby w liście(licząc od 0) lub-1, gdy liczbyniemanaliście; bezparametrową metodę pisz, która wypisuje informacje o liście, w tym jej rozmiar, pojemność oraz listę przechowywanych elementów; metodę usunpierwszy, która usuwa pierwsze wystąpienie podanej jako parametr liczby, jeżeli znajduje się ona na liście, tzn. jeżeli podana liczba występuje więcej niż jeden raz, to usuwane jest jedynie pierwsze jej wystąpienie; metodę usunpowtorzenia, która usuwa wszystkie powtórzenia elementów na liście, tzn. po jej wykonaniu na liście nie powinno być żadnych powtórzonych liczb; metodę odwroc, która odwraca kolejność elementów przechowywanych na liście; metodę zapiszdopliku, która zapisuje zawartość listy do pliku tekstowego, którego nazwa podana powinna być jako pierwszy parametr; Przykładowo, po wykonaniu poniższego fragmentu: 22

intmain() constintn=10; Lista*l=newLista(N); for(inti=0;i<n/2;++i) l->dodajelement((1 << i)); l->dodajelement(2); l->dodajelement(8); l->usunpierwszy(2); for(inti=0;i<n/2;++i) l->dodajelement((1 << i)); cout <<"Po usunięciu powtórzeń:" << endl; l->usunpowtorzenia(); cin.get(); Na ekranie powinno zostać wyświetlone: Rozmiar: 7 Elementy:12481628 Rozmiar: 6 Elementy:1481628 Nie można dodać więcej elementów, lista pełna! Rozmiar: 10 Elementy:14816281248 Po usunięciu powtórzeń: Rozmiar: 5 Elementy:161248 23

2. Napisać klasę Wektor reprezentującą wektor na płaszczyźnie kartezjańskiej. Klasa ta powinna mieć dwie składowe prywatne wspołrzędne(x, y) oraz następujące metody publiczne: konstruktor bezparametrowy tworzący wektor zerowy, konstruktor z parametrami umożliwiającymi ustalenie wartości współrzędnych wektora, metodę dlugosc, której wynikiem ma być długość wektora, metodę Wektor pomnoz(double a), której wynikiem ma być nowy wektor będący wynikiem przemnożenia bieżącego wektora przez podany skalar, metodę Wektor dodaj(const Wektor&w), której wynikiem ma być nowy wektor będący sumą bieżącego i podanego wektora, metodę Wektor odejmij(const Wektor&w), której wynikiem ma być nowy wektor będący różnicą bieżącego i podanego wektora, metodę Wektor normalizuj(), której wynikiem powinien być nowy wektor równy znormalizowanemu bieżącemu wektorowi, metodę string tostring(), której wynikiem powinien być łańcuch opisującywektor,np. [1.2,-3] Przykład zastosowania klasy Wektor: int main(int argc, const char*argv[]) Wektor w1(2, 4), w2(1,0); cout<<"w1="<<w1.tostring()<<"w2="<<w2.tostring()<<endl; cout<<"dł.w1="<<w1.dlugosc()<<"dł.w2="<<w2.dlugosc()<<endl; cout<<"w1+w2="<<w1.dodaj(w2).tostring()<<endl; cout<<"w1-w2="<<w1.odejmij(w2).tostring()<<endl; cout<<"w1*-2="<<w1.pomnoz(-2).tostring()<<endl; cout <<"w1 po normalizacji =" << w1.normalizuj().tostring() << endl; cout <<"w2 po normalizacji =" << w2.normalizuj().tostring() << endl; cout<<"w1*2-w2="<<w1.pomnoz(2).odejmij(w2).tostring()<<endl; Wynik działania przykładowego programu: w1=[2.00,4.00]w2=[1.00,0.00] dł.w1=4.47214dł.w2=1 w1+w2=[3.00,4.00] w1-w2=[1.00,4.00] w1*-2=[-4.00,-8.00] w1 po normalizacji =[0.45, 0.89] w2 po normalizacji =[1.00, 0.00] w1*2-w2=[3.00,8.00] 24

3. Napisać program do obsługi zamówień. W tym celu należy zaimplementować klasy ElementZamowienia oraz Zamowienie. Klasa ElementZamowienia reprezentuje pojedynczą pozycję zamówienia i zawiera prywatne pola: string nazwa double cena int liczbasztuk Dodatkowo klasa ta powinna mieć następujące metody publiczne: konstruktorbezparametrowy, konstruktor z parametrami umożliwiającymi przypisanie wartości początkowych polom klasy, string tostring() zwracającą łańcuch znaków opisujący element zamówienia,np. Chleb4.00zł,2szt.,łącznie8.00zł double obliczkoszt() zwracającą łączny koszt danej pozycji zamówienia z uwzględnieniem rabatu, double obliczrabat() wyznaczającą rabat dla klienta, jeżeli klient zamówiłconajmniej5sztuktegotowarutorabatwynosi10%,wprzeciwnym razie 0% Klasa Zamowienie zawiera listę zamówień i zawiera następujące pola prywatne: ElementZamowienia*elementy dynamiczna tablica z elementami zamówienia int rozmiar aktualna liczba elementów w zamówieniu int maksrozmiar maks. liczba elementów w zamówieniu Dodatkowo klasa ta powinna mieć następujące metody publiczne: konstruktor z jednym parametrem określającym maks. liczbę elementów zamówienia; w konstruktorze powinna zostać przydzielona pamięć dla tablicy elementy destruktor zwalniający pamięć przydzieloną w konstruktorze bool dodaj(const ElementZamowienia&p) dodaje podany element do zamówienia(dopisuje do tab. elementy) double obliczkoszt() oblicza całkowity koszt zamówienia void pisz() wypisuje na ekranie informacje o zamówieniu tj. listę pozycji, łączny koszt oraz naliczony rabat Przykład zastosowania klas: 25

int main(int argc, const char*argv[]) Zamowienie z; z.dodaj(elementzamowienia("chleb", 4.0, 2)); z.dodaj(elementzamowienia("mleko", 2.5, 1)); z.dodaj(elementzamowienia("cukier", 4.0, 5)); z.dodaj(elementzamowienia("papierosy", 9.0, 1)); z.pisz(); Przykładowy wydruk: Zamowienie: 1.Chleb4.00zł,2szt.,łącznie8.00zł 2.Mleko2.50zł,1szt.,łącznie2.50zł 3.Cukier4.00zł,5szt.,łącznie18.00zł 4.Papierosy9.00zł,1szt.,łącznie9.00zł Koszt całkowity: 37.5 zł Naliczony rabat: 2 zł 4. Napisać klasę Czas służącą do zapamiętania okresu czasu tj. liczby godzin i minut. Klasa ta powinna mieć dwa pola prywatne: intgodz intminuty oraz metody publiczne: konstruktor z parametrami będącymi liczbą godzin i minut, konstruktor przyjmujący jako parametr łańcuch znaków na podstawie któregomożnaustalićwartośćgodziniminutnp. 12h58min string tostring() const której wynikiem jest łańcuch znaków opisujący danyokresczasu,np. 29h19min Czas dodaj(const Czas&t) const której wynikiem jest nowy obiekt klasy Czas będący sumą bieżącego i podanego jako parametr obiektu Czas odejmij(const Czas&t) const analogicznie jak dodaj, tyle że odejmowanie, Czas pomnoz(int ile) const wynikiem ma być okres czasu pomnożony podaną liczbę razy, static Czas sumuj(czas*tab[], int n) statyczna metoda klasy służąca do sumowania wszystkich okresów czasu podanych w tablicy będącej pierwszym parametrem 26

Przykładowy program: int main(int argc, const char*argv[]) Czas t1(10, 56); Czas t2(0, 123); cout<<"t1="<<t1.tostring()<<endl; cout<<"t2="<<t2.tostring()<<endl; cout<<"t1+t2="<<t1.dodaj(t2).tostring()<<endl; cout<<"t1-t2="<<t1.odejmij(t2).tostring()<<endl; Czas*tab[]=&t1,&t2,&t2; cout<<"czas::sumujdlat1+t2+t2=" << Czas::sumuj(tab, 3).toString() << endl; cout<<"t1*2="<<t1.pomnoz(2).tostring()<<endl; Czast3("3h17min"); cout <<"Konstruktor z łańcuchem:" << t3.tostring() << endl; Wydruk dla przykładowego programu: t1=10h56min t2=2h3min t1+t2=12h59min t1-t2=8h53min Czas::sumujdlat1+t2+t2=15h2min t1*2=21h52min Konstruktorzłańcuchem:3h17min 27