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




EXEMPLE DE FUNCTII ( APEL PRIN VALOARE )

c


EXEMPLE DE FUNCTII ( APEL PRIN VALOARE )

Exemplul 4.4.1.



Urmatoarea functie determina daca numarul natural n >=

este prim sau compus . Daca numarul este prim functia va intoarce valoarea zero , daca este egal cu 0 sau 1 va intoarce valoarea 1 , iar daca este compus va intoarce primul divizor gasit .

unsigned prim ( unsigned long n )

Exemplul 4 .4 . 2 .

Acest exemplu calculeaza combinari de n luate cite k .

unsigned long cnk ( unsigned n , unsigned k )

Se observa ca functia returneaza 0 in situatia cind combinarile nu se pot calcula .

Exemplul 4 . 4 . 3 .

Functia urmatoare determina maximul elementelor unui sir de numere :

double maxs ( unsigned n , double a [ ] )

Exemplul 4 .4 . 4 .

Calculul valorii unui polinom cu ajutorul schemei lui Horner .Gradul polinomului este n , coeficientii a [ 0 ] , a [ 1 ] , . . . , a [ n ] , iar x este punctul in care se calculeaza valoarea polinomului .

double valpol ( double x , unsigned n , double a [ ] )

Observati ca pentru calculul valorii polinomului s-a folosit scrierea acestuia astfel :

p ( x ) = ( . . . ( a0 . x + a 1 ) . x + . . . + a n - 1 ) . x + a n

Exemplul 4 . 4. 5

Fie a , b , c trei numere reprezentind lungimile laturilor unui triunghi . Dorim sa scriem o functie care sa returneze :

0 - daca nu exista un triunghi cu laturile a , b , c ;

1 - daca triunghiul este ascutitunghic ;

2 - daca triunghiul este dreptunghic ;

3 - daca triunghiul este obtuzunghic .

Vom utiliza teorema cosinusului .Astfel , daca expresia - a 2 + b 2 + c 2 este mai mare decit zero , atunci unghiul A este ascutit , daca este egala cu zero , unghiul A este drept , iar daca este mai mica decit zero unghiul A este obtuz .

int tiptr ( double a , double b , double c )

Exemplul 4 . 4 . 7 .

Daca avem la dispozitie o data calendaristica de forma : z z - 1 1 - aaaa si dorim sa determinam si sa afisam data calendaristica pentru ziua urmatoare , functia care face aceste lucruri si in plus verifica si corectitudinea datei este :

void miine ( unsigned zi , unsigned luna , unsigned an )

;

bisect = an % 4 = = 0 & & an % 100 ! = 0 | | an % 400 = = 0 ;

zile [ 1 ] + = bisect ;

if ( zi = = 0 | | luna = = 0 | | luna >12 | | an < 1583 )

ind = 1 ;

else

if ( zi > zile [ luna -1 ] )

ind = 1 ;

if ( ind )

printf ( " Data eronata n " ) ;

else

}

printf ( " 2 d - % 2 d - % d \ n " , zi , luna , an ) ;

}

Observati ca in linia cinci a programului variabila bisect va primii valoarea 0 daca anul este bisect , respectiv valoarea 1 daca este , valoarea care este adunata pe linia urmatoare variabilei zilei [ 1 ] care corespunde lunii februarie . Modul cum se determina daca anul este bisect sau nu corespunde calendarului gregorian introdus incepand din anul 1582 .

Functia nu intoarce nici o valoare , de aceea am declarat - o ca fiind de tip void , iar controlul executiei programului revine functiei apelante la detectarea acoladei drepte de la sfarsitul corpului functiei .

Exemplul 4 . 4 . 8 .

Pentru calcularea radicalului de ordinul k dintr - un numar se poate utiliza functia de mai jos . Radicalul se calculeaza folosind sirul ( convergent la ....) :

x n = [ ( k - 1 ) x n - 1 + a / x n- 1K-1] / k ; n > = 1 si x 0 = 1

Vom calcula succesiv x 1 , x 2 , . . . , x n- 1 , x n pina la acel n pentru care | x n - x n- 1 | < 10 - 9 .

# include " math . h "

double radn ( unsigned k , double a )

return x 1 ;

}

Variabilele x 0 si x 1 sint utilizate pentru aproximatiile succesive radicalului de ordinul k . In prima instructiune a corpului while ( x 0 = x 1 ) variabilele basculeaza ,

x 1 trece in x 0 pentru ca apoi in urmatoarele doua instructiuni sa se calculeze urmatoarea aproximatie x 1 .

In cazul in care a < 0 sau k = 0 functia va returna valoarea negativa - 1 .

Exemplul 4 . 4 . 9 .

Urmatoarea functie realizeaza discutia naturii si semnului radacinilor unei ecuatii de gradul 2 . Functia va returna urmatoarele valorii :

- 1 daca ecuatia este de gradul 1 sau 0 ;

- 0 radacini complexe conjugate ;

- 1 radacini reale si pozitive ;

- 2 radacini reale si negative ;

- 3 radacini reale , una pozitiva si cealalta negativa .

int discecz ( double a , double b , double c )

Exemplu 4. 4. 1 0

Calculul lungimii unui sir de caractere terminat cu caracterul nul ('\ 0 ' ) se poate face utilizind functia strlen de mai jos:

unsignen strlen ( char a [ ] )

Exemplul 4 . 4 . 11 .

Compararea sirului de caractere a cu sirul b , din punct de vedere lexicografic , se poate realiza cu ajutorul functiei de mai jos . Functia va returna o valoare negativa , nula respectiv pozitiva , astfel :

<0 daca sirul a este in dictionar inaintea lui b ;

daca sirul a este egal cu sirul b ;

>0 daca sirul a este in dictionar dupa b .

Compararea unui singur caracter se face utilizind codul ASCII corespunzator caracterului. Sirurile sunt terminate cu ' \ 0 ' .

int strcmp (char a[ ] , char b [ ] )

De exemplu, daca avem de comparat sirurile a = " program " si b = " produs ", se observa ca :

a [ 0 ] = b [ 0 ] = `p

a [ 1 ] = b [ 1 ] = `r'

a [ 2 ] = b [ 2 ] =`0`

a [ 3 ] = ` g` ` d ` = b [3] deci functia va returna a[3] - b [3] , sau `g` - `d`, sau 103 - 100 = 3> 0, adica sirul a este mai mare decit sirul b . ( vezi codul ASCI in Anexa 1) .

Exemplu 4.4.12 .

Copierea sirului b in sirul a se realizeaza cu functia :

void strcpy ( char a [ ] , char b [ ] )

Exemplu 4.4. 13.

Urmatoarea functie converteste literele majuscule ale codului ASCI extins , in litere minuscule :

char lower ( char c)

Analizind codul ASCI se observa ca majusculele sunt in tabelul respectiv, inaintea minusculelor . Anume, majusculele cu codul de la 65 la 90 ( in hexa de la 0x 41 la 0x 5A ) , iar minusculele de la 97 la 122 ( in hexa de la 0x 61 la 0x 7A ) . Trecerea de la majuscule la minuscule se face adunand 32( in hexa 0x 20) si de aceea instructiunea :

return c l 0x 20 ; este echivalenta cu :

return c + `a` - `A` ; sau

return c + 32 ; sau inca

return c + 0x 20 ;



Document Info


Accesari: 1688
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 )