P.Wąsiewicz:

Konsultacje p. 22 we piatek 16.00-16.45


Programowanie obiektowe (PROE)


Prowadzący zajęcia:

Piotr Wąsiewicz
pwasiewi@elka.pw.edu.pl
Gmach Elektroniki p.22

W temacie wiadomości podaje się tekst: PROE:


Spis treści:

Lab1

(1/2) Kompilacja za pomocą g++, a następnie make i makefile

Na tym laboratorium używamy następujących plików: node1.cpp, Makefile.1, Makefile.2, Makefile.3, Makefile.

Plik z rozszerzeniem .cpp kompilujemy kompilatorem C++ zwanym g++ czyli GNU C++:

	g++ node1.cpp
	
Uruchamiamy skompilowany program z kropką i ukośnikiem po nazwie domyślnej a.out:
	./a.out
	
Jeśli chcemy innej nazwy, to wykonujemy:
	g++ node1.cpp -o node1
	
I uruchamiamy:
	./node1
	
Po dodaniu do ścieżki PATH kropki:
	export PATH=$PATH:.
	
Możemy uruchamiać bez kropki i ukośnika:
	node1
	

Polecenie make można wykonywać z różnymi plikami konfiguracyjnymi, a nie tylko domyślnym Makefile:

	make -f Makefile.1
	make -f Makefile.2
	make -f Makefile.3
	make
	make clean
	
Polecenie 'make clean' usuwa pliki obiektowe *.o oraz plik wykonywalny i jest opisane w Makefile (nie wykonywać w powłoce, to jest fragment pliku Makefile):
	clean:
	        rm *.o node1
        

Pierwszy Makefile.1:

	all: node1
	node1: node1.cpp
		g++ node1.cpp -o node1
	^  TAB ^^tutaj polecenia kompilowania składników po dwukropku^ 
        

Aby użyć wcięcia używa się TABULATORA klawiszem TAB. Po poleceniu all: nazwa programu końcowego, polecenie node1: informuje jakich składowych trzeba, aby go uzyskać i jak te składowe skompilować za pomocą g++ podano poniżej po TAB.

Drugi Makefile.2:

	all: node1
	node1: node1.o
	        g++ node1.o -o node1
	node1.o: node1.cpp
	        g++ -c node1.cpp -o node1.o
	^  TAB ^^tutaj polecenia kompilowania składników po dwukropku^ 
	

Tym razem najpierw uzyskujemy plik obiektowy node1.o poleceniem g++ -c, a później plik node1 linkując plik node1.o poleceniem g++ -o wynik_linkowania. To rozbicie ma większy sens jak jest więcej plików tekstowych i wynikających z nich plików obiektowych, wtedy make kompiluje tylko te źródła, które mają datę wcześniejszą od odpowiadających im plików obiektowych czyli make oszczędza czas programisty kompilując tylko zmienione źródła.

Trzeci Makefile.3:

	all: node1
	node1: node1.o
	        g++ $^ -o $@
	.c.o:
	        g++ -c $<
	

Tutaj z kolei mówiąc w skrócie $^ zastępuje nazwy plików po dwukropku, $@ zastępuje plik wynikowy itd.

Ostatni Makefile:

	PROG=node1
	CXXFLAGS=-g
	all: $(PROG)
	$(PROG): $(PROG).o
        	g++ $(CXXFLAGS) $^ -o $@
	%.o : %.c
        	g++ $(CXXFLAGS) -c $<
	clean: 
        	rm *.o $(PROG)
	.PHONY: all clean
	

W tym makefilu dodano stałą CXXFLAGS, która zawiera flagi kompilacji, stałą PROG, która reprezentuje nazwę pliku wynikowego oraz nowsze domyślne tworzenie plików obiektowych za pomocą rozszerzeń: .o i .c wraz z dyrektywą .PHONY zabezpieczającą wykonanie się polecenia make przed sytuacją, kiedy w katalogu będziemy mieli pliki o nazwie all i/lub clean.

(2/2) Eclipse - krótki opis

