Wejściówka na lab.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. Typ danych do przechowywania jednego rekordu ma następującą strukturę:

struct student {
        int nr_indeksu;
        char nazwisko[30];
        float ocena;
        struct student *nast;
        struct student *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. Po wczytaniu każdego kolejnego wiersza dodawaj nowy element w takim miejscu listy, aby pozostawała uporządkowana rosnąco względem nr indeksu studenta. W trakcie wczytywania program powinien wypisywać na ekranie aktualnie odczytywane wartości. Przyjmij, że dane w pliku są zawsze poprawne, tj. wiersz zawsze zawiera trójkę prawidłowych napisów w prawidłowej kolejności.

Po zakończeniu czytania zamknij plik i wypisz na ekranie zawartość listy (rekordy powinny być już wtedy posortowane).

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

Na koniec 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) w takim samym formacie, jak w pliku wejściowym, tj. każdy wiersz zawiera nr indeksu studenta, nazwisko i ocenę, które rozdzielone są znakiem spacji. 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:

  1. 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,
  2. numery studentów w kolejnych wierszach nie były uporządkowane rosnąco.

Wejściówka na lab.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. Typ danych do przechowywania jednego rekordu ma następującą budowę:

struct student {
	int nr_indeksu;
	char nazwisko[30];
	float ocena;
	struct student *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.

Zwracam uwagę na obowiązek zatwierdzenia oddawanej wejściówki poprzez kliknięcie na przycisk „do oceny”, o którym pisałem w moim poprzednim wpisie dostępnym tutaj.

Oddawanie zadań – przycisk „do oceny”

Niestety, daje się zauważyć, że wiele osób po zakończeniu pracy w laboratorium i uploadowaniu pliku do moodle nie klika przycisku „do oceny”. Dlatego ustaliliśmy z prowadzącymi ćwiczenia, że tuż po zajęciach będziemy wszyscy sprawdzać, czy zadania zostały potwierdzone jako „oddane do oceny” i jeżeli jakiś plik nie zostanie potwierdzony, natychmiast będzie wstawiana ocena zero bez oceniania jego zawartości. Na początek będzie to sprawdzane niezwykle rygorystycznie, aby dla przykładu ukarać zapominalskich, dlatego bardzo proszę wszystkich studentów o pamiętanie o tym obowiązku. W razie zapomnienia i w konsekwencji otrzymania oceny „zero” uprzedzam: wszelkie próby negocjacji są z góry skazane na niepowodzenie.

Powyższe restrykcje będą stosowane również wtedy, kiedy wejściówka nie została potwierdzona jako „oddana do oceny”. Ponadto plik wejściówki powinien mieć stempel czasowy ostatniej modyfikacji wcześniejszy, niż czas rozpoczęcia zajęć, na których wejściówka jest prezentowana. Jeżeli plik nie będzie zatwierdzony, lub będzie modyfikowany po czasie rozpoczęcia, wynik z zajęć zostanie zredukowany do zera. Ewentualne już wystawione oceny zostaną cofnięte. Ponieważ prawo nie działa wstecz, zgadzam się jednak, aby wszystkie niezatwierdzone wejściówki zostały zatwierdzone teraz. Jednak już od jutrzejszych zajęć zasada wchodzi w życie.

Wejściówka na lab.5

Napisz program, który:

1. Do struktury danych, podobnej do dwuwymiarowej tablicy dynamicznej prezentowanej na slajdzie 118, wykład 4 (uwaga: w zadaniu nie chodzi o utworzenie nowego typu danych za pomocą słowa kluczowego struct, ale o zaproponowanie sposobu powiązania ze sobą zależnościami kilku prostych tablic jednowymiarowych, tak aby wspólnie tworzyły pewną konstrukcję. Takich różnych konstrukcji można zaproponować wiele, w zależności od tego, czy mamy w nich przechowywać listę, graf, drzewo, etc. Dla wspólnego określenia tych konstrukcji używa się zwrotu struktury danych. Można o nich poczytać w wielu podręcznikach i w sieci, np. tutaj), wczyta z pliku tekstowego kilka liczb zapisanych w postaci binarnej. W każdym wierszu pliku znajduje się jedna liczba zapisana w taki sposób, że pierwszą cyfrą musi być zawsze 1, tj. np. 1001, 100, 10101111, 1110010, itp. Tak zapisane liczby mogą mieć różną liczbę znaków. W każdym wierszu struktury, którym ma być tablica elementów typu char, przechowywana będzie jedna wczytana liczba. Przyjmij, że liczba wierszy w pliku nie jest stała, ale nie większa niż n, tak aby było wiadomo, jakiej maksymalnej długości musi być pomocnicza tablica wskaźników. Alokowane dynamicznie tablice przechowujące kolejne ciągi binarne muszą być dokładnie takiej długości, aby zmieścił się cały C-napis reprezentujący daną liczbę binarną i nic więcej.

2. Dla każdego ciągu binarnego wywoła funkcję bin2int, która zwróci wartość typu int odpowiadającą podanej liczbie binarnej (np. dla ciągu binarnego 1001 będzie to wartość 9). Zwrócona wartość na być wypisana w oknie konsoli. Funkcja bin2int przyjmuje jako argument wywołania wskaźnik do tablicy przechowującej liczbę w postaci binarnej i zwraca odpowiednią wartość typu int. Funkcję bin2int trzeba napisać samemu.

3. Poprzestawia wczytane ciągi binarne w taki sposób, aby wszystkie ciągi, w których ostatnim znakiem jest zero, tj. reprezentujące liczby parzyste, występowały przed ciągami kończącymi się cyfrą 1 (liczbami nieparzystymi). Przemieszczenia w strukturze danych nie dokonuj poprzez kopiowanie wartości z jednych tablic dynamicznych do drugich, ale poprzez zamianę położeń wartości wskaźników do dynamicznych tablic przechowujących liczby w postaci binarnej. To ważne: aby zmienić porządek, nie wykonuj żadnych nowych alokacji zmiennych dynamicznych, a jedynie zamieniaj adresy w komórkach tablicy wskaźników. Uwaga: przygotuj kod również na sytuację, kiedy w pliku nie było ani jednej liczby parzystej, albo, kiedy nie było ani jednej liczby nieparzystej, albo kiedy plik był pusty.

4. Po zakończeniu przestawiania jeszcze raz wypisze w oknie konsoli wartości liczbowe dla wszystkich ciągów binarnych ułożonych wg nowego porządku korzystając z funkcji bin2int.

Zajęcia grup dr Dąbrowskiej we wtorek, 8 marca

Z powodu choroby jutrzejsze zajęcia z dr Dąbrowską nie odbędą się. Bardzo proszę wszystkich studentów z jej grup aby przyszli w tym tygodniu na zajęcia z innymi prowadzącymi:

  • Wtorek, 11:30 – 13:00: M. Szczepański, 1241
  • Wtorek, 13:15 – 14:45: M. Szczepański, 1241
  • Środa, 9:45 – 11:15: K. Trojanowski, 1221
  • Środa, 18:30 – 20:00: H. Zembrowski, 1241
  • Czwartek, 16:45 – 18:15: H. Zembrowski, 1241
  • Czwartek, 18:15 – 20:00: H. Zembrowski, 1241

W każdej z w/w grup jest po kilka miejsc wolnych (2, 3, lub 4, zależy od grupy). Bardzo proszę o zadanie sobie trudu i poszukanie dla siebie wolnych miejsc. Zdaję sobie sprawę, że czasem może przyjść więcej osób niż jest wolnych miejsc i wtedy ktoś będzie musiał zrezygnować. Ale proszę próbować. Wszyscy prowadzący są uprzedzeni o tej szczególnej sytuacji.

Jeżeli będą osoby, które nie znajdą sobie alternatywnych terminów zajęć w tygodniu, to będzie musiał zostać zorganizowany dodatkowy termin w sobotę. Szczegóły tego terminu sobotniego zostaną podane później w zależności od rozwoju sytuacji.