Çözüldü C kodu, 1.5 in 2 ile 100 arasındaki asal üstlerini print yapma

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

yup

Femtopat
Katılım
22 Ocak 2022
Mesajlar
8
Daha fazla  
Cinsiyet
Erkek
Merhaba C yazmaya daha 3-4 gun once başladım bir turlu doğrular cevabi alamıyorum, şimdiden tessekkur ederim
asal sayılar doğru cikiyor ama üstlerini almaya calisinca hersey karisiyor.


C:
#include <stdio.h>
int main () {

  float base = 1.5;
  int i, number, count;

  for(number = 2; number <= 100; number++)

  {
   
    count = 0;
    for (i = 2; i < number/2; i++)  
    {
    if(number%i == 0)      /*  herhangi bir sayi boluyorsa*/
    {
      count++;
      break;
    }
    }

    if(count == 0  ){     /* hic bolen yoksa */
   
    float power = 1;

 
    for(int j=1; j<i; j++)       /* Multiply the base, exponent times*/
    {
        power = power * base;

    }
    printf("pi =%d, %.4f^%d = %f \n",number, base, number, power );
  }
  }
  return 0;
  }
 

Dosya Ekleri

  • Screen Shot 2022-01-22 at 04.42.34.png
    Screen Shot 2022-01-22 at 04.42.34.png
    261,3 KB · Görüntüleme: 35
Son düzenleyen: Moderatör:
Çözüm
Kod leş. Özellikle de tip olarak. Daha modüler olması çok daha iyi olur.

Hataya gelecek olursak sayınız number iken niyeyse i ile muhatap oluyorsunuz. 26. satırdaki for(int j=1; j<i; j++) kodunuzu for(int j = 0; j < number; ++j) şeklinde hem doğru başlangıç değeri, hem de doğru kıyas değeri ile düzeltirseniz doğru çalışır. Başlangıç değerini 1 olarak bırakmak isterseniz 23. satırdaki atamada 1 değerini değil, base değerini vermelisiniz.

Üs almak için math.h kütüphanesinde fonksiyon var. Kendiniz de fonksiyon yazabilirsiniz. Ama orada döngü yerine fonksiyon olmasını tercih ederim ben.

Döngülerde i ve j artırımına laf eden arkadaşa gelecek olursak i++ sizin için yeterli bir artırım değil herhalde.
Bu kodları nereden aldınız acaba? Yapılmak isteneni tam anlayamadım. Fakat i ve j değişkenlerinde arttırım sorunu var. 29.satırda j değerini ekrana yazdıran kodu yazarak j değerinin artmadığını görebilirsiniz. Aynı şekilde 25.satıra da i değerini ekrana yazdıran kodu yazın.
 
Kod leş. Özellikle de tip olarak. Daha modüler olması çok daha iyi olur.

Hataya gelecek olursak sayınız number iken niyeyse i ile muhatap oluyorsunuz. 26. satırdaki for(int j=1; j<i; j++) kodunuzu for(int j = 0; j < number; ++j) şeklinde hem doğru başlangıç değeri, hem de doğru kıyas değeri ile düzeltirseniz doğru çalışır. Başlangıç değerini 1 olarak bırakmak isterseniz 23. satırdaki atamada 1 değerini değil, base değerini vermelisiniz.

Üs almak için math.h kütüphanesinde fonksiyon var. Kendiniz de fonksiyon yazabilirsiniz. Ama orada döngü yerine fonksiyon olmasını tercih ederim ben.

Döngülerde i ve j artırımına laf eden arkadaşa gelecek olursak i++ sizin için yeterli bir artırım değil herhalde.
 
Çözüm
Döngülerde I ve J artırımına laf eden arkadaşa gelecek olursak i++ sizin için yeterli bir artırım değil herhalde.

Hocam yeterli bir artırım fakat kontrol edildiğinde artırım yapılmıyor. Çok iyi kod bilgim yok fakat i değerinin bir süre artmayıp daha sonra arttığını gördüm ondan böyle bir şey yazdım ayrıca "kod leş" demek isterdim fakat bilgime güvenemediğimden bir yorumda bulunmadım. Arkadaş hem internet hem kendi bilgisiyle kodu çorba haline getirmiş galiba.
 