Eclipse zintegrowane środowisko programistyczne (ang. rich client platform) powstało po udostępnieniu kodu Rational IBM światowej społeczności, a konkretnie Fundacji Eclipse (ang. Eclipse Foundation)) i umożliwia rozwijanie aplikacji w językach Java, C/C++, PHP, Android Java i wielu innych, modelowanie za pomocą UML, współpracę z serwerami baz danych poprzez system udostępniania i tworzenia wtyczek (ang. plugin) np. eclipse jest oficjalnym narzędziem firmy Google tworzącej m.in. oprogramowanie Android dla telefonów komórkowych, które opanowało już 75% rynku smartfonów i jest zainstalowane na blisko 400mln urządzeń. Wtyczka ADT (ang. Android Development Tools) umożliwia, jak wiele jej podobnych dodatków korzystających z funkcji wbudowanych w system tworzenia wtyczek Eclipse szablonów kodu, generowanie kodu, podpowiedzi kodu, refaktoryzację (reformatowanie kodu nie zmieniające działania, aby usunąć m.in. redundancję wywoływanych metod) i oczywiście debugowanie i testowanie.

Fundacja Eclipse ma siedziby w Portland i Ottawie. Projekty Eclipse dystrybuowane na licencji Eclipse Public License (EPL) umożliwiają zastosowanie w produktach komercyjnych, czego przykładowym efektem jest platforma programistyczna Nsight) NVIDII dla języka CUDA umożliwiająca wykonywanie programu i debugowanie na tej samej karcie graficznej.

Eclipse w najnowszej stabilnej wersji 32 lub 64-bitowej nazwanej „Juno” możemy pobrać dla systemu Windows, Mac OS X lub Linux3). Najbardziej uniwersalna wydaje się na początek wersja Eclipse IDE for Java Developers, która powinna mieć zainstalowany Marketplace klienta (podobny np. do Android Market itp.).

Następnie z menu Help wybieramy Install New Software i wpisujemy stronę z dodatkami do samego Eclipse Juno:

JUNO - http://download.eclipse.org/releases/juno 
Z pobranych grup oficjalnych eclipsowych wtyczek wybieramy grupę Programming Languages, a w nim np. C/C++ Development Tools, PHP Development Tools oraz grupę General Purpose Tools, a w nim Marketplace Client (jeśli już nie jest zainstalowany). Całość ściąga się i instaluje na dysk po zaakceptowaniu ich licencji kolejno przyciskami Next i Finish.

Z pomocą Marketplace zainstalujemy wtyczki nie będące projektami Eclipse np. PyDev Python Development Tools, ADT, Maven itp. wpisując je w graficznym menu Help → Eclipse Marketplace i klikając przycisk z napisem Install. Wtyczki na linuksie instalują się w podkatalogach plugins features katalogu ~/.eclipse i stamtąd należy je przenieść (logując się na roota czyli administratora) do katalogu /usr/lib/eclipse-4.2/dropins/, aby były dostępne dla wszystkich użytkowników. Pozostały katalog ~/.eclipse należy usunąć i platformę Eclipse uruchomić ponownie. Odtworzy ona katalog ~/.eclipse z nowymi ścieżkami dla wtyczek dostępnych tym razem globalnie. Naturalnie każdy użytkownik dalej może instalować inne rozszerzenia Eclipse na swoim katalogu, za wyjątkiem tych umieszczonych w katalogu dropins.

Możemy też nadać katalogowi /usr/lib/eclipse-4.2 z całą zawartością prawa użytkownika np. chown -R guest:users /usr/lib/eclipse-4.2 i instalować pluginy w nim bezpośrednio. Jednak, aby każdy użytkownik mógł uruchomić eclipse należy spowrotem nadać wspomnianemu katalogowi prawa roota: chown -R root:root /usr/lib/eclipse-4.2, a przed updatem pluginów ponownie prawa użytkownika guest.

Jeden ze wspomnianych sposobów powinien działać na każdej instalacji Eclipse.

