Funkcje standardowe (1)

19
Pliki standardowej biblioteki C: assert.h - makra do asercji ctype.h - klasyfikacje znaków typu char (isspace, isalpha itd.) errno.h - deklaracja errno fenv.h - środowisko dla liczb zmiennoprzecinkowych (ISO C 9X) float.h - definicje specjalne dla liczb zmiennoprzecinkowych limits.h - makra określające granice dla typów ścisłych locale.h - definicje lokali math.h - funkcje matematyczne setjmp.h - funkcje setjmp i longjmp signal.h - sygnały stdarg.h - narzędzia dla funkcji o zmiennej liście argumentów stddef.h - standardowe definicje (ptrdiff_t i size_t głównie) stdio.h - operacje wejścia/wyjścia stdlib.h - zespół funkcji użytkowych Funkcje standardowe (1)

description

Funkcje standardowe (1). Pliki standardowej biblioteki C: assert.h - makra do asercji ctype.h - klasyfikacje znaków typu char (isspace, isalpha itd.) errno.h - deklaracja errno fenv.h - środowisko dla liczb zmiennoprzecinkowych (ISO C 9X) - PowerPoint PPT Presentation

Transcript of Funkcje standardowe (1)

Page 1: Funkcje standardowe (1)

Pliki standardowej biblioteki C:assert.h - makra do asercjictype.h - klasyfikacje znaków typu char (isspace, isalpha itd.)errno.h - deklaracja errnofenv.h - środowisko dla liczb zmiennoprzecinkowych (ISO C 9X)float.h - definicje specjalne dla liczb zmiennoprzecinkowychlimits.h - makra określające granice dla typów ścisłychlocale.h - definicje lokalimath.h - funkcje matematycznesetjmp.h - funkcje setjmp i longjmpsignal.h - sygnałystdarg.h - narzędzia dla funkcji o zmiennej liście argumentówstddef.h - standardowe definicje (ptrdiff_t i size_t głównie)stdio.h - operacje wejścia/wyjściastdlib.h - zespół funkcji użytkowychstring.h - funkcje operujące na tablicach znakówtime.h - narzędzia do odczytywania, interpretacji i prezentacji czasuwchar.h - obsługa "szerokiego" (wide-char) zestawu znakówwctype.h - wersja `ctype.h' dla szerokich znaków

Funkcje standardowe (1)

Page 2: Funkcje standardowe (1)

Funkcje znakowe:• isalpha(c) - czy c jest znakiem z alfabetu,• isupper(c) - czy C jest duże, • islower(c) - czy C jest małe, • isdigit(c) - czy c jest cyfrą [0..9], • isalnum(c) - czy c jest znakiem alfanumerycznym,• isspace(c) - czy c jest separatorem (spacja, TAB, LF, FF, VT lub CR),• toupper(c) - zwraca c duże, • tolower(c) - zwraca c małe.

Zadanie 1.Napisz program zmieniający we wskazanym pliku wszystkie małe litery na duże lub odwrotnie.

Zadanie 2.Napisz program, który oblicza ile jest dużych liter, ile małych liter, ile cyfr, a ile innych znaków we wskazanym pliku.

Funkcje standardowe (2)

Page 3: Funkcje standardowe (1)

Funkcje matematyczne (1):• sin(x) – sinus• cos(x) – cosinus• tan(x) – tangens• asin(x) – arcussinus,• acos(x) – arcuscosinus,• atan(x) – arcustangens,• atan2(y,x) – arcustangens (x / y),• sinh(x) – sinus hiperboliczny,• cosh(x) – cosinus hiperboliczny,• tanh(x) – tangens hiperboliczny,• exp(x) – funkcja wykładnicza,

Funkcje standardowe (3)

Page 4: Funkcje standardowe (1)

Funkcje matematyczne (2):• log(x) – logarytm naturalny,• log10(x) – logarytm dziesiętny,• pow(x,y) – x do potęgi y,• sqrt(x) – pierwiastek kwadratowy z x,• ceil(x) – najmniejsza liczba całkowita nie mniejsza niż x,• floor(x) – największa liczba całkowita nie większa niż x ,• fabs(x) – wartość bazwzględna,• fmod(x,y) – reszta z dzielenia x/y.

Zadanie 3.Napisz program obliczający odległość Euklidesową między punktami o wprowadzonych przez użytkownika współrzędnych

Funkcje standardowe (4)

Page 5: Funkcje standardowe (1)

Funkcje obsługi czasu (1):• clock() - przybliżoną wartość czasu procesora zużytego przez program,• ctime() - przekształca czas w formie podawanej przez funkcję time() na

napis zawierający lokalny czas,• difftime() - różnicę między zmienną czas1, a zmienną czas2,• localtime() - przekształca czas kalendarzowy zadany za pomocą

wskaźnika do zmiennej zawierającej ilość sekund od 1 stycznia 1970 r. na czas lokalny w postaci wskaźnika do struktury tm,

• strftime() - przekształca dane o czasie zawarte w strukturze tm na tekst,• time() - odczytu czasu, który upłynął od dnia 1 stycznia 1970 roku

godziny 0:00:00 czasu uniwersalnego,• tm (struktura) - struktura zawierająca elementy reprezentujące liczbę

sekund, liczbę minut, godzinę, dzień miesiąca miesiąc liczbę lat od roku 1900, numer dnia tygodnia, numer dnia w rokuZadanie 3.Napisz program obliczający odległość Euklidesową między punktami o wprowadzonych przez użytkownika współrzędnych

Funkcje standardowe (5)

Page 6: Funkcje standardowe (1)

Funkcje obsługi czasu (2):Zadanie 4.Napisz program wypisujący na ekran aktualną datę i godzinę

Funkcje standardowe (6)

Page 7: Funkcje standardowe (1)

Inne funkcje użytkowe:• Interpretacja liczbowa argumentu tekstowego

int atoi( const char * ); long atol( const char* ); double atof( const char* );

• Generowanie liczb pseudolosowych void srand( unsigned int ); - inicjalizacja generatora int rand( void ); - zwraca liczbę losową z przedziału <0, RANDMAX>

• Przerywanie programu void exit( int ); void abort( void );

int atexit( void (*)( void ) ); - rejestracja funkcji wykonywanej przy opuszczeniu programu

• Obsługa środowiskachar* getenv( const char *name );int setenv( const char *name, const char *value, int replace );void unsetenv( const char *name );int putenv( const char *string );

Funkcje standardowe (7)

Page 8: Funkcje standardowe (1)

Zadanie:Napisz program wypisujący na ekran wartość wybranej zmiennej środowiskowej

Funkcje standardowe (8)

Page 9: Funkcje standardowe (1)

• Odczyt i zapis poza zasięgiem tablicy• Przepełnienie liczby całkowitej ze znakiem • Dotarcie do końca funkcji zwracającej wartość, bez

napotkania na wyrażenie return• Odczytanie zmiennej przed zapisaniem do niej wartości• Kolejność wykonywania wyrażeń przekazanych jako

argumenty do funkcji

Niezdefiniowane zachowania

Page 10: Funkcje standardowe (1)

Programy w języku C mają dostęp do dwóch rodzajów pamięci: stosu i sterty.

Na stosie przechowywane są zmienne lokalne. Stos jest obsługiwany automatycznie.

Sterta jest obszarem pamięci udostępnianym przez system operacyjny wszystkim wykonującym się procesom. Wielkość sterty jest często znacznie większa niż stosu. Procesy działające w systemie współzawodniczą o dostęp do wspólnego obszaru pamięci.

Zarządzanie pamięcią (1)

Page 11: Funkcje standardowe (1)

Przydzielanie pamięci

Do przydzielania pamięci w języku C służą funkcje malloc() i calloc().

void* malloc(int size)void* calloc(size_t numberOfElements, size_t elementSize)

Funkcja malloc() przydziela podaną w argumencie ilość bajtów. Zawartość przydzielonej pamięci jest nieokreślona.Funkcja calloc() przydziela alokuje na stercie numberOfElements elementów o rozmiarze elementSize. Funkcja wypełnia zerami przydzielany obszar pamięci przed dokonaniem alokacji.

Funkcja malloc() i calloc() zwracają wskaźnik do przydzielonego miejsca w pamięci. Jeśli alokacja nie powiodła się, to funkcje zwracają NULL.

Zarządzanie pamięcią (2)

Page 12: Funkcje standardowe (1)

Zwalnianie pamięci

Przydzielony obszar pamięci można zwolnić za pomocą funkcji free().

void free(void * pointer)

Funkcja zwraca obszar pamięci wskazany przez argument. Po wywołaniu funkcji pointer ma niepoprawną wartość.

Zarządzanie pamięcią (3)

Page 13: Funkcje standardowe (1)

Problemy z wykorzystaniem sterty:1. Alokacja pamięci jest wolniejsza niż na stosie. 2. Możliwe, że żądanie przydzielenia pamięci w czasie wykonania programu jest niemożliwe. Wymaga to obsłużenia takich sytuacji w kodzie.3. Jeżeli zajmowana pamięć nie jest zwalniana, gdy nie jest już potrzebna, to procesy mogą przestać funkcjonować, ponieważ w systemie zabraknie pamięci.4. Częste alokowanie sterty może spowodować fragmentację, czyli rozrzucenie wolnych obszarów pamięci po wielu różnych fragmentach sterty. Powoduje to zwiększenie ryzyka niepowodzenia alokacji i zmniejszenia wydajności

Zarządzanie pamięcią (4)

Page 14: Funkcje standardowe (1)

Przykład:#include <stdio.h>

#define FALSE 0#define NULL 0

typedef struct { int dataitem; struct listelement *link;} listelement;

void Menu (int *choice);listelement * AddItem (listelement * listpointer, int data);listelement * RemoveItem (listelement * listpointer);void PrintQueue (listelement * listpointer);void ClearQueue (listelement * listpointer);

Zarządzanie pamięcią (5)

Page 15: Funkcje standardowe (1)

Przykład:main () { listelement listmember, *listpointer; int data, choice;

listpointer = NULL; do {

Menu (&choice);switch (choice) { case 1:

printf ("Wprowadz liczbe calkowita do kolejki: ");scanf ("%d", &data);listpointer = AddItem (listpointer, data);break;

case 2: if (listpointer == NULL) printf ("Kolejka jest pusta.\n");else listpointer = RemoveItem (listpointer);break;

case 3: PrintQueue (listpointer);break;

case 4: break;

default: printf ("Wskazano niewlasciwa pozycje menu\n");break;

} } while (choice != 4); ClearQueue (listpointer);}

Zarządzanie pamięcią (6)

Page 16: Funkcje standardowe (1)

Przykład:void Menu (int *choice) {

char local;

printf ("\n\t1 - dodaj element,\n\t2 - usun element\n\\t3 - wyswietl kolejke\n\t4 - zakoncz program\n"); do {

local = getchar ();if ((isdigit (local) == FALSE) && (local != '\n')) { printf ("\n\Prosze wprowadzic liczbe\n"); printf ("Nacisnij 1 aby dodac element, 2 aby usunac element, 3 aby wyswietlic kolejke, 4 aby zakonczyc program\n");}

} while (isdigit ((unsigned char) local) == FALSE); *choice = (int) local - '0';}

Zarządzanie pamięcią (7)

Page 17: Funkcje standardowe (1)

Przykład:listelement * AddItem (listelement * listpointer, int data) {

listelement * lp = listpointer;

if (listpointer != NULL) {while (listpointer -> link != NULL) listpointer = listpointer -> link;listpointer -> link = (struct listelement *) malloc (sizeof (listelement));listpointer = listpointer -> link;listpointer -> link = NULL;listpointer -> dataitem = data;return lp;

} else {

listpointer = (struct listelement *) malloc (sizeof (listelement));listpointer -> link = NULL;listpointer -> dataitem = data;return listpointer;

}}

Zarządzanie pamięcią (8)

Page 18: Funkcje standardowe (1)

Przykład:

listelement * RemoveItem (listelement * listpointer) {

listelement * tempp; printf ("Usunieto element %d\n", listpointer -> dataitem); tempp = listpointer -> link; free (listpointer); return tempp;}

void PrintQueue (listelement * listpointer) {

if (listpointer == NULL)printf ("Kolejka jest pusta\n");

elsewhile (listpointer != NULL) { printf ("%d\t", listpointer -> dataitem); listpointer = listpointer -> link;}

printf ("\n");}

void ClearQueue (listelement * listpointer) {

while (listpointer != NULL) {listpointer = RemoveItem (listpointer);

}}

Zarządzanie pamięcią (9)

Page 19: Funkcje standardowe (1)

Zadanie:Zmodyfikuj przedstawiony program tak, by otrzymać listę dwukierunkową

Zarządzanie pamięcią (10)