Definimi i funksionit Funksioni ngërthen ne vete një grup te urdhrave te cilat i ekzekuton me rastin e thirrjes se tij nga një pjese e caktuar e programit. Forma e përgjithshme e funksionit është: tipi emri(tipi1 prm1,tipi2 prm2,...,tipin prmn) urdhëri/at; return rezultati; tipi - tipi i rezultatit të funksionit. emri - emri i funksionit. tipi1,... tipin - tipat e parametrave formal. prm1, prm2,..., prmn - parametrat formal. urdhëri/at - urdhëri/at që ekzekutohen brenda funksionit rezultati - rezultati të cilin e kthen funksioni. Thirrja e funksionit // Thirrja e funksioneve double shuma(double a, int b) double y; y=a + b; return y; int zbritja(int a,int b) 1
int y; y=a - b; return y; double x, s; int z, y, c = 3; cout << "Vlera x = "; cin >> x; cout << "\nvlera y = "; cin >> y; s = shuma(x, y); // thirrja e funksioit shuma cout << "\nshuma e llogaritur: s = " << s << "\n\n"; z = zbritja(y, c); // thirrja e fuksionit zbritja cout << "Zbritja e llogaritur: s = " << z << "\n\n"; Përdorimi i disa funksioneve në një program Shembulli 2: Të shkruhet programi në gjuhën programuese c++ që bën llogaritjen e funksioneve s dhe p. Për llogaritjen e funksioneve të shfrytëzohen funksionet me emërtimin ShumaVargut dhe ProdhimiVargut. double ShumaVargut(int a, int b, int c, int d); double ProdhimiVargut(int a, int b, int d); int n, m = 0; double Prodhimi; double Shuma; cout<<"vlera n = "; cin>>n; Shuma = ShumaVargut(2,n,3,2); 2
cout << "Shuma S= " << Shuma <<"\n"; Prodhimi=ProdhimiVargut(m,n,1); cout << "Prodhimi p = " << Prodhimi << "\n"; double ShumaVargut(int a, int b,int c,int d) int i; double S=0; for (i=a;i<=b;i++) S=S+(c*i+d); return S; double ProdhimiVargut(int a, int b,int d) int i; double P=1; for (i=a;i<= b;i++) P=P*(i+d); return P; Fushat numerike në nën programe //Krijimi i vektorit me nenprogram void KrijoVektorin(int v[],int n); const int m=5; int i,a[m]; KrijoVektorin(A,m); cout << "Vektori i formuar:\n"; cout << "A[5] = "; for (i=0;i<m;i++) cout << A[i] << " "; cout << "\n"; // Nenprogrami KrijoVektorin void KrijoVektorin(int v[], int n) int i; for (i=0;i<n;i++) v[i]=3*i + n; return; 3
//Krijimi i matricës me nën program #include <math.h> const int n=5; const int m=4; void KrijoMatricen(int A[m][n]); int i,j,a[m][n]; KrijoMatricen(A); cout << "Matrica A: \n"; for (i=0;i<m;i++) for (j=0;j<n;j++) cout << A[i][j] << " "; cout << "\n"; // Nenprogrami KrijoMatricen void KrijoMatricen(int A[m][n]) int i,j; for (i=0;i<m;i++) for (j=0;j<n;j++) A[i][j]= i+j + pow(m, 2); return; Funksionet void, inline VOID Funksionet të cilat nuk kthejnë rezultat fare, quhen funksione void (ang. boshe, të zbrazëta, shterpe) dhe definohen si funksione të tipit void. Urdhri i tyre për kthim të rezultateve shkruhet vetëm return;. Shembull funksioni void: void shtypmesazhin() cout << Ky eshte nje funksion void!"; return; 4
INLINE Trupi i funksionit zakonisht paraqitet në fund të programit. Nëse komplet funksioni zhvillohet në fillim të programit, në vijë (ang. In line) të rrjedhës së programit, atëherë quhet Inline function. Funksioni void void printomesazhin() cout<<"un jam nj funksion!\n"; int main () printomesazhin(); Funksion inline shembull inline int subtraction (int a, int b) int r; r=a-b; return (r); int main () int x=5, y=3, z; z = subtraction (7,2); cout << "Rezultati i pare eshte "<< z; cout << "\nrezultati i dyte eshte " << subtraction (7,2); cout << "\nrezultati i trete eshte " << subtraction (x,y); z= 4 + subtraction (x,y); cout << "\nrezultati i katert eshte " << z << '\n'; 5
Direktiva #define mund te përdoret për krijimin e makro funksioneve. Makrot marrin argumente ngjashëm sikurse funksionet. Krijimi i një makro funksioni: #define llogarit (x) ( (x) * 2 ) llogarit (4) atëherë do te kemi rezultatin. 8 Makrot mund te kenë një e me shume parametra. #define Emri "Valdete" cout<< Emri << "\n" << endl; #include <cmath> #define katrori(x) (pow(x,2)) #define kubi(y) (pow(y,3)) #define shuma(x, y) (x + y) double f,g, sh; f=katrori(2); cout << "Katrori...: " << f << "\n"; g=kubi(3); cout << "Kubi...: " << g << "\n"; sh = shuma(f, g); cout << "Shuma...: " << sh << "\n"; Funksionet e librarisë së C++ rand () #include <cstdlib> tolower() #include <cctype> toupper() #include <cctype> time() #include <ctime> rename() #include <cstdio> remove() #include <cstdio> //Shembull: perdorimi i funksionit toupper() 6
#include <cctype> void main() char d='v'; d=toupper(d); cout<<d<<"\n"; return; Funksionet matematikore ne C++ Në matematik sin(x) cos(x) tg(x) arcsin(x) arccos(x) arctg(x) ln(x) log(x) x y e x xx x sh(x) ch(x) th(x) Në gjuhen C++ sin(x) cos(x) tan(x) asin(x) acos(x) atan(x log(x) log10(x) pow(x) exp(x) sqrt(x) abs(x), fabs(x) sinh(x) cosh(x) tanh(x) #include <math.h> const int m=7; double y; int i,x; int A[m]=4,-7,3,-9,5,-3,6; x=abs(a[1]); for (i=0;i<m;i++) if (abs(a[i])>x) x=abs(a[i]); cout << "Anetari me i madh per nga vlera absolute: x =" << x << "\n\n"; 7
y=3*sin(x+1)+4*exp(x)-2*log(x+2); cout << "Vlera e funksionit: y=" << y << "\n\n"; Funksionet për punë me stringje Gjatesia e stringut strlen (x) Kopjimi i stringut strcpy(y,x) Kop. stringut n karaktere strncpy(y,x,n). Bashkimi i dy stringjeve strncat(x,y) Shtimi i pjeses se stringut strncat(x,y,k) #include <string> const int m=20; int gjat; char A[m]; cout << "Teksti q lexohet...: "; cin.getline(a,m); cout << "Teksti i lexuar...: " << A << "\n"; gjat=strlen(a); cout << "Gjatesia e tekstit...: " << gjat << "\n"; Variablat lokale dhe globale Variablat lokale 8
Variablat të cilat përcaktohen brenda një funksioni, përfshirë edhe programin kryesor si funksion, paraqesin variabla lokale. Këto variabla mund të shfrytëzohen vetëm brenda funksionit ku janë definuar, përkatësisht vetëm brenda hapësirës e cila përcaktohet me kllapat e mëdha të funksionit. Variablat globale Variabla të cilat deklarohen para deklarimit të funksionit main(), ose jashtë kllapave të funksioneve, paraqesin variabla globale. Variablat globale shihen nga të gjithë nën programet, pavarësisht nga ajo se a shfrytëzohen ose jo prej tyre. int n, m; //Variabla globale double rezultati; //Variabla globale char emri; int mosha, pesha; float gjatesia; cout <<"Mosha= "; cin >> mosha; cout <<"Pesha= "; cin >> pesha; cout <<"Lartesia= "; cin >> gjatesia; //Variabla globale //Variabla lokale //Variabla lokale Funksionet e mbingarkuara Funksionet e mbingarkuara Thirrja në bazë të numrit të parametrave Thirrja në bazë të tipave të parametrave Sinonimet Përcaktimi i sinonimeve Sinonimet globale Çka nënkuptojmë me funksione të mbingarkuara? Brenda një programi mund të definohen njëkohësisht disa funksione me emra të njëjtë, por me parametra të ndryshëm për nga numri ose të ndryshëm për nga tipat e tyre. Funksionet e tilla njihen si funksione të mbingarkuar (ang. overloaded functions). Funksionet e mbingarkuara Thirrja në bazë të numrit të parametrave Thirrja në bazë të tipave të parametrave Thirrja në bazë të numrit të parametrave apo tipave te ndryshme 9
Gjatë thirrjes së funksioneve të tilla, për ta dalluar funksionin që thirret kompjuteri e merr parasysh numrin e parametrave aktual ose tipat e parametrave aktual. P.sh thirrja e funksioneve Llogarit Llogarit(n, m), n,m int Llogarit(k, l), n-int, m-double Llogarit(n, m, s) numri i parametrave është më i madh Shembulli 1 Programi Mbingarkesa1, përmes së cilit llogariten vlerat e funksioneve: duke i shfrytëzuar dy funksione shuma përmes së cilëve definohen llogaritjet e shumave të veçanta. // Programi Mbingarkesa1 double shuma(int n); // Shuma e parë double shuma(int n,double x); // Shuma e dytë double x,y,z; cout << "\nvlera hyr se x="; cin >> x; cout << "\nvlerat e llogaritura\n\n"; y=4*shuma(2); cout << " y=" << y; z=2*x+3*shuma(2,x); cout << "\n z=" << z << "\n\n"; double shuma(int n) double s; int i; s=0; for (i=2;i<=n+1;i++) s=s+(2*i+1); return s; double shuma(int n,double x) double s; int i; s=0; for (i=1;i<=n;i++) s=s+(i+x); return s; 10
Shembulli 2 Programi Mbingarkesa2, përmes së cilit llogariten vlerat e funksioneve: duke i shfrytëzuar dy funksione vlera përmes së cilëve definohen llogaritja e faktorielit dhe shumës. // Programi Mbingarkesa2 double vlera(int m, int n); // Faktorieli double vlera(int n,double x); // Shuma double x,y,z; int m,n; cout << "\nvlera hyr se x="; cin >> x; cout << "\nvlera hyr se m="; cin >> m; cout << "\nvlera hyr se n="; cin >> n; cout << "\nvlerat e llogaritura\n\n"; y=vlera(m,n); cout << " y=" << y; z=2*x+3*vlera(n,x); cout << "\n z=" << z << "\n\n"; double vlera(int m,int n) double F; int i; F=1; for (i=1;i<=(2*m+n-1);i++) F=F*i; return F; double vlera(int n,double x) double s; int i; 11
s=0; for (i=1;i<=n;i++) s=s+(i+x); return s; Sinonimet përcaktimi i tyre Me qëllim të afrimit sa më shumë kah shfrytëzuesi, në gjuhën programuese C++ mund të përdoren sinonime gjatë deklarimit të tipave të të dhënave. Sinonimet për tipat standarde të të dhënave përcaktohen duke e shfrytëzuar deklaratën typedef, e cila në formë të përgjithshme shkruhet kështu: typedef t,s; ku janë: t - tipi standard. s - sinonimi përkatës. Shembull 4 Programi përmes së cilit tregohet definimi dhe shfrytëzimi i sinonimeve të tipave int dhe double. typedef int plote; typedef double decimale; plote i,k,n; decimale x,y; cout << "\nvlera e variablës n: "; cin >> n; x=0; y=0; for (i=1;i<=n;i++) k=i%2; if (k==0) x=x+i; else y=y+i; cout << "\nshuma e numrave tek x=" << x; cout << "\nshuma e numrave çift y=" << y 12
<< "\n\n"; Sinonimet globale Nëse deklarimi typedef vendoset para programit, sinonimet përkatëse janë të karakterit global dhe mund të shfrytëzohen edhe në nënprogramet përcjellëse të tij. Shembulli 5 Programi përmes së cilit gjendet shuma s e katrorëve të anëtarëve negativ të vektorit A(m). Gjatë kësaj, për llogaritjen e shumës shfrytëzohet nënprogrami shuma. typedef short plote; typedef long double decimale; decimale shuma(decimale A[],plote n); const plote n=6; decimale s,a[n]=5.4,-2.9,-4.3,6.3,9.4,-7.8; s=shuma(a,n); cout << "\nshuma e k rkuar s=" << s << "\n\n"; decimale shuma(decimale A[],plote n) plote i; decimale s=0; for (i=0;i<n;i++) if (A[i]<0) s=s+a[i]*a[i]; return s; Duhet te shënohet viti i lindjes i ndonjë personi dhe viti rrjedhës. Llogaritet mosha e personit. Shkrimi te jetë i formës Sheno vitin e lindjes: Sheno vitin rrjedhes? Tash ke... vite. 13
#include<iostream> int vit,viti1,viti2; cout<<"sheno vitin e lindjes: "; cin>>viti1; cout<<"sheno vitin rrjedhes? "; cin>>viti2; vit=viti2-viti1; cout<<endl<<"tash ke "<<vit<<" vite."<<endl; Te llogaritet rezistenca e përçuesit nga bakri nëse është dhanë gjatësia ne metra dhe diametri ne milimetër. Shkrimi te jetë i formës Sheno diametrin e percuesit (ne mm) Sheno gjatesine e percuesit (ne m) Percuesi nga bakri i gjate... m me prerje terthore... mm2 ka rezistencen... om. #include<iostream> float rrezja,l,r,s,rezist; const double PI=3.14; const double ro=0.0175; cout<<"sheno rrezen e percuesit (ne mm):"; cin>>rrezja; cout<<endl<<"sheno gjatesise e percuesit (ne m):"; cin>>l; r=rrezja/2; s=r*r*pi; rezist=ro*l/s; cout<<endl<<"percuesi i bakrit i gjate "<<l<<" m me prerje terthore " <<s<<" mm2 ka rezistencen" <<rezist<<" om."<<endl; d 2 r = ; s = r π Re z = ro 2 s l 14
Trupit me masën m kilogram i ndryshohet për t sekonda shpejtësia nga v1 ne v2 m/s. Duhet te llogaritet forca qe ka veprua ne trup. Shkrimi te jetë i formës: Sheno masën e trupit (ne kg) Sheno kohen (ne s) Sheno shpejtesin fillestare (ne m/s) Sheno shpejtesine perfundimtare (ne m/s) Ne trup ka veprua forca prej... N. #include<iostream> float m,t,v1,v2,a,f; cout<<"sheno masen e trupit (ne kg):"; cin>>m; cout<<"sheno kohen (ne s):"; cin>>t; cout<<"sheno shpejtesin fillestare (ne m/s):"; cin>>v1; cout<<"sheno shpejtesin perfundimtare (ne m/s):"; cin>>v2; a=(v2-v1)/t; F=m*a; cout<<endl<<"ne trup ka vepruar forca prej "<<F<<" N."<<endl; v2 v1 a = F= ma t Duhet te shënohet koha ne sekondë, pastaj te llogaritet se sa orë ka sa minuta dhe sa sekonda. Shkrimi te jetë i formës: Sheno kohen ne sekonda:... sekonde ka... ore,... minuta dhe... sekonde. #include<iostream> int s, sek, min, ore, mbetja; cout<<"sheno kohen ne sekonda:"; cin>>s; ore=s/3600; mbetja=s%3600; min=mbetja/60; 15
sek=mbetja%60; cout<<s<<" sekonde ka "<<ore<<" ore, " <<min<<" minuta dhe " <<sek<<" sekonde."<<endl; Trupi me masën m kilogram bie nga lartësia h metra me shpejtësinë v m/s. Sa është energjia totale e trupit. Shkrimi ne te jetë i kësaj forme: Shëno masën e trupit (në kg): Shëno lartësinë (në m): Shëno shpejtësinë (në m/s): Trupi ka... J energji kinetike dhe... J energji potenciale, dhe energji te tërësishme... J. #include<iostream> const double g=9.81; float m,h,v,ep,ek,et; cout<<" Sh no mas n e trupit (n kg): "; cin>>m; cout<<" Sh no lart sin (n m):"; cin>>h; cout<<" Sh no shpejt sin (n m/s):"; cin>>v; Ep=m*g*h; Ek=m*v*v/2; Et=Ep+Ek; cout<<endl<<" Trupi ka "<<Ek<<" J energji kinetike dhe "<<Ep; cout<<" energji potenciale, dhe energji te t r sishme " <<Et <<" J." <<endl; Ep = m g h E mv 2 2 k = Et = Ep + Ek 16