Kontrol Yapısı

Serpenos

Kilopat
Katılım
15 Ağustos 2014
Mesajlar
3.257
Makaleler
2
Çözümler
5
Daha fazla  
Cinsiyet
Erkek
Profil Kapağı
1522193036
Selam. Vizem var örnek sorulara bakıyorum hocanın verdiği de asal sayı bulan bir kod yazılmış. Kod şu:
C:
#include <stdio.h>
#include <conio.h>
int main(){
    int kontrol;
    for (int i=1;i<=100;i++){
        kontrol=0;
        for (int j=2;j<=i-1;j++){
            if ((i%j)==0)  kontrol=1;
        }
        if (kontrol==0) printf("%d\n",i);
    }             
    getch();
}

Buradaki kontrol değerini anlamadım. Ne yaptığını çözemedim yani. Yardım eder misiniz?
 
Kodun sayının asal sayı olup olmadığını bulurkenki mantığı, sayının 2'den kendisine kadar olan sayılar ile olan mod (bir sayının başka bir sayı ile bölme işleminden kalanı) değerlerine bakmak. Eğer o sayının, 2 ile kendisi arasında bir sayı ile mod değeri 0 olursa, o sayı diğer sayıya tam bölünüyor demektir ve o sayının asal olmadığı anlamına gelir. Bölünen sayı asal ise, yani mod 0 ise belirtilen kontrol değeri arttırılıyor. Daha sonra sayı denenecek diğer sayıların hepsi ile bölündükten sonra kontrol değeri hala artmamış, yani 0 ise o sayı asal demek oluyor. Kontrol değerinin burada amacı o. Asallığı kontrol edilecek sayı değiştirilirken, yani üstteki for döngüsünde, kontrol değeri tekrardan sıfıra eşitleniyor.
Biraz karışık oldu kusura bakmayın ama ancak böyle anlatabildim.
 
Yok oturmaya başladı biraz, mantıklı aslında. İç içe girince for lar biraz kafam karıştı.
 
Kod asal sayı bulmak için yapılmış. Kontrol değişkeninin amacı o sayının herhangi bir başka sayıya tam bölünüp bölünmediğinin bilgisini hafızada tutabilmek. Mesela 43 için düşünelim. 2 den 43-1 e kadar bütün sayıları kullanarak 43ün modunu alıyor. Eğer ki bir sayı tam bölünüyorsa modu 0'dır. Tam bölünüyorsa kontrolü 1 yapıyor. Tam bölündüğü bir sayı yoksa o sayı 0 kalıyor bu durumda ise o sayının asal olduğu ortaya çıkıyor.
 
Aslında kod daha güzel yazılabilirdi. Kontrol için Integer yerine bir Boolean kullanılarak başta değer false olarak tutulup, mod değerini 0 sağlayan bir sayı bulunduğunda true yapılıp, sonra da döngüden çıkılabilir. Sayı başka bir sayıya bölünmüşse asal olamaz zaten, diğerlerine bakmaya gerek yok. Öyle daha anlaşılır ve işlevsel olurdu bana göre.
 
1. sınıfım döngüleri gördüm sadece daha o yüzden böyle örneklere başvurdular sanırım :D
 
Aslında kod daha güzel yazılabilirdi. Kontrol için Integer yerine bir Boolean kullanılarak başta değer false olarak tutulup, mod değerini 0 sağlayan bir sayı bulunduğunda true yapılıp, sonra da döngüden çıkılabilir. Sayı başka bir sayıya bölünmüşse asal olamaz zaten, diğerlerine bakmaya gerek yok. Öyle daha anlaşılır ve işlevsel olurdu bana göre.
Boolean kullanabilmek için stdbool.h kütüphanesini kullanması lazım.
 
Uyarı! Bu konu 5 yıl önce açıldı.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.

Geri
Yukarı