Değer bir süre artıp sonra artmıyor çünkü arkadaş C90 standartdı kullanıyormuş gibi döngü dışında döngü değişkeni tanımlıyor.

Bahsetmiş olduğunuz değişken i değişkeni değil mi? i değişkeni 12. satırdaki for döngüsünde değer tanımlanıyor fakat for döngüsü içerisinde olduğundan 26.satırdaki for döngüsünde i'nin herhangi bir değeri olmadığı için j<i anlamsız oluyor diye düşünüyorum.
 
Hocam yeterli bir artırım fakat kontrol edildiğinde artırım yapılmıyor. Çok iyi kod bilgim yok fakat i değerinin bir süre artmayıp daha sonra arttığını gördüm ondan böyle bir şey yazdım ayrıca "kod leş" demek isterdim fakat bilgime güvenemediğimden bir yorumda bulunmadım. Arkadaş hem internet hem kendi bilgisiyle kodu çorba haline getirmiş galiba.
evet biraz öyle oldu
Kod leş. Özellikle de tip olarak. Daha modüler olması çok daha iyi olur.

Hataya gelecek olursak sayınız number iken niyeyse i ile muhatap oluyorsunuz. 26. satırdaki for(int j=1; j<i; j++) kodunuzu for(int j = 0; j < number; ++j) şeklinde hem doğru başlangıç değeri, hem de doğru kıyas değeri ile düzeltirseniz doğru çalışır. Başlangıç değerini 1 olarak bırakmak isterseniz 23. satırdaki atamada 1 değerini değil, base değerini vermelisiniz.

Üs almak için math.h kütüphanesinde fonksiyon var. Kendiniz de fonksiyon yazabilirsiniz. Ama orada döngü yerine fonksiyon olmasını tercih ederim ben.

Döngülerde i ve j artırımına laf eden arkadaşa gelecek olursak i++ sizin için yeterli bir artırım değil herhalde.
C:
#include <stdio.h>
int main () {

  float base = 1.5;
  int i, number, count; 

  for(number = 2; number <= 100; number++){

    count = 0;
    for (i = 2; i < number; i++){
        
    if(number%i == 0)   {   /*  herhangi bir sayi boluyorsa*/
    
      count++;
      break;
    }
    }

    if(count == 0  ){     /* hic bolen yoksa */
    
    float power = 1;

  
    for(int j = 0; j < number; ++j)       /* Multiply the base, exponent times*/
    {
        power = power * base;

    }
    printf("pi =%d, %.4f^%d = %f \n",number, base, number, power );
  } 
  }
  return 0;
  }

dediğiniz gibi bir kaç degisiklik yaptım suan calisyor, en azından doğru output veriyor, kod göze baya daginik gözüküyor daha guzellestirilabilir mi? Birde c calisabilcegim tavsiye edeceğiniz kaynak varmi, bundan once 5 aylık python tecrübem var c ye alışmaya calisiyorum. çok saolun bu arada
 
Son düzenleme:
Eğer yazılıma yeni başlayan biriyseniz size tavsiyem değişken isimlerini anlamlı ve Türkçe oluşturmanız. Çünkü koddaki sorunları mantığı ve daha sonra dönüp baktığınızda ne yaptığınızı daha iyi anlarsınız. Belirli bir seviyeden sonra tabii ki İngilizce ve hatta yapabilirseniz bu işin jargonuna göre değişken isimleri belirlerseniz daha iyi olacaktır. Aynı şekilde yazdığınız kodlara şu an için Türkçe yorum satırları eklemekte iyi olacaktır.
 
Eğer yazılıma yeni başlayan biriyseniz size tavsiyem değişken isimlerini anlamlı ve Türkçe oluşturmanız. Çünkü koddaki sorunları mantığı ve daha sonra dönüp baktığınızda ne yaptığınızı daha iyi anlarsınız.
Nasıl başlarsan öyle gidiyor. Ağaç yaşken eğilir. İngilizce olarak devam edin.
 

Yeni konular

Geri
Yukarı