Sunteți pe pagina 1din 8

Limbajul C++: Func ii Utilitare

Biblioteca standard de func ii define te mai multe func ii utilitare ce cuprind: conversii de numere, sort ri i c ut ri, generarea aleatoare (random) a numerelor. Multe din aceste func ii se g sesc n headerul <cstdlib> (Programele C trebuie s foloseasc headerul stdlib.h). n acest header sunt definite tipurile div_t i ldiv_t, care sunt tipurile valorilor returnate de func iile div() i, respectiv, ldiv(). De asemenea este definit i tipul size_t, care este tipul valorii returnate de sizeof. Urm toarele macro sunt definite: NULL - un pointer null. RAND_MAX - valoarea maxim ce poate fi returnat de func ia rand(). EXIT_FAILURE - valoarea returnat n cazul n care programul nu s-a terminat cu succes. EXIT_SUCCESS - programul s-a terminat cu succes. abort ? 1#include <cstdlib> 2void abort(void); Func ia abort() cauzeaz ntreruperea/terminarea imediat a programului. abs ? 1#include <cstdlib> 2int abs(int num); 3long abs(long num); 4double abs(double num); Func ia abs() returneaz valoarea absoult a valorii lui num. Versiunea long a func iei abs() este identic cu labs(), iar versiunea double este identic cu fabs(). assert ? 1#include <cassert> 2void assert(int exp); Macro-ul assert() este definit n <cassert>. Acesta scrie informa ia erorii n stdderr i apoi termin execu ia programului, dac expresia exp este evaluat la zero (false). Altfel assert nu face nimic. Majoritatea compilatoarelor folosesc un mesaj similar cu acesta:
Assertion failed: <expression>, file <file>, line <linenum>

atexit ? 1#include <cstdlib> 2int atexit(void (*func)(void));

Func ia atexit() cauzeaz ca func ia pointat de func s fie apelat la terminarea normal a programului. Func ia atexit() returneaz zero dac func ia a fost nregistrat cu succes, altfel o valoare nenul este returnat . Pn la 32 de func ii pot fi nregistrate, i vor fi invocate n ordinea invers nregistr rii lor. atof ? 1#include <cstdlib> 2double atof(const char *str); Func ia atof() converte te stringul indicat de str ntr-o valoare double. irul trebuie s con in o valoare flotant valid , altfel o valoare nedefinit va fi returnat . Num rul poate fi terminat cu orice caracter ce nu face parte dintr-un num r n virgul mobil ; de exemplu, pentru: "100.21Hello", valoarea 100.21 va fi returnat . atoi ? 1#include <cstdlib> 2int atoi(const char *str); Func ia atoi() converte te stringul indicat de str ntr-o valoare int. irul trebuie s con in o valoare ntreag valid , altfel o valoare nedefinit (sau zero) va fi returnat . Num rul poate fi terminat cu orice caracter ce nu face parte dintr-un num r ntreg; de exemplu, pentru: "100.21", valoarea 100 va fi returnat . atol ? 1#include <cstdlib> 2long atol(const char *str); Func ia atol() converte te stringul indicat de str ntr-o valoare long. irul trebuie s con in o valoare ntreag (long) valid , altfel o valoare nedefinit (sau zero) va fi returnat . Num rul poate fi terminat cu orice caracter ce nu face parte dintr-un num r ntreg; de exemplu, pentru: "100.21", valoarea long 100L va fi returnat . bsearch ? 1#include <cstdlib> void *key, const void *buf, size_t num, size_t size, int void *bsearch(const 2(*compare)(const void *, const void *)); Func ia bsearch() realizeaz o c utare binar ntr-un vector sortat indicat de buf i returneaz un pointer c tre primul element care se potrive te cu key. Num rul de elemente al vectorului este specificat de num, i m rimea (n bytes) a fiec rui element este specificat de size. Func ia indicat de compare este folosit la compararea elementelor cu cheia (key). Antetul func iei trebuie s fie urm torul:

