Emirhan Bülbül

C++ Kaprekar Sayı Bulma Programı

Merhabalar, bu yazıda okulda verilen bir ödev için kodlamış olduğum kaprekar sayı bulma programını sizlere paylaşacağım. Öncelikle kaprekar sayı nedir ondan bahsetmek istiyorum.

Kaprekar sayıDattathreya Ramachandra Kaprekar tarafından bulunan bir sayı. Mantığı ise şu şekilde; 4 basamaklı ve rakamları farklı bir sayı seçiyorsunuz. Bu sayısı büyükten küçüğe ve küçükten büyüğe sıralayıp farkını alın. Çıkan sonucu da aynı şekilde büyükten küçüğe ve küçükten büyüğe sıralayıp tekrar farkını alın. Bu şekilde bir kaç adım devam edince sonucun sürekli 6174 olduğunu göreceksiniz.

Örnek;

7210 – 0127 = 7083
8730 – 0378 = 8352
8532 – 2358 = 6174
7641 – 1467 = 6174.

Kaprekar sayı mantığını anladıktan sonra, kaprekar sayının c++ programın geçelim.


/*Kodlayan: Emirhan Bülbül 
Web site: www.emirhanbulbul.com  
C++ Programlama Örnekleri  
C++ İle Kaprekar Sayı Bulma Programı 
*/

#include <iostream>
#include <conio.h>

using namespace std;

int main(int argc, char** argv) {
		int toplamb=0,toplamk=0,sonuc;
	int matris[]={1,2,3,4};
	int buyukmatris[]={1,2,3,4};
	int kucukmatris[]={1,2,3,4};
	cout<<"4 basamakli bir sayi girin: (Her rakamdan sonra enter'a basin:')\n";
	for(int a=0;a<4;a++){
	cin>>matris[a];	
	}
	
	

	//Buyukten kucuge
	for(int i=0;i<4;i++){
		for(int j=0;j<4;j++){
			if(matris[i]>matris[j]){
				int temp=matris[i];
				matris[i]=matris[j];
				matris[j]=temp;
			}
			
		}
		
	}
	
	for(int c=0;c<4;c++){
	buyukmatris=matris;
	}
	//Kucukten buyuge
	for(int r=0;r<4;r++){
		for(int g=0;g<4;g++){
			if(matris[r]<matris[g]){
					int temp=matris[r];
				matris[r]=matris[g];
				matris[g]=temp;
			}
			
		}
		
	}
	
for(int c=0;c<4;c++){
	kucukmatris=matris;
	}	
	
	

for(int b=0;b<4;b++){
// Tek tek girilen rakamları tek bir sayı haline getiriyor.
	if(b==0){
toplamb=(toplamb+(buyukmatris[b]*1000));

	}
		if(b==1){
toplamb=(toplamb+(buyukmatris[b]*100));

	}
		if(b==2){
toplamb=(toplamb+(buyukmatris[b]*10));

	}
		if(b==3){
toplamb=(toplamb+(buyukmatris[b]*1));

	}
}


for(int t=0;t<4;t++){
// Tek tek girilen rakamları tek bir sayı haline getiriyor.
	if(t==0){
toplamk=(toplamk+(kucukmatris[t]*1000));

	}
		if(t==1){
toplamk=(toplamk+(kucukmatris[t]*100));

	}
		if(t==2){
toplamk=(toplamk+(kucukmatris[t]*10));

	}
		if(t==3){
toplamk=(toplamk+(kucukmatris[t]*1));

	}
}

sonuc=(toplamb-toplamk); //büyük sayıdan küçük sayı çıkıyor
cout<<toplamb<<"-"<<toplamk<<"="<<sonuc<<endl;
	int sayac=1; // 7 seferde tamamlanması için sayaç.
burasi: //goto etiketi

if(sonuc!=6174){ //6174'e eşit değilse döndür.
	sayac++;
	if(sayac>7){
		cout<<"Kaprekar sayi degil.";
		return 0;
	}
	
	// girilen rakamları tek bir sayı yapmıştık şimdi tekrar parçalıyoruz.
matris[0]=sonuc/1000;
matris[1]=(sonuc/100)%10;
matris[2]=(sonuc/10)%10;
matris[3]=sonuc%10;

int toplamb=0,toplamk=0; //değerleri sıfırlıyoruz.
	//Buyukten kucuge
	for(int i=0;i<4;i++){
		for(int j=0;j<4;j++){
			if(matris[i]>matris[j]){
				int temp=matris[i];
				matris[i]=matris[j];
				matris[j]=temp;
			}
			
		}
		
	}
	
	for(int c=0;c<4;c++){
	buyukmatris=matris;
	}
	//Kucukten buyuge
	for(int r=0;r<4;r++){
		for(int g=0;g<4;g++){
			if(matris[r]<matris[g]){
					int temp=matris[r];
				matris[r]=matris[g];
				matris[g]=temp;
			}
			
		}
		
	}
	
for(int c=0;c<4;c++){
	kucukmatris=matris;
	}	
	
	

for(int b=0;b<4;b++){

	if(b==0){
toplamb=(toplamb+(buyukmatris[b]*1000));

	}
		if(b==1){
toplamb=(toplamb+(buyukmatris[b]*100));

	}
		if(b==2){
toplamb=(toplamb+(buyukmatris[b]*10));

	}
		if(b==3){
toplamb=(toplamb+(buyukmatris[b]*1));

	}
}


for(int t=0;t<4;t++){

	if(t==0){
toplamk=(toplamk+(kucukmatris[t]*1000));

	}
		if(t==1){
toplamk=(toplamk+(kucukmatris[t]*100));

	}
		if(t==2){
toplamk=(toplamk+(kucukmatris[t]*10));

	}
		if(t==3){
toplamk=(toplamk+(kucukmatris[t]*1));

	}
}
sonuc=(toplamb-toplamk);
cout<<toplamb<<"-"<<toplamk<<"="<<sonuc<<endl;
goto burasi;

		
}
	return 0;

}


Yorum Yap

Elektronik Sigara E Sigara Likit Smok takipçi satın al