PO2017: 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.

NMO 2017: zajęcia we wtorek, 28.03

Informuję, że zajęcia NMO (wykład i laboratorium) we wtorek, 28.03, odbędą się planowo.

Po zliczeniu listów z deklaracjami udziału w WDI okazało się, że jest ich 8, co oznacza, że 10 osób z listy USOS nie przesłało mi takich deklaracji (w grupie jest zapisanych 18 osób i to licząc już z uwzględnieniem dwóch, którzy zrezygnowali i przysłali mi stosowną deklarację).

Osoby, które zamierzają się wybrać na WDI są oczywiście zwolnione z zajęć pod warunkiem, że na zajęciach będzie obecny reprezentant ich zespołu i zademonstruje wykonane badania eksperymentalne. Jeżeli wszystkie osoby z zespołu wybierają się na WDI, również są zwolnione, jednak odpowiednie pliki muszą zostać uploadowane do moodle przed terminem zajęć lab. Obejrzę je sam. Ponadto oczekuję wtedy od wszystkich nieobecnych członków zespołu potwierdzenia udziału w WDI.

PO 2017: 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 odwróć porządek elementów w liście dynamicznej, tak aby zaczynała się od ostatniego wczytanego elementu, a kończyła na pierwszym.

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 w takim samym formacie jaki miał plik wejściowy. Po zakończeniu zapisywania zamknij plik, usuń listę 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 zawierał co najmniej 4 rekordy. Do obsługi plików wykorzystaj funkcje fopen, fclose, fprintf, fscanf i feof. Wszystkie z biblioteki: stdio.h.

PO: ogłoszenia organizacyjne

  1. Ponieważ nadal dostaję listy z pytaniem o zgodę na odrobienie zajęć lab. w innej grupie, chciałem jeszcze raz potwierdzić: można JEDNORAZOWO przyjść do innej grupy aby odrobić tam zajęcia, jeżeli nie możecie Państwo być na uczelni w terminie swoich zajęć (z różnych powodów). Nie jest do tego potrzebna moja zgoda jako koordynatora przedmiotu. Potrzebna jest jedynie zgoda prowadzącego zajęcia, na które chcecie przyjść, oraz wolne stanowisko w pracowni komputerowej.
    Wszyscy prowadzący generalnie zgadzają się na takie zamiany, ALE POTEM.. to Państwa obowiązkiem jest dopilnować, aby informacja o zdobytych punktach dotarła do waszego prowadzącego zajęcia lab. ponieważ z zasady nie dopisujemy punktów nieswoim studentom. Standardowa droga, to mail z prośbą, aby informacja o zdobytych punktach została przesłana do waszego prowadzącego. To z reguły kończy sprawę, bo prowadzący często wymieniają się informacjami. Proszę jednak potem upewnić się u swojego prowadzącego, czy ta informacja dotarła i czy zdobyte punkty zostały wam zapisane.
  2. Konsultacje mam we wtorki od godz. 12:00 do 13:00. Pokój 1228, bud. 12. Informacja o tym znajduje się na mojej stronie w USOS.
  3. Tematy zadań semestralnych zostaną rozdane w tygodniu: 3-9 kwietnia. Programy muszą nie tylko działać zgodnie z opisem, ale przede wszystkim wykorzystywać odpowiednie konstrukcję programowania obiektowego, których lista zostanie podana przez prowadzących przy okazji rozdawania tematów.

PO 2017: Wejściówka na Lab.5

Napisz program, który:

  1. Do struktury odpowiadającej dwuwymiarowej tablicy dynamicznej podobnej do tej prezentowanej na slajdzie 121, wykład 4, 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, ale nie większą niż k. 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.
    (uwaga: w poleceniu powyżej 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. http://www.algorytm.org/klasyczne/)
  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 napis-liczbę w postaci binarnej i zwraca odpowiednią wartość typu int. Funkcję bin2int trzeba napisać samemu.
  3. Posortuje wczytane ciągi binarne w taki sposób, aby liczby całkowite reprezentowane przez ciągi były uporządkowane rosnąco. Przemieszczenia ciągów binarnych 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 ciągi binarne. To ważne: aby zmienić porządek, nie wykonuj żadnych alokacji nowych tablic dynamicznych, a jedynie zamieniaj adresy w komórkach tablicy wskaźników. Zastosuj dowolne sortowanie. Uwaga: przygotuj kod również na sytuację, 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.