? 1int func_name(const void *arg1, const void *arg2); Trebuie s returneze valori conform urm torului tabel: Comparare Valoare Returnat arg1 este mai mic dect arg2 Mai mic dect zero arg1 este egal cu arg2 Zero arg1 este mai mare dect arg2 Mai mare dect zero Vectorul trebuie s fie sortat cresc tor. Dac elementul nu este g sit, se returneaz un pointer null. Exemplu: ? 1 2 #include <iostream> #include <cstdlib> 3 using namespace std; 4 5 int comp(const void* arg1, const void* arg2) 6 { return *(int*)arg1 - *(int*)arg2; } 7 8 int main() { 9 int nums[] = {2, 12, 34, 56, 78, 199, 221, 456}; // vector sortat; 8 10elemente 11 int key = 56; 12 13 int* p = (int*) bsearch(&key, nums, 8, sizeof(int), comp); 14 cout << "Elementul se gaseste pe pozitia " << p - nums + 1; 15 system("PAUSE"); 16 return 0; 17} 18

div ? 1#include <cstdlib> 2div_t div(int numerator, int denominator); 3ldiv_t div(long numerator, long denominator); Returneaz ctul i restul opera iei numerator / denominator ntr-o structur de tip div_t, iar versiunea long, ntr-o structur de tip ldiv_t. Structura div_t are urm torii membrii (cmpuri): ? 1int quot; /* catul */ 2int rem; /* restul */ La fel pentru ldiv_t numai c membrii sunt de tip long. exit

? 1#include <cstdlib> 2void exit(int exit_code); Cauzeaz terminarea normal i imediat a programului. Valoarea lui exit_code este transmis sistemului de operare. Valorile lui exit_code pot fi EXIT_SUCCESS sau EXIT_FAILURE. labs ? 1#include <cstdlib> 2long labs(long num);</cstdlib> Func ia labs() returneaz valoarea absolut a lui num. ldiv ? 1#include <cstdlib> 2ldiv_t ldiv(long numerator, long denominator); Func ia ldiv() returneaz ctul i restul opera iei numerator / denominator. Vezi div. qsort ? 1#include <cstdlib> void qsort(void *buf, size_t num, size_t size, int (*compare) (const void *, 2const void *)); Func ia qsort() este o implementare a algoritmului QuickSort (dezvoltat de C.A.R. Hoare). QuickSort este unul dintre cei mai buni algoritmi de sortare. Func ia sorteaz vectorul indicat de buf; num rul elementelor este specificat de num, i m rimea (n bytes) a fiec rui element este specificat de size. Func ia indicat de compare este folosit la sortarea elementelor vectorului. Antetul func iei trebuie s fie urm torul: ? 1int func_name(const void *arg1, const void *arg2); Trebuie s returneze valori conform urm torului tabel: Comparare Valoare Returnat arg1 este mai mic dect arg2 Mai mic dect zero arg1 este egal cu arg2 Zero arg1 este mai mare dect arg2 Mai mare dect zero Vectorul este sortat n ordine cresc toare (se poate i descresc tor). Exemplu: ? 1 #include <iostream> #include <cstdlib> 2 using namespace std; 3 4 int cresc(const void* arg1, const void* arg2)

5 { return (*(int*)arg1 - *(int*)arg2); } 6 7 int descresc(const void* arg1, const void* arg2) { return (*(int*)arg1 - *(int*)arg2) * (-1); } // inmultind cu (-1) vectorul 8 va fi sortat descrescator 9 10int main() 11{ 12 int nums[] = {221, 12, 56, 56, 7, 19, 356, 45}; // vector nesortat; 8 elemente 13 14 // Sortez crescator 15 qsort(nums, 8, sizeof(int), cresc); 16 for(int i=0; i<8; i++) 17 cout << nums[i] << ' '; 18 19 cout << '\n'; 20 // Sortez descrescator 21 qsort(nums, 8, sizeof(int), descresc); 22 for(int i=0; i<8; i++) 23 cout << nums[i] << ' '; 24 25 system("PAUSE"); 26 return 0; } 27 28 29

rand ? 1#include <cstdlib> 2int rand(void); Func ia rand() genereaz o secven de numere pseudo-aleatoare (pseudorandom). La fiecare apel, un num r ntreg cuprins ntre zero i RAND_MAX este returnat. Pentru a genera numere dintr-un anumit interval se folose te urm toarea sintax : ? 1rand() % valMax + valMin unde valMax este valoarea maxim i valMin este valoarea minim . Mai exact, numerele ntregi generate vor fi din intervalul [valMin, valMax]. Dac expresia este de forma: ? 1rand() % valMax atunci vor fi generate numere din intervalul [0, valMax). srand

? 1#include <cstdlib> 2void srand(unsigned seed); Func ia srand() este folosit pentru a stabili un nou punct de ncepere pentru secven a de numere pseudorandom generat de rand(). n acest mod srand() permite multiplelor execu ii de program s genereze secven e diferite de numere. De asemenea, pute i folosi srand() ca s genera i aceea i secven de numere de mai multe ori, apelnd srand() cu acela i seed. Ca rand() s genereze numere, aparent aleatoare, srand() este de obicei ini ializat cu valori distincte, cum ar fi timpul de execu ie. De exemplu, valoarea returnat de func ia time() este diferit de fiecare dat , mai exact la fiecare secund . Generarea de numere aleatoare (random) ? 1 2 #include <iostream> 3 #include <cstdlib> #include <ctime> // functiile time() si clock() se gasesc in acest header 4 using namespace std; 5 6 void generate() 7 { 8 // Generez o secventa de numere aleatoare 9 for(int i=1; i<=10; i++) cout << rand() << ' '; 10 cout << '\n'; 11} 12 13int main() 14{ srand(1); // am setat 1 ca punct de incepere 15 generate(); // generez 16 17 srand(time(NULL)); // de data asta secventa va fi "mai" random 18 generate(); // executati programul de mai multe ori si veti vedea ca 19numerele difera 20 21 srand(1); // revin la sirul initial generate(); 22 23 // acum niste numere intre 1 si 10 24 srand(clock()); // clock() returneaza o valoare ce aproximeaza timpul 25trecut de la inceperea programului 26 for(int i=1; i<=10; i++) cout << rand() 27 cout << '\n'; % 10 + 1 << ' '; 28 29 system("PAUSE"); 30 return 0; 31} 32

33

strtod ? 1#include <cstdlib> 2double strtod(const char *start, char **end); Converte te reprezentarea n string a unui num r con inut n irul indicat de start n double i returneaz rezultatul. Func ia func ioneaz n felul urm tor: Mai nti spa iile albe sunt ignorate, apoi fiecare caracter ce compune num rul este citit i orice caracter ce nu face parte dintr-un num r flotant va termina procesul (e i E fac parte dintr-un num r flotant). n final, end va indica restul irului (dac a mai rams ceva). De exemplu pentru "100.00 de dolari", strtod() returneaz 100.00, iar end va pointa c tre "de dolari". strtol ? 1#include <cstdlib> 2long strtol(const char *start, char **end, int radix); Converte te reprezentarea n string a unui num r con inut n irul indicat de start n long i returneaz rezultatul. Baza de numera ie este specificat de radix (trebuie s fie ntre 2 i 36). Func ia func ioneaz n felul urm tor: Mai nti spa iile albe sunt ignorate, apoi fiecare caracter ce compune num rul este citit i orice caracter ce nu face parte dintr-un num r ntreg long va termina procesul. n final, end va indica restul irului (dac a mai rams ceva). De exemplu pentru "100 de dolari", strtol() returneaz 100L, iar end va pointa c tre "de dolari". strtoul ? 1#include <cstdlib> 2unsigned long strtoul(const char *start, char **end, int radix); Converte te reprezentarea n string a unui num r con inut n irul indicat de start n unsigned long i returneaz rezultatul. Baza de numera ie este specificat de radix (trebuie s fie ntre 2 i 36). Func ia func ioneaz n felul urm tor: Mai nti spa iile albe sunt ignorate, apoi fiecare caracter ce compune num rul este citit i orice caracter ce nu face parte dintr-un num r ntreg unsigned long va termina procesul. n final, end va indica restul irului (dac a mai rams ceva). De exemplu pentru "100 de dolari", strtol() returneaz 100L, iar end va pointa c tre "de dolari". system ? 1int system(const char *str);
#include <cstdlib>

2 Func ia system() invoc procesorul comand pentru a executa comanda specificat de str. Dac este apelat cu pointerul NULL, atunci func ia verific dac o comand procesor este prezent : returneaz o valoare nenul dac exist o comand , atlfel zero este returnat. Dup ce comanda a fost executat , system() returneaz o valoare ce indic succesul execu iei. n general se returneaz zero, dac comanda a fost ndeplinit cu succes, altfel se returneaz o valoare nenul . Exemplu: ? 1taste
system("PAUSE"); // Suspenda executia programului pana la apasarea unei