folder Tahribat.com Forumları
linefolder C - C++
linefolder Russian Peasant Multiplication Algoritması Sorunu



Russian Peasant Multiplication Algoritması Sorunu

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    dyrnade
    dyrnade's avatar
    Kayıt Tarihi: 27/Temmuz/2009
    Erkek

    Merhabalar,bugün c labında bu algoritmayı gördük.While döngüsüyle yaptığımda oluyor fakat for döngüsüyle yaptığımda olmuyor sorun sizce nedir ?

    Bu nedir diyenler varsada algoritma şurda.

    http://www.cut-the-knot.org/Curriculum/Algebra/PeasantMultiplication.shtml

     

     

    Bu while döngüsü olan  http://pastebin.com/s56tQ05A

    buda for döngüsü olan        http://pastebin.com/yLUY41KL

  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    sanırım bu şekilde olması lazım

     

     #include <stdio.h>
      
       int main(void)
       {
     
          int  j = 18, k = 0;
    
          for (int i = 85; i >=1;i/=2)
          {
              if (i % 2 == 1)
              {
                k += j;
              }
              j *= 2;
          }
    
          printf("%d\n",k);
          return 0;
       }

    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    ZoRKaYa
    ZoRKaYa's avatar
    Kayıt Tarihi: 18/Eylül/2007
    Erkek

    döngüye her girdiğinde j 18 oluyo :| 


    echo "imzanız özel karakter içermemelidir";
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    dyrnade
    dyrnade's avatar
    Kayıt Tarihi: 27/Temmuz/2009
    Erkek
    unbalanced bunu yazdı

    sanırım bu şekilde olması lazım

     

     #include <stdio.h>
      
       int main(void)
       {
     
          int  j = 18, k = 0;
    
          for (int i = 85; i >=1;i/=2)
          {
              if (i % 2 == 1)
              {
                k += j;
              }
              j *= 2;
          }
    
          printf("%d\n",k);
          return 0;
       }

    Teşekkürler bu çalıştı fakat kendımınkını az degıstirdim yine çalışmıyo :D çok ilginç değil mi?

  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    ben while i çevirerek yaptım hocam, senin for döngüsüne dokunmadım.. 

    ama onu düzenlemek istiyorsan ilk olarak j yi dışarda 18 olarak tamamla

    sonra i>1 yerine i>=1 yap çünkü while döngüsünde döngü dışında if kullanmışsın. ve şartta i>1 yazmışsın. atıyorum döngü 5 kere çalışıyorsa bi kere de üstteki kod işleniyor 6 kere çalışıyor oluyor. ama for döngüsündeki kodlar 5 kere çalışıyor. o yüzden fazla çalıştırmak için i>=1 kullanman gerek..

    ve son olarak da j nin 2 ile çarpılması.. while döngüsünü yazdığın kodda döngünün üstündeki if kodunun içinde j nin değeri 18 iken işlem yapıyor.. o yüzden j*=2 kodunu for döngüsünde alt kaydırmalısın ki döngüye ilk girildiğinde 18 olarak işlem yapsın..

     

    bunları düzeltirsen ve kodunda başka bi hatan yoksa çalışır


    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
Toplam Hit: 1930 Toplam Mesaj: 5