Presentation is loading. Please wait.

Presentation is loading. Please wait.

Universiteti Shtetëror i Tetovës Fakulteti i Shkencave Matematike-Natyrore Departamenti i Informatikës PROGRAMIM.

Similar presentations


Presentation on theme: "Universiteti Shtetëror i Tetovës Fakulteti i Shkencave Matematike-Natyrore Departamenti i Informatikës PROGRAMIM."— Presentation transcript:

1 Universiteti Shtetëror i Tetovës Fakulteti i Shkencave Matematike-Natyrore Departamenti i Informatikës PROGRAMIM I Ligjerata 6 fisnikd.wordpress.com

2 Funksionet Duke perdorur funksionet programi ndahet ne module te vogla dhe eshte me e thjeshte te programosh me to. Nje funksion eshte nje bllok instruksionesh qe ekzekutohet kur theritet nga nje pike e programit. Ka kete sintakse deklarimi i nje funksioni tipi emri ( arg1, argt2, ...) bllok instruksionesh ku:   · tipi eshte tipi i te dhenave qe kthen funksioni.   · emri eshte emri i funksionit qe perdoret edhe per ta theritur funksionin .   · arg cdo argument perbehet nga tipe te dhenash shoqeruar nga identifikuesit. Keto bejne te mundur qe funksionit ti kalohen parametra ne momentin kur thirren per ekzekutim. Parametrat ndahen me presje.   · bllok instruksionesh eshte trupi i funksionit qe kufizohet nga { }. Mr. Fisnik Dalipi

3 Funksionet Output: Rezultati eshte 8
// funksion shembull #include <iostream > int shuma (int a, int b) { int r; r=a+b; return (r); } int main () int z; z = shuma (5,3); cout << " Rezultati eshte" << z; return 0; Output: Rezultati eshte 8 Pra fuksioni thirret sipas te njejtes menyre si eshte deklaruar:   int shuma(int a,int b) | | | | z = shuma(5, 3); Mr. Fisnik Dalipi

4 Funksionet Ne momentin qe funksioni thirret prej main, kontrolli humbet nga main dhe kalon te funksioni shuma. Vlerat e te dy parametrave (5 dhe 3) kopjohen ne variablat lokale int a dhe int b brenda funksionit. Funksioni shuma deklaron nje variabel (int r;), qe mer vleren e a+b. Meqe vlerat e parametrave a dhe b jane 5 dhe 3 perkatesisht, rezultati eshte 8 Kodi: return (r); Finalizon funksionin shuma, dhe kthen kontrollin mbrapsht te funksioni qe e thirri (main) qe vazhdon egzekutimin ne te njejtin pike ku ishte shkeputur prej funksionit shuma, gjithashtu kthen vleren 8, vlere qe i jepet variablit z. Mr. Fisnik Dalipi

5 Funksione pa tip_kthimi (void)
Tipi qe paraprin ne deklarimin e variablit duhet te jete i njejte me tipin e kthimit te instruksioni return. Nese nuk duam qe funksioni te kthej nje vlere atehere perdoret fjala kyce void. Kjo perdoret edhe kur funksioni nuk mer parametra. Ne C++ mund edhe te mos e perdoresh void ne rastin kur nuk mer parametra. Por sa here te thirret funksioni perdoret emri bashke me kllapat qe jane te detyrueshme te shkruhen, sepse tregon qe eshte thirje funksioni dhe jo variabel. Mr. Fisnik Dalipi

6 Per funksionet qe afishojne mesazhe normalisht ska nevoje per tip kthimi. Per shembull:
#include <iostream.h>  void hello (void) { cout << “Tung nga Interneti!"; }  int main () hello (); return 0; Mr. Fisnik Dalipi

