ATP - Curs 2-Pointeri La Functii
ATP - Curs 2-Pointeri La Functii
ATP - Curs 2-Pointeri La Functii
de programare
- curs 2-
Pointeri la funcii
1.
2.
3.
4.
5.
Introducere
Declararea unui pointer la o functie
Pointeri la functii
Vectori de pointeri la funcii
Parametru tip pointer la funcie
1. Introducere
Se pot declara pointeri ctre:
orice tip de date (standard in C si pe care le definite de utilizator)
funcii pointerii pot fi folositi pentru a transmite functii ca parametri
pentru alte functii
respectiv
Tipul:
Pointer ctre un subprogram care primete o anumit list de parametri i
Utilizare:
Transmiterea subprogramelor ca parametri pentru alte subprograme
3
Exemplu:
float (*pointerFct) (int a, int b);
Etape
3.Pointeri la functii
void main()
{ int t=10;
char *sir= "world";
//declararea pointer-ului
void (*functionPointer1)(char *m);
//declararea pointer-ului
void (*functionPointer2)(int m);
Ce va afisa programul
dupa rulare ?
7
Rezultat
10
void main(){
int x;
float (*pf)(float, float);
pf=functie;
x=(*pf)(1,2);
printf(Rezultatul este %d, x);}
11
Este corect ?
float functie (float a, float b)
{
float r=0; //instructiuni;
return r;
}
int main(){
float x;
float (*pf)(float, float);
pf=functie;
x=(*pf)(1,2);
printf("Rezultatul este %f", x);
getch();
}
12
Exemplu 4 - Rezolvare
#include<stdio.h>
#include<conio.h>
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
{ int i;
for (i=0;i<m;i++)
scanf("%f", &v[i]); } }
{ int i;
for (i=0;i<m;i++)
void main()
{ void (*pointerSort)(float x[], int m);
//nu conteaza x si m
int n; float z[10];
(*pointerSort)(z,n);
afisareV(z,n);
}
Exemplu 1
14
Rezolvare (1)
#include<stdio.h>
#include<conio.h>
void sortareCresc (float v[], int n)
{ int i,j; float aux;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if (v[i]>v[j]) { aux=v[i]; v[i]=v[j]; v[j]=aux;
}}
void sortareDescr (float v[], int n)
{ int i,j; float aux;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if (v[i]<v[j]) { aux=v[i]; v[i]=v[j]; v[j]=aux; }
}
15
Rezolvare (2)
void main()
{ void (*pointerSort[2])(float x[], int m);
//nu conteaza x si m
int n,i;
float z[10];
citireV (z,n);
afisareV (z,n);
printf("\n");
printf("\n");
16
pointerSort[0]=sortareCresc;
pointerSort[1]=sortareDescr;
for(i=0;i<2;i++)
{ (*pointerSort[i])(z,n);
afisareV (z,n);
printf("\n");
}
}
Exemplu 2
S se creeze un vector de pointeri la funcii care
calculeaz i afieaz rezultatul operaiilor de:
- adunare;
- scdere;
- nmulire;
- mprire
a dou numere reale.
{tip_rezultat x; //.
x=(*nume)(lista_parametri_actuali); // }
Apel funcie cu parametru procedural
tip_rezultat nume_functie(lista_parametri_formali) {}
void main()
{
f(,nume_functie,);
}
18
n, eps
x1
19
x1
x2
Antet functie
float ecuatie(float x)
{ return x*x*x-3*x+14;}
int bisectie( float x1, float x2,
float (*f)(float),
float *x)
{}
20
Tema
21