1. sayfa
1-C++'da asal sayiları bulan programı şu şekilde yazdım. kendi isteğin üzerine modifiye edebilirsin.
2-Break komutu içinde bulunduğu döngü parçasını kırar. Sorularını biraz daha düzenli yazarsan insanlar daha iyi yardımcı olabilir. sorudan soruya atlaman işini zorlaştırır. |
Cevap:https://paste.ubuntu.com/p/bQFwJJ5qZT/ Öncelikle orada while döngüsüne gerek yok. Bir diğer sorunun asal mı değil mi kontrolünü yapmaman. Yazdığım kodlara bak ne demek istediğimi anlarsın. Yazılım forumu olarak en aktifi donanımhaber sanırım. Daha iyisi varsa mesaj yoluyla iletebilirsiniz. |
ikinci for döngüsünde i < asalSayi / 2 de yazabilirsin cunku yarısına kadar asal = false veriyorsa 2 katı da kesinlikle false verecektir bu da işlemi 2x hızlandırır; algoritmalarda hız önemlidir. ilk for döngüsünde ise asalSayi=1 'den başlamak matematik açısından daha doğru olur cunku 1 bir asal sayıdır :) |
bu arada hocam en küçük asal sayı 2'dir. 1 asal sayı değil bir yanlışlık oldu herhalde.
|
Evet 100'e kada sayı için o da makul çözüm. Bu arada benim iterasyonda 4 asal sayı olarak çıkıyor, kodu deneyince fark ettim fakat sadece 4. if (asal == true && asalSayi != 4) yapınca düzeliyor ama o zamanda kod uzamış oluyor. Evet 1 asal sayı değil; onu Fibonacci sayıları ile karıştırdım :) |
|
Hocam bildiğiniz gibi en küçük asal sayı 2 dir ve 2 den başka çift asal sayı yoktur.Bu yüzden 2 den sonraki çift sayıları incelemeye gerek yok bence bu yüzden while(i%2!=0) koydum yani i nin 4 6 8 gibi sayıları almasını istemiyorum doğru olur mu,yani algoritma doğru ve hızlı çalışır mı? Ayrıca şimdi aklıma geldi 3 ten itibaren 2 şer 2şer arttırılabiliniyormuş |
Hm o detayda bir yorum yapamam cunku algoritma sonuçta biraz tasarım işi; yani istediğin şekilde, isteğin yöntem ile tasarlayabilirsin. Örneğin BMW sıralı 6 silindir motor tasarladı, Porsche yatay 6 silindir ile Boxer motor tasarladı, ayrı tasarımlar ancak ikisi de iyi performans veriyor, onun gibi : |
Bir de bu asal sayıları yazdırmak için neden kontrol etmek gerekli.Yani mesela asal==1 yapmamız neden gerekiyor?Benim yaptığım gibi şartı sağlarsa yazdırsın neden olmuyor ? |
#include <stdio.h> bu kodda Armstrong ve Asal sayıları hesaplıyor. Bu koda bakıp kendi oluşturduğun kod ile karşılaştırabilirsin. Armstrong sayı nedir:http://matkafasi.com/42198/armstrong-sayi çok örnek var bu konu hakkında |
< Resime gitmek için tıklayın > |
Armstrong sayısını hesaplamak algoritma uygulaması açısından -bence- önemli değil cunku sadece bir for veya while döngüsü ile halledilebilen birşey. Sayıyı basamaklara %10 kullanarak ayırmak ta yeni birşey değil. Alttaki soruda 2 'yi asal sayı olarak bulmaması da döngünün başlangıç değeriyle ilgili bir ayrıntı sadece. |
bakmadım başka örneklerde vardır elbet. Zaten belli oranda birbirlerine benzerler bunlar. |
Bu dedigim cok kucuk sayilarda nasil calisir bilmiyorum, duruma gore 1-2 tane edge case'i ozel tanimlamak gerekebilir, ama zannetmiyorum. |
Bir yerde şöyle bir şey okumuştum daha hızlıymış gibi ama tam fikrim yok Eleme yoluyla asalları buluyorsun 2 3 4 5 6 7 .... 35 36........ 190........2749 Gibi bir liste array dizin vb var Şimdi baştan başlıyorsun 2 sağdaki 2nin katı olanları olmaz diye işaretliyorsun Sonra 3 e geçtin 3 ün katlarını işaretliyorsun 4 e gelmiyorsun çünkü bu işaretliydi 5 geçtin 5inkatlaeını işaretliyorsun ... böyle böyle en büyüğün kökünün olduğu yere kadar gidince oluşturduğun dizideki işaretsizler asal sayıların oluyor Hatırladığım kadarıyla bu daha verimli oluyormuş, ama emin değilim hesap kitap yapmadım Dynamic programming diye okumuştum galiba |
|
@Wepawet |
1. sayfa
Ayrıca break komutu tam olarak nedir?Yani mesela iç içe for döngüsü yazdık,içteki for döngüsüne bir şart koyduk ve bu şart olursa break; yazdık.Şimdi iki for döngüsünden de bir daha dönmemek üzere mi çıkıyor yoksa içteki for döngüsünden çıkıp bir daha ikinci for döngüsüne mi giriyor?
Ayrıca for döngüsünün içine while(i%2!=0) yazdım.İlk başta if denedim sadece tek sayıları yazdırıyor ama while deyince program hiçbir şekilde çıktı vermiyor.https://onlinegdb.com/SkON-8SJE
< Bu mesaj bu kişi tarafından değiştirildi arkasokaklar12634 -- 5 Aralık 2018; 16:46:39 >