7 Funksionet – sipas references
Deri tani, parametrat i kalohen fuksionit me vlere. Kjo dmth se kur therasim nje funksion me parametra I kemi kaluar funksionit vetem vlerat e variablave dhe jo vete variablat. Per shembull: int x=5, y=3, z; z = shuma ( x , y ); Ne kete rast thiret funksioni duke i kaluar vlerat x dhe y, dmth 5 dhe 3 dhe jo vete variablat. Ne kete menyre kur funksioni shuma thirret vlerat e variablave te tij a dhe b behen 5 dhe 3 por cdo modifikim i a apo b brenda funksionit shuma nuk do te kene efekt te x dhe y jashte tij, sepse variablat x dhe y kaluan thjesht vlerat e tyre perkatese Mr. Fisnik Dalipi

8 Funksionet - kalimi me reference
Por mund te lind nevoja te manipulojme brenda funksionit vlera te variablave external (jashtem). Per keto raste perdoren argumentet qe kalojne me reference, si vijon: // kalimi me reference #include <iostream > void dubliko (int& a, int& b, int& c) { a*=2; b*=2; c*=2; } int main () int x=1, y=3, z=7; dubliko (x, y, z); cout << "x=" << x << ", y=" << y << ", z=" << z; return 0; Dalja: x=2, y=6, z=14 Mr. Fisnik Dalipi

9 Funksionet - kalimi me reference
Nese verejme deklarimin e funksionit dubliko tipi i cdo argumenti ndiqet nga nje ampersand (&), qe tregon se variabli do te kalohet me reference dhe jo me vlere si zakonisht. Kur i kalon parametrat me reference, po kalojme vete variablin dhe cdo modifikim qe bejme brenda funksionit per parametrat, do te kene efekt jashte tij. Mr. Fisnik Dalipi

10 Funksionet - kalimi me reference
Nese e deklaronim funksionin si: void dubliko (int a, int b, int c) do te kalonin vetem vlerat dhe variablat nuk do te ishin te modifikuar ne main Ky tip deklarimi "me reference" duke perdorur (&) perdoret vetem te C++. Ne C perdoren pointerat per te bere dicka ekuvalente Mr. Fisnik Dalipi

11 // me shume se nje vlere kthimi #include <iostream.h>
Shembull: // me shume se nje vlere kthimi #include <iostream.h>  void prevnext (int x, int& prev, int& next) { prev = x-1; next = x+1; }  int main () int x=100, y, z; prevnext (x, y, z); cout << "Previous=" << y << ", Next=" << z; return 0; } Dalja :Previous=99, Next=101 Mr. Fisnik Dalipi

12 Vlerat default te argumenteve
Kur deklarojme nje funksion mund tu japim vlera default (paradefinuar) argumentave te tij. Kjo vlere do te perdoret nese parameteri eshte bosh ne te majte kur thiret funksioni. Per te bere kete thjesht i jep nje vlere argumentave te deklarimi i funksioneve. Nese vlera per nje parameter nuk kalohet kur funksioni thiret perdoret vlera defoult, por nese vlera specifikohet atehere vlera default nuk meret parasysh: // vlera default (e paradefinuar) #include <iostream.h>  int divide (int a, int b=2) { int r; r=a/b; return (r); }  int main () cout << divide (12); cout << endl; cout << divide (20,4); return 0; Rezultati: 6 5 Mr. Fisnik Dalipi

13 Vlerat default te argumenteve
Si shihet ka dy thirje te funksionit divide. E para: divide (12) kemi specifikuar vetem nje argument , por funksioni kerkon dy. Keshtu divide mer si vlere 2 per parametrin e dyte . Rezultati i kesaj thirrje te funksionit eshte 6 nga (12/2). Ne thirrjen e dyte: divide (20,4) dhe rezultati eshte 5 nga (20/4). Mr. Fisnik Dalipi

14 Funksionet Overloaded
Dy funksone te ndryshem mund te kene te njejtin emer nese prototipet e argumentave te tyre jane te ndryshem, kjo dmth qe mund tu japim te njejtin emer disa funksioneve nese ata kane ose numer te ndryshem argumentash ose tipe te ndryshem argumentash. Per shembull: Mr. Fisnik Dalipi

