PO2017: Wejściówka na lab.12

Zaprojektuj i zaimplementuj cztery klasy, które na zajęciach 12 posłużą jako klasy bazowe. Klasy reprezentują pojęcia:

  1. silnik samochodowy – zawiera pola przechowujące cechy wspólne dla wszystkich silników (moc, wymiary).
  2. samochód – zawiera pola przechowujące cechy wspólne dla wszystkich samochodów (cena, rodzaj silnika).
  3. urządzenie optyczne – zawiera pola przechowujące cechy wspólne dla wszystkich takich urządzeń (zoom, waga).
  4. osoba na uczelni – zawiera pola przechowujące cechy wspólne dla wszystkich takich osób (imię i nazwisko, adres e-mail).

Wszystkie pola klasy bazowej powinny być zadeklarowane jako protected. Dla każdego z pól powinny istnieć odpowiednie getery i setery. Ponadto każda klasa musi mieć metodę wypisz, która wypisze w oknie konsoli wartości wszystkich pól.

Do wszystkich klas zaprojektuj po trzy konstruktory: konstruktor domyślny, kopiujący oraz z argumentami przechowującymi wartości dla inicjalizacji wszystkich pól.

Dodatkowo każda klasa bazowa powinna mieć jeszcze pole nast, zadeklarowane jako public i zawierające wskaźnik typu takiego jak klasa bazowa. Tym sposobem klasa bazowa będzie mogła być wykorzystana jako element listy dynamicznej jednokierunkowej.

Zademonstruj poprawność działania zaprojektowanych klas, pisząc w funkcji main kod, budujący dla każdego z typów danych listę dynamiczną jednokierunkową zawierającą 5 elementów. Do tworzenia elementów listy użyj konstruktorów domyślnych. Po utworzeniu każdej z list wywołaj metodę wypisz na rzecz każdego z elementów listy. Na koniec usuń wszystkie listy.

PO2017: Wejściówka na lab.11

W programie będącym rozwiązaniem wejściówki na lab.10 do klasy MojaKlasa (reprezentującej grupę studencką) dodaj metodę szukaj, działającą rekurencyjnie, tj. tak jak pokazano na slajdzie 143, wykład 11. Metoda szukaj znajduje w liście dynamicznej obiekt – grupę studencką o podanym ID (dodaj pole ID do klasy MojaKlasa). Do klasy Wykladowca również dodaj metodę szukaj, która wywołuje szukaj na rzecz grup studenckich w liście dynamicznej.

W funkcji main po utworzeniu obiektu reprezentującego wykładowcę oraz listy co najmniej pięciu grup studenckich przypisanych do tego wykładowcy, wywołaj na rzecz tego obiektu metodę szukaj, która znajduje w jego liście grupę studencką o podanym ID. Przetestuj działanie szukaj zarówno dla przypadku, gdy grupa studencka o wskazanym ID istnieje, oraz dla przypadku, gdy takiej brak.

W destruktorze klasy MojaKlasa zastosuj rekurencyjne usuwanie następnego elementu w liście (slajd 142, wykład 11) i wykorzystaj ten sposób usuwania list dynamicznych w destruktorze klasy Wykladowca.

PO 2017: Lab.10 – hint

Programy do napisania na lab.10 będą rozszerzeniem programów napisanych na lab.9. Dlatego warto w domu przejrzeć i dopracować kod swojego programu z lab.9, żeby nie był źródłem niespodzianek. Ale uwaga: jeżeli ktoś na lab.10 zacznie pisać swój program bazując na kodzie innym niż oddał na lab.9, może to zostać źle odebrane. Dlatego proszę programy z lab.9 tylko dopracować, a nie opracować od nowa.

PO2017: Wejściówka na lab.10

