Russian Peasant Multiplication Algoritması Sorunu
-
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
-
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; }
-
döngüye her girdiğinde j 18 oluyo :|
-
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?
-
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