You are on page 1of 39

FTI – Teknikat dhe gjuhët e programimit

Teknikat dhe Gjuhët e Programimit


(Leksioni nr. 6)

Fakulteti i Teknologjisë së Informacionit

Departamenti i Inxhinierisë Informatike 1 2020


Përmbajta
• Hapësira e variablave
FTI – Teknikat dhe gjuhët e programimit

• Çfarë është Funksioni


• Prototipi i funksionit dhe trupi i tij
• Mekanizmi i parametrave
• Parametrizimi i funksionit main()
• Shembuj funksionesh
• Funksioni Rekursiv
• Shembuj funksionesh rekursiv

2020 Departamenti i Inxhinierisë Informatike 2


Hapësira & llojet e variablave
{
FTI – Teknikat dhe gjuhët e programimit

int a = 0; /* Ndërtohet a */
/* Variabli a mund te përdoret në këtë pikë */
/* variabli b nuk mund te përdoret në këtë pikë*/
{
int b = 10; /* Ndërtohet b */
/* Variabli a dhe b mund te përdoret në këtë pikë */
} /* b përfundon në këtë pikë */
/* variabli b nuk mund te përdoret në këtë pikë*/
/* Variabli a mund te përdoret në këtë pikë */
} /* a përfundon në këtë pikë */

2020 Departamenti i Inxhinierisë Informatike 3


Hapësira & llojet e variablave
#include <stdio.h>
FTI – Teknikat dhe gjuhët e programimit

int main(void){
int v1 = 1;
do{
int v2 = 0;
++v2;
printf("\nVariabli1 = %d Variabli2 = %d", v1,v2);
} while( ++v1 <= 8 );
/* v2 nuk ekziston */
printf("\nVariabli1 = %d\n", v1);
return 0;
}
2020 Departamenti i Inxhinierisë Informatike 4
Hapësira & llojet e variablave
FTI – Teknikat dhe gjuhët e programimit

2020 Departamenti i Inxhinierisë Informatike 5


Variabli global
#include <stdio.h>
FTI – Teknikat dhe gjuhët e programimit

void display();
int n = 5; // variabel global
int main(){
++n;
display();
return 0;
}
void display(){
++n;
printf("n = %d", n);
}
2020 Departamenti i Inxhinierisë Informatike 6
Variabël lokal
#include <stdio.h>
FTI – Teknikat dhe gjuhët e programimit

int main(void) {
for (int i = 0; i < 5; ++i) {
printf("C programming");
}
printf("%d",i);//Gabim: i nuk eshte e deklaruar per kete hapsire
return 0;
}

2020 Departamenti i Inxhinierisë Informatike 7


Variabël static
#include <stdio.h>
FTI – Teknikat dhe gjuhët e programimit

void display();

int main()
{
display();
display();
}
void display()
{
static int c = 1;
c += 5;
printf("%d \n",c);
}
2020 Departamenti i Inxhinierisë Informatike 8
Variabël regjistër
• Perdoret fjala register perpara deklarimit te variablit me qellim qe ky variable
FTI – Teknikat dhe gjuhët e programimit

te vendoset ne regjistrat e procesorit dhe jo te RAM.


• Nje regjister nuk mund te jete global apo static

#include<stdio.h>
int main() {
register int i = 10;
printf("%d - %p", i, &i);
return 0;
}

2020 Departamenti i Inxhinierisë Informatike 9


Çfarë është Funksioni
• Funksioni është një grup instruksionesh (statement) të cilat së bashku kryejnë
FTI – Teknikat dhe gjuhët e programimit

një detyre.
• Gjuha C ofron mundësinë e ndërtimit të programit të bazuar në funksione
• Llojet e funksioneve
– Funksione te librarive standarte
– Funksione te zhvilluesit

2020 Departamenti i Inxhinierisë Informatike 10


Çfarë është Funksioni
FTI – Teknikat dhe gjuhët e programimit

2020 Departamenti i Inxhinierisë Informatike 11


