Benczmarki

Poniżej przykładowe zestawy funkcji testowych:

  • Wybrane funkcje testowe pogrupowane pod względem ich cech specyficznych,
  • Wybrane funkcje testowe posortowane od najłatwiejszych do najtrudniejszych (kryterium bardzo subiektywne: autor zaimplementował pewien algorytm optymalizacyjny i porównanie odbywało się względem jakości rozwiązań zwracanych przez ten algorytm).

Należy wybrać z tego zestawu 6-8 funkcji o różnych cechach i różnym poziomie trudności i sprawdzić, dla których wyniki są satysfakcjonujące, a dla których nie bardzo..

Dodatkowo należy też porównać wyniki dla dwóch klas przestrzeni poszukiwań: do 5 wymiarów (np. przypadki 3D i 5D) oraz powyżej 5 wymiarów (np. 10D, 15D i 20D).

Wejściówka na ćwiczenia nr 8

Napisz program, który pobiera nazwę pliku od użytkownika, otwiera plik tekstowy o podanej nazwie w trybie do odczytu, odczytuje z niego liczbę dodatnią całkowitą, po czym zamyka go. Następnie zaczyna sprawdzać zręczność użytkownika: wyświetla na ekranie dowolny napis testowy, po czym oczekuje na wprowadzenie tego napisu przez użytkownika za pomocą klawiatury mierząc czas, jaki jest potrzebny użytkownikowi na wprowadzenie tego napisu. Do pomiaru czasu użyj funkcji time i difftime. Ta czynność pomiaru powtarzana jest tyle razy, ile wynosi liczba odczytana z pierwszego pliku. Rezultat każdego pomiaru czasu zapisywany jest do listy dynamicznej. Dla skończonej serii pomiarów zapisanych w liście obliczana jest średnia wartość. Po zakończeniu testu zręczności program pobiera od użytkownika jeszcze jedną nazwę pliku, otwiera go w trybie do zapisu i zapisuje tam całą zawartość listy dynamicznej oraz – w ostatnim wierszu – obliczoną wartość średnią. Na koniec plik jest zamykany a lista usuwana.

Uwagi:
Zaproponuj własny sposób sprawdzenia, czy plik o podanej nazwie istnieje. Następnie napisz funkcję, która jako argument wywołania przyjmuje nazwę pliku, a zwraca wartość zero, jeżeli pliku nie ma, oraz 1 – jeżeli istnieje. Użyj tej funkcji w swoim programie do sprawdzenia, czy pierwszy plik istnieje, a jeżeli nie (np. kiedy użytkownik zrobi błąd, źle podając nazwę tego pliku), poproś o ponowne podanie nazwy pliku. Użyj tej funkcji do sprawdzenia również, czy drugi plik – do zapisu – istnieje, a jeżeli istnieje, poproś użytkownika o ponowne podanie nazwy pliku do zapisu (chcemy chronić już istniejące pliki przed ich nadpisaniem nowymi danymi).

Do sprawdzania błędów związanych z dostępem do pliku wykorzystaj stałą errno a do generowania komunikatów funkcje strerror i perror. Wszelkie komunikaty o sytuacjach błędnych, jakie wystąpiły w trakcie pracy programu, wysyłaj do standardowego strumienia dla komunikatów o błędach stderr.

Napisz kod programu tak, aby obsłużył również inne sytuacje błędne, tj. np. kiedy pierwszy plik będzie pusty, lub będzie zawierał liczbę ujemną (przyjmij, że inny napis niż liczba całkowita nie może w nim wystąpić).

Część teoretyczna pracy dyplomowej – termin

W nieprzekraczalnym terminie do 6 maja oczekuję przesłania mi części teoretycznej pracy dyplomowej, tj.:

  1. Zdefiniowanie problemu badawczego (tutaj w przeglądzie literatury można wspomnieć nie tylko książkę Storma i Price’a czy polskojęzyczną książkę Kusiaka et al., ale również inne książki poświęcone algorytmom ewolucyjnym, np. Arabasa, czy Michalewicza, a także – co najważniejsze – różne rozwinięcia tego algorytmu, które prezentujecie na seminariach; każdemu takiemu rozwinięciu można poświęcić 2-3 zdania).
  2. Przyjęte postępowanie
  3. Metodologia badań

