• 07-08-2019, 00:07:30
    #1
    int num, a = 1;
    int flag = 0;
    
    printf("Enter a number: ");
    scanf("%d", &num);
    
    
    for (a = 1; a < num - 1;)
    {
    a++;
    if (num % a == 0) {
    flag = 1;
    break;
    }
    }
    
    
    if (flag == 1) {
    
    printf("Number is not prime");
    
    }
    else
    
    printf("Number is prime");

    Kodu bu haliyle sorunsuz çalıştırıyorum ancak a++ yı for içerisinde şu şekilde
     for (a = 1; a < num - 1;a++)
    yazınca sonucu yanlış veriyor.

    İki şekilde de a < num - 1 şartı sağlanana kadar artma komutu vermiş olmuyor muyuz, açıklayabilecek olan var mı?
  • 07-08-2019, 00:14:33
    #2
    Telefondan yanlış görmüyorsam, ilkinde a'yı her iteration'da 2 defa artırmışsınız. Diğer durumda 1 defa artırmışsınız.

    For(x=1;x<5; ) yazınca zaten artma işlemini yapıyor. Bunun üstüne for içinde x++ yaparsan iki defa artırmış olursun.
  • 07-08-2019, 00:24:40
    #3
    aşağıdaki şekilde a=1 yazılmış fakat ilk seferin a bir arttırılmış ve 2 olmuş. O yüzden döngü aslında 1 den değil 2 den başlamış. ama a++ döngünün içine aldığınızda hangi sayıyı girerseniz girin, 1 e tam bölünür.
    for (a = 1; a < num - 1;)
    {
    a++;
    if (num % a == 0) {
    flag = 1;
    break;
    }
    }

    aşağıdaki şekilde olması gerekiyor.
    for (a = 2; a < num - 1; a++)
    {
    if (num % a == 0) {
    flag = 1;
    break;
    }
    }
  • 07-08-2019, 01:42:23
    #4
    Başka bir forumda da yazmıştım aynı mesajı buraya da yazıyorum;

    While'ı for a çevirirken yapilari az da olsa farkli oldugu icin ufak bir kafa karisikligi yaşamışım, konuyu açtıktan kısa bir süre sonra hatanın neden olduğunu farkettim.


    for (a = 1; a < num - 1;a++)
    {
    
    if (num % a == 0)
    {
    flag = 1;
    break;
    }
    
    }
    bu sekilde a=1 olarak döngüye giriyor, for içerisinde işlemleri gerçekleştirdikten sonra a yı 1 arttıyor ve doğal olarak not prime mesajı printliyor.

    for(a = 1; a < num - 1;){
    
    a++;
    }
    [/quote]
    olarak yazarsak a=1 di, islemlere baslamadan hemen once a yi 2 yapip oyle if e giriyor.


    Veya While dan for a çevirirken a=2 olarak yapsaydim yine dogru calisacakmis:

    for (a = 2; a < num - 1;a++)
    {
    
    if (num % a == 0)
    {
    flag = 1;
    break;
    }

    Mesaj ve konu dursun olur da benzer bir soru işareti olan arkadaşlar faydalanır.

    Yine de cevap veren arkadaşlara teşekkürler.