Do klasy MojaKlasa (https://troja.uksw.edu.pl/programowanie-obiektowe/kody-programow/: Program #6) dodaj pole nast, tak aby można było tworzyć listę dynamiczną jednokierunkową obiektów typu MojaKlasa.

Następnie zaprojektuj nową klasę Wykladowca, która zawiera pole typu MojaKlasa* wskazujące na listę dynamiczną jednokierunkową. Pole to ma pełnić rolę głowy dynamicznej listy grup studenckich przypisanych do danego wykładowcy. Klasa Wykladowca może też zawierać inne pola, jeżeli okażą się potrzebne.

Do klasy Wykladowca dodaj konstruktory:

  1. konstruktor domyślny, inicjalizujący obiekt tak, aby lista dynamiczna była pusta.
  2. konstruktor z argumentem reprezentującym nazwę pliku tekstowego. Plik zawiera listę kilku adresów e-mail. Konstruktor tworzy jeden obiekt dynamiczny typu MojaKlasa, do którego zostają zapisane adresy e-mail odczytane z pliku. Następnie obiekt ten jest dołączany do listy dynamicznej.
  3. konstruktor kopiujący, który tworzy kopię listy dynamicznej z obiektu podanego w argumencie wywołania.

oraz destruktor, który zwalnia wszystkie dynamicznie zaalokowane zasoby.

Do klasy Wykladowca dodaj metodę dodaj_klase dodającą nowy obiekt do listy dynamicznej. Argumentem wywołania metody jest nazwa pliku tekstowego z listą adresów mailowych. W metodzie tworzony jest nowy obiekt dynamiczny typu MojaKlasa, zapisywane są w nim adresy mailowe ze wskazanego pliku, a na koniec obiekt jest dołączany do listy.

Do klasy Wykladowca dodaj też metodę wypisz, która wypisuje w oknie konsoli wszystkie grupy studenckie przypisane do danego wykładowcy, tj. dla każdego elementu listy dynamicznej wypisuje wszystkie zapisane w nim niepuste adresy mailowe.

Zademonstruj działanie napisanego kodu: w funkcji main utwórz obiekty dynamiczne typu Wykladowca z wykorzystaniem wszystkich trzech konstruktorów, do wybranego z wykładowców dodaj kilka nowych grup studenckich (metodą dodaj_klase), po czym dla każdego z wykładowców wywołaj metodę wypisz. Na koniec usuń obiekty dynamiczne typu Wykladowca, przy czym z pomocą debuggera upewnij się, że destruktor za każdym razem prawidłowo zwolnił wszystkie dynamicznie zaalokowane zasoby.

Przygotuj odpowiedź na pytanie prowadzącego: ile razy w napisanym programie zostały wywołane konstruktory, które i w których miejscach kodu to nastąpiło. A ile razy zostały wywołane destruktory?

NMO 2017: slajdy – Część 6

NMOwyklad6-materialy.pdf

Zespoły implementujące algorytm roju cząsteczek do testów na BBOB wybierają wersję algorytmu ze współczynnikiem inercji (strona 3 slajdów, PSO with inertia weight parameter), który można następnie dowolnie tuningować w celu uzyskania lepszych wyników, np. zmieniać wartości w, c1 i c2, albo testować różne topologie sąsiedztwa.

BBOB – kolokwium I

We wtorek, 25.04 odbędzie się kolokwium I w formie prezentacji uzyskanych dokumentów. Prezentacja powinna trwać około 5 min. Najpierw omówienie algorytmu: jakie operatory, jakie parametry, jakie zdobyte doświadczenia (np. zaczynaliśmy od populacji X żeby na koniec zejść do Y osobników, wzmocniliśmy prawdopodobieństwo mutacji, itp.). Potem omówienie wyników. Skupiamy się przede wszystkim na wykresach z Rysunków 2 i 3. Będzie za mało czasu, aby omawiać wartości z tabelek.

Zwracam uwagę, że ocenianie są strategie ewolucyjne, tj. algorytm, w którym osobnik jest wyposażony w wektor współrzędnych X oraz wektor sigm. Sigmy mogą być wspólne (wtedy de facto jest to jedna zmienna) albo oddzielne dla każdej współrzędnej (wtedy jest to wektor). Dozwolone jest natomiast wszelkie tuningowanie, które tego ograniczenia nie narusza, czyli różne strategie selekcji, różne krzyżowania i formuły mutacji.

W trakcie prezentacji będzie odbywało się głosowanie. Wszyscy otrzymają karty do głosowania i będą wystawiać punkty pozostałym zespołom. Karty będą anonimowe.

Po prezentacjach odbędzie się liczenie punktów. Dwa najsłabiej ocenione zespoły uzyskują ocenę negatywną i będą musiały poprawić wyniki BBOB, ale już innym algorytmem – rojem cząsteczek (pozostawiam sobie prawo decyzji, czy tych zespołów będzie dwa, czy też ewentualnie może dołączy trzeci). Dlatego proponuję dziś jeszcze trochę poeksperymentować nad poprawieniem wyników i opracowaniem zaktualizowanych dokumentów. Ostateczne wersje dokumentów pdf razem z zzipowanym kodem źródłowym należy uploadować do moodle najpóźniej do jutra, do godz. 15:00. Prezentowane będą tylko dokumenty pdf pobrane przeze mnie z moodle. Ogłoszone wyniki będą nieoficjalne, ponieważ później przeprowadzę kontrolę antydopingową i przejrzę przesłane kody źródłowe.