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