Jakość programowania z wykorzystaniem Eclipse poprawia się z roku na rok, szczególnie wtedy, gdy staje się oficjalną platformą programistyczną dla profesjonalnych firm, które tworzą własne coraz doskonalsze wtyczki. Nie jest prawdą twierdzenie, że to, co jest za darmo, nie może być dobre, gdyż np. perfekcyjnie działające sterowniki do kupionych peryferiów i kart komputerowych też są udostępniane bezpłatnie. W tym przypadku duża ilość darmowych profesjonalnych rozszerzeń do eclipse świadczy o wzrastającym zainteresowaniu wolnodostępnym oprogramowaniem wykorzystywanym w firmach informatycznych.

Przykład tworzenia projektu w pluginie C++ zwanym CDT na oficjalnej stronie Eclipse. Dla lubiących poczytać po polsku instrukcja z Internetu pod system MSWin oraz krótka instrukcja pod system Ubuntu.

Wróć do spisu (kliknij)


Lab2

Programowanie w C++ należy zacząć od rozpisania dynamicznych struktur danych jakie będą używane w programie, następnie należy z klas tych struktur jako klas bazowych i składowych wyprowadzić klasy potomne związane z danym projektem czyli przedstawić mi specyfikację - opis wybranych struktur danych w klasach bazowych i składowych i klas potomnych. Klasy struktur danych można pobrać z dostępnych bibliotek np. boost, STL lub innych. Przykład struktury C++ (filmy na Youtube) został przedstawiony wraz z kodem źródłowym do kolejnych odcinków.

Na razie jednak proszę o zrobienie oficjalnego zadania z konstruktorami i destruktorami klasy JakasKlasa z materiałów wykładowych w ERES z pliku Konstruktor.zip.

Uwagi do Code::Blocks!

Aby uzyskać większe litery w edytorze należy wybrać w górnym menu Settings/Editor settings, kliknąć na przycisk Choose przy napisie na górze "This is sample text" i zmienić rozmiar na co najmniej 14.
Aby uzyskać większe litery i więcej linii w konsoli uruchamianej przez codeblocks należy wybierając w górnym menu Settings/Environment/Terminal to launch console programs wstawić zamiast komendy xterm -T $TITLE -e polecenie xterm -geometry 100x90 -fn 10x20 -T $TITLE -e.
Tworzymy pusty projekt, dodajemy za pomocą Add Files katalog z kodami źródłowymi i kompilujemy.

Uwagi do Eclipse!

Tworzymy projekt o nazwie Konstruktor i importujemy File/Import/General/File System kody źródłowe projektu.
Aby uzyskać większe litery w edytorze klikamy na Window/Preferences/General/Appearance/Color and Fonts/C C++/Editor/C C++ Editor Text Font oraz przycisk obok Edit ustawiamy rozmiar 14.

Przykład Makefile z biblioteką

Makefile do Konstruktor.cpp itd. jest niżej zamieszczony. W wyniku powstaje plik wykonywalny ./proe2 , ale przed jego uruchomieniem należy wykonać w powłoce:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:. 

Wspomniany Makefile:

PROG=proe2
MAIN=Konstruktor
BIBL=JakasKlasa
$(PROG): $(MAIN).o lib$(BIBL).so
        g++ $^ -o $@
lib$(BIBL).so: $(BIBL).o
        g++ -shared $^ -o $@
        #g++ -fPIC -shared $^ -o $@
        #użyć opcji -fPIC jak samo shared nie działa
%.o: %.c
        g++ -c $<
$(BIBL).o: $(BIBL).h
$(MAIN).o: $(MAIN).h $(BIBL).h
clean:
        rm *.o $(PROG) *.so
.PHONY: clean

Dodatkowe zadanie dla zaawansowanych lub praca domowa dla początkujących to przygotować klasę Number przechowującą liczbę zmiennoprzecinkową w sekcji prywatnej z metodami dodającymi do niej liczby lub obiekty Number czyli przechowywane przez nie liczby. Do niej na następnym laboratorium będzie można dodać przeciążone operatory np. dodawania i strumienia wyjściowego, zatem można się przygotować wstępnie w domu, a na laboratorium dodać operator wskazany przeze mnie.

Wróć do spisu (kliknij)


Lab 3


Oceniane laboratorium z przeciążaniem operatorów.

