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