Algorytmy i Struktury Danych. Laboratorium 3. Drzewa, kopce, wyszukiwanie wzorca informacji, kodowanie

Wielkość: px
Rozpocząć pokaz od strony:

Download "Algorytmy i Struktury Danych. Laboratorium 3. Drzewa, kopce, wyszukiwanie wzorca informacji, kodowanie"

Transkrypt

1 Laboratorium 3 Drzewa, kopce, wyszukiwanie wzorca informacji, kodowanie 1. Cel ćwiczenia Celem ćwiczenia jest praktyczne zapoznanie się z wybranymi algorytmami operującymi na strukturach drzewiastych dla różnych typów danych, złożonością obliczeniową, wydajnością i możliwością jej poprawy w wybranych przypadkach. 2. Wstęp W trakcie ćwiczenia badane są właściwości drzewiastych struktur danych i operujących na nich algorytmów. Pod pojęciem drzewiastej struktury danych jest tu rozumiany sposób organizacji danych pod względem sposobu ich przechowywania, organizacji i dostępu. Program analizowany i modyfikowany w trakcie laboratorium składa się z następujących plików składowych: plik aisd.h zawiera: deklarację i definicję typu wyliczeniowego Except wykorzystywanego do obsługi wyjątków rzucanych w programie, zawiera deklarację i definicję typu strukturalnego Parametry wykorzystywanego do analiz zaimplementowanych algorytmów zawiera deklarację i definicję szablonu głównej klasy AISD. plik dane.h zawiera: deklarację i definicje klasy nodet implementującej węzły drzewa deklarację i definicje klasy STOS implementującej podstawową funkcjonalność stosu deklarację i definicje klasy KOLEJKA implementującej podstawową funkcjonalność kolejki plik data_bi.h zawiera: deklarację i definicje klasy BiData implementującej przykładowy dwuskładnikowy typ danych przeciążenia wybranych operatorów współpracujących z obiektami klasy BiData plik data_huf.h zawiera: deklarację i definicje klasy HufData implementującej przykładowy typ danych dla analizy algorytmów wykorzystujących drzewo Huffmana przeciążenia wybranych operatorów współpracujących z obiektami klasy HufData plik drzewa.h zawiera: zawiera deklarację i definicję szablonu klasy Drzewa i metod operujących na przykładowych strukturach danych plik drzewa_bi.h zawiera: zawiera deklarację i definicję szkieletu (nie szablonu!) klasy DrzewaBi utworzonej na bazie klasy szablonowej Drzewa wraz z metodami operującymi na przykładowych strukturach danych typu BiData. Klasa DrzewaBi przeznaczona jest do w pełni samodzielnej implementacji wybranych funkcjonalności dla algorytmów operujących na drzewach. plik drzewa_huffman.h zawiera: zawiera deklarację i definicję klasy DrzewaHuf utworzonej na bazie klasy szablonowej Drzewa wraz z metodami operującymi na przykładowych strukturach danych typu HufData plik drzewa_int.h zawiera: zawiera deklarację i definicję klasy DrzewaInt utworzonej na bazie klasy szablonowej Drzewa wraz z metodami operującymi na przykładowych strukturach danych typu int plik drzewa_fix.h zawiera: zawiera deklarację i definicję klasy Fix utworzonej bezpośrednio na bazie klasy szablonowej AISDE wraz z metodami operującymi na przykładowych strukturach danych typu char. plik aisd.cpp zawiera: procedurę obsługi wyjątków plik main.cpp zawiera: główną pętlę programu. 1/7

2 Wszystkie algorytmy zostały zaimplementowane w postaci metod klasy Drzewa (plik drzewa.h, wydruk R.1), która podobnie jak wykorzystywana w poprzednim ćwiczeniu klasa AlgorytmySortowania, jest szablonem klasy pochodnej szablonu klasy wirtualnej AISD. Zdefiniowanie klas AISD i Drzewa w postaci szablonów daje możliwość ich zastosowania dla wielu różnych typów danych określonych parametrem (tu OBJ). Mogą to być podstawowe typy i struktury danych lecz również dowolne typy użytkownika. W każdym przypadku niezbędne odpowiednie dla konkretnego typu danych przeciążenie wykorzystywanych operatorów jak np. >, >=, <, <=, =, ==, ++, --, +=, -= itd. R.1. template <class OBJ> class Drzewa:public AISD<OBJ>{ inline int NodeL(int i){return 2*i; inline int NodeR(int i){return 2*i+1; inline int Parent(int i){return i/2; void FixUp(int); void FixDown(int,int); void InOrderRekur(int Node); //zwiedzanie rekurencyjne "in-order" void PreOrderRekur(int Node); //zwiedzanie rekurencyjne "pre-order" void PostOrderRekur(int Node); //zwiedzanie rekurencyjne "post-order" void PreOrderNRekurSTOS(int Node); //zwiedzanie nierekurencyjne ze stosem void HorizontNRekurKOLEJKA(int Node); //zwiedzanie nierekurencyjne z kolejka Parametry* SortKopcowanie (int L=1,int R=1); //sortowanie przez kopcowanie nodet<obj>* TurniejMax(int,int); //turniejowe poszukiwanie najwiekszego elementu w tablicy void TurniejSort(int,int); //turniejowe sortowanie w tablicy void Turniej(int,int); //rekurencyjny turniej w tablicy OBJ virtual *Visit(int){return 0; Drzewa(int LiczZbior):AISD<OBJ>(LiczZbior){ ~Drzewa(){ void VisitInOrder(int Node); void VisitPreOrder(int Node); void VisitPostOrder(int Node); void VisitPreOrderSTOS(int Node); void VisitHorizontKOLEJKA(int Node); void TurniejMax(); void TurniejSort(); void Kopcowanie(); void virtual WypiszDrzewoNaEkran(bool) {printf("niezdefiniowana funkcja wirtualna\n ); void virtual ZapiszDrzewoDoPliku(char*) {printf("niezdefiniowana funkcja wirtualna\n ); drzewa.h Przedstawiona na wydruku R.2 klasa AISD implementuje niezbędne metody operujące na strukturze danych, służące do uruchamiania testowanych algorytmów, wydruku raportów, zapisu danych na dysk, komunikacji z użytkownikiem itd. template <class OBJ> class AISD{ OBJ *Dane; OBJ *DaneKopia; int LicznoscZbioru; Parametry ZA; //ZlozonoscAlgorytmu - Parametry void OdswiezDane(); // przepisuje Dane_kopia do Dane void ZA_Init(); // Inicjalizacja struktury danych ZA long PobierzCzas(); inline void Zamien(OBJ &A,OBJ &B); // zamienia wartosci argumentow A i B inline void ZamienWarunkowo(OBJ &A,OBJ &B); // zamienia wartosci argumentow gdy B<A AISD(int); ~AISD(); OBJ *GetDane(); OBJ *GetDaneKopia(); int GetLicznosc(); void Raport(char*); void virtual ZapiszStanDoPliku(char*) void virtual WczytajDaneZPliku(char*) void virtual WypiszStanNaEkran(bool) void virtual BadanieAlgorytmow() {printf("niezdefiniowana funkcja wirtualna\n ); {printf("niezdefiniowana funkcja wirtualna\n ); {printf("niezdefiniowana funkcja wirtualna\n ); {printf("niezdefiniowana funkcja wirtualna\n ); R.2. aisd.h Klasa szablonowa Drzewa składa się z części publicznej (public) i chronionej (protected). Składniki i metody umieszczone w publicznej części są bezpośrednio dostępne dla użytkownika. W ten sposób zaimplementowane zostały: trzy algorytmy rekurencyjnego przechodzenia przez drzewo w porządkach: in-order, pre-order i postorder, dwie nierekurencyjne wersje algorytmu przechodzenia przez drzewo w porządku pre-order wykorzystujące stos i kolejkę, algorytm poszukiwania największego elementu tablicy metodą turnieju, algorytm sortowania przechowujący dane w strukturze kopca algorytm tworzenia drzewa Huffmana wraz z metodami niezbędnymi do analizy przykładowych danych W chronionej części klasy szablonowej Drzewa zadeklarowano metody NodeL, NodeR, Parent, FixUp, FixDown, Visit. Są to metody pomocnicze dla algorytmów sortujących. W celu zapewnienia integralności, wywołanie powyższych metod jest możliwe wyłącznie z wnętrza obiektów tej samej klasy lub klas od niej pochodnych (klauzula protected). Dla ułatwienia analizy złożoności zaimplementowanych algorytmów 2/7

3 wszystkie metody operujące na drzewach na bieżąco aktualizują zawartość struktury ZlozAlg o postaci przedstawionej na listingu R.3. R.3. typedef struct{ unsigned long CzWyk; // czas wykonania algorytmu unsigned long GlStoPr; // biezaca glebokosc stosu aplikacji unsigned long GlStoPrMax; // maksymalna glebokosc stosu aplikacji unsigned long GlStoDa; // biezaca glebokosc stosu danych unsigned long GlStoDaMax; // maksymalna glebokosc stosu danych unsigned long LiKop; // liczba kopiowan danych (3 kopiowania na 1 zamiane) unsigned long LiPor; // liczba porownan danych unsigned long LiWej; // liczba wejsc do komorki unsigned long LiPut; // liczba wstawien do kolejki unsigned long LiPush; // liczba odlozen na stos } Parametry; aisd.h Każda z zaimplementowanych metod operuje na danych umieszczonych w tablicy wskazywanej przez Dane prywatny składnik szablonu klasy inicjalizowany w czasie pracy konstruktora szablonu klasy macierzystej AISDE. Liczność zbioru jest w określona wartością zmiennej chronionej LicznośćZbioru inicjalizowanej przy tworzeniu obiektu (w przykładowej implementacji jest wykorzystywana globalna zmienna o tej samej nazwie LicznośćZbioru). W części publicznej klasy Drzewa zadeklarowano konstruktor, destruktor oraz wirtualne metody umożliwiające wypisanie danych na ekran i operacje na plikach (WypiszStanNaEkran, WypiszDrzewoNaEkran, ZapiszStanDoPliku, ZapiszDrzewoDoPliku i WczytajDaneZPliku). Wywołanie metod wirtualnych WypiszDrzewoNaEkran i WypiszStanNaEkran wymaga podania parametru logicznego Ekran. Steruje on wypisywaniem zbioru danych na ekran. Wywołanie metod ZapiszStanDoPliku, ZapiszDrzewoDoPliku i WczytajDaneZPlikuwymaga podania nazwy pliku na którym metody te mają pracować. Klasy AISD i Drzewa to szablony klas wirtualnych. Aby można było utworzyć obiekty tego typu niezbędne jest zdefiniowanie stosowych klas pochodnych jak również zdefiniowanie metod wirtualnych WypiszStanNaEkran, ZapiszStanDoPliku, WczytajDaneZPliku i BadanieAlgorytmów. W analizowanym w trakcie ćwiczenia programie dla przykładu zdefiniowano złożone typy BiData i HufData. Są to klasy dla których odpowiednio przeciążone zostały wybrane operatory (pliki data_bi.h i data_huf.h wydruki R.4 i R.5). R.4. class BiData{ int i; // pole danych: klucz 1 char str[16]; // pole danych: klucz 2 BiData(); // konstruktor BiData(int i,char *str); // konstruktor void Set(int i,char *str); int GetI(); char *GetStr(); bool operator< (BiData Dane); // przeciazony operator porownania bool operator> (BiData Dane); // przeciazony operator porownania bool operator<=(bidata Dane); // przeciazony operator porownania bool operator>=(bidata Dane); // przeciazony operator porownania BiData operator =(BiData Dane); // przeciazony operator przypisania int operator =(int Dane); // przeciazony operator przypisania char* operator =(char *Dane); // przeciazony operator przypisania data_bi.h W ćwiczeniu dotyczącym badania algorytmów sortowania złożony typ danych BiData wykorzystywany był do analizy stabilności algorytmów. Obecnie jego implementacja jest pozostawiona inwencji Studentów. Typ HufData jest przeznaczony do pracy z drzewami Huffmana. R.5. class HufData{ friend class KlasaDrzewaHUF; unsigned long Count; // liczba wystapien znaku o danym kodzie unsigned char Byte; // kod znaku HufData(); HufData(unsigned char i); void Set(unsigned long Count); void Set(unsigned char Byte); void Set(unsigned long Count, unsigned char Byte); unsigned long GetCount(); unsigned char GetByte(); bool operator< (HufData Dane); // przeciazony operator porownania < bool operator> (HufData Dane); // przeciazony operator porownania > bool operator<=(hufdata Dane); // przeciazony operator porownania <= bool operator>=(hufdata Dane); // przeciazony operator porownania >= bool operator!=(hufdata Dane); // przeciazony operator porownania!= bool operator==(hufdata Dane); // przeciazony operator porownania == HufData operator =(HufData Dane); // przeciazony operator przypisania = HufData operator++(); // przeciazony operator postinkrementacji ++ HufData operator++(int); // przeciazony operator preinkrementacji ++ HufData operator--(); // przeciazony operator postinkrementacji ++ HufData operator--(int); // przeciazony operator preinkrementacji ++ int operator =(int Dane); // przeciazony operator przypisania char* operator =(char *Dane); // przeciazony operator przypisania = data_huf.h Dla wybranego typu danych do analizy określonego parametrem OBJ szablonu klas AISD lub Drzewa niezbędne jest zdefiniowanie klasy pochodnej, z własnymi wersjami metod wirtualnych WypiszStanNaEkran, ZapiszStanDoPliku, WczytajDaneZPliku i BadanieAlgorytmów. W programie wykorzystywanym w czasie laboratorium do stworzenia klasy KlasaDrzewaINT wykorzystano podstawowy typ danych int (plik drzewa_int.h wydruk R.6). Klasa ta organizuje dane w strukturę drzewa. Same dane do sortowania mają postać tablicy 3/7

4 rekordów typu int, wskazywanej przez Dane (prywatny element klasy szablonowej Drzewa dziedziczony z klasy AISD). R.6. class KlasaDrzewaINT:public Drzewa<int>{ int *Visit(int); KlasaDrzewaINT(int LiczZbior):Drzewa<int>(LiczZbior){ ~KlasaDrzewaINT(){ void ZapiszStanDoPliku(char*); void WczytajDaneZPliku(char*); void WypiszStanNaEkran(bool); void WypiszDrzewoNaEkran(bool); void ZapiszDrzewoDoPliku(char*); void BadanieAlgorytmow(); //f. wirtualna - konieczna definicja drzewa_int.h W trakcie ćwiczenia badane będą również algorytmy analizy składniowej wyrażeń. Algorytmy tego typu są stosowane m.in. w kompilatorach programów, w których wykorzystywane są do konwersji zapisu kodu programu z poziomu kodu języka wysokiego poziomu na kod maszynowy. Z procesem tym bezpośrednio związane jest pojęcie notacji wyrażeń. Wyrażenia te rozumiane jako część kodu zapisanego w języku wysokiego poziomu mogą być zapisane w postaci infiksowej, postfixowej i prefiksowej. Dla zilustrowania zasady analizy zapisów notacji w ramach ćwiczenia analizowane będą wyrażenia algebraiczne. Zapis tego samego wyrażenia w różnych notacjach przestawia poniższa tabela. infix (5*(((9+8)*(4*6))+7)) postfix **7+* prefix *+7** Postać infiksowa jest zdecydowanie najbardziej rozpowszechniona. W notacji postfixowej operator znajduje się zawsze bezpośrednio po argumentach których dotyczy. Notacja ta nie wykorzystuje nawiasów. Przykładowe wyrażenie przedstawione w powyższej tabeli można uzyskać z postaci infiksowej na drodze następujących przekształceń: (5*(((9+8)*(4*6))+7)) 5(((9+8)*(4*6))+7)* 5((9+8)*(4*6))7+* 5(9+8)(4*6)*7+* **7+* Postać prefixowa to notacja odwrotna do postfixowej. Jest tworzona w sposób analogiczny do przekształcenia infix postfix. W celach treningowych w ramach przygotowania do ćwiczenia zalecane jest samodzielne wykonanie przekształceń infix postfix, infix prefix. Przykładowy analizator składniowy zaimplementowany w ćwiczeniu działa sekwencyjnie. Najpierw jest przeprowadzana zamiana postaci wyrażenia infixowej na postać postfixową. Następnie dane zostają zapisane w drzewiastej strukturze danych, po czym obliczana jest poszukiwana wartość analizowanego wyrażenia. Przykładową implementację algorytmu analizy składniowej opisuje metoda LiczPreFix klasy Fix pochodnej klasy szablonowej AISD (plik drzewa_fix.h wydruk R.7). Metoda LiczPreFix oblicza wartość wyrażenia podanego jako łańcuch znaków wskazywany przez Dane. Jest to metoda rekurencyjna, która wartość liczbową wyrażenia oblicza do momentu osiągnięcia końca tego wyrażenia. Dla zapewnienia składniowej poprawności opisu klasy Fix, zdefiniowano niezbędne ciała metod wirtualnych klasy bazowej AISD. class Fix:public AISD<char>{ Fix(int LiczZbior):AISD<char>(LiczZbior){ ~Fix(){ void ZapiszStanDoPliku(char*); void WczytajDaneZPliku(char*); void WypiszStanNaEkran(bool); void InFix2PostFix(); double LiczPreFix(); void BadanieAlgorytmow(); R.7. drzewa_fix.h 3. Przebieg ćwiczenia Funkcja main (plik main.cpp,r.8) zawiera następujące parametry zadeklarowane w programie jako zmienne globalne: Ekran zarządza wypisywaniem danych na ekran), Srand ustawia warunki początkowe dla generatora liczb pseudolosowych (w trakcie ćwiczenia każdy student przypisuje tej zmiennej swój numer albumu), Licznosc ustawia liczność zbioru do sortowania. int main(){ Ekran=true; Srand=10; Licznosc=25; try{ //tu wpisac numer indeksu 4/7

5 InitINT(); DrzewaINT->BadanieAlgorytmow(); InitHUF(); DrzewaHUF->BadanieAlgorytmow(); InitFIX(); DrzewaFIX->BadanieAlgorytmow(); // InitBI(); DrzewaBI->BadanieAlgorytmow(); } catch (Except e){ Error(e); } getchar(); CleanUp(); return 1; R.8. main.h W takcie ćwiczenia dla wskazanych przez prowadzącego algorytmów w miarę potrzeby należy przystosować kod programu do zaplanowanych pomiarów i symulacji. Przykładowe wywołania poszczególnych, metod badanych w trakcie ćwiczenia, zostały umieszczone wewnątrz metod wirtualnych BadanieAlgorytmów definiowanych dla każdego typu danych (OBJ) z osobna. Zależnie od wskazań prowadzącego należy: 1. przeanalizować sposób implementacji nierekurencyjnych metod przechodzenia przez drzewo w porządku pre-order. 2. zaproponować, zaimplementować i przetestować własne wersje nierekurencyjnych metod przechodzenia przez drzewo w porządku in-order. 3. zaproponować, zaimplementować i przetestować własne wersje nierekurencyjnych metod przechodzenia przez drzewo w porządku post-order. 4. przeprowadzić analizę zapotrzebowania na zasoby dla poszczególnych metod przechodzenia przez drzewo. (przykładowych i samodzielnie zaimplementowanych). 5. przeprowadzić analizę parametrów metody turniejowego poszukiwania największego elementu (algorytm, zajętość zasobów, złożoność czasowa). 6. przeprowadzić analizę wydajności działania metod sortowania przez kopcowanie. Wskazać ograniczenia i potencjalne możliwości doskonalenia przykładowych implementacji, 7. rozszerzyć funkcjonalność kodu o możliwość pracy algorytmów analizowanych podczas ćwiczeń na złożonych typach danych. Wykorzystać zaproponowany szkielet klasy BiData. Przetestować zaproponowane implementacje. 8. przeprowadzić analizę algorytmu sortowania wykorzystującego kopiec. Przetestować dla danych złożonych typu BiData. 9. przeprowadzić analizę działania metod służących budowie drzewa Huffmana. Wskazać ograniczenia przykładowej implementacji i potencjalne metody ulepszenia kodu. Na podstawie wpisów w strukturze ZA (klasa Parametry) określić aktualną złożoność poszczególnych algorytmów. Zweryfikować poprawność wpisów w strukturze ZA. 10. Określić przewidywany stopień kompresji możliwy do uzyskania przy wykorzystaniu drzewa Huffmana tworzonego w klasie DrzewaHuff dla podanego fragmentu tekstu Shakesperare a 11. przeprowadzić analizę działania i wydajności działania algorytmów analizy składniowej (klasa Fix) i dopisać opcję konwersji postaci infixowej na postfixową (implementacja metody InFix2PostFix klasy Fix) 12. rozszerzyć funkcjonalność metody LiczPreFix o działania - i /. 13. zaimplementować metody HuffmanPack i HuffmanUnpack i przetestować ich działania na podanym fragmencie tekstu Shakespeare a. 4. Analiza wyników, wnioski, sprawozdanie Na ocenę z ćwiczenia bezpośrednio wpływają: zawartość notatnika z ćwiczenia (w wersji papierowej) Na początku ćwiczenia należy wydrukować umieszczony na końcu niniejszej instrukcji Notatnik. Będzie on stanowił bieżący zapis przebiegu ćwiczenia i wyników pracy. zawartość oddanego w terminie sprawozdania (wyłącznie w postaci elektronicznej w formacie pdf). Sprawozdanie powinno zawierać następujące elementy: cel ćwiczenia (własnymi słowami), opis modyfikacji wprowadzonych do programu przykładowego wraz z analizą celowości tych zmian, stosowne wykresy (np. wykresy czasów wykonania programu w zależności od wersji badanego algorytmu w funkcji długości sortowanych danych, wykresy dynamiczne sortowania, czyli postęp posortowania danych w zależności od liczby wykonanych kroków algorytmu sortującego ) podsumowanie ćwiczenia czyli wnioski: konkretne, na temat, samodzielne, twórcze. Na końcową ocenę za ćwiczenie składają się sposób wykonania ćwiczenia, samodzielność i pomysłowość w jego wykonaniu, merytoryczna zawartość i forma i terminowość nadesłania sprawozdania. 5/7

6 Sprawozdanie powinno zostać nadesłane pocztą elektroniczną, w terminie podanym przez prowadzącego zajęcia (zazwyczaj 7 dni). Pod rygorem nie sprawdzania sprawozdania dodatkowo niezbędne jest wypełnienie przez studentów następujących wymogów formalnych: jedyny przyjmowany format sprawozdania to PDF, nazwa pliku zawierającego sprawozdanie musi spełniać wymogi wzorca AISDE_3_Nazwisko_Imie.pdf. temat maila ze sprawozdaniem musi pasować do wzorca: AISDE Nazwisko_Imie, sprawozdania oddawane przez studentów muszą spełniać wymogi określone przez wykładowcę na początku semestru. Uwagi W przypadku wykrycia nieprawidłowości w działaniu któregoś z algorytmów szczególnie premiowane będzie samodzielne rozwiązanie zauważonego problemu. Jednocześnie brak reakcji na niepoprawne wyniki w protokole będzie punktowany ujemnie 5. Literatura 1. R. Sedgevick Algorytmy w C++, Wydawnictwo RM, 1999, 2. J. Grębosz Symfonia C++ Wydawnictwo Oficyna Kallimach J. Grębosz Pasja C++ Wydawnictwo Oficyna Kallimach 1997 Opracowanie dr inż. Grzegorz Janczyk janczyk@imio.pw.edu.pl Weryfikacja dr inż. Adam Wojtasik aw@imio.pw.edu.pl 6/7

7 AISDE LAB 3 Imię i nazwisko, Grupa dziekaoska NOTATNIK Nr Indeksu Data wykonania ćwiczenia Data oddania protokołu Punkty do wykonania Analizowany algorytm Parametry Uwagi / Zauważone błędy NOTATNIK NALEŻY ODDAĆ PROWADZĄCEMU ZAJĘCIA W CHWILI ZAKOŃCZENIA ĆWICZENIA

Badanie złożoności obliczeniowej algorytmów na przykładzie sortowania

Badanie złożoności obliczeniowej algorytmów na przykładzie sortowania Laboratorium 2 Badanie złożoności obliczeniowej algorytmów na przykładzie sortowania Cel ćwiczenia Celem ćwiczenia jest praktyczne zapoznanie się z pojęciem złożoności obliczeniowej na przy kładzie wybranych

Bardziej szczegółowo

Zastosowania drzew binarnych

Zastosowania drzew binarnych Laboratorium 3 Zastosowania drzew binarnych Cel ćwiczenia Celem ćwiczenia jest praktyczne zapoznanie się z wybranymi algorytmami operującymi na strukturach drzewiastych dla różnych typów danych, złożonością

Bardziej szczegółowo

Algorytmy i Struktury Danych. Anna Paszyńska

Algorytmy i Struktury Danych. Anna Paszyńska Algorytmy i Struktury Danych Anna Paszyńska Tablica dynamiczna szablon Array Zbiory Zbiory template class Container {public: virtual ~Container() { }; virtual int Count() const = 0;

Bardziej szczegółowo

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

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów Operatory są elementami języka C++. Istnieje zasada, że z elementami języka, takimi jak np. słowa kluczowe, nie można dokonywać żadnych zmian, przeciążeń, itp. PRZECIĄŻANIE OPERATORÓW Ale dla operatorów

Bardziej szczegółowo

Szablony klas, zastosowanie szablonów w programach

Szablony klas, zastosowanie szablonów w programach Szablony klas, zastosowanie szablonów w programach 1. Szablony klas i funkcji 2. Szablon klasy obsługującej uniwersalną tablicę wskaźników 3. Zastosowanie metody zwracającej przez return referencję do

Bardziej szczegółowo

Badanie złożoności obliczeniowej algorytmów na przykładzie sortowania

Badanie złożoności obliczeniowej algorytmów na przykładzie sortowania Laboratorium 2 Badanie złożoności obliczeniowej algorytmów na przykładzie sortowania Cel ćwiczenia Celem ćwiczenia jest praktyczne zapoznanie się z pojęciem złożoności obliczeniowej na przykładzie wybranych

Bardziej szczegółowo

Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04

Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04 Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04 Cel zajęć. Celem zajęć jest zapoznanie się ze sposobem działania popularnych kolekcji. Wprowadzenie teoretyczne. Rozważana w ramach niniejszych

Bardziej szczegółowo

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

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij. Programowanie Sobera Jolanta 16.09.2006 Strona 1 z 26 1 Wprowadzenie do programowania 4 2 Pierwsza aplikacja 5 3 Typy danych 6 4 Operatory 9 Strona 2 z 26 5 Instrukcje sterujące 12 6 Podprogramy 15 7 Tablice

Bardziej szczegółowo

Lab 9 Podstawy Programowania

Lab 9 Podstawy Programowania Lab 9 Podstawy Programowania (Kaja.Gutowska@cs.put.poznan.pl) Wszystkie kody/fragmenty kodów dostępne w osobnym pliku.txt. Materiały pomocnicze: Wskaźnik to specjalny rodzaj zmiennej, w której zapisany

Bardziej szczegółowo

Szablony funkcji i klas (templates)

Szablony funkcji i klas (templates) Instrukcja laboratoryjna nr 3 Programowanie w języku C 2 (C++ poziom zaawansowany) Szablony funkcji i klas (templates) dr inż. Jacek Wilk-Jakubowski mgr inż. Maciej Lasota dr inż. Tomasz Kaczmarek Wstęp

Bardziej szczegółowo

Język C++ Programowanie obiektowe

Język C++ Programowanie obiektowe Język C++ Programowanie obiektowe Cechy programowania obiektowego abstrakcyjne typy danych hermetyczność obiektów (kapsułkowanie) dziedziczenie polimorfizm Programowanie proceduralne vs. programowanie

Bardziej szczegółowo

Instrukcja do pracowni specjalistycznej z przedmiotu. Obiektowe programowanie aplikacji

Instrukcja do pracowni specjalistycznej z przedmiotu. Obiektowe programowanie aplikacji Politechnika Białostocka Wydział Elektryczny Katedra Telekomunikacji i Aparatury Elektronicznej Instrukcja do pracowni specjalistycznej z przedmiotu Obiektowe programowanie aplikacji Kod przedmiotu: TS1C410201

Bardziej szczegółowo

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

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { Przeciążanie a dziedziczenie class Integer2: public Integer Operatory, z wyjątkiem operatora przypisania są automatycznie dziedziczone w klasach pochodnych. Integer2(int i): Integer(i) Automatyczne tworzenie

Bardziej szczegółowo

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

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1 Podstawy programowania. Wykład Funkcje Krzysztof Banaś Podstawy programowania 1 Programowanie proceduralne Pojęcie procedury (funkcji) programowanie proceduralne realizacja określonego zadania specyfikacja

Bardziej szczegółowo

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

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi EGZAMIN PIERWSZY (25 CZERWCA 2013) JĘZYK C++ poprawiam ocenę pozytywną z egzaminu 0 (zakreśl poniżej x) 1. Wśród poniższych wskaż poprawną formę definicji

Bardziej szczegółowo

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

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { zdefiniuje. Integer::operator=(ri); Przeciążanie operatorów [] Przykład: klasa reprezentująca typ tablicowy. Obiekt ma reprezentować tablicę, do której można się odwoływać intuicyjnie, np. Tab[i] Ma być też dostępnych kilka innych metod

Bardziej szczegółowo

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce. 1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,

Bardziej szczegółowo

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

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie? 1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie? a) konstruktor b) referencje c) destruktor d) typy 2. Które z poniższych wyrażeń są poprawne dla klasy o nazwie

Bardziej szczegółowo

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

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { Przeciążanie operatorów [] Przykład: klasa reprezentująca typ tablicowy. Obiekt ma reprezentować tablicę, do której można się odwoływać intuicyjnie, np. Tab[i] Ma być też dostępnych kilka innych metod

Bardziej szczegółowo

Podstawy programowania. Wykład: 5. Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania. Wykład: 5. Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD programowania Wykład: 5 Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. 1 dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD programowania w C++ Instrukcje sterujące 2 dr Artur Bartoszewski

Bardziej szczegółowo

Wykład 8: klasy cz. 4

Wykład 8: klasy cz. 4 Programowanie obiektowe Wykład 8: klasy cz. 4 Dynamiczne tworzenie obiektów klas Składniki statyczne klas Konstruktor i destruktory c.d. 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD

Bardziej szczegółowo

Abstrakcyjny typ danych

Abstrakcyjny typ danych Abstrakcyjny typ danych Abstrakcyjny Typ Danych (abstract data type-adt): zbiór wartości wraz z powiązanymi z nimi operacjami; operacje są zdefiniowane w sposób niezależny od implementacji; operacje są

Bardziej szczegółowo

Klasa 2 INFORMATYKA. dla szkół ponadgimnazjalnych zakres rozszerzony. Założone osiągnięcia ucznia wymagania edukacyjne na. poszczególne oceny

Klasa 2 INFORMATYKA. dla szkół ponadgimnazjalnych zakres rozszerzony. Założone osiągnięcia ucznia wymagania edukacyjne na. poszczególne oceny Klasa 2 INFORMATYKA dla szkół ponadgimnazjalnych zakres rozszerzony Założone osiągnięcia ucznia wymagania edukacyjne na poszczególne oceny Algorytmy 2 3 4 5 6 Wie, co to jest algorytm. Wymienia przykłady

Bardziej szczegółowo

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu. Zrozumienie funkcji danych statycznych jest podstawą programowania obiektowego. W niniejszym artykule opiszę zasadę tworzenia klas statycznych w C#. Oprócz tego dowiesz się czym są statyczne pola i metody

Bardziej szczegółowo

Programowanie Obiektowe i C++

Programowanie Obiektowe i C++ Programowanie Obiektowe i C++ Marcin Benke Instytut Informatyki UW 30.10.2006 Marcin Benke (IIUW) Programowanie Obiektowe i C++ 30.10.2006 85 / 112 Zgodność typów Rozważmy klasy class A { //... }; class

Bardziej szczegółowo

Szablony. Szablony funkcji

Szablony. Szablony funkcji Szablony Szablony sa mechanizmem ponownego wykorzystania kodu (reuse) W przypadku funkcji ponownie wykorzystany jest algorytm W przypadku klas ponownie wykorzystane sa wszystkie skladowe Deklaracja szablonu

Bardziej szczegółowo

Wykład 5: Klasy cz. 3

Wykład 5: Klasy cz. 3 Programowanie obiektowe Wykład 5: cz. 3 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD - podstawy Konstruktor i destruktor (część I) 2 Konstruktor i destruktor KONSTRUKTOR Dla przykładu

Bardziej szczegółowo

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np Klasy Klasa jest nowym typem danych zdefiniowanym przez użytkownika Wartości takiego typu nazywamy obiektami Najprostsza klasa jest po prostu strukturą, np struct Zespolona { Klasy jako struktury z operacjami

Bardziej szczegółowo

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy WSKAŹNIKI KLASOWE

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy WSKAŹNIKI KLASOWE WSKAŹNIKI KLASOWE Wskaźniki klasowe Każdy obiekt zajmuje fragment pamięci i wszystkie obiekty tego samego typu zajmują fragmenty pamięci tej samej długości początek miejsca w pamięci zajmowanego przez

Bardziej szczegółowo

TEMAT : KLASY DZIEDZICZENIE

TEMAT : KLASY DZIEDZICZENIE TEMAT : KLASY DZIEDZICZENIE Wprowadzenie do dziedziczenia w języku C++ Język C++ możliwa tworzenie nowej klasy (nazywanej klasą pochodną) w oparciu o pewną wcześniej zdefiniowaną klasę (nazywaną klasą

Bardziej szczegółowo

POLITECHNIKA POZNAŃSKA. Programowanie systemów informatycznych LAB 30h

POLITECHNIKA POZNAŃSKA. Programowanie systemów informatycznych LAB 30h POLITECHNIKA POZNAŃSKA WBMiZ Zakład Urządzeń Mechatronicznych Programowanie systemów informatycznych LAB 30h PIOTR.OWCZAREK@PUT.POZNAN.PL Dane kontaktowe osoby prowadzącej zajęcia mgr inż. Piotr Owczarek

Bardziej szczegółowo

Struktury. Przykład W8_1

Struktury. Przykład W8_1 Struktury Struktury pozwalają na grupowanie zmiennych różnych typów pod wspólną nazwą. To istotnie ułatwia organizacje danych, które okazują się w jednym miejscu kodu programu. To jest bardzo ważne dla

Bardziej szczegółowo

Języki programowania C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje. dr Artur Bartoszewski - Języki C i C++, sem.

Języki programowania C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje. dr Artur Bartoszewski - Języki C i C++, sem. Języki programowania C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje 1 dr Artur Bartoszewski - Języki C i C++, sem. 1I- WYKŁAD programowania w C++ Typy c.d. 2 Typy zmiennych Instrukcja typedef -

Bardziej szczegółowo

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h] 1. Typy. Java jest językiem programowania z silnym systemem kontroli typów. To oznacza, że każda zmienna, atrybut czy parametr ma zadeklarowany typ. Kompilator wylicza typy wszystkich wyrażeń w programie

Bardziej szczegółowo

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce. 1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,

Bardziej szczegółowo

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018 Informatyka I Klasy i obiekty. Podstawy programowania obiektowego dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2018 Plan wykładu Pojęcie klasy Deklaracja klasy Pola i metody klasy

Bardziej szczegółowo

PARADYGMATY PROGRAMOWANIA Wykład 4

PARADYGMATY PROGRAMOWANIA Wykład 4 PARADYGMATY PROGRAMOWANIA Wykład 4 Metody wirtualne i polimorfizm Metoda wirualna - metoda używana w identyczny sposób w całej hierarchii klas. Wybór funkcji, którą należy wykonać po wywołaniu metody wirtualnej

Bardziej szczegółowo

Język C++ zajęcia nr 2

Język C++ zajęcia nr 2 Język C++ zajęcia nr 2 Inicjalizacja Definiowanie obiektu może być połączone z nadaniem mu wartości początkowej za pomocą inicjalizatora, który umieszczany jest po deklaratorze obiektu. W języku C++ inicjalizator

Bardziej szczegółowo

Odwrotna Notacja Polska

Odwrotna Notacja Polska Odwrotna Notacja Polska Odwrotna Notacja Polska w skrócie ONP) jest sposobem zapisu wyrażeń arytmetycznych. Znak wykonywanej operacji umieszczany jest po operandach, argumentach tzw. zapis postfiksowy).

Bardziej szczegółowo

Myśl w języku Python! : nauka programowania / Allen B. Downey. Gliwice, cop Spis treści

Myśl w języku Python! : nauka programowania / Allen B. Downey. Gliwice, cop Spis treści Myśl w języku Python! : nauka programowania / Allen B. Downey. Gliwice, cop. 2017 Spis treści Przedmowa 11 1. Jak w programie 21 Czym jest program? 21 Uruchamianie interpretera języka Python 22 Pierwszy

Bardziej szczegółowo

Functionalization. Funkcje w C. Marcin Makowski. 30 listopada Zak lad Chemii Teoretycznej UJ

Functionalization. Funkcje w C. Marcin Makowski. 30 listopada Zak lad Chemii Teoretycznej UJ w C Zak lad Chemii Teoretycznej UJ 30 listopada 2006 1 2 3 Inicjalizacja zmiennych Zmienne jednowymiarowe można inicjować przy ich definicji. #include i n t x = 1 ; l o n g day = 1000L * 60L

Bardziej szczegółowo

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

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre) Uwagi dotyczące notacji kodu! Wyrazy drukiem prostym -- słowami języka VBA. Wyrazy drukiem pochyłym -- inne fragmenty kodu. Wyrazy w [nawiasach kwadratowych] opcjonalne fragmenty kodu (mogą być, ale nie

Bardziej szczegółowo

Język C zajęcia nr 11. Funkcje

Język C zajęcia nr 11. Funkcje Język C zajęcia nr 11 Funkcje W języku C idea podprogramów realizowana jest wyłącznie poprzez definiowanie i wywołanie funkcji. Każda funkcja musi być przed wywołaniem zadeklarowana. Deklaracja funkcji

Bardziej szczegółowo

Szablony funkcji i szablony klas

Szablony funkcji i szablony klas Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2011 Bogdan Kreczmer Niniejszy dokument

Bardziej szczegółowo

Rozdział 4 KLASY, OBIEKTY, METODY

Rozdział 4 KLASY, OBIEKTY, METODY Rozdział 4 KLASY, OBIEKTY, METODY Java jest językiem w pełni zorientowanym obiektowo. Wszystkie elementy opisujące dane, za wyjątkiem zmiennych prostych są obiektami. Sam program też jest obiektem pewnej

Bardziej szczegółowo

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

Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium: Zakres laboratorium: definiowanie struktur terminologia obiektowa definiowanie klas funkcje składowe klas programy złożone z wielu plików zadania laboratoryjne Laboratorium nr 12 Temat: Struktury, klasy.

Bardziej szczegółowo

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

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 2. Poprawna definicja wskażnika b to: a) float *a, **b = &a; b) float

Bardziej szczegółowo

Różne właściwości. Różne właściwości. Różne właściwości. C++ - klasy. C++ - klasy C++ - KLASY

Różne właściwości. Różne właściwości. Różne właściwości. C++ - klasy. C++ - klasy C++ - KLASY Różne właściwości Funkcje tak samo jak zmienne mają swoje miejsce w pamięci, gdzie są zapisane. Można więc uzyskać ich adres. Podobnie jak adres tablicy jest zwracany przez jej nazwę, podaną bez nawiasu

Bardziej szczegółowo

EGZAMIN PROGRAMOWANIE II (10 czerwca 2010) pytania i odpowiedzi

EGZAMIN PROGRAMOWANIE II (10 czerwca 2010) pytania i odpowiedzi EGZAMIN PROGRAMOWANIE II (10 czerwca 2010) pytania i odpowiedzi 1. Napisz wskaźnik do funkcji fun tak zdeklarowanej: T* fun( int, double const& ) const; definicja wskaźnika musi być precyzyjna, inaczej

Bardziej szczegółowo

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

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne Tematyka wykładów 1. Wprowadzenie. Klasy cz. 1 - Język C++. Programowanie obiektowe - Klasy i obiekty - Budowa i deklaracja klasy. Prawa dostępu - Pola i funkcje składowe - Konstruktor i destruktor - Tworzenie

Bardziej szczegółowo

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

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki int getmax (int a, int b) { return (a > b? a : b); float getmax (float a, float b) { return (a > b? a : b); long getmax (long a, long b)

Bardziej szczegółowo

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę. Języki C i C++ to bardzo uniwersalne platformy programistyczne o ogromnych możliwościach. Wykorzystywane są do tworzenia systemów operacyjnych i oprogramowania użytkowego. Dzięki niskiemu poziomowi abstrakcji

Bardziej szczegółowo

Zaawansowane programowanie w C++ (PCP)

Zaawansowane programowanie w C++ (PCP) Zaawansowane programowanie w C++ (PCP) Wykład 6 - szablony. dr inż. Robert Nowak - p. 1/15 Kolekcje i algorytmy» Deklaracja szablonu y Pojęcia niezależne od typu: kolekcje (np. listy) algorytmy (np. znajdowania

Bardziej szczegółowo

Programowanie, część I

Programowanie, część I Programowanie, część I Rafał J. Wysocki Instytut Fizyki Teoretycznej, Wydział Fizyki UW 22 lutego 2011 Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 22 lutego 2011 1 / 80 Wstęp Informacje organizacyjne

Bardziej szczegółowo

Pola i metody statyczne. Klasy zawierające pola i metody statyczne

Pola i metody statyczne. Klasy zawierające pola i metody statyczne Instrukcja laboratoryjna nr 1 Programowanie w języku C 2 (C++ poziom zaawansowany) Pola i metody statyczne. Klasy zawierające pola i metody statyczne dr inż. Kaczmarek Tomasz mgr inż. Lasota Maciej dr

Bardziej szczegółowo

Podstawy programowania. Wykład: 8. Wskaźniki. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania. Wykład: 8. Wskaźniki. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD Podstawy programowania Wykład: 8 Wskaźniki 1 dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD Podstawy programowania w C++ Wskaźniki 2 Podstawy Pojęcie wskaźnika Wskaźnik na zmienną danego

Bardziej szczegółowo

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje Funkcje (podprogramy) Mianem funkcji określa się fragment kodu, który może być wykonywany wielokrotnie z różnych miejsc programu. Ogólny zapis: typ nazwa(argumenty) ciało funkcji typ określa typ danych

Bardziej szczegółowo

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

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU Inicjalizacja agregatowa zmiennej tablicowej int a[5] = 1,2,3,4,5 INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU Struktury są również agregatami, dlatego: struct X double f; char c; X x1 = 1, 2.2, 'c' Ale

Bardziej szczegółowo

Podstawy programowania. Wykład: 12. Struktury, unie, pola bitowe. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania. Wykład: 12. Struktury, unie, pola bitowe. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD Podstawy programowania Wykład: 12 Struktury, unie, pola bitowe 1 dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD Podstawy programowania Struktury 2 Struktury Struktury to złożone typy danych

Bardziej szczegółowo

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02 METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE Wykład 02 NAJPROSTSZY PROGRAM /* (Prawie) najprostszy przykład programu w C */ /*==================*/ /* Między tymi znaczkami można pisać, co się

Bardziej szczegółowo

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static), Tworzenie obiektów Dostęp do obiektów jest realizowany przez referencje. Obiekty w języku Java są tworzone poprzez użycie słowa kluczowego new. String lan = new String( Lancuch ); Obszary pamięci w których

Bardziej szczegółowo

C++ Przeładowanie operatorów i wzorce w klasach

C++ Przeładowanie operatorów i wzorce w klasach C++ i wzorce w klasach Andrzej Przybyszewski numer albumu: 89810 14 listopada 2009 Ogólnie Przeładowanie (przeciążanie) operatorów polega na nadaniu im nowych funkcji. Przeładowanie operatora dokonuje

Bardziej szczegółowo

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

Podstawy informatyki. Elektrotechnika I rok. Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia Podstawy informatyki Elektrotechnika I rok Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia Katedra Energoelektroniki i Automatyki Systemów Przetwarzania Energii AGH Kraków 2017 Tematyka

Bardziej szczegółowo

PRZEWODNIK PO PRZEDMIOCIE

PRZEWODNIK PO PRZEDMIOCIE Nazwa przedmiotu: Kierunek: Informatyka Rodzaj przedmiotu: obowiązkowy w ramach treści kierunkowych, moduł kierunkowy ogólny Rodzaj zajęć: wykład, laboratorium I KARTA PRZEDMIOTU CEL PRZEDMIOTU METODY

Bardziej szczegółowo

Wykład 4: Klasy i Metody

Wykład 4: Klasy i Metody Wykład 4: Klasy i Metody Klasa Podstawa języka. Każde pojęcie które chcemy opisać w języku musi być zawarte w definicji klasy. Klasa definiuje nowy typ danych, których wartościami są obiekty: klasa to

Bardziej szczegółowo

> C++ dziedziczenie. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki

> C++ dziedziczenie. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki > C++ dziedziczenie Dane: Iwona Polak iwona.polak@us.edu.pl Uniwersytet Śląski Instytut Informatyki 1432108800 > Dziedziczenie Dziedziczenie C++ dziedziczenie 2 / 13 > Dziedziczenie Dziedziczenie * to

Bardziej szczegółowo

Algorytmy i złożoności. Wykład 3. Listy jednokierunkowe

Algorytmy i złożoności. Wykład 3. Listy jednokierunkowe Algorytmy i złożoności Wykład 3. Listy jednokierunkowe Wstęp. Lista jednokierunkowa jest strukturą pozwalającą na pamiętanie danych w postaci uporzadkowanej, a także na bardzo szybkie wstawianie i usuwanie

Bardziej szczegółowo

Języki i techniki programowania Ćwiczenia 2

Języki i techniki programowania Ćwiczenia 2 Języki i techniki programowania Ćwiczenia 2 Autor: Marcin Orchel Spis treści: Język C++... 5 Przekazywanie parametrów do funkcji... 5 Przekazywanie parametrów w Javie.... 5 Przekazywanie parametrów w c++...

Bardziej szczegółowo

Zadanie 2: Arytmetyka symboli

Zadanie 2: Arytmetyka symboli 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

Bardziej szczegółowo

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

Programowanie obiektowe, wykład nr 6. Klasy i obiekty Dr hab. inż. Lucyna Leniowska, prof. UR, Zakład Mechatroniki, Automatyki i Optoelektroniki, IT Programowanie obiektowe, wykład nr 6 Klasy i obiekty W programowaniu strukturalnym rozwój oprogramowania oparto

Bardziej szczegółowo

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

Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1 Podstawy programowania. Wykład 6 Wskaźniki Krzysztof Banaś Podstawy programowania 1 Adresy zmiennych Język C pozwala na operowanie adresami w pamięci stąd, między innymi, kwalifikowanie C jako języka relatywnie

Bardziej szczegółowo

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania 1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja nie ma parametru i zwraca wartość na zewnątrz. nie ma parametru i nie zwraca wartości na zewnątrz. ma parametr o nazwie void i zwraca

Bardziej szczegółowo

PODSTAWY PROGRAMOWANIA STRUKTURALNEGO (C) SYLABUS A. Informacje ogólne

PODSTAWY PROGRAMOWANIA STRUKTURALNEGO (C) SYLABUS A. Informacje ogólne PODSTAWY PROGRAMOWANIA STRUKTURALNEGO (C) SYLABUS A. Informacje ogólne Elementy składowe sylabusu Nazwa jednostki prowadzącej kierunek Nazwa kierunku studiów Poziom kształcenia Profil studiów Forma studiów

Bardziej szczegółowo

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Ćwiczenie 3 stos Laboratorium Metod i Języków Programowania

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Ćwiczenie 3 stos Laboratorium Metod i Języków Programowania Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych Ćwiczenie 3 stos Laboratorium Metod i Języków Programowania Celem ćwiczenia jest zapoznanie studentów z najprostszą dynamiczną strukturą

Bardziej szczegółowo

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

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016 Wykład 1 3 marca 2016 Słowa kluczowe języka Java abstract, break, case, catch, class, const, continue, default, do, else, enum, extends, final, finally, for, goto, if, implements, import, instanceof, interface,

Bardziej szczegółowo

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

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 4. Karol Tarnowski A-1 p. Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni Wykład 4 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Przeciążanie operatorów Funkcje zaprzyjaźnione Na

Bardziej szczegółowo

Podstawy Programowania Obiektowego

Podstawy Programowania Obiektowego Podstawy Programowania Obiektowego Wprowadzenie do programowania obiektowego. Pojęcie struktury i klasy. Spotkanie 03 Dr inż. Dariusz JĘDRZEJCZYK Tematyka wykładu Idea programowania obiektowego Definicja

Bardziej szczegółowo

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

Programowanie obiektowe Wykład 3. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21 Dariusz Wardowski dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21 Przydzielanie pamięci Poniżej przedstawiono w C++ dwie klasy obrazujące sposób rezerwacji pamięci. class Osoba char imie[30];

Bardziej szczegółowo

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

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r. M. Trzebiński C++ 1/14 Podstawy języka C++ Maciej Trzebiński Instytut Fizyki Jądrowej Polskiej Akademii Nauk Praktyki studenckie na LHC IVedycja,2016r. IFJ PAN Przygotowanie środowiska pracy Niniejsza

Bardziej szczegółowo

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1 Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie Krzysztof Banaś Podstawy programowania 1 są sposobem na przechowywanie w ramach pojedynczej zmiennej zestawu zmiennych różnych typów,

Bardziej szczegółowo

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

Wstęp do wiadomości teoretycznych (nie, nie jest to masło maślane ani wstęp, wstępów proszę cierpliwie czytać) Języki i Paradygmaty Programowania Laboratorium 1 Obiekty i klasy C++ Wstęp do wiadomości teoretycznych (nie, nie jest to masło maślane ani wstęp, wstępów proszę cierpliwie czytać) UWAGA! Umiejętność tworzenia

Bardziej szczegółowo

Multimedia JAVA. Historia

Multimedia JAVA. Historia Multimedia JAVA mgr inż. Piotr Odya piotrod@sound.eti.pg.gda.pl Historia 1990 rozpoczęcie prac nad nowym systemem operacyjnym w firmie SUN, do jego tworzenia postanowiono wykorzystać nowy język programowania

Bardziej szczegółowo

Klasy cd. Struktury Interfejsy Wyjątki

Klasy cd. Struktury Interfejsy Wyjątki Klasy cd. Struktury Interfejsy Wyjątki Struktury Struktura pozwala na zdefiniowanie typu danych, który nie charakteryzuje się zbyt złożoną funkcjonalnością (np. punkt, kolor, etc). Do definiowania struktury

Bardziej szczegółowo

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

Typy wyliczeniowe Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki Typy wyliczeniowe Konwersje napis liczba Struktury, unie Scanf / printf Wskaźniki Typy wyliczeniowe Służą do łatwiejszej kontroli nad stałymi Ustawianie parametrów o ściśle określonym zbiorze wartości

Bardziej szczegółowo

Zmienne, stałe i operatory

Zmienne, stałe i operatory Zmienne, stałe i operatory Przemysław Gawroński D-10, p. 234 Wykład 2 4 marca 2019 (Wykład 2) Zmienne, stałe i operatory 4 marca 2019 1 / 21 Outline 1 Zmienne 2 Stałe 3 Operatory (Wykład 2) Zmienne, stałe

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Laboratorium 1. Wstęp do programowania w języku Java. Narzędzia 1. Aby móc tworzyć programy w języku Java, potrzebny jest zestaw narzędzi Java Development Kit, który można ściągnąć

Bardziej szczegółowo

C++ - [4-7] Polimorfizm

C++ - [4-7] Polimorfizm Slajd 1 z 14 C++ - [4-7] Polimorfizm Nysa 2004-2013. Autor: Wojciech Galiński. wersja dnia 20 maja 2013 r. Slajd 2 z 14 Polimorfizm i klasa polimorficzna POLIMORFIZM (cytat z Wikipedii) (wielopostaciowość)

Bardziej szczegółowo

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

Nazwa wariantu modułu (opcjonalnie): Laboratorium programowania w języku C++ Uniwersytet Śląski w Katowicach str. 1 Kierunek i poziom studiów: Chemia, poziom pierwszy Sylabus modułu: Laboratorium programowania (0310-CH-S1-019) Nazwa wariantu modułu (opcjonalnie): Laboratorium programowania

Bardziej szczegółowo

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

Programowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006) Programowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006) Część 1. Teoria Wyjaśnij pojęcia, podaj przykład: klasa obiekt konstruktor destruktor kapsułkowanie (hermetyzacja) wskaźnik this

Bardziej szczegółowo

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy) Rok akademicki 2012/2013, Wykład nr 2 2/25 Plan wykładu nr 2 Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia niestacjonarne I stopnia Rok akademicki 2012/2013

Bardziej szczegółowo

Języki programowania - podstawy

Języki programowania - podstawy Języki programowania - podstawy Andrzej Dudek Wydział Techniczno Informatyczny W Jeleniej Górze Dudek A. Informatyka przemysłowa tendencje i wyzwania 26.10.2015 1 /24 Algorytm określony sposób rozwiązania

Bardziej szczegółowo

Wprowadzenie w dziedziczenie. Klasa D dziedziczy klasę B: Klasa B klasa bazowa (base class), klasa D klasa pochodna (derived class).

Wprowadzenie w dziedziczenie. Klasa D dziedziczy klasę B: Klasa B klasa bazowa (base class), klasa D klasa pochodna (derived class). Wprowadzenie w dziedziczenie Klasa D dziedziczy klasę B: B klasa bazowa D klasa pochodna Klasa B klasa bazowa (base class), klasa D klasa pochodna (derived class). Najpierw jest tworzona klasa bazowa,

Bardziej szczegółowo

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

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p. Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni Wykład 3 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Abstrakcja funkcyjna Struktury Klasy hermetyzacja

Bardziej szczegółowo

Mechanizm dziedziczenia

Mechanizm dziedziczenia Mechanizm dziedziczenia Programowanie obiektowe jako realizacja koncepcji ponownego wykorzystania kodu Jak przebiega proces dziedziczenia? Weryfikacja formalna poprawności dziedziczenia Realizacja dziedziczenia

Bardziej szczegółowo

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

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 M. Trzebiński C++ 1/16 Podstawy języka C++ Maciej Trzebiński Instytut Fizyki Jądrowej Polskiej Akademii Nauk Praktyki studenckie na LHC IFJ PAN 6lipca2015 Uruchomienie maszyny w CC1 M. Trzebiński C++ 2/16

Bardziej szczegółowo

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

Programowanie w C++ Wykład 6. Katarzyna Grzelak. 1 kwietnia K.Grzelak (Wykład 6) Programowanie w C++ 1 / 43 Programowanie w C++ Wykład 6 Katarzyna Grzelak 1 kwietnia 2019 K.Grzelak (Wykład 6) Programowanie w C++ 1 / 43 Pojęcia z poprzednich wykładów Tablica to ciag obiektów tego samego typu, zajmujacy ciagły

Bardziej szczegółowo

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

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy : Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy : class nazwa_klasy prywatne dane i funkcje public: publiczne dane i funkcje lista_obiektów;

Bardziej szczegółowo

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

Zad. 5: Układ równań liniowych liczb zespolonych Zad. 5: Układ równań liniowych liczb zespolonych 1 Cel ćwiczenia Wykształcenie zdolności abstrahowania operacji arytmetycznych od konkretnych typów. Unaocznienie problemów związanych z programowaniem uogólnionym

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Laboratorium z przedmiotu Programowanie obiektowe - zestaw 02 Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami projektowania oraz implementacji klas i obiektów z wykorzystaniem dziedziczenia.

Bardziej szczegółowo

Język ludzki kod maszynowy

Język ludzki kod maszynowy Język ludzki kod maszynowy poziom wysoki Język ludzki (mowa) Język programowania wysokiego poziomu Jeśli liczba punktów jest większa niż 50, test zostaje zaliczony; w przeciwnym razie testu nie zalicza

Bardziej szczegółowo