Funksioni
lloj_return emri_funksionit(list e parameterave ) {
FTI – Teknikat dhe gjuhët e programimit

trupi i funksionit
}

• Lloji i Return − Një funksion mund të kthejë një vlere pas ekzekutimi te tij. Lloji i
të dhënës që kthehet funksioni vendoset në fillim. Në rastet kur nuk kthehet vlerë
në vend të llojit të të dhënës vendoset void.
• Emri i funksionit − Çdo funksion duhet të ketë një emër dhe duhet te bazuar në
rregullat që janë si rregullat e deklarimit te variablave.
• Parametri − një funksion mund të marrë vlera nga thirrja dhe ti përdor këto vlera
brenda trupit të funksionit. Këto vlera kalohen me anë të parametrave të cilat janë
përcaktuar në momentin e ndërtimit.
• Trupi i funksionit − trupi i funksionit është bashkësia e instruksioneve (statement)
të cilat do të ekzekutohet për të plotësuar detyrën e funksionit.
2020 Departamenti i Inxhinierisë Informatike 12
Funksioni
#include <stdio.h>
FTI – Teknikat dhe gjuhët e programimit

int shuma(int a, int b); // prototipi


int main(){
int n1,n2,s;
printf("Jepni dy numra: "); scanf("%d %d",&n1,&n2);
s = shuma(n1, n2); // Thirrja
printf("Shuma = %d",s);
return 0;
}
int shuma(int a, int b) { // Percaktimi
int result;
result = a+b;
return result; // return
}
2020 Departamenti i Inxhinierisë Informatike 13
Funksioni
FTI – Teknikat dhe gjuhët e programimit

2020 Departamenti i Inxhinierisë Informatike 14


Mekanizmi i parametrave
FTI – Teknikat dhe gjuhët e programimit

2020 Departamenti i Inxhinierisë Informatike 15


Parametrizimi i funksionit main()
#include <stdio.h>
FTI – Teknikat dhe gjuhët e programimit

int main(int argc, char *argv[])


{
printf("Emri i programit : %s\n", argv[0]);

for(int i = 1 ; i<argc ; i++)


printf("\nArgumenti[%d]: %s", i, argv[i]);

return 0;
}

2020 Departamenti i Inxhinierisë Informatike 16


Parametrizimi i funksionit main()
FTI – Teknikat dhe gjuhët e programimit

2020 Departamenti i Inxhinierisë Informatike 17


Shembuj funksionesh
/*
FTI – Teknikat dhe gjuhët e programimit

printimi i numrave te thjeshte ndermjet dy numrave


*/

#include <stdio.h>
int kontrollo_nr_thjeshte(int n) {
int j, kushti = 1;
for (j = 2; j <= n / 2; ++j) {
if (n % j == 0) {
kushti = 0;
break;
}
}
return kushti;
}
2020 Departamenti i Inxhinierisë Informatike 18
Shembuj funksionesh
int main() {
FTI – Teknikat dhe gjuhët e programimit

int n1, n2, i, k;


printf("Ju lutemi jepni dy numra pozitiv : ");
scanf("%d %d", &n1, &n2);
printf("Numrat e thjeshte ndermjet %d dhe %d jane:",n1,n2);

for (i = n1 + 1; i < n2; ++i) {


k = kontrollo_nr_thjeshte(i);
if (k == 1)
printf("%d ", i);
}
return 0;
}

2020 Departamenti i Inxhinierisë Informatike 19


Shembuj funksionesh
FTI – Teknikat dhe gjuhët e programimit

2020 Departamenti i Inxhinierisë Informatike 20


Shembuj funksionesh
// konvertimi decimal ne dhjetor dhe anasjelltas
FTI – Teknikat dhe gjuhët e programimit

