CATEGORII DOCUMENTE |
O functie este formata din antet si corp:
antet_functie
Sau:
tip_val_return nume_func (lista_declaratiilor_param_ formali)
Antetul functiei contine deci urmatoarele 3 elemente:
tipul valorii returnate de functie
numele functiei
lista declaratiilor parametrilor formali
O functie poate fi apelata printr-o constructie urmata de punct si virgula, numita instructiune de apel, de forma:
nume_functie (lista_parametrilor_efectivi);
Parametrii efectivi trebuie sa corespunda cu cei formali ca ordine si tip.
Functiile comunica intre ele prin argumente (parametri). Exista urmatoarele moduri de transfer (transmitere) a parametrilor catre functiile apelate:
Exemplul devenit clasic este cel al functiei de permutare (interschimbare) a doua variabile. Fie functia vschimb definita astfel:
void vschimb (float x, float y)
void main()
Parametri functiei vschimb sunt transmisi prin valoare: parametrilor formali x, y li se atribuie (la apel) valorile parametrilor efectivi a, b. Functia vschimb permuta valorile parametrilor formali x si y, dar permutarea nu are efect asupra parametrilor efectivi a si b.
Pentru ca functia de interschimbare sa poata permuta valorile parametrilor efectivi, in limbajul C/C++ parametrii formali trebuie sa fie pointeri catre valorile care trebuie interschimbate:
void pschimb(float *x, float *y)
void main()
Se atribuie pointerilor x si y valorile pointerilor pa, pb, deci adresele variabilelor a si b. Functia pschimb permuta valorile spre care pointeaza pointerii x si y, deci valorile lui a si b.
In limbajul C++ acceasi functie de permutare se poate defini cu parametri formali de tip referinta.
void rschimb(float &x, float &y)
void main()
In acest caz, x si y sunt sinonime cu a si b (nume diferite pentru aceleasi grupuri de locatii de memorie). Interschimbarea valorilor variabilelor x si y inseamna interschimbarea valorilor variabilelor a si b.
In afara de functiile predefinite existente in header-ele <stdlib.h>, <math.h>, <iostream.h>, <string.h> - exista posibilitatea de a se construi noi functii de catre programator(utilizator).
Sintaxa definitiei unei functii este:
<tip valoare returnata> <nume functie> (<tip parametru> [*] <nume parametru> [,])
unde:
<tip valoare returnata> - poate fi oricare din tipurile de baza sau void (tipul vid)
<tip parametru> - poate avea orice tip cu exceptia lui void
[*] - este un parametru optional, utilizat numai pentru parametrii a caror valoare se modifica (spunem ca functia are efecte laterale)
<instructiuni> - au aceeasi sintaxa cu cele dintr-un program, servesc la calculele intermediare din corpul functiei
<lista variabile auxiliare> - sunt variabile locale functiei, nu sunt vazute in afara functiei
instructiunea return este principala instructiune a unei functii, ea inseamna returnarea de catre functie a rezultatului care va fi transmis programului principal sau altei functii care o apeleaza; ea este obligatorie in toate functiile cu exceptia celor de tip void
Sintaxa apelului unei functii este:
<nume functie> ( <nume parametru> [,])
deci numele functiei urmat de lista parametrilor intre paranteze; acestia poarta numele de parametrii actuali iar parametrii din definitia functiei se numesc parametrii formali. Este necesar ca parametrii actuali sa corespunda ca numar si tip cu parametrii formali.
Observatie: De obicei functiile se declara si se definesc la inceputul programului, dar se mai pot declara si astfel: se declara la inceput prototipul si apoi la sfarsit definirea = descrierea detaliata (inclusiv prototipul).
float max(float x, float y)
//Transferul parametrilor unei functii
#include<iostream.h>
//Transfer prin valoare
void schimb_v (float x, float y)
//Transfer prin pointeri
void schimb_p(float *x, float *y)
//Tansfer prin referinta
void schimb_r(float &x, float &y)
void main()
//Minimul elementelor unui tablou
#include <iostream.h>
#define DIM 5
float min2v(float a,float b)
int sorttab(float tablou[DIM])
return indmin;
void tiptab(float tablou[DIM])
void main()
cout<<'Tabloul initialn';
tiptab(tabl);
imin=sorttab(tabl);
cout<<'Elementul minim din tablou este: tabl('<<imin<<')='<<
tabl[imin]<<'n';
Sa se scrie o functie (pcit_int) care afiseaza caracterele unui tablou si citeste un intreg de tip int.
Functia are doi parametri:
text Tablou unidimensional de tip caracter .
x - Pointer spre intregi de tip int; are ca valoare adresa zonei de memorie in care se pastreaza valoarea intregului citit.
Functia de fata returneaza 0 la intilnirea sfirsitului de fisier si 1 altfel.
//FUNCTIA BVIII2
int pcit_int(char text[], int *x)
/* - citeste un intreg si-l pastreaza in zona de memorie a carei adresa este
valoarea lui x;
- returneaza:
0 - la intilnirea sfirsitului de fisier;
1 - altfel */
Sa se scrie o functie (pcit_int_lim) care citeste un intreg de tip int care apartine unui interval dat.
Ea are parametrii:
text - Tablou unidimensional de tip char
int - intreg de tip int
sup - intreg de tip int
pint - Pointer spre intregi de tip int; are ca valoare adresa zonei de memorie in care se pastreaza numarul citit.
functia de fata returneaza:
0 - La inltalnirea sfarsitului de fisier.
1 - Altfel.
//FUNCTIA BVIII3
int pcit_int(char[], int *); /* prototip */
int pcit_int_lim(char text[], int inf, int sup, int *pint)
/* - citeste un intreg de tip int ce apartine intervalului [inf.sup] si-l
pastreaza in zona de memorie a carei adresa este valoarea parametrului pint;
- returneaza:
0 - la intilnirea sfirsilului de fisier;
1 - altfel. */
//Operatii cu matrici realizate cu functii
#include<iostream.h>
#include<stdio.h>
#define DIM 10
void citire(int nl,int nc,int mat[DIM][DIM])
}
int suma(int mat1[DIM][DIM], int mat2[DIM][DIM],int nl,int nc,int summat[DIM][DIM])
return 0;
void prod(int mat1[DIM][DIM], int mat2[DIM][DIM], int m,int n,int p,int prodmat[DIM][DIM])
void afisare(int nl,int nc,int mat[DIM][DIM])
void main()
else
cout<<'Nu se poate efectua suma deoarece numerele de linii si coloane au nereguli';
break;
}
case'd':
case'p':
break;
}
default: cout<<'Nu s-a introdus una din literele cerute !';
}
Sa se alcatuiasca un program pentru ridicarea la putere a unei matrici patratice si pentru calculul transpusei acesteia.
in cazul matricilor patratice A(n,n) numarul de linii si de coloane este egal cu ordinul matricii.
Transpusa se obtine prin interschimbarea elementelor din partea dreapta a diagonalei principale cu cele avand indicii liniei si coloanei inversati./* Program 14.
Ridicarea la o putere a unei matrici patratice. Calculul transpusei unei matrici patratice.*/
#define NMAX 20 // Numarul maxim de linii sau coloane al matriciilor
#include <stdio.h>
#include <conio.h>
/*Functia citeste valorile elementelor unei matrici */
void citire (float ta[NMAX][NMAX], int ordin, char numev)
/*Functia scrie valorile elementelor unei matrici */
void scriere(float ta[NMAX][NMAX], int ordin, char numev)
else printf('t');
}
printf('nApasa orice tasta!');getch();
/*Functia efectueaza ridicarea la patrar, a unei matrici */
void patrat(float ta[NMAX][NMAX],float tb[NMAX][NMAX], int ordin)
/*Functia calculeaza transpusa unei matrici*/
void transpusa(float ta[NMAX][NMAX], int ordin)
void main(void)
Pentru ca elementele matricei sa nu se piarda in timpul operatiei de transpunere, se utilizeaza o variabila intermediara care stocheaza valoarea uneia dintre variabilele ce trebuiesc interschimbate:
temp=ta[i][j];
ta[i][j]=ta[j][i];
ta[j][i]=temp;
Daca am fi aplicat direct relatia:
ta[i][j]=ta[j][i];
valoarea variabilei ta[i][j] s-ar fi pierdut fiind inlocuita cu cea a variabilei ta[j][i] si astfel (valoarea variabilei ta[j][i] nefiind modificata) matricea ar fi fost alterata, devenind simetrica fata de diagonala principala.
in apelul functiei patrat o scriere de tipul: patrat(a,a,n); nu ar fi dus la calculul patratului matricii a ci la alterarea valorilor elementelor acesteia. in cazul sirurilor, aceeasi variabila sir nu poate constitui pentru o functie si argument 'valoare' si argument 'variabila'.
1. Sa se realizeze un program care implementeaza operatii cu vectori utilizand functii (citire, scriere, produs scalar, sortare)
2. Sa se realizeze un program care calculeaza valoarea unui polinom utilizand o functie pentru calculul puterii
Derivata unei functii intr-un punct reprezinta panta tangentei la graficul functiei in punctul respectiv, adica:
f'(x) =
//Calculul derivatei unei functii
#include <stdio.h>
#include <math.h>
double fd(double);
double deriv(double,double,double(*)(double));
void main()
printf('nx=%f; d= %lf',x,-sin(x));
double deriv(double x,double h,double (*f)(double))
double fd(double x)
Relatia de calcul:
I = =
= h
unde: h= , n fiind numarul de diviziuni
//Calculul integralei prin metoda trapezelor
#include <stdio.h>
#include <math.h>
double fc(double);
double ing(double,double,double(*)(double));
void main()
double ing(double x,double y,double (*f)(double))
double fc(double x)
Este biblioteca care contine toate functiile matematice. Unele dintre cele mai utilizate sunt prezentate in urmatorul tabel:
Nume |
Sintaxa |
Ce returneaza |
Exemplu |
abs |
double abs (double x) |
valoarea absoluta a unui numar real |
#include <iostream.h> #include <math.h> void main(void) |
sqrt |
double sqrt (double x) |
radical |
|
acos |
double acos (double x) |
arccosinus | |
asin |
double asin (double x) |
arcsinus | |
cos |
double cos (double x) |
cosinus (la toate functiile trigonometrice argumentul e in radiani) |
#include <iostream.h> #include <math.h> void main(void) |
cosh |
double cosh (double x) |
cosinus hiperbolic | |
exp |
double exp (double x) |
exponentiala | |
floor |
double floor (double x) |
rotunjire prin lipsa |
|
ceil |
double ceil (double x) |
rotunjire prin adaus | |
fmod |
double fmod (double x,double y) |
restul impartirii lui x la y |
#include <stdio.h> #include <math.h> void main(void) |
hypot |
double hypot (double x,double y) |
ipotenuza triunghiului de catete x si y | |
ldexp |
double ldexp(double x, int exp); |
calculeaza produsul dintre primul parametru si 2 la puterea data de cel de al doilea parametru |
#include <stdio.h> #include <math.h> int main(void) |
log |
double log(double x); |
logaritm natural | |
log10 |
double log10(double x); |
logaritm zecimal | |
pow |
double pow(double x, double y); |
puterea unui numar la alt numar | |
pow10 |
double pow10(int p); |
puterea lui 10 la un numar intreg | |
sin |
double sin(double x); |
sinus | |
sinh |
double sinh(double x); |
sinus hiperbolic |
sinh(x) = (ex - e-x)/2 |
tan |
double tan(double x); |
tangenta | |
tanh |
double tanh(double x); |
tangenta hiperbolica |
Contine functii pentru siruri de caractere
Nume |
Sintaxa |
Ce face |
Exemplu |
strcat |
strcat(s1,s2) |
Concateneaza sirul s2 la sfarsitul sirul s1 |
#include <string.h> #include <stdio.h> int main(void) |
strcmp |
strcmp(s1,s2) |
Comparare de siruri; da valoarea 0 daca s1=s2, negativ daca s1<s2 si pozitiv daca s1>s2. |
#include <string.h> #include <stdio.h> int main(void) |
strcpy |
strcpy(s1,s2) |
Copiaza sirul s2 in s1 |
#include <stdio.h> #include <string.h> int main(void) |
strlen |
strlen(s1) |
Determina lungimea sirului s1 |
#include <stdio.h> #include <string.h> int main(void) |
Contine functiile de conversie; le vom prezenta in urmatorul tabel:
Nume |
Sintaxa |
Ce face |
Exemplu |
atof |
double atof(const char *s); |
conversia unui sir la real dubla precizie | |
atol |
long atol(const char *s); |
conversia unui sir la intreg long |
#include <iostream.h> #include<stdlib.h> void main (void) |
atoi |
int atoi(const char *s); |
conversia unui sir la intreg simplu | |
itoa |
char* itoa(int value;char* string;int radix); |
conversia unui intreg la sir de caractere cu lungimea data de al treilea parametru |
#include <stdlib.h> #include <iostream.h> void main(void) |
ltoa |
char* ltoa(long value;char* string;int radix); |
conversia unui intreg long la sir de caractere cu lungimea data de al treilea parametru | |
ultoa |
char* ultoa(unsigned long value;char* string;int radix); |
conversia unui intreg unsigned long la sir de caractere cu lungimea data de al treilea parametru | |
ftoa |
char* ftoa(float value;char* string;int radix); |
conversia unui real dubla precizie la sir de caractere cu lungimea data de al treilea parametru | |
rand |
int rand(void) |
genereaza un numar aleator cuprins intre 0 si 10000 |
#include <stdlib.h> #include <iostream.h> void main(void) |
random |
int rand(int num) |
genereaza un numar aleator cuprins intre 0 si num-1 | |
system |
void system(char* string) |
lanseaza in executie o comanda DOS |
#include <stdlib.h> #include <iostream.h> void main(void) |
In cazul folosirii mai frecvente a anumitor functii, acestea pot fi scrise grupat intr-un fisier biblioteca, si apelate apoi ori de cate ori este nevoie.
Programul urmator apeleaza functia suma, care se gaseste intr-un fisier header User_Lib.H
//Biblioteci de functii
#include 'USER_LIB.H'
void main()
Biblioteca de functii este un fisier header/antet (cu extensia h) scris de catre utilizator, caruia ii pot fi adaugate functii dupa nevoie.
#ifndef _USER_LIB_
#define _USER_LIB_
int suma(int x,int y)
#endif
//Functii din biblioteca matematica
#include<math.h>
#include<iostream.h>
#include<stdio.h>
main()
#include <iostream.h>
#include <string.h>
void main()
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1726
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved