Functii, Tablouri și Pointeri în C și C++

Curs
9.4/10 (5 voturi)
Domeniu: Calculatoare
Conține 1 fișier: doc
Pagini : 12 în total
Cuvinte : 3998
Mărime: 34.10KB (arhivat)
Publicat de: Theodor Marginean
Puncte necesare: 0

Extras din curs

3. Pointeri la functii.

Numele unei functii reprezinta adresa de memorie la care începe functia. Numele functiei este, de fapt, un pointer la functie.

Se poate stabili o corespondenta între variabile si functii prin intermediul pointerilor la functii. Ca si variabilele, acesti pointeri:

• pot primi ca valori functii;

• pot fi transmisi ca parametrii altor functii

• pot fi intorsi ca rezultate de catre functii

La declararea unui pointer catre o functie trebuiesc precizate toate informatiile despre functie, adica:

• tipul functiei

• numarul de parametri

• tipul parametrilor

care ne vor permite sa apelam indirect functia prin intermediul pointerului.

Declararea unui pointer la o functie se face prin:

tip (*pf)(lista_parametri_formali);

Daca nu s-ar folosi paranteze, ar fi vorba de o functie care întoarce un pointer.

Apelul unei functii prin intermediul unui pointer are forma:

(*pf)(lista_parametri_actuali);

Este permis si apelul fara indirectare:

pf(lista_parametri_actuali);

Este posibil sa creem un tablou de pointeri la functii; apelarea functiilor, în acest caz, se face prin referirea la componentele tabloului.

De exemplu, initializarea unui tablou cu pointeri cu functiile matematice uzuale se face prin:

double (*tabfun[])(double) = {sin, cos, tan, exp, log};

Pentru a calcula radacina de ordinul 5 din e este suficienta atribuirea:

y = (*tabfun[3])(0.2);

Numele unei functii fiind un pointer catre functie, poate fi folosit ca parametru în apeluri de functii.

În acest mod putem transmite în lista de parametri a unei functii – numele altei functii.

De exemplu, o functie care calculeaza integrala definita:

va avea prototipul:

double integrala(double, double, double(*)(double));

Definiti o functie pentru calculul unei integrale definite prin metoda trapezelor,cu un numar fixat n de puncte de diviziune:

Folositi apoi aceasta functie pentru calculul unei integrale definite cu o precizie data e. Aceasta precizie este atinsa în momentul în care diferenta între doua integrale, calculate cu n, respectiv 2n puncte de diviziune este inferioara lui e

#include <math.h>

double sinxp();

double trapez(double,double,int,double(*)());

double a=0.0, b=1.0, eps=1E-6;

int N=10;

void main(void)

{ int n=N;

double In,I2n,vabs;

In=trapez(a,b,n,sinxp);

do { n*=2;

I2n=trapez(a,b,n,sinxp);

if((vabs=In-I2n)<0) vabs=-vabs;

In=I2n;

} while(vabs > eps);

printf(“%6.2lfn”, I2n);

}

double trapez(double a,double b,int n,double(*f)())

{ double h,s;

int i;

h=(b-a)/n;

for(s=0.0,i=1;i<n;i++)

s+=(*f)(a+i*h);

s+=((*f)(a)+(*f)(b))/2.0;

s*=h;

return s;

}

4. Declaratii complexe.

O declaratie complexa este o combinatie de pointeri, tablouri si functii. In acest scop se folosesc atributele:

() – functie

[] – tablou

* - pointer

care pot genera urmatoarele combinatii:

* () – functie ce returneaza un pointer

(*)() – pointer la o functie

* [] - tablou de pointeri

(*) [] – pointer la tablou

[ ] [] – tablou bidimensional

Exista si combinatii incorecte, provenite din faptul ca în C nu este permisa declararea:

- unui tablou de functii

- unei functii ce returneaza un tablou.

Acestea sunt:

( ) [ ] – functie ce returneaza un tablou

[ ] ( ) – tablou de functii

( ) ( ) – functie ce returneaza o functie

Pentru a interpreta o declaratie complexa vom inlocui atributele prin urmatoarele sabloane text:

Atribut Sablon text

() functia returneaza

[n] tablou de n

* pointer la