#include <math.h>
#include <stdio.h>
long long convertb(int n) {
long long bin = 0;
int rem, i = 1, step = 1;
while (n != 0) {
rem = n % 2;
printf("Hapi %d:%d/2,Mbetja=%d,Heresi=%d\n",step++,n,rem, n/2);
n /= 2;
bin += rem * i;
i *= 10;
}
return bin;
}
2020 Departamenti i Inxhinierisë Informatike 21
Shembuj funksionesh
int convertd(long long n) {
FTI – Teknikat dhe gjuhët e programimit

int dec = 0, i = 0, rem;


while (n != 0) {
rem = n % 10;
n /= 10;
dec += rem * pow(2, i);
++i;
}
return dec;
}

2020 Departamenti i Inxhinierisë Informatike 22


Shembuj funksionesh
int main() {
FTI – Teknikat dhe gjuhët e programimit

int n, d;
printf("Jepni nje numer dhjetor : ");
scanf("%d", &n);

long long b;
b=convertb(n);
printf("\n%d decimal = %lld binar", n,b );
d=convertd(b);
printf("\n%lld binar = %d decimal", b,d );

return 0;
}

2020 Departamenti i Inxhinierisë Informatike 23


Shembuj funksionesh
FTI – Teknikat dhe gjuhët e programimit

2020 Departamenti i Inxhinierisë Informatike 24


Funksioni Rekursiv
• Funksioni i cili thërret vetë veten quhet funksion rekursiv
FTI – Teknikat dhe gjuhët e programimit

• Një funksion rekursiv duhet që të ketë një pikë e cila të kontrollojë thirrjen e
vetvetes në mënyrë që mos behet funksion i pafundëm.

2020 Departamenti i Inxhinierisë Informatike 25


Funksioni Rekursiv
Faktoriali i nje numri n
FTI – Teknikat dhe gjuhët e programimit

f(n) = n*f(n-1)

2020 Departamenti i Inxhinierisë Informatike 26


Funksioni Rekursiv
#include <stdio.h>
unsigned long factorial(unsigned long);
FTI – Teknikat dhe gjuhët e programimit

int main(void){
unsigned long nr = 0L;
printf("\nJepni nje vlere te plote: ");
scanf(" %lu", &nr);
printf("\nFaktoriali i %lu is %lu\n", nr, factorial(nr));
return 0;
}

unsigned long factorial(unsigned long n){


if(n < 2L)
return n;

return n*factorial(n - 1);


}

2020 Departamenti i Inxhinierisë Informatike 27


Funksioni Rekursiv
FTI – Teknikat dhe gjuhët e programimit

2020 Departamenti i Inxhinierisë Informatike 28


Funksioni Rekursiv
• Të ndërtohet një program i cili lexon nga tastiera një vektor me n elemente
FTI – Teknikat dhe gjuhët e programimit

dhe gjen se sa elemente janë ndërmjet mesatares dhe maksimumit.

Zgjidhja :
– Funksion për leximin e elementeve të vektorit
– Funksion për gjetjen e maksimumit
– Funksion për gjetjen e mesatares (shuma/n)
– Funksion për gjetjen e elementeve ndërmjet mesatares dhe maksimumit
– Thirrja e funksioneve në main()

2020 Departamenti i Inxhinierisë Informatike 29


Funksioni Rekursiv
#include<stdio.h>
FTI – Teknikat dhe gjuhët e programimit

int v[100];
void lexo_vektorin(int i, int n){
if (n==i)
return;

printf("Jepni elementin[%d]:",i+1);
scanf("%d",&v[i]);
lexo_vektorin(++i,n);
}

int gjej_shuma(int i, int n){


if (n==i)
return 0;
return v[i] + gjej_shuma(++i,n);
}

2020 Departamenti i Inxhinierisë Informatike 30


Funksioni Rekursiv
int gjej_maksimum(int i, int n){
if (n-1==i)
FTI – Teknikat dhe gjuhët e programimit

return v[n-1];
int m=gjej_maksimum(++i,n);
if (m>v[i])
return m;
else
return v[i];
}

int numero(int i, int n, int mes, int max, int totali){


if (n==i)
return totali;
if (v[i]>=mes && v[i]<=max)
totali++;
return numero(++i,n,mes,max,totali);
}

2020 Departamenti i Inxhinierisë Informatike 31