Wróć do spisu (kliknij)


Projekty dla lab 4, 5:


I. Tematy projektów do rozwijania w dwóch etapach jako projekt I i projekt II (więcej punktów ma projekt ze strukturami danych w klasach bazowych oraz danymi i algorytmami ich przetwarzania w klasach potomnych, choć oczywiście można problem przedstawić na swój własny sposób równie skuteczny, choć może mniej uniwersalny):
  1. Sieć wzajemnych powiązań (Social Network) typu partnerzy np. do tańca, grupy zainteresowań, rodziny. Zaimplemetować zapytania przeszukujące graf i wypisujące np. ludzi z jednym tylko partnerem, rodziny z dziećmi, grupy tylko z pięcioma członkami itp.
  2. Sieć dróg oparta na grafie, gdzie węzły są skrzyżowaniami, a pasy na drodze łukami z parametrami średniej prędkości samochodów oraz zanotowanymi połączeniami z innymi łukami wychodzącymi ze skrzyżowania itd. Zaimplementować znajdowanie dróg połączeń o największej przepustowości między danymi węzłami.
  3. Drzewa genealogiczne rodów. Wypisać np. rody, które wymarły lub które wymarły w linii męskiej tzn. mąż mógł przyjąć nazwisko żony z tego rodu itd.
  4. Struktura sklepu internetowego ze sprzętem i podzespołami elektronicznymi w postaci drzewa produktów i ich rodzajów, gdzie rodzaje są w węzłach pośrednich, a końcowe liście to produkty i podzespoły. Wypisać z drzewa np. rodzaje sprzętu z dwoma lub trzema podgrupami wychodzącymi z nich.
  5. Implementacja firmowej sieci internetowej na grafie, gdzie węzły pośrednie to routery z połączeniami o różnej przepustowości, a węzły końcowe to zwykłe komputery. Podać routery bez komputerów lub np. routery z dwoma kopmuterami, znajdować połączenia o jak największej przepustowości.
  6. Silnik (ang. engine) do gier karcianych np. kościany poker.
  7. Silnik (ang. engine) do gier planszowych np. gra L, czwórki itp.
  8. Silnik (ang. engine) do gier tekstowych np. mud.
  9. Silnik (ang. engine) do gier arcade np. arcade widok z góry lub z boku.
  10. Silnik (ang. engine) do gier własnego pomysłu.
  11. Zamiana struktury XML na JSON oraz JSON na XML.
  12. Baza znanych par klucz-wartość wczytywana i zapisywana do plików, gdzie klucz jest hashowany oparta na hashmapie. Można użyć programów, które znajdują funkcje hashujące to np. gperf lub cmph
  13. Równoważenie drzewa BST (binarnego drzewa przeszukiwań) algorytmem DSW. Otrzymujemy posortowaną bazę klucz-wartość.
  14. Operacje na grafach do wyboru np. ścieżka Dijkstry, kolorowanie grafu, problem komiwojażera, problem chińskiego listonosza, problem marszrutyzacji, problem kojarzenia małżeństw.
