You are here

ndihme ne ansi c

x_files's picture

Quote: 13-05-2003 në orën 11:49, Anonymous :La perte di calcolo vero e proprio ciascuna funzione richiesta,cioe´ la perte succesiva ai controlli deve essere ricorsiva;Gli unici operatori aritmetici ANSI C utilizzabili per implementare le cinque funzioni richieste sono gli operatori unaridi incremento e decremento di una unita.Une te them te drejten nuk e kuptova mire kerksen ,domethene qe ++ ose -- jane te vetmit operatore qe mund te perdoren dhe funksioni duhet te jete ricorsiv. Nderkohe qe po mendohem dhe po mundohem per ta zgjidhur ti shiko edhe nje here me kujdes kerkesen dhe me thuaj se deri ne cfare afati e ke detyren.Kam edhe nje pyetje, funksionet dueht te jene psh funk(int a,int b)? dhe a kerkohet qe te perdoret ndonje algoritem ne rastin e shumezimit qe te rrise performancen e funksionit?[ Ky Mesazh është ndryshuar nga: x_files më 01-06-2005 12:52 ]

Forume: 
x_files's picture

megjithate nuk kuptoj pse duhet te jene ricorsiv jo per gje po mua me duket gje e panevojshme, Te lutem ma shpjego me mire ate punen e kontrollit te rezultatit dhe kur thote numra natyrore e ka fjalen per numrat e plote pozitiv apo lejohen edhe negativet.

[ Ky Mesazh është ndryshuar nga: x_files më 01-06-2005 13:09 ]

x_files's picture

x_files's picture

nuk e di nese te duhet me por une e bera mundimin.
i ke te gjitha me recursivitet.
kontrollin e rezultatit nuk e kuptova keshtu qe beje vete

Quote:

#include <stdio.h>

//implementojme funksionet

int shuma(int a,int b){

//ndryshore lokale e perkoheshme per te memorizuar rezultatin
int rezultati;

//nese b=0 atehere automatikisht rezultati eshte a pa pasur nevoje per llogaritje
if(b==0) rezultati = a;

//nese b=1 atehere rezultati=a+1 meqenese mund te perdorim vetem operatoret ++ ose --
else if(b==1) rezultati = (++a);

//nese b e ndryshme nga 1 dhe 0 atehere rezultati = a+b = (a+1)+(b-1)
//rekursiviteti vazhdon derisa b te behet 1.
//kujdes mos perdor a++ sepse ne kete rast ne fillim kalohet a si parameter pastaj rritet me nje
//gjithmone perdor ++a perndryshe kushti qe b=1 nuk vertetohet kurre dhe ne pak caste
//konsumon te gjithe memorien.
else rezultati = shuma(++a,--b);

//kthejme vleren e gjetur
return rezultati;
}

int diferenca(int a, int b){
int rezultati;
//nese a> b
if(a>b){
//nese b=0 atehere rezultati = a
if(b==0) rezultati = a;

//nese b=1 atehere rezultati= a-1
else if(b==1) rezultati = (--a);

//nese b ka vlere tjeter atehere rezultati = a-b = (a-1)-(b-1)
//deri sa b te kete vleren 1
//shprehjet (a-b) dhe (a-1)-(b-1) jane te njevlereshme
else rezultati = diferenca(--a,--b);
}
else {
rezultati=0;
printf("Gabim %d<%d \n",a,b);
}
return rezultati;
}

int shumezim(int a,int b){
int rezultati;

//nese a ose b eshte 0 rezultati eshte 0
if(a==0 || b==0) rezultati = 0;

//nese a=1 rezultati = b
else if(a==1) rezultati = b;

//nese b=1 rezultati = a
else if(b==1) rezultati = a;

//nese a dhe b numra te tjere atehere a*b=a+a*(b-1) derisa b te behet 1
else rezultati = shuma(a,shumezim(a,--b));

return rezultati;
}