Funksioni Rekursiv
int main(){
int nr, s, mes, max, t;
FTI – Teknikat dhe gjuhët e programimit

printf("Ju lutemi jepni n:");


scanf("%d",&nr);

lexo_vektorin(0,nr);

s=gjej_shuma(0,nr);
mes=s/nr;
max=gjej_maksimum(0,nr);

t= numero(0,nr,mes,max,0);

printf("\n Mes=%d, Max=%d, nr element=%d",mes,max,t);


}

2020 Departamenti i Inxhinierisë Informatike 32


Funksioni Rekursiv
FTI – Teknikat dhe gjuhët e programimit

2020 Departamenti i Inxhinierisë Informatike 33


Funksioni Rekursiv
• Të ndërtohet një program i cili lexon nga tastiera një string-e me n karaktere
FTI – Teknikat dhe gjuhët e programimit

dhe printon te gjithë kombinimet e mundshme te kësaj string-e.

• Zgjidhja :
– Fillimisht ndërtojmë një funksion rekursiv i cili do printojë kombinimet për r element
– Duke filluar për r =1 deri ne n thërrasim funksionin rekursiv dhe n ë këtë formë përfitojmë
të gjitha kombinimet

2020 Departamenti i Inxhinierisë Informatike 34


Funksioni Rekursiv
• r=3 për 12345 (vektori d[] do mbaje kombinimet e mundshme)
FTI – Teknikat dhe gjuhët e programimit

– Fiksojmë 1 në d[0] dhe e kombinojmë me pjesën e mbetur te vektorit


– Fiksojmë 2 ne d[1] dhe e kombinojmë me pjesën e mbetur
– E kështu me radhë

2020 Departamenti i Inxhinierisë Informatike 35


Funksioni Rekursiv
void kombino(char v[],char d[],int fillim,int fundi,int index,int r)
FTI – Teknikat dhe gjuhët e programimit

{ //v vektori i fjales, d vektor i kombinimeve,


//fillim & fundi indekset e kombinimit, r nr i kombinimeve
if (index == r){ //nese indeksi i fiksuar eshte sa r printohet d
for (int j=0; j<r; j++)
printf("%c ", d[j]);
printf("\n");
return;
}
// end-i+1 >= r-index per te qene i sigurtë qe ka ngel te pakten 1 element
for (int i=fillim; i<=fundi && fundi-i+1 >= r-index; i++){
d[index] = v[i]; //fiksojme elementin e rradhes
kombino(v, d, i+1, fundi, index+1, r); //rekursivi
}
}

2020 Departamenti i Inxhinierisë Informatike 36


Funksioni Rekursiv
FTI – Teknikat dhe gjuhët e programimit

int main()
{
char arr1[100];
int r = 3,i; // r mban nr e kombinimeve
char data[1];

printf("Jepni nje shprehje: ");


gets(arr1);

int n = strlen(arr1); //funksion ne


printf("Kombinimet e karaktereve te shprehjes %s jane: \n",arr1);
kombino(arr1, data, 0, n-1, 0, r);
}

2020 Departamenti i Inxhinierisë Informatike 37


Funksioni Rekursiv
Shtojmë një funksion i cili do të ndryshojë r që e merr si parametër 1 deri ne n.
FTI – Teknikat dhe gjuhët e programimit

void paraqit_kombinim(char arr1[], int n, int r){


char data[r];
kombino(arr1, data, 0, n-1, 0, r);
if (++r<=n) paraqit_kombinim(arr1,n,r);
}

int main(){
char arr1[100];
int r,i;
printf("Jepni nje shprehje: ");
gets(arr1);
int n = strlen(arr1);
printf("Kombinimet e karaktereve te shprehjes %s jane: \n",arr1);
paraqit_kombinim(arr1, n, r);}
2020 Departamenti i Inxhinierisë Informatike 38
Funksioni Rekursiv
FTI – Teknikat dhe gjuhët e programimit

2020 Departamenti i Inxhinierisë Informatike 39

You might also like