to get the file
Transkrypt
to get the file
Metodyka i Technika Programowania Laboratorium 4 Typ wyliczeniowy Obsługa plików Opracował: mgr inż. Leszek Ciopiński Wstęp: Typ wyliczeniowy Służy do tworzenia zmiennych, które powinny przechowywać tylko pewne z góry ustalone wartości: enum Nazwa {WARTOSC_1, WARTOSC_2, WARTOSC_N }; Na przykład można w ten sposób stworzyć zmienną przechowującą kierunek: enum Kierunek {W_GORE, W_DOL, W_LEWO, W_PRAWO}; enum Kierunek kierunek = W_GORE; którą można na przykład wykorzystać w instrukcji switch switch(kierunek) { case W_GORE: printf("w górę\n"); break; case W_DOL: printf("w dół\n"); break; default: printf("gdzieś w bok\n"); } Tradycyjnie przechowywane wielkości zapisuje się wielkimi literami (W_GORE, W_DOL). Tak naprawdę C przechowuje wartości typu wyliczeniowego jako liczby całkowite, o czym można się łatwo przekonać: kierunek = W_DOL; printf("%i\n", kierunek); /* wypisze 1 */ Kolejne wartości to po prostu liczby naturalne: domyślnie pierwsza to zero, druga jeden itp. TiMP1 Instrukcja 4 1 Możemy przy deklarowaniu typu wyliczeniowego zmienić domyślne przyporządkowanie: enum Kierunek { W_GORE, W_DOL = 8, W_LEWO, W_PRAWO }; printf("%i %i\n", W_DOL, W_LEWO); /* wypisze 8 9 */ Co więcej liczby mogą się powtarzać i wcale nie muszą być ustawione w kolejności rosnącej: enum Kierunek { W_GORE = 5, W_DOL = 5, W_LEWO = 2, W_PRAWO = 1 }; printf("%i %i\n", W_DOL, W_LEWO); /* wypisze 5 2 */ Traktowanie przez kompilator typu wyliczeniowego jako liczby pozwala na wydajną ich obsługę, ale stwarza niebezpieczeństwa - można przypisywać pod typ wyliczeniowy liczby, nawet nie mające odpowiednika w wartościach, a kompilator może o tym nawet nie ostrzec: kierunek = 40; Źródło: http://pl.wikibooks.org/wiki/C/Typy_z%C5%82o%C5%BCone#Typ_wyliczeniowy dostęp: 8 listopada 2009 TiMP1 Instrukcja 4 2 Zadania: Poniższe zadania należy wykonać w następującym szablonie w funkcjach określających numer wykonywanego zadania: plik: main.c: #include <stdio.h> #include <stdlib.h> void zad4a(){ printf("Zadanie 4A:\n"); //od tej linii rozpoczyna się zadanie //przed tą linią kończy się zadanie } void zad4b(){ printf("\n\nZadanie 4B:\n"); //od tej linii rozpoczyna się zadanie //przed tą linią kończy się zadanie } void zad4c(){ printf("\n\nZadanie 4C:\n"); //od tej linii rozpoczyna się zadanie //przed tą linią kończy się zadanie } void zad4d(){ printf("\n\nZadanie 4D:\n"); //od tej linii rozpoczyna się zadanie //przed tą linią kończy się zadanie } void zad4e(){ printf("\n\nZadanie 4E:\n"); //od tej linii rozpoczyna się zadanie //przed tą linią kończy się zadanie } void zad4f(){ TiMP1 Instrukcja 4 3 printf("\n\nZadanie 4F:\n"); //od tej linii rozpoczyna się zadanie //przed tą linią kończy się zadanie } void zad4g(){ printf("\n\nZadanie 4G:\n"); //od tej linii rozpoczyna się zadanie //przed tą linią kończy się zadanie } int main() { zad4a(); zad4b(); zad4c(); zad4d(); zad4e(); zad4f(); zad4g(); return 0; } Polecenia: 4A. Napisz podprogram (funkcję), w której zadeklarujesz typ numeryczny z kilkoma wartościami, przy czym co najmniej 3 będą miały wartości domyślne, kolejne dwie będą miały takie same wartości, a kilka ostatnich będzie miało dowolne wartości zadeklarowane, inne od poprzednich. Wyświetl wartości przyporządkowane tym elementom na ekranie. (3 punkt) 4B. Napisz podprogram (funkcję), w której zadeklarujesz typ numeryczny zawierający nazwy kilku figur geometrycznych. Dodatkowo program wypisze nazwy tych figur w formie listy numerycznej. Następnie użytkownik może wybrać jedną z figur, a program powinien wyświetlić informacje o liczbie kątów jaką ma ta figura. Uwaga! Aby zadanie zostało zaliczone, jako ilość kątów musi zostać użyta nazwa figury. Można to zrobić przy pomocy tablicy, w której do kolejnych pól przypisane zostaną nazwy figur. (3 punkt) 4C. Używając m.in. funkcji fgets() odczytaj zawartość dowolnego pliku tekstowego i wyświetl jego zawartość na ekranie komputera. Należy sprawdzić, czy plik wejściowy istnieje oraz zamknąć plik przed zakończeniem programu. (2 punkty) 4D. Używając m.in. funkcji getc() i put() przepisz zawartość jednego pliku testowego do drugiego. (2 punkty) 4F. Używając m.in. funkcji fseek() i ftell() sprawdź rozmiar dowolnego pliku. (2 punkty) 4G. Należy zdefiniować trójelementową tablicę, której typem podstawowym jest struktura. Powinna ona zawierać dwa pola: krótki tekst i liczbę (np. imię i wiek). Należy wypełnić wszystkie pola tej struktury. Kolejnym etapem jest wyświetlenie tablicy na ekranie. Następnie, używając m.in. funkcji fread() i fwrite() należy najpierw zapisać tablicę do pliku, a następnie odczytać ją z pliku i ponownie wyświetlić na ekranie. (5 punktów) TiMP1 Instrukcja 4 4