//ky funksion llogarit heresin e plote te pjesetimit
int pjesetim(int a,int b){
int heresi;
//nese a > b
if(a>b){
//nese b=0 gabim pjesetim me zero
if(b==0) {
heresi = 0;
printf("Gabim! Pjesetim me zero:");
}

//nese b=1 rezultati = a
else if(b==1) heresi = a;

//nese b ka vlere tjeter atehere rezultati= a/b = b/b+(a-b)/b=1+(a-b)/b
//kur a-b<b atehere funksioni kthen 0 dhe mbaron rikorsiviteti
else {
heresi=pjesetim(diferenca(a,b),b);
heresi++;
}
}

//nese a=b rezultati=1
else if(a==b) heresi=1;

//nese a<b do te thote se arriti fundi i rikorsivitetit dhe kthejme rezultatin 0
else heresi=0;

return heresi;
}

//ky funksion llogarit mbetjen e pjesetimit ose modulin
int moduli(int a,int b){
int mbetja,heresi;
heresi=pjesetim(a,b);
mbetja=a-shumezim(heresi,b);
return mbetja;
}

int fuqi(int a, int b){
int rezultati;

//vetem nese b eshte pozitive ose 0
if(b>=0){

//nese eksponenti eshte 0 rezultati=1
if(b==0) rezultati = 1;

//nese eksponenti eshte 1 rezultati = a
else if(b==1) rezultati = a;

//nese b ka vlere tjeter rezultati=a^b=a*a^(b-1) ku a^b do te thote a ne fuqi te b
else rezultati = shumezim(a,fuqi(a,--b));
}
return rezultati;
}

//krijojme dhe main() per te testuar funksionet me vlera te ndryshme
int main(){
//testojme shuma()
printf("Testimi i shumes:\n");
printf("5+0 = %d \n",shuma(5,0));
printf("7+1 = %d \n",shuma(7,1));
printf("21+37 = %d \n\n",shuma(21,37));

//testojme diferenca()
printf("Testimi i diferences:\n");
printf("1-4 = %d \n",diferenca(1,4));//duhet te shtypi gabim
printf("5-1 = %d \n",diferenca(5,1));
printf("5-0 = %d \n",diferenca(5,0));
printf("34-10 = %d \n\n",diferenca(34,10));

//testojme shumezim()
printf("Testimi i shumezimit:\n");
printf("12*0 = %d \n",shumezim(12,0));
printf("0*0 = %d \n",shumezim(0,0));
printf("0*10 = %d \n",shumezim(0,10));
printf("12*1 = %d \n",shumezim(12,1));
printf("1*13 = %d \n",shumezim(1,13));
printf("16*8 = %d \n",shumezim(16,8));
printf("6*8 = %d \n\n",shumezim(6,8));

//testojme pjesetim()
printf("Testimi i pjesetimit:\n");
printf("3/0 = %d \n",pjesetim(3,0));//duhet te shtypi gabim
printf("1/3 = %d \n",pjesetim(1,3));
printf("3/1 = %d \n",pjesetim(3,1));
printf("3/2 = %d \n",pjesetim(3,2));
printf("24/4 = %d \n",pjesetim(24,4));
printf("26/5 = %d \n\n",pjesetim(26,5));

//testojme moduli()
printf("Testimi modulit:\n");
printf("34 mod 3 = %d \n",moduli(34,3));
printf("53 mod 8 = %d \n",moduli(53,8));
printf("34 mod 17 = %d \n\n",moduli(34,17));

//testojme fuqi()
printf("Testimi i fuqise:\n");
printf("4^0 = %d \n",fuqi(4,0));
printf("4^1 = %d \n",fuqi(4,1));
printf("2^2 = %d \n",fuqi(2,2));
printf("2^5 = %d \n",fuqi(2,5));
printf("3^4 = %d \n",fuqi(3,4));
printf("5^3 = %d \n",fuqi(5,3));

return 0;
}


shpresoj te kem ndihmuar ciao. ;-)