Archive for the ‘C’ Category

Euclid algorithm -> EBOB un belirlenmesi

EBOB (a,b)=ax+by;

Örnek EBOB ( 15,25) ü bulalım

25=15*1+10
15=10*1+5
10=5*2+0

EBOB = ( 15,25) =5

Aşağıdaki program kullanıcıdan iki sayı almaktadır ve yukarıda anlattığımız yöntemle EBOB u bulmaktadır.
#include
#include

int main()
{
int x,y,EBOB,r;

printf(“Enter the number1 and number2:”);
scanf(“%d %d”,&x,&y);
while(y!=0)
{

r=x;
x=y;
y=r%y;

}

EBOB =x;
printf(“iki sayinin EBOB’u::”);
printf(“%d”, EBOB);

}
——————————————————————————————————————–

32

Advertisements

Özyinelemeli yaklaşım olan bu örnek Fransız Matematikçi E.Luke tarafından bulunmuştur.

Örnekle açıklamak gerekirse A,B,C gibi dik konumda yerleştirilmiş 3 tane çubuk ve x sayıda disk vardır.

Başlangıç durumda diskler aşağıdaki gibidir.

29

Yani disklerin boyunu aşağıya doğru orantılı bir şekilde artmaktadır. Her seferinde yalnız bir diskin hareketine izin verildiğinde, büyük diski küçüğünün üzerine yerleştirmeden ,disklerin C çubuğuna taşınması isteniyor.

Bu yaklaşıma dayalı kod aşağıdadır.

#include
#include
#include

void hanoi(int n,char x,char y, char z)
{
if(n==1)

printf(“Diski %c cubugundan %c cubuguna koy.\n\n”,x,z);
else
{
hanoi (n-1,x,z,y);
hanoi (1,x,y,z);
hanoi (n-1,y,x,z);

}
}

int main()
{
int n;

printf(“Disk sayisi N:”);
scanf(“%d”,&n);
hanoi(n,’A’,’B’,’C’);

return 0;
}

——————————————————————————————————————-

Ekran çıktısı:

30

Minimum geçiş sayısı=
31

C Hamming number

Posted: October 12, 2014 in Algorithms, C
Tags: ,

Hamming sayıları 2,3,5 ten başka diğer asal bölenleri olmayan dizilere denir.

2 3 4 5 6 8 9 10 12 15 16 18 20 24 25 27 30 32 36 40 ….

Aşağıdaki program girdiğimiz sayıya kadar olan hamming sayılarını bulmaktadır.

#include
#include
#include

int bayram(int x)
{
if(x==1) return 1;
if(x%2==0) return bayram(x/2);
if(x%3==0) return bayram(x/3);
if(x%5==0) return bayram(x/5);
return 0;

}

int hamming(int x)

{

if (x==1) return 1;
hamming(x-1);
if(bayram(x)) printf(” %d “,x);

}

int main()
{

hamming(20);

return 0;
}

—————————————————————————————————————————-

28

C Polindrom Number

Posted: October 12, 2014 in Algorithms, C
Tags:

Baştan ve sondan okunuşunu aynı olan verilerdir. 12321 yada aba gibi…

C dili ile yazılmış program polindrom sayıları bulmaktadır.

#include
#include
#include

void bayram(int n)
{
if(n==1)
printf(“1”);
else
{

bayram(n-1);
printf(“%d”,n);
bayram(n-1);

}

}

int main()
{

int n;
printf(“Number enter::”);
scanf(“%d”, &n);
bayram(n);
return 0;
}

————————————————————————————————————————

27

Lipski components algorithm -> sayıları parçalamada kullanılan algoritmalar biridir. Parçalamadan sonra gelen parçalanma bulunur ve böylece devam eder.

#include
#include
#include

int main()
{
int i,x,y, bayram[10],hermes[10],sum,b;

printf(“Enter the number to be broken:”);

scanf(“%d”,&x);

bayram[1]=x;
hermes[1]=1;

y=1;

printf(” %dx%d\n”,bayram[1],hermes[1] );
while (bayram[1]>1)
{
sum=0;

if(bayram[y]==1)
{
sum=sum+hermes[y];
y=y-1;
}

sum=sum+bayram[y];
hermes[y]=hermes[y]-1;
b=bayram[y]-1;

if(hermes[y]>0) y=y+1;

bayram[y]=b;

hermes[y]=sum/b;

b=sum%b;

if(b!=0)

{
y=y+1;
bayram[y]=b;
hermes[y]=1;

}

for(i=1; i<=y; i++)

printf(” %dx%d +”,bayram[i],hermes[i]);

printf(“\n”);

}

}

26

Dinamik programlama uygulamasına örnek olarak Knapsack(Sırt çantası) problemi.Problem, çeşitli değer ve hacimdeki nesnelerin sınırlı hacimli bir çantaya ,toplam değer maksimum olacak şekilde doldurulmasına dayanmaktadır.

Tablodaki gibi veriler elimizde olsun .

16

Örneğimizde maksimum hacim 7 olmalıymış.Kendimiz veri sayısı az olduğu için kaba-kuvvet yada deneme yöntemiyle bulabiliriz.Ama veri sayısı çok olduğu zaman bu doğru sonuç vermeyebilir.Aşağıdaki algoritma bu sebepten bulunmuştur.
Aşağıdaki program, C programlama dili ile yazılmıştır.

#include
#include

#define max(a,b) (a > b ? a : b)

int matrix[100][100] = {0};

int knapsack(int index, int size, int hacim[],int deger[]){
int take,dontTake;

take = dontTake = 0;

if (matrix[index][size]!=0)
return matrix[index][size];

if (index==0){
if (hacim[0]<=size){
matrix[index][size] = deger[0];
return deger[0];
}
else{
matrix[index][size] = 0;
return 0;
}
}

if (hacim[index]<=size)
take = deger[index] + knapsack(index-1, size-hacim[index], hacim, deger);

dontTake = knapsack(index-1, size, hacim, deger);

matrix[index][size] = max (take, dontTake);

return matrix[index][size];

}

int main(){
int nItems = 4;
int knapsackSize = 7;
int hacim[4] = {2,3,1,4};
int deger[4] = {3,5,2,4};

printf(“Max value = %d tl”,knapsack(nItems-1,knapsackSize,hacim,deger));

return 0;
}

17

Programın çıktısı :

18