19 MART 2017
PAZARTESİ
15.25
C++ Mükemmel Sayı Bulma Uygulaması

C++ ile yapılabilecek olan kullanıcıdan alınan bir sayının mükemmel sayı olup olmadığını gösteren programdır.

 

PROBLEM;

Mükemmel sayı; bir sayı değerinin pozitif tam bölenlerinin toplamı kendisine eşit olan sayıdır. Örneğin 6 sayısını ele alalım. 6 sayısının pozitif tam bölenleri 1,2,3 ve 6'dır. Kendisi hariç dediğimiz için 1+2+3=6 işlemi yapılır. Çıkan sonuç sayının kendisine eşit olduğu için 6 bir mükemmel sayıdır. (6, 28, 496, 8128 mükemmel sayılara örnek verilebilir.)

Kullanıcıdan bir sayı değeri alın. Bu sayı değerinin mükemmel olup olmadığını inceleyin.

ÇÖZÜM;

int main() {
	float sayi, kontrol;
	int toplam = 0;
	
	cout << " >> Bir sayi girin: ";
		cin >> sayi;
	cout << "\n" << sayi << " sayisinin kendisi haric pozitif tam bolenleri; ";
	for(int i=1; i<sayi; i++) {
		kontrol = sayi/i;
		if(kontrol == int(kontrol)) {
			cout << i << ", ";
			toplam += i;
		}
	}
	
	if(toplam == sayi) {
		cout << "\nGirdiginiz sayi bir MUKEMMEL SAYI!\n\n";
	} else {
		cout << "\nGirdiginiz sayi ne yazik ki bir mukemmel sayi DEGIL!\n\n";
	}
	
	return main();
}

İNCELEME;

Yukarıdaki kod yapımızda daha önceki konu anlatımlarımızdan farklı olarak bir uygulama söz konusudur. Genel mantığı anlatmak gerekirse;

1- Kullanıcıdan bir sayı değeri al
2- Aldığın sayı değerinin kendisi hariç pozitif tam bölenlerini bul
3- Bulduğun pozitif tam bölenlerini topla
4- Topladığın değer kullanıcıdan aldığın sayı değeri ile aynı mı kontrol ettir ve sonuca göre ekrana çıktı ver.

Bu aşamaları göz önüne alarak kod yapımıza baktığımızda başlangıçta for döngüsü içine aldığımız alanda kontrol adındaki değişkenimize dikkat edelim. Kodlarımızın giriş alanında float değeri olarak bir kontrol değişkeni atadık. for döngümüzde ise sayi/i yaparak anlık olarak bir sonuç aldık. Fakat for içinde kullandığımız if yapımızda kontrol değişkenimizi int() adındaki bir parametrenin içerisinde yazdık. Bu parametre sayesinde kontrol değişkenimize atanmış olan değeri integer, yani tam sayıya dönüştürmüş olduk. Mantık olarak düşünürsek;

10/2 = 5 -> YANİ: float 5 = integer 5

10/3 = 3,333333 -> YANİ float 3,333333 != integer 3

Bu for sayesinde yaptığımız işlem sayının tam bölünüp bölünmediğini öğrenmek.. Bu sayede eğer float değeri ile integer değeri birbirine eşit ise tam bölünmüş demektir. Ama değilse virgüllü bir sayı elde etmişiz demektir.

Geri kalan işlemleri kod yapısını incelediğimizde anlayabiliriz.

ÇIKTI;

YORUMLAR 0
Bu konuya henüz kimse yorum yapmadı.
İlk yorumu sen yapmak ister misin?
YORUM BIRAK
Şuanda bu yoruma cevap yazıyorsunuz:
İptal Et