15 Funksionet overloaded
// funksione overloaded #include <iostream.h>  int divide (int a, int b) { return (a/b); }  float divide (float a, float b) int main () { int x=5,y=2; float n=5.0,m=2.0; cout << divide (x,y); cout << "\n"; cout << divide (n,m); return 0; } Rezultati: 2 2.5 Mr. Fisnik Dalipi

16 Funksionet overloaded
Ne kete rast ne kemi percaktuar dy funksione me me te njejtin emer, por njeri pret argumenta te tipit int dhe tjetri te tipit float. Kompilatori e di cilin te theras ne cdo rast duke ekzaminuar tipet, kur funksioni thirret. Nese thirret me dy ints si argument therret funksionin qe ka dy int ne prototip , nese thirret me dy float therret funksionin tjeter. Per thjeshtesi, kemi shkruar te njejtin kod ne trupin e funksioneve. Mund te ndertojme dy funksione me te njejtin emer por me sjellje komplet te ndryshme. Mr. Fisnik Dalipi

17 Rekursiviteti Rekursiviti eshte procesi, kur nje funksion therret vetveten . Per shembull: n! = n * (n-1) * (n-2) * (n-3) ... * 1 E ilustrojme rekursivitetin me nje shembull si vijon: Mr. Fisnik Dalipi

18 Rekursiviteti - shembull
// factorial calculator #include <iostream.h>  long faktoriel (long a) { if (a > 1) return (a * faktoriel (a-1)); else return (1); } int main () { long i; cout << “Jep nje numer: "; cin >> i; cout << i<< "!" << " = " << faktoriel (i); return 0; } Jep nje numer:9 9!=362880 Mr. Fisnik Dalipi

19 Prototipi i funksioneve
Deri tani, keni percaktuar funksionet perpara shfaqjes se pare te thirjes per to, qe zakonisht ishte ne main, duke lene funksionin main ne fund. Nese perserisim shembujt duke vendosur funksionin main para funksioneve te tjera, do te shihnim nje gabim. Arsyeja eshte se per te qene e mundur thirrja e nje funksioni, duhet te deklarohet paraprakisht ky si funksion Por ka nje alternative per te shmangur shkrimin e te gjithe funksioneve para main. Kjo realizohet me ane te prototipit. Qe dmth te besh nje deklarim paraprak per funksionin. Kompilatori duhet te dije argumentat dhe tipin e kthimit. Mr. Fisnik Dalipi

20 Prototipi i funksioneve
Sintaksa eshte: type name ( argument_type1, argument_type2, ...); Eshte identik me rrjeshtin e pare te deklarimit te funksionit pervec : Nuk permban {} Nuk ka ne fund (;). Te argumentat eshte e mjaftueshme te shtypen tipet e tyre. Per shembull: Mr. Fisnik Dalipi

21 cout << “Numri eshte tek.\n"; else cift (a); } void cift (int a)
// prototipet #include <iostream.h> void tek (int a); void cift (int a);  int main () { int i; do { cout << “Jepe numrin(0 per dalje):"; cin >> i; tek (i); } while (i!=0); return 0; void tek (int a) { if ((a%2)!=0) cout << “Numri eshte tek.\n"; else cift (a); void cift (int a) if ((a%2)==0) cout << “Numri eshte cift.\n"; else tek (a); } Jepe nje numer(0 per dalje):9 Numri eshte tek. Jepe nje numer(0 per dalje):112 Numri eshte cift.

22 Prototipi i funksioneve
Ky shembull eshte ndertuar ne menyren me te gjate per te shpjeguar prototipet. Prototipet e funksioneve jane: void tek (int a); void cift (int a); qe mundeson qe funksionet te perdoren para se te deklarohen plotesisht, per shembull ne main. Shume programues rekomandojne qe per cdo funksion duhet te shkruajme prototipin. Egzistenca e tyre ne te njejtin vend lehteson pune gjate programimit dhe gjithashtu lehteson procesin e krijimit te ‘header file’. Mr. Fisnik Dalipi

23 PYETJE?


Download ppt "Universiteti Shtetëror i Tetovës Fakulteti i Shkencave Matematike-Natyrore Departamenti i Informatikës PROGRAMIM."

Similar presentations


Ads by Google