Turkcell | Geleceği Yazanlar

Soru & Cevap

C programla yardımcı olabilecek var mı?

01.06.2020 - 14:34

hata

 

317 Görüntülenme

2 Cevap

Gürkan
01.06.2020 - 18:54

Şu adımları takip edebilirsiniz:

  • Öncelikle bir sayının tam bölenlerini bulan bir fonksiyon yazmalısınız. (İnternette araştırırsanız birçok kaynak bulabilirsiniz)
  • Daha sonra bir kontrol değişkenine bağlı bir döngü oluşturacaksınız ve kontrol değişkeni true olduğu müddetçe sayı her bir iterasyonda bir artacak. Kontrol değişkenini iterasyon sayısı 10000 değerinin üzerine çıktığında ve ilk muhteşem kardeş sayısını bulduğunuzda kontrol değişkenine false değerini atayacaksınız.
  • Muhteşem kardeşleri bulmak için de yukarıdaki şekilde oluşturduğunuz döngü içerisindeki iterasyon değişkeninin yani işlem yapacağımız sayının tam bölenlerini bulmalıyız. Daha sonra sayıyı ve tam bölenlerinin toplamını çok boyutlu bir dizide ya da dictionary gibi bir veri yapısında saklayınız.
  • Buraya kadar programın başarıyla çalışması gerekmekte. Ama daha bitmedi. Daha muhteşem kardeşleri bulmamız gerek.
  • Her bir iterasyonda daha önceki tüm iterasyon sayılarını ve tam bölenlerinin toplamını sakladığımız dizi vb. veri yapısında bir karşılaştırma işlemi yapacağız. Eğer bizim şu anda hesapladığımız değerin tam bölenlerin toplamı önceki bir iterasyon sayısına eşit ise ve önceki iterasyon sayısının tam bölenlerinin toplamı ile şuan da hesapladığımız sayı eşit ise demekki şu anki işlem yaptığımız sayı ve daha önceki iterasyonlarda işlem yaptığımız sayı muhteşem kardeş demek oluyor.
  • Sorunuzdaki örnek sayılar üzerinden gitmek gerekirse; diyelim ki bizim döngümüz 284'te. Yani 284 sayısının tam bölenlerinin toplamını bulacağız. Tam bölenlerinin toplamını hesaplayıp 220 bulduk. Daha sonra daha önceki değerleri sakladığımız dizi üzerinde bir kontrol işlemi yaptıracağız. Dizi içerisinde 220 sayısının index'ini bulacağız ve o indeksteki yani 220 sayısının tam bölenlerinin toplamı değerini bulacağız. Eğer ikisi birbirine eşitse muhteşem kardeşleri bulmuş oluyoruz.

Biraz karışık ve uzun olduğunun farkındayım. Fakat algoritması bu şekilde olmaktadır. Kodlamaya dökerken takıldığınız bir yer olursa yardımcı olabiliriz. Umarım yardımcı olur. İyi çalışmalar.

Sitede yorum yapabilmek için giriş yapın ya da üye olun.

Selin Ece Erdem
01.06.2020 - 20:36
Ne anlatmak istediğinizi anladım fakat nasıl koda dökeceğim orası biraz muamma :D deneyeceğim ama zor biraz
Serhat Karakoca
01.06.2020 - 18:47

int main(int argc, char *argv[]) {
	
	
	int sayi1,bol,bolum,toplam,toplam2;
    	printf("Herhangi bir sayi giriniz ");
    	scanf("%d",&sayi1);
    	for(bol = 1; bol<=sayi1-1;bol++){
    		bolum=sayi1 % bol;
    		if(bolum==0){
    			printf("Sayi %d \n",bol);
    			toplam+=bol;
    		}
    	}
    printf("///////////////////\n");
    	for(bol = 1; bol<=sayi1-1;bol++){
    		bolum=(toplam-1) % bol;
    		if(bolum==0){
    			printf("Sayi %d\n ",bol);
    			toplam2+=bol;
    			
    		}
		}
			
		toplam--;
	printf("toplam %d\n ",toplam);
	printf("toplam2 %d\n ",toplam2);
		if(toplam2==sayi1){
				printf("Muhtesem kardes sayidir : %d\n ",sayi1);
		}
	return 0;
}

 

Girilen sayının muhteşem kardeş sayı olup olmadığını kontrol eden bi kod parçası hazırladım inceleyip isteğinize uygun değiştirmeler yapabilirsiniz.

Sitede yorum yapabilmek için giriş yapın ya da üye olun.

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.