Wskazówki, co powinno znaleźć się w każdym z rozdziałów znajdują się na stronie www: Ramowe wymagania, w tym, w pliku: Szablon pracy dyplomowej
(dobrym terminem nadsyłania mi tych rozdziałów jest okres między świętami Wielkanocy a długim weekendem majowym).

Przed przystąpieniem do pisania proszę też zapoznać się ze wskazówkami adresowanymi do studentów Department of Computer Science, University of York, UK (link dostępny na samym dole strony www: Ramowe wymagania), a zwłaszcza:

  1. slajdy 11-12: żart, demonstrujący sposób interpretowania obserwacji badań eksperymentalnych
  2. slajdy 18-19: przykład, demonstrujący w jaki sposób dobrze konstruować hipotezę badawczą i jak dowodzić jej prawdziwości.

Uwaga: zwracam uwagę, że terminów seminarium jest tylko siedem, dlatego akceptowalna jest co najwyżej jedna nieobecność. Osoby, które nie pojawiły się na ostatnim seminarium, tym samym wyczerpały już swój limit nieobecności na ten semestr.

Wejściówka na ćwiczenia nr 7

Napisz program wczytujący z pliku listę rekordów (rekord to kolekcja kilku dowolnych wartości, każda ściśle określonego typu, występujących w ustalonej, zawsze tej samej kolejności). Wczytywane rekordy składają się z trzech pól i są zapisane w wierszach pliku tekstowego; każdy wiersz zawiera kolejno: nr indeksu studenta, nazwisko i ocenę, które rozdzielone są znakiem spacji. Rekord ma następującą strukturę:

struct para {
int nr_indeksu;
char nazwisko[30];
float ocena;
struct para *nast;
struct para *poprz;
};

W funkcji 'main’ pobierz od użytkownika nazwę pliku z danymi, otwórz ten plik w trybie do odczytu, a następnie wczytaj zawartość pliku do listy dynamicznej dwukierunkowej. W trakcie wczytywania program powinien wypisywać na ekranie aktualnie odczytywane wartości. Po wczytaniu każdego kolejnego wiersza dodaj nowy element w takim miejscu listy, aby pozostawała uporządkowana rosnąco względem nr indeksu studenta. Po zakończeniu zamknij plik i wypisz na ekranie zawartość listy (rekordy powinny być już wtedy posortowane). Przyjmij, że dane w pliku są zawsze poprawne, tj. wiersz zawsze zawiera trójkę prawidłowych napisów w tej samej kolejności.

Po utworzeniu listy usuń z niej elementy reprezentujące studentów, którzy mają ocenę niższą niż 4.

Następnie pobierz od użytkownika nazwę pliku do zapisu, otwórz plik o podanej nazwie w trybie do zapisu i zapisz do niego zawartość listy dynamicznej (stan już po usunięciu elementów). Po zakończeniu zapisywania zamknij plik i zakończ działanie programu.

Przygotuj odpowiedni plik tekstowy z prawidłowymi danymi wejściowymi i umieść go we właściwym katalogu. Przygotuj dane w pliku tak, aby rekordy reprezentujące studentów z oceną poniżej 4 były przemieszane z rekordami studentów z oceną 4 i wyższą niż 4 i aby znalazły się na początku, w środku i na końcu pliku oraz aby numery studentów w kolejnych wierszach nie były uporządkowane rosnąco.

Wejściówka na ćwiczenia nr 6

Napisz program wczytujący z pliku listę rekordów (rekord to kolekcja kilku dowolnych wartości, każda ściśle określonego typu, występujących w ustalonej, zawsze tej samej kolejności). Wczytywane rekordy składają się z trzech wartości. Wartości te są zapisane w jednym wierszu pliku tekstowego; każdy wiersz zawiera kolejno: nr indeksu studenta, nazwisko i ocenę, które rozdzielone są znakiem spacji. Rekord ma następującą strukturę:


struct para {
int nr_indeksu;
char nazwisko[30];
float ocena;
struct para *nast;
};

W funkcji 'main’ pobierz od użytkownika nazwę pliku z danymi, otwórz ten plik w trybie do odczytu, a następnie wczytaj zawartość pliku do listy dynamicznej jednokierunkowej. W trakcie wczytywania program powinien wypisywać na ekranie aktualnie odczytywane wartości. Po zakończeniu czytania zamknij plik. Przyjmij, że dane w pliku są zawsze poprawne, tj. wiersz zawsze zawiera trójkę prawidłowych napisów w tej samej kolejności.

Po odczytaniu wypisz w oknie konsoli elementy reprezentujące studentów, którzy mają ocenę niższą niż 4.

Następnie pobierz od użytkownika nazwę pliku do zapisu, otwórz plik o podanej nazwie w trybie do zapisu i zapisz do niego zawartość listy. Po zakończeniu zapisywania zamknij plik i zakończ działanie programu.

Przygotuj odpowiedni plik tekstowy z prawidłowymi danymi wejściowymi i umieść go we właściwym katalogu. Przygotuj dane w pliku tak, aby rekordy reprezentujące studentów z oceną poniżej 4 były przemieszane z rekordami studentów z oceną 4 i wyższą niż 4 i aby znalazły się na początku, w środku i na końcu pliku.

Do obsługi plików wykorzystaj funkcje 'fopen’, 'fclose’, 'fprintf’, 'fscanf’ i 'feof’. Wszystkie z biblioteki: 'stdio.h’.

Przetestowany, działający program uploaduj do systemu moodle jako rozwiązanie zadania „wejściówka” ćwiczenia nr 6.

Wejściówka na ćwiczenia nr 5

Napisz program wczytujący z pliku listę rekordów (rekord to kolekcja kilku dowolnych wartości, każda ściśle określonego typu, występujących w ustalonej, zawsze tej samej kolejności). Wczytywane rekordy składają się z trzech wartości. Wartości te są zapisane w jednym wierszu pliku tekstowego; każdy wiersz zawiera kolejno: nr indeksu studenta, nazwisko i ocenę, które rozdzielone są znakiem spacji. Rekord ma następującą strukturę:


struct para {
int nr_indeksu;
char nazwisko[30];
float ocena;
struct para *nast;
};

W funkcji 'main’ pobierz od użytkownika nazwę pliku z danymi, otwórz ten plik w trybie do odczytu, a następnie wczytaj zawartość pliku do tablicy (przyjmij, że liczba rekordów może być większa niż rozmiar tablicy – w kodzie wczytującym dodaj zabezpieczenie, które w razie zapełnienia tablicy przerywa wczytywanie; nadmiarowe dane z pliku powinny zostać wtedy zignorowane). W trakcie wczytywania program powinien wypisywać na ekranie aktualnie odczytywane wartości. Po zakończeniu czytania zamknij plik. Przyjmij, że dane w pliku są zawsze poprawne, tj. wiersz zawsze zawiera trójkę prawidłowych napisów w tej samej kolejności.

Po odczytaniu wypisz w oknie konsoli elementy reprezentujące studentów, którzy mają ocenę niższą niż 4.

Następnie pobierz od użytkownika nazwę pliku do zapisu, otwórz plik o podanej nazwie w trybie do zapisu i zapisz do niego zawartość tablicy (tylko tych komórek, które przechowują wczytane wcześniej dane). Po zakończeniu zapisywania zamknij plik i zakończ działanie programu.

Przygotuj odpowiedni plik tekstowy z prawidłowymi danymi wejściowymi i umieść go we właściwym katalogu. Przygotuj dane w pliku tak, aby rekordy reprezentujące studentów z oceną poniżej 4 były przemieszane z rekordami studentów z oceną 4 i wyższą niż 4 i aby znalazły się na początku, w środku i na końcu pliku.

Do obsługi plików wykorzystaj funkcje 'fopen’, 'fclose’, 'fprintf’, 'fscanf’ i 'feof’. Wszystkie z biblioteki: 'stdio.h’.

Przetestowany, działający program uploaduj do systemu moodle jako rozwiązanie zadania „wejściówka” ćwiczenia nr 5.

Dobre słowa kluczowe w zapytaniach do wyszukiwarki na najbliższy tydzień to: 'fopen’, 'fclose’, 'fprintf’, 'fscanf’ i 'feof’ w połączeniu z 'ansi c”.