Documente Academic
Documente Profesional
Documente Cultură
Mihaela.gheorghe@ie.ase.ro
Pointeri la funcții
Void functie(…){
V[5]=34;
}
void suma(int v[100], int n, int *s){
*s=0;
For(int i=0;i<n;i++)
*s += v[i];
V[3]=1000;
}
Void main() {
Int v[100],n,s;
//citirea v, n
Suma(v,n,&s);
Functie()…
//afisare vector v -> v[3]=1000; v[5]=34;
}
1.Pointeri spre subprograme
Numele unei funcţii poate fi folosit ca pointer
constant (asemănător masivelor)
Semnificaţia:
adresa din memorie unde se află codul executabil al
subprogramului respectiv
Tipul:
Pointer către un subprogram care primeşte o anumită
listă de parametri şi întoarce un anumit tip de rezultat
Utilizare:
Transmiterea subprogramelor ca parametri pentru alte
subprograme
Exemple:
void sortare (float v[], int n);
sortare pointer către o funcţie care primeşte ca
parametri un vector cu elemente float şi un întreg
şi are rezultat de tip void
void insertie (float v[], int n){}
void selectie (float v[], int n){}
void interschimbare (float v[], int n){}
void main()
{ int n; float v[100];
void (*pf)(float, int); // variabila pointer la functie
float (*q)(float v[], int n, int poz[], int* nr);
…
pf = sortare1;
q = maxim;
sortare1(v,n); // (*pf)(v, n);
…
}
Exemplul 2:
float f(float x, float y){ return x+y;}
void main(){
float a;
float (*pf)(float, float);
pf=f;
a=(*pf)(1,2);
printf(“Rezultatul este %f”, a);
}
Declarare parametru tip pointer
la funcţie şi utilizare
Funcţie cu parametru procedural
void f(…, tip_rezultat (*nume)(lista_parametri_formali), …)
{tip_rezultat x; //….
x=(*nume)(lista_parametri_actuali); //…
}
n, eps
x1 x1 x2
#define _CRT_SECURE_NO_WARNINGS //în cazul în care apar avertismente legate de securitate
#include <stdio.h>
float ecuatie(float x)
{ return x*x - 7*x + 12;
}
int bisectie( float x1, float x2, float eps, int n, float (*f)(float), float *x)
{ int cod = 0;
while ((n > 0) && (cod == 0))
{ *x = (x1 + x2) / 2;
if((*f)(*x) == 0) cod = 1;
else if((x2-x1) < eps) cod = 2;
else if((*f)(x1)*(*f)(*x)<0)
x2 = *x;
else x1 = *x;
n--;
}
return cod;
}
void main()
{ float a, b, sol, prec;
int nr, cod;
printf("\n a=");scanf("%f",&a);
printf("\n b=");scanf("%f",&b);
printf("\n precizia=");
scanf("%f",&prec);
printf("\n nr=");scanf("%d",&nr);
cod = bisectie(a,b,prec,nr,ecuatie,&sol);
switch(cod)
{ case 0: printf("\nFara solutie");
break;
case 1: printf("\nSolutia exacta este %7.3f", sol);
break;
case 2: printf("\nSolutia aproximativa este %7.3f", sol);
}
}