Badanie złożoności obliczeniowej algorytmów na przykładzie sortowania
|
|
- Teodor Kucharski
- 7 lat temu
- Przeglądów:
Transkrypt
1 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 algorytmów sortowania: bąbelkowego, przez wstawianie, przez selekcję, Shella oraz sortowania szybkiego. Dodatkowo badana może być stabilność i wykorzystanie stosu systemowego przez algorytmy. Struktura programu Wykorzystywany w ćwiczeniu program aisd2 zawiera implementacje większości omawianych na wykładzie metod sortowania, przy czym niektóre występują w kilku wersjach. Po wykonaniu każdego algorytmu program wypisuje następujące informacje: posortowany ciąg wejściowy, czas działania algorytmu w mikrosekundach, liczbę przypisań kluczy (zamiana kluczy miejscami wymaga trzech przypisań), liczbę porównań kluczy, liczbę porównań indeksów tablicy (sprawdzających np. czy osiągnięty został początek lub koniec tablicy), maksymalną głębokość stosu systemowego wyłącznie w funkcjach zaimplementowanych rekurencyjnie. Choć kod programu jest rozbity na 8 plików, wykonanie ćwiczenia wymaga modyfikacji tylko kilku fragmentów tych plików. Oczywiście po wprowadzeniu dowolnej zmiany należy ponownie skompilować cały projekt, wpisując make clean; make. Oto elementy kodu, które będą modyfikowane w ćwiczeniu: 1. W funkcji main (pliku main.cpp) należy zdefiniować następujące ustawienia: a. Czy po posortowaniu ciąg ma zostać wyświetlony (zmienna Ekran). Pozwala ocenić poprawność algorytmu, co jest konieczne w zadaniach wymagających modyfikacji kodu. Poza tym dla danych o dwóch kluczach (typ BiData) pozwala oszacować stabilność algorytmu. W pozostałych przypadkach sugeruje się nadanie zmiennej Ekran wartości false, zwłaszcza w przypadku dużych zbiorów danych. b. Ziarno generatora liczb pseudolosowych Srand. Wykonywanie ćwiczenia należy rozpocząć od nadania mu wartości równej swojemu numerowi indeksu. Należy pamiętać, że kolejne uruchomienia programu z niezmienionym ziarnem dają w efekcie identyczne sekwencje pseudolosowe. c. Liczność zbioru danych. Sensowny zakres zmian tego parametru jest silnie uzależniony od klasy złożoności badanego algorytmu. d. FactorM długość ciągu wejściowego, przy której algorytm QuickSortFactorM przestaje wywoływać się rekurencyjnie. Ciągi takie są sortowane przez wstawianie. To samo dotyczy algorytmu QuickSortMediana. Pozostałe funkcje sortujące nie korzystają z tego parametru. 2. W pliku sortowanie.h zdefiniowane są wszystkie funkcje sortujące oraz pomocnicze. Zaimplementowa ne zostały następujące metody sortowania: a. przez selekcję (wybór), 1/9
2 b. pięć wersji algorytmu sortowania przez wstawianie w kolejności od najprostszej (nieadaptacyjnej) aż do zawierającej najwięcej adaptacji, c. sortowanie bąbelkowe, d. sortowanie Shella, e. trzy wersje algorytmu sortowania szybkiego: podstawowa (QuickSort), sortująca niewielkie tablice przez wstawianie (QuickSortFactorM) oraz wersja druga rozbudowana o szacowanie mediany da nych za pomocą mediany z trzech elementów (QuickSortMediana). Każda funkcja rozpoczyna się od przywrócenia początkowego uporządkowania zbioru danych i inicjali zacji zmiennych pomocniczych a kończy się sporządzeniem podsumowania. Te czysto techniczne czyn ności z reguły nie są interesujące z punktu widzenia wykonującego ćwiczenie. Właściwy algorytm sor tujący jest wyróżniony w kodzie i zajmuje z reguły nie więcej niż 10 wierszy. Część zadań polega na modyfikacji wybra - nych algorytmów. Kod zawiera również wywołania makrodefinicji odpowiedzialnych za rejestrację kluczowych operacji, np. POROWNANIE_KLUCZY. Poleceń tych nie należy usuwać, nawet jeśli nie zamierzamy rejestrować tych operacji. Jeśli natomiast implementujemy własną wersję algorytmu, przy każdej operacji typu porównanie czy przypisanie należy zadbać o wywołanie tych makrodefinicji. 3. Również w pliku sortowanie.h zdefiniowane są funkcje BadanieAlgorytmów (osobno dla danych o kluczach całkowitoliczbowych AlgorytmySortowaniaINT oraz dla danych o dwóch kluczach AlgorytmySortowaniaBI). Domyślnie wywołują one kolejno wszystkie dostępne funkcje sortujące. Należy pamiętać, że z uwagi na duże rozbieżności w złożoności czasowej badanych algorytmów, przy dużych zbiorach danych należy wykomentować wywołania najmniej wydajnych algorytmów, aby nie spowalniały wykonania całego programu. 4. Plik aisde_macros.h zawiera m.in. makrodefinicje służące zliczaniu kluczowych operacji (patrz powyż szy punkt Cel ćwiczenia). Należy zdawać sobie sprawę, że samo zliczanie operacji przypisania, porów nania czy wzrostu stosu jest również operacją, a zatem zwiększa czas wykonywania programu. Dlatego jeśli celem danego zadania jest wyznaczenie czasu działania algorytmu a nie (tylko) liczby porównań i przypisań, należy zrezygnować z rejestrowania tych operacji. Można tego dokonać, komentując wiersze #define REJE- STRUJ_... na początku pliku. W tym przypadku makrodefinicjom typu POROWNANIE_KLUCZY nie zostaną przypisane żadne instrukcje. Przebieg ćwiczenia Funkcja main (plik main.cpp, Rys. 1) 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), FactorM ustawia współczynnik przełączenia algorytmów w sortowaniu metodą QuickSort, Licznosc ustawia liczność zbioru do sortowania. int main(){ Ekran=false; Srand=10; //tu wpisz numer swojego albumu FactorM=20; Licznosc=1234; try{ InitINT(); SortInt->BadanieAlgorytmow(); } catch (Except e){ Error(e); } getchar(); CleanUp(); return 1; Rys. 1. Podstawowe parametry symulacji kontrolowane przez użytkownika (plik main.cpp) 2/9
3 Dla wskazanych przez prowadzącego algorytmów sortowania (uzupełnić w notatniku) należy przystosować kod przykładowego programu do zaplanowanych pomiarów i symulacji. W zadaniach wymagających modyfikacji algorytmów konieczna jest weryfikacja poprawności działania własnych metod. Przykładowe zadania do wykonania na ćwiczeniu (prowadzący może podać inne): 1. Zbadać złożoność obliczeniową wskazanych algorytmów sortowania, wziąwszy pod uwagę początkowe uporządkowanie sortowanego zbioru danych. 2. Wskazać, zaimplementować i przetestować możliwe rozwiązania prowadzące do poprawy wydajności badanych algorytmów sortowania. 3. Określić stabilność wskazanych algorytmów sortowania. Przeanalizować możliwość stabilizacji badanych w ćwiczeniu niestabilnych algorytmów sortowania. 4. Napisać procedury generujące różne rozkłady statystyczne danych do sortowania. Następnie sprawdzić, jak wydajność wybranych algorytmów sortowania zależy od rozkładu danych wejściowych. 5. Określić zależność wydajności algorytmu sortowania metodą Shella od rodzaju zastosowanego ciągu. Oprócz ciągu już używanego w programie należy zaimplementować przynaj mniej dwa ciągi: znane z literatury lub własne. W tym celu wystarczy stworzyć własną klasę dziedzi czącą po klasie GeneratorCiagow, co w praktyce wymaga jedynie zdefiniowania funkcji wirtualnej DodajElementOIndeksie(int). Zaczątek takiej klasy, nazwany MojGeneratorCiagu, znajduje się na końcu pliku generator_shella.h. Obiekt własnej klasy będzie następnie wykorzystany jako zmienna generator w funkcji AlgorytmySortowania<OBJ>::Shella (patrz plik sortowanie.h). 6. Eksperymentalnie dobrać optymalną wartość FactorM (dla QuickSortFactorM i QuickSortMediana). 7. W funkcji QuickSortFactorM podtablice o rozmiarze mniejszym niż pewna założona wartość M nie są już dalej rekurencyjnie dzielone funkcją Rozdziel, lecz sortowane przez wstawianie. Możliwe jest jednak nieco inne podejście, w którym po dojściu do określonego rozmiaru podtablicy następuje powrót na wyższy poziom rekurencji. Po zakończeniu funkcji QuickSortFactorM cała tablica pozostaje więc wciąż nieposortowana, choć jest podzielona na odcinki, z których każdy zawiera elementy większe od odcinka poprzedniego. Ostatnim krokiem musi więc być posortowanie całej tablicy innym algorytmem, np. przez wstawianie. Proszę zaimplementować taką wersję algorytmu Quicksort i sprawdzić popraw - ność implementacji sortując niewielką tablicę. Następnie proszę porównać wydajność tej metody z QuickSort w wersji najprostszej oraz QuickSortFactorM dla różnych wielkości zbiorów danych i różnych wartości M. 8. Sercem algorytmu sortowania szybkiego jest funkcja Rozdziel, przenosząca do odpowiednich części tablicy elementy mniejsze i większe od rozdzielającego. Wszystkie wersje sortowania szybkie go użyte w programie wykorzystują książkową implementację tej funkcji, w której tablica danych jest analizowana jednocześnie z dwóch stron. Jeśli znakami + i oznaczymy klucze, o których wiemy, że są odpowiednio większe i mniejsze od rozdzielającego, znakiem? klucze jeszcze nie przeanalizowane, zaś literą R element rozdzielający, to stan tabeli na pewnym etapie wykonania funkcji Rozdziel można zapisać symbolicznie w taki sposób, jak na Rys. 2 a): 3/9
4 a) b)??? R + + +??? R indeks: c) d) + + +?? R + + +?? R Rys. 2. Stan tablicy danych podczas sortowania szybkiego: a) implementacja użyta w ćwiczeniu, b) i kolejne proponowana implementacja, c) gdy kolejny analizowany element (indeks 6) okaże się mniejszy od rozdzielającego, powinien zostać zamieniony z pierwszym z elementów większych od rozdzielającego (indeks 3), d) stan po zamianie W książce T. Cormen et al. Wprowadzenie do algorytmów opisana jest inna prostsza! implementacja tej funkcji. Tabela jest analizowana wyłącznie od lewej do prawej strony, a stan tabeli można zapi - sać jak na Rys. 2 b). Jeśli kolejny analizowany klucz pierwszy oznaczony znakiem zapytania okaże się większy od elementu rozdzielającego, to znaczy, że znajduje się po właściwej stronie przeanalizow - anego odcinka tabeli, tzn. wśród dużych kluczy. Jeśli jednak okaże się mniejszy, to musi zostać przeniesiony do części tabeli zawierającej małe klucze. Najprościej dokonać tego zamieniając go miejsca - mi z pierwszym z dużych kluczy. Stan przed tą zamianą i po niej widać odpowiednio na Rys. 2 c) i d). Po dojściu do końca tablicy element rozdzielający jest wstawiany na swoje miejsce podobnie, jak w dotychczasowej implementacji. Proszę zaimplementować opisaną wersję sortowania szybkiego, zweryfikować jej poprawność, a następnie porównać jej wydajność z podstawową wersją algorytmu. 9. Funkcja QuickSort wywołuje się rekurencyjnie najpierw dla lewej części tablicy (zawierającej elementy mniejsze od rozdzielającego), a następnie dla jej prawej części. Jedną z wad tej standardowej imple - mentacji jest ryzyko silnego rozrostu stosu systemowego, co w skrajnych przypadkach może doprowa - dzić do naruszenia ochrony pamięci i przedwczesnego zakończenia programu. Na podstawie analizy kodu należy stwierdzić, jakie wstępne uporządkowanie n-elementowej tablicy danych grozi rozrostem stosu do głębokości porównywalnej z n. Następnie należy tak zmodyfikować funkcję Quicksort, by głębokość stosu była w przybliżeniu niezależna od wstępnego uporządkowania danych. Należy wy - kreślić zależność głębokości stosu w funkcji n dla danych losowych, uporządkowanych rosnąco i malejąco dla obu wersji Quicksort oryginalnej i zmodyfikowanej. Jakimi funkcjami można przybliżyć tę zależność? Dla dużych zbiorów danych sprawdzić, jak wprowadzona modyfikacja wpływa na czas wykonania programu. Analiza wyników, wnioski, sprawozdanie Na ocenę z ćwiczenia bezpośrednio wpływają: 1. 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. 2. Zawartość oddanego w terminie sprawozdania (wyłącznie w postaci elektronicznej w formacie PDF). Sprawozdanie powinno zawierać następujące elementy: a) cel ćwiczenia (własnymi słowami), b) w przypadku zadań wymagających modyfikacji kodu listing zmienionej funkcji ( z wyraźnym wyróżnieniem własnych modyfikacji) wraz z opisem zmian i ich uzasadnieniem, 4/9
5 c) stosowne wykresy, np. wykresy czasów wykonania programu w zależności od wersji badanego algoryt - mu w funkcji długości sortowanych danych, wykresy dynamiczne sortowania (patrz ostatni punkt Uwag końcowych i Rys. 3.) itp., d) podsumowanie ćwiczenia czyli wnioski: konkretne, na temat, samodzielne, twórcze. 3. Samodzielność i pomysłowość wykonania ćwiczenia. 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 to PDF, przy czym tekst nie może być wklejony jako rysunek, nazwa pliku zawierającego sprawozdanie musi mieć formę AISDE_2_Nazwisko_Imię.pdf. temat maila ze sprawozdaniem musi pasować do wzorca: AISDE_2_Nazwisko_Imię. Wymagania do kolokwium wstępnego: znajomość badanych algorytmów sortowania, znajomość przykładowego programu (pełne kody źródłowe zamieszczone są na internetowej stronie przedmiotu AISDE Uwagi końcowe Dla zapewnienia identycznych warunków pracy algorytmów sortujących w ramach danej serii pomiaro - wej, do sortowania różnymi metodami powinny być wykorzystywane w zawsze te same dane wejściowe. Wszystkie pomiary czasu powinny być wykonywane na tej samej maszynie a przynajmniej na maszynach o identycznych parametrach, np. na dwóch różnych komputerach laboratoryjnych. Należy wziąć to pod uwagę, planując wykonanie części ćwiczenia w domu. Po wygenerowaniu pomiarowej serii danych, dane te są przechowywane w zmiennej Dane_kopia. Do sortowania wykorzystywane są dane przechowywane w zmiennej Dane. Prywatna metoda OdswiezDane kopiuje dane ze zmiennej Dane_kopia do zmiennej Dane. Jednym z możliwych sposobów wizualizacji procesu sortowania są wykresy dynamiczne. Na osi rzędnych znajdują się wartości kluczy, zaś na osi odciętych ich pozycje. Wykresy dynamiczne dla kilku początkowych etapów sortowania szybkiego przedstawiono na Rys. 3. a b c d e Rys. 3. Wykresy dynamiczne sortowania metodą QuickSort Literatura 1. R. Sedgewick Algorytmy w C++, Wydawnictwo RM A. Drozdek C++ algorytmy i struktury danych, Wydawnictwo Helion T. Cormen et al. Wprowadzenie do algorytmów, Wyd. Naukowe PWN J. Grębosz Symfonia C++ Wydawnictwo Oficyna Kallimach J. Grębosz Pasja C++ Wydawnictwo Oficyna Kallimach /9
6 Dodatek struktura programu Klasa AISD implementuje niezbędne metody, służące do pomiarów czasu, wydruku raportów i komunikacji z użytkownikiem. Zostały one zaimplementowane jako metody szablo nowej klasy wirtualnej AlgorytmySortowania (Rys. 4), pochodnej od używanej w ćwiczeniach 2 i 3 klasy AISD (Rys. 5). template <class OBJ> class AlgorytmySortowania:public AISD<OBJ>{ protected: int Rozdziel(int L=0, int R=0); // quicksort (QS) podział zbioru void QuickSortRekur(int L,int R); // QS standardowy void QuickSortRekurFactorM(int L,int R,int M); // QS + poprawka na małe zbiory void QuickSortRekurMediana(int L,int R,int M); // QS + mediana z 3 void PrzezWstawianie2QS(int L, int R); // sortowanie przez wstawianie wykorzystywane jako końcowy etap QS int BisekcjaDoWstawiania(int L, int R, OBJ Element); // algorytm bisekcji do sortowania przez wstawianie AlgorytmySortowania(int LiczZbior):AISD<OBJ>(LiczZbior){ ~AlgorytmySortowania(){ Parametry* PrzezSelekcje (int L=0, int R=0); Parametry* PrzezWstawianie1(int L=0, int R=0); // podstawowa wersja algorytmu Parametry* PrzezWstawianie2(int L=0, int R=0); // algorytm z jedną poprawką Parametry* PrzezWstawianie3(int L=0, int R=0); // algorytm z dwiema poprawkami Parametry* PrzezWstawianie4(int L=0, int R=0); // algorytm z dwiema poprawkami i poprawką wykładową Parametry* PrzezWstawianie5(int L=0, int R=0); // algorytm z trzema poprawkami i poprawką wykładową Parametry* Babelkowe (int L=0, int R=0); Parametry* Shella (int L=0, int R=0); Parametry* QuickSort (int L, int R); Parametry* QuickSortFactorM(int L, int R, int M); Parametry* QuickSortMediana(int L, int R, int M); Rys. 4. Funkcje sortujące (publiczne, u dołu) i pomocnicze (chronione, u góry) plik sortowanie.h template <class OBJ> class AISD{ protected: 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*){ //implementacja IO zalezna od OBJ void virtual WypiszStanNaEkran(bool){ // void virtual BadanieAlgorytmow(){ // Rys. 5. Funkcje zapewniające inicjalizację struktur, komunikację z użytkownikiem, pomiar czasu itp. (plik aisd.h) Klasa AlgorytmySortowania składa się z części publicznej (public) i chronionej (protected). W publicznej części klasy szablonowej AlgorytmySortowania zadeklarowane są metody i zmienne bezpośrednio dostępne dla użytkownika. Należą do nich wszystkie metody implementujące poszczególne algorytmy sortowania: W chronionej (protected) części klasy szablonowej AlgorytmySortowania zadeklarowano metody pomocnicze dla zaimplementowanych algorytmów sortujących. Są to metody: OdswiezDane, Rozdziel, (wykorzystywana przez algorytmy QuickSort), QuickSortRekur, PobierzCzas, QuickSortRekurFactorM, QuickSortRekurMediana, PrzezWstawianie2QS. Dla zapewnienia integralności danych Dane, ich wywołanie jest możliwe jedynie z wnętrza obiektów tej samej klasy i klas pochodnych. Każda z metod sortowania na bieżąco aktualizuje informacje prze - chowywane w strukturze kontrolnej ZlozAlg odziedziczonej po klasie macierzystej AISD. Po zakończeniu pracy każda metoda sortowania zwraca wskaźnik na strukturę kontrolną ZlozAlg (Rys. 6): typedef struct{ unsigned long CzWyk; // czas wykonania algorytmu unsigned long GlSto; // bieżąca głębokość stosu unsigned long GlStoMax;// maksymalna głębokość stosu unsigned long LiZam; // liczba zamian danych unsigned long LiPor; // liczba porównań danych } Parametry; Rys. 6. Struktura Parametry, w której rejestrowane są kluczowe operacje sortowania (plik aisd.h) 6/9
7 Każda z metod sortujących domyślnie zakłada, że dane do posortowania umieszczone są w tablicy wskazywanej przez Dane: prywatny składnik szablonu klasy macierzystej AISD, inicjalizowany w czasie pracy jej konstruktora. Argumentami wywołania poszczególnych metod sortowania są numery pierwszego ( L) i ostatniego (R) elementu początkowego zbioru danych do posortowania. Obecność tych parametrów w wywołaniu metody umożliwia posortowanie całości lub wybranego fragmentu danych. Przy wywołaniu metod sortowania bez poda - nia argumentów domyślnie przyjmowane jest sortowanie pełnego zbioru danych o liczności LicznośćZbioru (chroniony składnik klasy AISD). W publicznej części klasy AISD oprócz konstruktora i destruktora zaimplementowano wirtualne metody umożliwiające operacje na plikach z danymi ( ZapiszStanDoPliku i WczytajDaneZPliku), a także wyświetlenie tych danych (WypiszStanNaEkran). Ich argumenty to odpowiednio: nazwa pliku do odczytu/zapisu danych i zmienna typu bool decydująca o wypisaniu lub nie wypisaniu danych na ekran. Zdefiniowanie klas AISD i AlgorytmySortowania w postaci szablonów daje możliwość zastosowania ich do operacji na różnych, w tym również złożonych typach danych określonych parametrem OBJ szablonu. Wymaga to jedynie określenia typu tych danych (np. w postaci klasy, struktury, tablicy, listy etc.) i odpowiedniego przeciążenia związanych z nim operatorów: porównania ( < i > ) oraz przypisania ( = ). AlgorytmySortowania to szablon klasy wirtualnej. Nie można więc utworzyć takiego obiektu. Niezbędne jest więc zdefiniowanie klasy potomnej posiadającej własne wersje metod wirtualnych WypiszStanNaEkran, ZapiszStanDoPliku i WczytajDaneZPliku. Dla potrzeb ćwiczenia utworzono klasy AlgorytmySortowaniaINT i AlgorytmySortowaniaBI, pochodne szablonu klasy AlgorytmySortowania, dostosowane do danych typu int i BiData (Rys. 7). class AlgorytmySortowaniaINT:public AlgorytmySortowania<int>{ AlgorytmySortowaniaINT(int LiczZbior):AlgorytmySortowania<int>(LiczZbior){ ~AlgorytmySortowaniaINT(){ void ZapiszStanDoPliku(const std::string &); void WczytajDaneZPliku(const std::string &); void WypiszStanNaEkran(bool); void BadanieAlgorytmow(); class AlgorytmySortowaniaBI:public AlgorytmySortowania<struct BiData>{ AlgorytmySortowaniaBI(int LiczZbior):AlgorytmySortowania<struct BiData>(LiczZbior){ ~AlgorytmySortowaniaBI(){ void ZapiszStanDoPliku(const std::string &); void WczytajDaneZPliku(const std::string &); void WypiszStanNaEkran(bool); void BadanieAlgorytmow(); Rys. 7. Klasy wyprowadzone z AlgorytmySortowania wraz z implementacjami funkcji wirtualnych (plik sortowanie.h) Przykładową klasę BiData, wykorzystaną jako argument szablonu klasy AlgorytmySortowania, przedstawiono na Rys. 8. Klasa ta jest przeznaczona do badania stabilności algorytmów sortowania. 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); // przeciążony operator porównania bool operator>(bidata Dane); // przeciążony operator porównania BiData operator=(bidata Dane); // przeciążony operator przypisania int operator=(int Dane); // przeciążony operator przypisania char* operator=(char *Dane); // przeciążony operator przypisania Rys. 8. Klasa BiData o dwóch kluczach: int i char* (plik dane.h). Zwraca uwagę przeciążenie operatora przypisania W programie wykorzystywanym podczas ćwiczenia zaimplementowano przykładowe algorytmy sortowania dla danych typów int i BiData. Wykorzystano tu odpowiednio obiekty SortINT i SortBI. SortINT to obiekt klasy AlgorytmySortowaniaINT, utworzonej z szablonu AlgorytmySortowania dla podstawowego typu danych int. SortBI to obiekt klasy AlgorytmySortowaniaBI, utworzonej z szablonu AlgorytmySortowania dla złożonego typu 7/9
8 danych BiData. Obiekty SortINT i SortBI są tworzone, inicjalizowane i wypełniane danymi w funkcjach inicjalizujących: InitINT i InitBI. Losowe dane do posortowania są generowane przez funkcje Wypelnij_INT1 i Wypelnij_BI1 (Rys. 9). void WypelnijINT_1(){ int i; for(i=0;i<sortint->getlicznosc();i++) SortINT->GetDaneKopia()[i]=(int)(rand()*(double)SortINT->GetLicznosc()/(double)RAND_MAX); memcpy(sortint->getdane(),sortint->getdanekopia(),sortint->getlicznosc()*sizeof(int)); } void WypelnijBI_1(){ int i; char (*stringi)[16]=new char[16][16]; strcpy(stringi[0],"a");... strcpy(stringi[15],"s"); for(i=0;i<sortbi->getlicznosc();i++){ SortBI->GetDaneKopia()[i]=(int)(rand()*(double)SortBI->GetLicznosc()/(double)RAND_MAX); SortBI->GetDaneKopia()[i]=stringi[rand()%15]; } memcpy(sortbi GetDane(), SortBI GetDaneKopia(), SortBI->GetLicznosc()*sizeof(BiData)); delete stringi; } Rys. 9. Przykład losowej inicjalizacji kluczy numerycznych i tekstowych obiektu klasy BiData (plik main.cpp) Opracowanie Weryfikacja dr inż. Grzegorz Janczyk, dr inż Dominik Kasprowicz {janczyk, dkasprow}@imio.pw.edu.pl dr inż. Adam Wojtasik aw@imio.pw.edu.pl 8/9
9 Algorytmy i Struktury Danych NOTATNIK AISDE LAB 2 Imię i nazwisko, Grupa dziekańska Nr Indeksu Data wykonania ćwiczenia Data oddania protokołu Punkty do wykonania a 8b 9 10 Sortowanie przez selekcję Sortowanie przez wstawianie 1 Sortowanie przez wstawianie 2 Sortowanie przez wstawianie 3 Sortowanie przez wstawianie 4 Algorytmy do zbadania Sortowanie przez wstawianie 5 Sortowanie bąbelkowe Sortowanie Shella Sortowanie quick sort Sortowanie quick sort factor-m Sortowanie quick sort - mediana Algorytm sortowania Stabilność Złożoność Największa liczność zbioru testującego Uwagi 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
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
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ą
Algorytmy i Struktury Danych. Laboratorium 3. Drzewa, kopce, wyszukiwanie wzorca informacji, kodowanie
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
Algorytmy sortujące i wyszukujące
Algorytmy sortujące i wyszukujące Zadaniem algorytmów sortujących jest ułożenie elementów danego zbioru w ściśle określonej kolejności. Najczęściej wykorzystywany jest porządek numeryczny lub leksykograficzny.
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
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
Przykładowe sprawozdanie. Jan Pustelnik
Przykładowe sprawozdanie Jan Pustelnik 30 marca 2007 Rozdział 1 Sformułowanie problemu Tematem pracy jest porównanie wydajności trzech tradycyjnych metod sortowania: InsertionSort, SelectionSort i BubbleSort.
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
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;
WYKŁAD 9. Algorytmy sortowania elementów zbioru (tablic) Programy: c4_1.c... c4_3.c. Tomasz Zieliński
WYKŁAD 9 Algorytmy sortowania elementów zbioru (tablic) Programy: c4_1.c... c4_3.c Tomasz Zieliński /* Przyklad 4.1 - SORTOWANIE TABLIC - metoda najprostsza */ #include #define ROZMIAR 11 void
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
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
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
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++...
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
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
> C++ dynamiczna alokacja/rezerwacja/przydział pamięci. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki
> C++ dynamiczna alokacja/rezerwacja/przydział pamięci Dane: Iwona Polak iwona.polak@us.edu.pl Uniwersytet Śląski Instytut Informatyki 1429536600 > Dzisiejsze zajęcia sponsorują słówka: new oraz delete
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
Zajęcia nr 5 Algorytmy i wskaźniki. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej
Zajęcia nr 5 Algorytmy i wskaźniki dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej Plan Zapis i odczyt z plików tekstowych O tablicach ciąg dalszy Referencje
Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1
Podstawy programowania, Poniedziałek 30.05.2016, 8-10 Projekt, część 1 1. Zadanie Projekt polega na stworzeniu logicznej gry komputerowej działającej w trybie tekstowym o nazwie Minefield. 2. Cele Celem
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
Podstawy algorytmiki i programowania - wykład 6 Sortowanie- algorytmy
1 Podstawy algorytmiki i programowania - wykład 6 Sortowanie- algorytmy Treści prezentowane w wykładzie zostały oparte o: S. Prata, Język C++. Szkoła programowania. Wydanie VI, Helion, 2012 www.cplusplus.com
Język C, tablice i funkcje (laboratorium, EE1-DI)
Język C, tablice i funkcje (laboratorium, EE1-DI) Opracował: Tomasz Mączka (tmaczka@kia.prz.edu.pl) Wstęp (tablice) Tablica to uporządkowany ciąg elementów tego samego typu, zajmujących ciągły obszar pamięci.
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
Zadania do wykonania. Rozwiązując poniższe zadania użyj pętlę for.
Zadania do wykonania Rozwiązując poniższe zadania użyj pętlę for. 1. apisz program, który przesuwa w prawo o dwie pozycje zawartość tablicy 10-cio elementowej liczb całkowitych tzn. element t[i] dla i=2,..,9
Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.
Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy Laboratorium 2 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Komentarze Funkcja printf() Zmienne Łańcuchy
Tablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011
Tablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011 Załóżmy, że uprawiamy jogging i chcemy monitorować swoje postępy. W tym celu napiszemy program, który zlicza, ile czasu
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
Złożoność obliczeniowa zadania, zestaw 2
Złożoność obliczeniowa zadania, zestaw 2 Określanie złożoności obliczeniowej algorytmów, obliczanie pesymistycznej i oczekiwanej złożoności obliczeniowej 1. Dana jest tablica jednowymiarowa A o rozmiarze
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
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
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
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
Strategia "dziel i zwyciężaj"
Strategia "dziel i zwyciężaj" W tej metodzie problem dzielony jest na kilka mniejszych podproblemów podobnych do początkowego problemu. Problemy te rozwiązywane są rekurencyjnie, a następnie rozwiązania
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
utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,
Lista 3 Zestaw I Zadanie 1. Zaprojektować i zaimplementować funkcje: utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy, zapisz
Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.
Część XXII C++ w Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie. Ćwiczenie 1 1. Utwórz nowy projekt w Dev C++ i zapisz go na
znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.
Część XVI C++ Funkcje Jeśli nasz program rozrósł się już do kilkudziesięciu linijek, warto pomyśleć o jego podziale na mniejsze części. Poznajmy więc funkcje. Szybko się przekonamy, że funkcja to bardzo
Zadanie projektowe nr 1
Zadanie projektowe nr 1 Badanie efektywności operacji dodawania (wstawiania), usuwania oraz wyszukiwania elementów w podstawowych strukturach danych Należy zaimplementować oraz dokonać pomiaru czasu działania
Aplikacje w środowisku Java
Aplikacje w środowisku Java Materiały do zajęć laboratoryjnych Klasy i obiekty - wprowadzenie mgr inż. Kamil Zieliński Katolicki Uniwersytet Lubelski Jana Pawła II 2018/2019 Klasa zbiór pól i metod Obiekt
Programowanie obiektowe Wykład 6. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14
Dariusz Wardowski dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14 Wirtualne destruktory class A int* a; A(int _a) a = new int(_a);} virtual ~A() delete a;} class B: public A double* b;
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.
Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 4. Karol Tarnowski A-1 p.
Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy Wykład 4 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Tablice Wskaźniki Adresy pamięci Operator adresu
Algorytm selekcji Hoare a. Łukasz Miemus
Algorytm selekcji Hoare a Łukasz Miemus 1 lutego 2006 Rozdział 1 O algorytmie 1.1 Problem Mamy tablicę A[N] różnych elementów i zmienną int K, takie że 1 K N. Oczekiwane rozwiązanie to określenie K-tego
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
Sortowanie. Bartman Jacek Algorytmy i struktury
Sortowanie Bartman Jacek jbartman@univ.rzeszow.pl Algorytmy i struktury danych Sortowanie przez proste wstawianie przykład 41 56 17 39 88 24 03 72 41 56 17 39 88 24 03 72 17 41 56 39 88 24 03 72 17 39
Zaawansowane algorytmy i struktury danych
Zaawansowane algorytmy i struktury danych u dr Barbary Marszał-Paszek Opracowanie pytań teoretycznych z egzaminów. Strona 1 z 12 Pytania teoretyczne z egzaminu pisemnego z 25 czerwca 2014 (studia dzienne)
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
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
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
Sortowanie - wybrane algorytmy
Sortowanie - wybrane algorytmy Aleksandra Wilkowska Wydział Matematyki - Katedra Matematyki Stosowanej Politechika Wrocławska 2 maja 2018 1 / 39 Plan prezentacji Złożoność obliczeniowa Sortowanie bąbelkowe
Podstawy Programowania
Podstawy Programowania Monika Wrzosek Instytut Matematyki Uniwersytet Gdański Matematyka 2017/18 Monika Wrzosek (IM UG) Podstawy Programowania 1 / 119 Sprawy organizacyjne E-mail: mwrzosek@mat.ug.edu.pl
AiSD zadanie trzecie
AiSD zadanie trzecie Gliwiński Jarosław Marek Kruczyński Konrad Marek Grupa dziekańska I5 5 czerwca 2008 1 Wstęp Celem postawionym przez zadanie trzecie było tzw. sortowanie topologiczne. Jest to typ sortowania
1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami
1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami Celem tych zajęć jest zrozumienie i oswojenie z technikami programowania przy pomocy wskaźników w języku C++. Proszę przeczytać rozdział 8.
Algorytmy sortujące. sortowanie kubełkowe, sortowanie grzebieniowe
Algorytmy sortujące sortowanie kubełkowe, sortowanie grzebieniowe Sortowanie kubełkowe (bucket sort) Jest to jeden z najbardziej popularnych algorytmów sortowania. Został wynaleziony w 1956 r. przez E.J.
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
Definicja. Ciąg wejściowy: Funkcja uporządkowująca: Sortowanie polega na: a 1, a 2,, a n-1, a n. f(a 1 ) f(a 2 ) f(a n )
SORTOWANIE 1 SORTOWANIE Proces ustawiania zbioru elementów w określonym porządku. Stosuje się w celu ułatwienia późniejszego wyszukiwania elementów sortowanego zbioru. 2 Definicja Ciąg wejściowy: a 1,
lekcja 8a Gry komputerowe MasterMind
lekcja 8a Gry komputerowe MasterMind Posiadamy już elementarną wiedzę w zakresie programowania. Pora więc zabrać się za rozwiązywanie problemów bardziej złożonych, które wymagają zastosowania typowych
PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec
PROE wykład 2 operacje na wskaźnikach dr inż. Jacek Naruniec Zmienne automatyczne i dynamiczne Zmienne automatyczne: dotyczą kontekstu, po jego opuszczeniu są usuwane, łatwiejsze w zarządzaniu od zmiennych
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
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ą
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
Zasady programowania Dokumentacja
Marcin Kędzierski gr. 14 Zasady programowania Dokumentacja Wstęp 1) Temat: Przeszukiwanie pliku za pomocą drzewa. 2) Założenia projektu: a) Program ma pobierać dane z pliku wskazanego przez użytkownika
Zadanie projektowe 1: Struktury danych i złożoność obliczeniowa
Łukasz Przywarty 171018 Data utworzenia: 24.03.2010r. Mariusz Kacała 171058 Prowadzący: prof. dr hab. inż. Adam Janiak oraz dr inż. Tomiasz Krysiak Zadanie projektowe 1: Struktury danych i złożoność obliczeniowa
Jak napisać program obliczający pola powierzchni różnych figur płaskich?
Część IX C++ Jak napisać program obliczający pola powierzchni różnych figur płaskich? Na początku, przed stworzeniem właściwego kodu programu zaprojektujemy naszą aplikację i stworzymy schemat blokowy
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
Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska
Instytut Mechaniki i Inżynierii Obliczeniowej www.imio.polsl.pl fb.com/imiopolsl @imiopolsl Wydział Mechaniczny Technologiczny Politechnika Śląska Języki programowania z programowaniem obiektowym Laboratorium
Programowanie obiektowe
Laboratorium z przedmiotu - zestaw 02 Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami projektowania oraz implementacji klas i obiektów z wykorzystaniem dziedziczenia. Wprowadzenie teoretyczne.
Programowanie w VB Proste algorytmy sortowania
Programowanie w VB Proste algorytmy sortowania Sortowanie bąbelkowe Algorytm sortowania bąbelkowego polega na porównywaniu par elementów leżących obok siebie i, jeśli jest to potrzebne, zmienianiu ich
Laboratorium 5: Tablice. Wyszukiwanie binarne
Wojciech Myszka Laboratorium 5: Tablice. Wyszukiwanie binarne 2016-05-07 09:02:17 +0200 1. Tablice Do tej pory nie było potrzeby odwoływać się do zmiennych złożonych. Programy były bardzo proste i korzystały
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.
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
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
Wykład 1_2 Algorytmy sortowania tablic Sortowanie bąbelkowe
I. Struktury sterujące.bezpośrednie następstwo (A,B-czynności) Wykład _2 Algorytmy sortowania tablic Sortowanie bąbelkowe Elementy języka stosowanego do opisu algorytmu Elementy Poziom koncepcji Poziom
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
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
Struktury Danych i Złożoność Obliczeniowa
Struktury Danych i Złożoność Obliczeniowa Zajęcia 2 Algorytmy wyszukiwania, sortowania i selekcji Sortowanie bąbelkowe Jedna z prostszych metod sortowania, sortowanie w miejscu? Sortowanie bąbelkowe Pierwsze
Podstawy programowania. Wykład: 7. Funkcje Przekazywanie argumentów do funkcji. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD
programowania Wykład: 7 Funkcje Przekazywanie argumentów do funkcji 1 dr Artur Bartoszewski - programowania, sem 1 - WYKŁAD programowania w C++ Funkcje 2 dr Artur Bartoszewski - programowania sem. 1 -
3. Opracować program kodowania/dekodowania pliku tekstowego. Algorytm kodowania:
Zadania-7 1. Opracować program prowadzący spis pracowników firmy (max.. 50 pracowników). Każdy pracownik opisany jest za pomocą struktury zawierającej nazwisko i pensję. Program realizuje następujące polecenia:
Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie
Część X C++ Typ znakowy służy do reprezentacji pojedynczych znaków ASCII, czyli liter, cyfr, znaków przestankowych i innych specjalnych znaków widocznych na naszej klawiaturze (oraz wielu innych, których
IX. Wskaźniki.(3 godz.)
Opracowała: dr inż. Anna Dubowicka Uczelniane Centrum Komputerowe PK IX. Wskaźniki.(3 godz.) Wskaźnik jest zmienną, która zawiera adres innej. 1. Definiowanie wskaźników. typ * nazwa ; gdzie: znak * informuje
Sortowanie Shella Shell Sort
Sortowanie Shella Shell Sort W latach 50-tych ubiegłego wieku informatyk Donald Shell zauważył, iż algorytm sortowania przez wstawianie pracuje bardzo efektywnie w przypadku gdy zbiór jest w dużym stopniu
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
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
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
Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej
Wykład I - semestr II Kierunek Informatyka Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2015 c Copyright 2015 Janusz Słupik Zaliczenie przedmiotu Do zaliczenia przedmiotu niezbędne jest
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
Języki programowania imperatywnego
Katedra Inżynierii Wiedzy laborki 7 i 8 Klasy abstrakcyjne klasa abstrakcyjna pozwala wymusić implementację metody; klasa oznaczona jest jako abstrakcyjna, jeżeli przynajmniej jedna metoda jest abstrakcyjna;
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ę
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
Podstawowe algorytmy i ich implementacje w C. Wykład 9
Wstęp do programowania 1 Podstawowe algorytmy i ich implementacje w C Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 9 Element minimalny i maksymalny zbioru Element minimalny
Wstęp do programowania
wykład 10 Agata Półrola Wydział Matematyki i Informatyki UŁ semestr zimowy 2018/2019 Przesyłanie argumentów - cd Przesyłanie argumentów do funkcji - tablice wielowymiarowe Przekazywanie tablic wielowymiarowych
Podstawy programowania w języku C++
Podstawy programowania w języku C++ Część dziewiąta Tablice a zmienne wskaźnikowe Wersja skrócona, tylko C++ Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie
Podstawy programowania. Wykład: 13. Rekurencja. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD
Podstawy programowania Wykład: 13 Rekurencja 1 dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD Podstawy programowania Rekurencja - pojęcie 2 Rekurencja - pojęcie Rekurencja (rekursja) wywołanie
Podstawy programowania 2. Przygotował: mgr inż. Tomasz Michno
Instrukcja laboratoryjna 2 Podstawy programowania 2 Temat: Zmienne dynamiczne tablica wskaźników i stos dynamiczny Przygotował: mgr inż. Tomasz Michno 1 Wstęp teoretyczny 1.1 Tablice wskaźników Tablice
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ą
Porównanie Heap Sort, Counting Sort, Shell Sort, Bubble Sort. Porównanie sortowao: HS, CS, Shs, BS
Czas sortowania w milisekundach Czas sortowania w milisekundach Sortowanie Porównanie, Counting Sort, Shell Sort, Bubble Sort 4 Porównanie sortowao: HS, CS, Shs, BS 35 3 25 2 15 5 Counting Sort Shell Sort
Analiza algorytmów zadania podstawowe
Analiza algorytmów zadania podstawowe Zadanie 1 Zliczanie Zliczaj(n) 1 r 0 2 for i 1 to n 1 3 do for j i + 1 to n 4 do for k 1 to j 5 do r r + 1 6 return r 0 Jaka wartość zostanie zwrócona przez powyższą
Program 14. #include <iostream> #include <ctime> using namespace std;
Program 14 Napisać: * funkcję słuŝącą do losowego wypełniania tablicy liczbami całkowitymi z podanego zakresu (*). Parametrami funkcji mają być tablica, jej długość oraz dwie liczby stanowiące krańce przedziału
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