Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




FUNCTII STANDARD

c


FUNCŢII STANDARD

Vom descrie câteva clase de functii, numite clase de functii standard aflate în bibliotecile mediului BORLAND C. Functiile si macrourile utilizate frecvent în majoritatea aplicatiilor se pot grupa în urmatoarele clase:

functii de prelucrare a fisierelor;

functii de alocare dinamica a memoriei;



macrouri de clasificare;

macrouri de transformare a simbolurilor;

functii care realizeaza conversii;

functii de prelucrare a sirurilor de caractere;

functii de calcul;

functii pentru controlul proceselor;

functii de gestiune a datei si a orei;

functii de gestiune a ecranului.

Functiile de la punctele a) si b) au fost descrise în lectii anterioare.

11.1. MACROURI DE CLASIFICARE

În aceasta clas& 818f51i #259; distingem un numar de macrouri simple care au o utilizare larga în prelucrarea simbolurilor. Definitiile acestor macrouri se afla în fisierul ctype.h

Unul dintre macrouri este denumit isascii si are prototipul:

int isascii (int c);

Macroul returneaza o valoare diferita de zero daca valoarea lui c apartine intervalului de numere întregi [0,127] si zero în caz contrar. Acest macrou permite sa se testeze daca valoarea parametrului sau reprezinta un cod ASCII sau nu.

Celelalte macrouri au prototipul urmator:

int nume (int c);

unde nume este unul din urmatoarele:

isalpha daca c este codul unei litere;

isalnum daca c este codul unei litere sau cifre;

isdigit daca c este codul unei cifre;

isgraph daca c este codul unui caracter imprimabil inclusiv spatiul;

islower daca c este codul unei litere mici;

isprint daca c este codul unui caracter imprimabil inclusiv spatiu;

isspace daca c reprezinta spatiu, tabulator, retur de car, rând nou,

tabulator vertical, salt la început de pagina de imprimanta.

isupper daca c este codul unei litere mari;

isxdigit daca c este codul unei cifre hexazecimale.

Exemplu:

Programul urmator citeste un fisier si îl rescrie schimbând literele mari cu litere mici. Caile spre cele doua fisiere (sursa si destinatie) sunt argumente în linia de comanda:

argv[1] este un pointer spre fisierul sursa;

argv[2] este un pointer spre fisierul destinatie.

#include <stdio.h>

#include <ctype.h>

void main ( int argc, char *argv[ ] )