II. Tematy projektów tylko do etapu pierwszego jako projekt I dla zupełnie początkujących
  1. Klasy bazowe grupy, ludzie i klasy pochodne prezesi, członkowie grupy, fankluby, kółka zainteresowań itp. Przeciążyć operator strumienia i dodawania i odejmowania z grupy i parę według własnego pomysłu.
  2. Klasy bazowe samochody, ludzie i klasy pochodne samochody_osobowe, ciężarowe, van i maluch. Przeciążyć operator strumienia i dodawania i odejmowania ze stanu posiadania danego człowieka i parę według własnego pomysłu.
  3. Klasy bazowe wykłady, ludzie i klasy pochodne wykłady obowiązkowe, wykłady obieralne, studenci, wykladowcy, laboranci. Przeciążyć operator strumienia i dodawania i odejmowania z grupy wykładowej studentów i nauczyciela i parę według własnego pomysłu.
  4. Klasy bazowe strony, ludzie i klasy pochodne blogi, strony wiadomosci, gazet, firm itp., administratorzy, goście, zalogowani. Przeciążyć operator strumienia i dodawania i odejmowania z grupy przeglądających lub zmieniających strony i parę według własnego pomysłu.
  5. Klasy bazowe mieszkania, ludzie i klasy pochodne blok, dom, bliźniak, właściciel, lokator itd. Przeciążyć operator strumienia i dodawania i odejmowania z do mieszkania lokatorów i właścicieli i parę według własnego pomysłu.
  6. Klasy bazowe pociągi (składowa wagony), ludzie i klasy pochodne pasażerowie, konduktorzy, kierownicy, pośpieszne, miejskie (SKM), regionalne (składowe kuszetki, miejsca siedzące, 1 i 2 klasa) itd. Przeciążyć operator strumienia i dodawania i odejmowania z pociągu jadącego o określonej godzinie i dniu oraz parę operatorów według własnego pomysłu.
  7. Klasy bazowe obiekty kosmiczne, klasy pochodne gwiazdy, kwazary, galaktyki, czarne dziury, konstelacje, gwiazdozbiory. Przeciążyć operator strumienia i dodawania i odejmowania obiektów z gwiazdozbiorów oraz parę operatorów według własnego pomysłu.
  8. Klasy bazowe atrakcje turystyczne, klasy pochodne zabytki, muzea, rozrywki dla dzieci np. Rabkoland, trasy piesze, rowerowe i samochodowe. Przeciążyć operator strumienia i dodawania i odejmowania atrakcji z tras oraz parę operatorów według własnego pomysłu.
  9. Klasy bazowe leki, choroby, klasy pochodne zioła, antybiotyki, placebo np. homeopatia, magia, schorzenia układu trawiennego, oczu itd. Przeciążyć operator strumienia i dodawania i odejmowania leków z leczonych chorób oraz parę operatorów według własnego pomysłu.
  10. Klasy bazowe punkty na mapie, klasy pochodne pizerie, restauracje, kina, teatry, sąsiedztwo punktów. Przeciążyć operator strumienia i dodawania i odejmowania punktów z większych lokalizacji oraz parę operatorów według własnego pomysłu.

III. Tematy projektów z poprzednich semestrów:

  1. Gra logiczna (propozycja studenta) wybrana z gier na stałej plaszy lub rozbudowywanej za pomocą kart (Sabotażysta, Carcassone - przykład w Javie) napisana np. w bibliotece Allegro. Do wyboru biblioteki OpenGL, SDL, Allegro, mechanizmy Posix threads, openmp, shared memory i wiele innych) np.: gra w środowisku graficznym z wykorzystaniem wybranych bibliotek: SDL, OpenGL, Allegro, ClanLib, BoxD, FLATLAND, OGRE, IRRLICHT, Crystal Space, Bullet Physics, ENet, HawkNL i podobnych do nich. Uwaga! Na Solarisie działają trzy pierwsze biblioteki. Przykładowy program zaliczający programowanie w C na stronie http://www.allegro.cc/depot/QuixoGame/ Gry logiczne: Lech Pijanowski "Przewodnik gier". Możliwość grania z komputerem. Uproszczone wersje tych bardziej rozbudowanych gier. Kryje się w tym punkcie, jak można się domyślić, kilka tematów projektów.
  2. Szyfrowanie i deszyfrowanie metodą XTEA plików tekstowych i binarnych. Jako trzeci projekt można dodać menu graficzne.
  3. Implementacja filtru blooma (ang. Bloom filter). Można skorzystać z przykładowego kodu. Jako trzeci projekt można dodać implementację algorytmu Karpa-Rabina, przykład na stronie.
  4. Wyszukiwanie wzorców w plikach tekstowych algorytmem Boyera i Moore'a oraz dla porównania algorytmem Knutha-Morrisa-Pratta. Dla testu rozwiązania projekt na SPOJU
  5. Porównanie różnych algorytmów sortowania opisanych filmami na Youtube np. czasu wykonania dla różnej wielkości danych wejściowych.
  6. Dodanie menu graficznego dla parametrów algorytmów z końca strony wiki o operacjach na plikach, a dokładniej jednego przykładu generowania plików graficznych. Można także dodać okno z wyświetlanym plikiem graficznym wygenerowanym po zmianie parametrów.
  7. Przygotowanie do bezstratnej kompresji algorytmami transformaty Burrowsa-Wheelera oraz algorytmu Move To Front, a następnie kompresja i dekompresja jednym z wybranych algorytmów. Porównać kompresję plików nie przygotowanych i przygotowanych.
  8. Znajdowanie najkrótszej ścieżki algorytmem Dijkstry na grafach.
  9. Operacje na plikach excela w podanym formacie XML Spreadsheet. Wczytywanie macierzy w formacie XML(XLS), przykładowe operacje na nich i zapisywanie wyników do plików XML.
  10. Operacje na plikach excela w podanym formacie XML Spreadsheet. Wczytywanie prostych tabel w formacie XML(XLS) do zaprogramowanego silnika małej bazy, operacje na nich i zapisywanie wyników do plików XML.
  11. Operacje na plikach html w podanym formacie HTML. Wczytywanie prostych tabel w formacie html do zaprogramowanego silnika małej bazy, operacje na nich i zapisywanie wyników do plików HTML.
  12. Operacje na plikach html w podanym formacie HTML. Wczytywanie prostych macierzy w formacie html, przykładowe operacje na nich i zapisywanie wyników do plików HTML.
  13. Konwerter tabel w podanym formacie XML Spreadsheet na format html i spowrotem z HTML do XLS.
  14. Konwerter plików w formacie txt do formatu EPUB książek i gazet elektronicznych. Przykłady konwertowanych plików.
  15. Kalkulator macierzy. Zaimplementować dodawanie, odejmowanie, mnożenie przez skalar, mnożenie. Wprowadzanie macierzy dowolnego rozmiaru w formacie [[a,b],[c,d]] lub zwykłym a b \n c d z pliku. Program liczyć też ma wyznacznik macierzy kwadratowej dowolnego rozmiaru. Próba zrównoleglenia rozpisania na wątki, w pamięci shared lub w inny sposób generuje dodatkowe punkty. Dynamiczną macierz w zestawie programów transformujących na różny sposób macierze, czytających ze standardowego wejścia i wypisujących na standardowe wyjście np. cat macierz.txt | prog1 | prog2 | prog3 | prog4 > macierzwynikowa.txt
  16. Szyfrowanie i deszyfrowanie metodą Polibiusza i łamanie szyfru metodą statystyczną
  17. Szyfrowanie/deszyfrowanie szyfrem VMPC polskiego geniusza prawie o randze przedwojennego złamania szyfru Enigmy ;). Jest to mocna odmiana niezbyt już bezpiecznego szyfru RC4. Próba zrównoleglenia algorytmu. Klucz i tekst szyfrowany wczytywane z pliku.
  18. Szyfrowanie/deszyfrowanie szyfrem Enigma. Próba zrównoleglenia algorytmu. Konkretny przykład tutaj. Klucz i tekst szyfrowany wczytywane z pliku.
  19. Kompresja/dekompresja algorytmem Huffmana. Strona z opisami algorytmów
  20. Kompresja/dekompresja algorytmem LZW czyli LZ-78. Strona z opisami algorytmów
  21. Rozwiązywanie gry L za pomocą algorytmu własnego pomysłu. Strona wiki o grze L.
  22. Rozwiązywanie gry 3-spot za pomocą algorytmu własnego pomysłu. Strona wiki o grze 3 Spot.
  23. Rozwiązywanie gry w betoniarki za pomocą algorytmu własnego pomysłu. Strona wiki o grze w betoniarki. Potrzebnych co najmniej dwóch studentów zawodników.
  24. Kompresja/dekompresja algorytmem Shannona-Fano. Strona z opisami algorytmów
  25. Kompresja/dekompresja algorytmem kompresji arytmetycznej. Strona z opisami algorytmów
  26. Kompresja/dekompresja algorytmem LZ-77. Strona z opisami algorytmów
  27. Rozwiązywanie permutrixa za pomocą algorytmu własnego pomysłu. Strona permutrixa.
  28. Rozwiązywanie gry w mrówki za pomocą algorytmu własnego pomysłu. Strona wiki o grze w mrówki. Potrzebnych co najmniej czterech studentów zawodników.
  29. Rozwiązywanie gry w trójkąty za pomocą algorytmu własnego pomysłu. Strona wiki o grze w trójkąty. Potrzebnych co najmniej dwóch studentów zawodników.
  30. Rozwiązywanie gry w microwars za pomocą algorytmu własnego pomysłu. Strona wiki o grze w microwars. Potrzebnych co najmniej dwóch studentów zawodników.
  31. Napisać program obliczający algorytmem Nussinov-Jacobson składanie się łańcucha RNA złożonego z czterech liter A,G,C,U. A tworzy parę z U, a G tworzy parę z C. Następnie zobrazować graficznie pętle RNA. A tworzy parę z U, a G tworzy parę z C.
  32. Napisać program obliczający algorytmem Wąsiewicz-Tomczuk składanie się łańcucha DNA złożonego z czterech liter A,G,C,T. A tworzy parę z T, a G tworzy parę z C. Następnie za dodatkowe punkty zrównoleglić za pomocą posix threads lub openmp lub funkcji fork i shared memory obliczanie algorytmem Wąsiewicz-Tomczuk składanie się łańcucha DNA złożonego z czterech liter A,G,C,T. A tworzy parę z T, a G tworzy parę z C.
  33. Szyfrowanie/deszyfrowanie szyfrem Vigenera. Próba złamania szyfru bez klucza. Klucz i tekst szyfrowany wczytywane z pliku.
  34. Szyfrowanie/deszyfrowanie szyfrem harcerskim (do wyboru w programie). Próba złamania szyfru. Klucz i tekst szyfrowany wczytywane z pliku.
  35. Szyfrowanie/deszyfrowanie szyfrem one-time pad. Opis zastosowań po polsku. Zrównoleglenie algorytmu lub próba złamania szyfru. Klucz i tekst szyfrowany wczytywane z pliku.
  36. Szyfrowanie/deszyfrowanie szyfrem Solitare. Zrównoleglenie algorytmu. Klucz i tekst szyfrowany wczytywane z pliku.
  37. Sortowanie przez wstawianie (insertion sort ), przez selekcje (selection sort), sortowanie stogowe (heap sort) tablicy liczb zmiennoprzecinkowych. Wybór możliwości losowania danych i wprowadzania przez użytkownika.
  38. Sprawdzanie poprawności wbudowanego generatora liczb losowych (rand, randn) dla wątków równoległych. Stworzenie histogramu krotności pojawiania się poszczególnych liczb w wygenerowanym przy pomocy generatora na zbiorze liczb całkowitych (wartości całkowite, np. z przedziału 0-10). Liczbę losowań, jak również przedział liczb całkowitych zadaje użytkownik programu. Istnieje również możliwość wyboru domyślnych wartości tych parametrów. Histogram może być reprezentowany tekstowo np. jako tabelka.
  39. Pisanie wierszy. Napisać program, który pisze wiersze. Problem należy rozwiązać tak, że program ma korzystać ze słownika rzeczowników, przymiotników i czasowników, i budować wiersz na dowolnej zasadzie, np. rymy typu abab, kolejność słów: rzeczownik, przymiotnik, czasownik (lub dowolne inne zasady). Rym musi zostać tak potraktowany, aby rzeczywiście był rymem, czyli ostatnie 3-4 znaki wyrazów muszą być identyczne. Długość słownika warunkuje bogactwo języka.

Wróć do spisu (kliknij)




Odnośniki do dodatkowych materiałów


Instalacja Eclipse CDT i struktury C++ na filmach do pracy domowej:
Kursy języka C++ i C:

Książki o programowaniu i nie tylko - za darmo:

Strony dla programistów:
Make - tworzenie makefile'a:
Narzedzia do dokumentowania kodu:
Autoconf tutorial:
Przykładowy program w Allegro:
Przykładowe drzewa binarne w C:

Wróć do spisu (kliknij)