Descifrarea unei declaratii complexe se face aplicând regula dreapta – stânga, care presupune urmatorii pasi:

• se incepe cu identificatorul

• se cauta în dreapta identificatorului un atribut

Preview document

Functii, Tablouri și Pointeri în C și C++ - Pagina 1
Functii, Tablouri și Pointeri în C și C++ - Pagina 2
Functii, Tablouri și Pointeri în C și C++ - Pagina 3
Functii, Tablouri și Pointeri în C și C++ - Pagina 4
Functii, Tablouri și Pointeri în C și C++ - Pagina 5
Functii, Tablouri și Pointeri în C și C++ - Pagina 6
Functii, Tablouri și Pointeri în C și C++ - Pagina 7
Functii, Tablouri și Pointeri în C și C++ - Pagina 8
Functii, Tablouri și Pointeri în C și C++ - Pagina 9
Functii, Tablouri și Pointeri în C și C++ - Pagina 10
Functii, Tablouri și Pointeri în C și C++ - Pagina 11
Functii, Tablouri și Pointeri în C și C++ - Pagina 12

Conținut arhivă zip

  • Functii, tablouri si pointeri in C si C++.doc

Alții au mai descărcat și

AutoCad

APERTURE - controleazã mãrimea cursorului selector, caracteristic modului object snap. ARC - traseazã un arc de cerc de orice dimensiune. A -...

Biblioteca de Șabloane Standard

Biblioteca de Sabloane Standard (STL) asigura o abstractizare standardizata a datelor prin intermediul containerelor si o abstractizare procedurala...

Clase Derivate

1. Clase derivate. Prin mostenire, atributele unei clase de baza sunt transmise unor clase derivate. Derivarea permite definirea unor clase noi,...

Clase în Java

Clase pentru miniaplicatii Miniaplicatiile constituie extensii ale unei clase deja existente java.applet.Applet. Structura clasei unui applet...

Clase

1. Programare procedurala –Programare orientata pe obiecte. Limbajul C, ca si Pascal, utilizeaza modelul programarii structurate procedurale, care...

Comunicații internet

2.1. Stilurile caracterelor {n sfirsit pagina dvs. contine ceva, chiar daca este vorba numai de un nume. Vom analiza in continuare elementele de...

Crearea unei aplicații independente în Java

Toate aplicatiile Java contin o metoda main(), spre deosebire de miniaplicatii. class FirstApp { public static void main( String argsst) {...

Curs Excel

Deplasarea prin foi Deplasarea dintr-o foaie in alta se face cu clic cu mouse-ul pe eticheta foii dorite. Deplasarea prin celule Va puteti...

Te-ar putea interesa și

Proiect POO

I. TEMA PROIECTULUI I. 1. ENUNT Se considera un vector care contine numarul variabil de perechi de pantaloni (p[20]), care se pot produce intr-o...

Proiect SDAA. Bibliotecă - TDA listă

Specificatia de definire a problemei 1.1. Enunt tema BIBLIOTECA: TDA lista. Implementare cu tablouri, pointeri, cursori. Liste ordonate,...

Curs Programare C++

Cap 1. Reprezentarea informaţiilor 1.1 Reprezentarea numerelor întregi în sistemul binar Un număr natural se reprezintǎ ca o colecţie de cifre....

Limbajul C

În continuare vom defini un calculator, ca fiind un sistem electronic de foarte mare complexitate, capabil de prelucrarea automata a datelor de...

Curs C++

Limbajele C si C++ sunt limbaje de programare de nivel înalt. Limbajul C a aparut în anii 1970 si a fost creat de Dennis Ritchie în...

Programarea Calculatoarelor și Limbaje de Programare

Introducere Lucrarea de faţă îşi propune să acopere, nevoile programatorului de aplicaţie inginerească care, spre deosebire de informaticianul de...

Limbaje de Programare

PREZENTAREA GENERALĂ A MEDIULUI DE DEZVOLTARE Borlandc C++, produs al firmei Borland International, este un pachet de programe care oferă o...

Microprocesoare

1.1. CALCULATORUL, UN SISTEM AUTOMAT DE PRELUCRARE A DATELOR Calculatorul (mai precis, calculatorul numeric programabil) = sistem electronic...

Ai nevoie de altceva?