if (( pf1 = fopen (argv[1],"r") ) = = NULL

if (( pf2 = fopen (argv[2],"w") ) = = NULL

while (( c = getc (pf1)) != EOF)

if (isascii(c) && isupper (c))

putc (c - 'A' + 'a', pf2); // c este codul unei litere mari

else

putc(c, pf2); // c este codul unei litere mici

fclose (pf1);

fclose (pf2);

// afisarea fisierului destinatie

if (( pf2 = fopen (argv[2], "r") = = NULL)

while ((c = getc(pf2)) != EOF) putchar (c);

fclose (pf2);

11.2. MACROURI DE TRANSFORMARE A SIMBOLURILOR

În aceasta clas& 818f51i #259; distingem macrouri definite tot în fisierul ctype.h. Prototipurile acestor macrouri sunt:

int toascii (int c); returneaza ultimii 7 biti ai lui c (care reprezinta un

cod ASCII);

int tolower (int c); transforma pe c din litera mare în litera mica;

int toupper (int c); transforma pe c din litera mica în litera mare.

11.3. CONVERSII

O data are un format extern si un format intern. Prin conversie întelegem o transformare a unei date dintr-un format al ei în celalalt. Conversiile se pot face sub controlul unui format sau fara format. Dintre functiile care realizeaza conversii sub controlul formatelor amintim:

printf;

fprintf;

scanf;

fscanf;

Aceste functii au fost descrise în lectiile anterioare. Vom da în continuare câteva functii care realizeaza conversii fara format si care sunt utilizate mai frecvent. Aceste functii au prototipurile în fisierul stdlib.h.

Functia atoi are prototipul:

int atoi (const char *ptr);

unde:

ptr este un pointer spre o zona de tip caracter ce contine cifre zecimale care

sunt, eventual, precedate de semnul minus;

Efectul:

sirul de cifre spre care pointeaza ptr este convertit din întreg zecimal în întreg binar de tip int.

Observatie:

1o. Functia returneaza rezultatul acestei conversii.

Functia atol are prototipul:

long atol (const char *ptr);

unde:

ptr este un pointer spre o zona de tip caracter ce contine cifre zecimale care

sunt, eventual, precedate de semnul minus;

Efectul:

sirul de cifre spre care pointeaza ptr este convertit din întreg zecimal în întreg binar de tip long.

Observatie:

1o. Functia returneaza rezultatul acestei conversii.

Functia atof are prototipul:

double atof (const char *ptr);

unde:

ptr este un pointer spre o zona de tip caracter ce contine cifre zecimale care

sunt, eventual, precedate de semnul minus (poate contine marca zecimala);

Efectul:

sirul de cifre spre care pointeaza ptr este convertit în virgula flotanta dubla precizie.

Observatie:

1o. Functia returneaza rezultatul acestei conversii.

Functia itoa are prototipul:

char *itoa (int val, char *sir, int baza)

Efectul:

valoarea parametrului val se converteste din întreg binar de tip int în baza de numeratie definita de parametrul baza si se pastreaza în zona spre care pointeaza sir.

Observatie:

1o. Functia returneaza pointerul sir.

Functia ltoa are prototipul:

char *ltoa (long val, char *sir, int baza)

Efectul:

valoarea parametrului val se converteste din întreg binar de tip long în baza de numeratie definita de parametrul baza si se pastreaza în zona spre care pointeaza sir.

Observatie:

1o. Functia returneaza pointerul sir.

11.4. FUNCŢII DE PRELUCRARE A sIRURILOR DE CARACTERE

Functiile din aceasta clas& 818f51i #259; implica includerea fisierului string.h. Indicam mai jos functiile din aceasta clas& 818f51i #259;, utilizate mai frecvent. O parte din aceste functii au mai fost utilizate în diferite exemple din lectiile anterioare.

Functii de copiere:

char *strcpy (char *dest, const char *sursa);

char *strncpy (char *dest, const char *sursa, unsigned n);

prima functie copiaza sirul de caractere spre care pointeaza sursa în zona spre care pointeaza dest;

a doua functie realizeaza acelasi lucru, dar copiaza cel mult primii n octeti din sursa;

ambele functii returneaza valoarea pointerului dest.

Functii de concatenare:

int strcmp (const char *dest, const char *sursa);

char *strncat (const char *dest, const char *sursa, unsigned n);

prima functie copiaza sirul spre care pointeaza sursa la sfârsitul sirului din zona spre care pointeaza dest;

a doua functie realizeaza acelasi lucru, dar se copiaza cel mult primii n octeti din zona spre care pointeaza sursa;

ambele functii returneaza valoarea pointerului dest.

Functii de comparare:

int strcmp (const char *sir1, const char *sir2);

int stricmp (const char *sir1, const char *sir2);

int strncmp (const char *sir1, const char *sir2, unsigned n);

int strnicmp (const char *sir1, const char *sir2, unsigned n);

aceste functii compara sirurile de caractere din zonele spre care pointeaza pointerii sir1 si sir2;

ele returneaza o valoare:

negativa, daca sirul spre care pointeaza sir1 este mai mic decât cel spre care pointeaza sir2;

zero, daca cele doua siruri sunt egale;

pozitiva, daca sirul spre care pointeaza sir1, este mai mare decât cel spre care pointeaza sir2;

prezenta literei i (ignore) în numele functiei înseamna ca nu se face distinctie între literele mari si mici;

prezenta literei n în numele functiei înseamna ca se realizeaza comparatia pe cel mult n octeti.

Observatie:

1o. Fie sirurile s1 si s2 de lungime l1 si l2. Atunci cele doua siruri sunt egale daca:

l1=l2 ( au aceeasi lungime);

s1[k] = s2 [k] pentru k=0,1,...,l1

2o. sirul s1 este mai mic decât sirul s2 daca exista un j, j 0 si j min (l1, l2), astfel încât:

s1[j] < s2[j];

s1[k] = s2[k], pentru k=0,1, . . . , j-1.

3o. sirul s1 este mai mare decât sirul s2 daca exista un j, j 0 si j (l1, l2), astfel incât:

s1[j] > s2[j];

s1[k] = s2[k], pentru k=0,1, . . . , j-1.

Functia lungime:

unsigned strlen (const char *sir);

returneaza lungimea sirului de caractere spre care pointeaza sir;

caracterul NUL care termina sirul nu este numarat.

11.5. FUNCŢII DE CALCUL

Majoritatea functiilor matematice au prototipurile în fisierul math.h. Multe dintre acestea se utilizeaza la calculul valorilor functiilor elementare si au prototipul:

double nume (double x);

unde nume este unul din urmatoarele:

acos -arccos;

asin -arcsin;

atan -arctg;

cos -cos;

sin -sin;

exp -ex;

log -ln;

log10 -lg;

sqrt -radacina patrata;

ceil -returneaza cel mai mare întreg mai mare sau egal cu x (partea întreaga);

floor -returneaza cel mai mare întreg mai mic sau egal cu x;

fabs -valoarea absoluta;

sinh -sinus hiperbolic;

cosh -cosinus hiperbolic;

tanh -tangenta hiperbolica;

Alte functii:

double atan2 (double y, double x); - returneaza arctg(y/x);

double pow (double x, double y); - returneaza xy;

double cabs (struct complex z); - returneaza modulul numarului

complex;

double poly (double x, int n, double c[ ] ) - returneaza valoarea polinomului

de grad n în punctul x, coeficientii

sunt c[0], . . . c[n].

Functiile care urmeaza au prototipul în fisierele stdlib.h si math.h:

int abs (int n); - returneaza valoarea absoluta din întregul n;

long labs (long n); - returneaza valoarea absoluta din întregul long n;

11.6. FUNCŢII PENTRU CONTROLUL PROCESELOR

Aceste functii au prototipurile în fisierul stdlib.h si în process.h si realizeaza controale asupra programelor:

void abort (void); - termina un program în caz de eroare;

void exit (int stare) - termina un program si returneaza o stare; stare este

0 pentru terminare normala si diferita de zero

pentru o terminare anormala; videaza buferele

fisierelor, închide toate fisierele;

int system (const char *comanda) - executa o comanda DOS definita prin sirul

de caractere spre care pointeaza comanda;

returneaza 0 la succes si -1 la eroare.

Aceste functii au prototipurile în stdlib.h si în process.h.

11.7. FUNCŢII PENTRU GESTIUNEA DATEI sI OREI

Dam mai jos prototipurile a patru functii pentru citirea/setarea datei si orei. Ele implica includerea fisierului dos.h.

void getdate(struct date *d); - încarca structura de tip date spre care pointeaza d

cu datele corespunzatoare furnizate de sistemul de

operare;

void gettime(struct time *t); - încarca structura de tip time spre care pointeaza t

cu datele corespunzatoare furnizate de sistemul de

operare;

void setdate (struct date *t);    - seteaza data curenta în conformitate cu datele de

tip date;

void settime (struct time *t);    - seteaza ora curenta în conformitate cu datele de tip

time spre care pointeaza t.

Tipurile date si time sunt definite în fisierul dos.h. astfel:

struct date ;

struct time ;

Exemplu:

void main (void) // afiseaza data si ora

11.8. ALTE FUNCŢII DIVERSE DE UZ GENERAL

void clrscr (void); - sterge fereastra activa sau tot ecranul; prototipul în conio.h

void delay(unsigned i); - suspenda executia programului pentru o perioada de i

milisecunde;

void sleep(unsigned i); - suspenda executia programului pentru o perioada de i

secunde;

void nosound (void); - opreste difuzorul calculatorului;

void sound(unsigned h); - porneste difuzorul calculatorului cu un ton egal cu h Hz.



Document Info


Accesari: 2102
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )