Część teoretyczna pracy dyplomowej – termin

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”.

Ogłoszenia organizacyjne

  1. Od tego tygodnia nie wolno już zmieniać grup laboratoryjnych. Przez pierwsze trzy tygodnie był czas na znalezienie sobie grupy i ta grupa, z którą zrealizowane zostały zajęcia nr 3, staje dla każdego studenta grupą macierzystą. Od tej pory zmiana może nastąpić tylko jednorazowo i w drodze wyjątku, np. że względu na chorobę lub inne ważne zdarzenie losowe.
  2. W przyszłym tygodniu na zajęciach laboratoryjnych zostaną rozdane zadania semestralne. Jak mówiłem na wykładzie, nie należy ich jeszcze teraz realizować, ponieważ nie było jeszcze na wykładzie materiału z programowania obiektowego. Myślę, że dobrym terminem rozpoczęcia prac nad zadaniem będzie czas między Wielkanocą a długim weekendem majowym.
  3. Grupa środowa, której zajęcia w tym tygodniu zostały odwołane, w przyszłym tygodniu będzie realizowała ćwiczenia nr 3.

Wejściówka na ćwiczenia nr 4

Zadeklaruj strukturalny typ danych 'struct para’ zdefiniowany tak, że zmienna takiego typu może przechowywać dwie wartości: napis oraz liczbę. W funkcji 'main’ zadeklaruj lokalną tablicę o długości 5, zawierającą elementy typu 'struct para’. Następnie napisz funkcję 'wiersz’, która będzie odczytywała dane z poszczególnych wierszy pliku. W pojedynczym wierszu zapisane są kolejno: nr indeksu studenta, nazwisko i ocena. Funkcja odczytuje dane z jednego wiersza, następnie ignoruje odczytany nr indeksu a do komórki tablicy wpisuje w odpowiednich polach tylko nazwisko i ocenę. Przyjmij, że w pliku może być dowolna liczba wierszy (jest możliwe również, że plik jest pusty), ale nie większa niż rozmiar tablicy. Przyjmij też, że dane w pliku są zawsze poprawne, tj. wiersz zawsze zawiera trójkę prawidłowych napisów w tej samej kolejności: numer, nazwisko i ocena.
Nagłówek funkcji ma wyglądać tak:
int wiersz(FILE* f, struct para *p)
gdzie 'f’ to wskaźnik do otwartego pliku, natomiast 'p’ to wskaźnik do komórki tablicy, do której mają zostać zapisane dane z jednego odczytanego wiersza pliku. Funkcja zwraca wartość zero, jeżeli odczyt zakończył się pomyślnie, a 1, jeżeli nie udało się odczytać kolejnej porcji danych ze względu na koniec pliku.

Przygotuj sobie odpowiedni plik tekstowy z prawidłowymi danymi w kilku wierszach i umieść go we właściwym katalogu.

W funkcji 'main’ pobierz od użytkownika nazwę pliku z danymi oraz nazwę pliku wyjściowego. Otwórz plik z danymi w trybie do odczytu, a plik wynikowy w trybie do odczytu. Następnie w pętli za pomocą funkcji 'wiersz’ odczytaj kolejne wiersze pliku zapisując dane w kolejnych komórkach tablicy. Każdą odczytaną komórkę tablicy zapisz od razu do pliku wynikowego tak, aby w kolejnych wierszach pliku znalazły się pary: nazwisko i ocena. Jeżeli nie cała tablica została zapełniona danymi, zapisz tylko tyle, ile zostało odczytanych z pliku wejściowego. Po zakończeniu pętli zamknij pliki, wyświetl w oknie konsoli zawartość tablicy i zakończ działanie programu.

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 4.

Różne przykłady zadań i problemów dotyczących tego rodzaju zastosowań można znaleźć w podręcznikach lub na forach, których tematem jest programowanie w ANSI C. Wujek gugiel wspiera szukających. Dobre słowa kluczowe na najbliższy tydzień to: 'fopen’, 'fclose’, 'fprintf’, 'fscanf’ i 'feof’ w połączeniu z 'ansi c’. Oczywiście niczego nie należy brać bezkrytycznie, każdy kawałek kodu warto zweryfikować wklejając do visuala i sprawdzając, jak naprawdę działa.

Hint:

Przygotowując się na ćwiczenia nr 4 warto przypomnieć sobie jak skonstruowany jest C-napis, oraz zapoznać się z funkcjami:

  • int isalpha(int c)
  • int islower(int c)
  • int isupper(int c)
  • int tolower(int c)
  • int toupper(int c)

Funkcje znajdują się w bibliotece ctype.h i służą do sprawdzania, czy dany znak jest literą i jakiego rodzaju (dużą czy małą) oraz do zamiany dużych liter na małe i małych na duże. Zadania pierwszego poziomu na ćwiczeniach 4 będą miały wspólne fragmenty z zadaniami poziomu 2 ćwiczeń nr 3, tj. będą dotyczyły konwertowania napisów do postaci zaszyfrowanych wg różnych reguł, oraz oczywiście będą dotyczyły pracy na plikach tekstowych (materiał ostatnio omawiany na wykładzie).