Son kullanma tarihi geçmiş, bayatlamış bir tarayıcı kullanıyorsanız, Mercedes kullanmak yerine tosbağaya binmek gibi... Web sitelerini düzgün görüntüleyemiyorsanız eh, bi' zahmet tarayıcınızı güncelleyiniz. Modern Web standartlarını karşılayan bir tarayıcı alternatifine göz atın.
Pi sayısının virgülden sonraki 100 basamağını ekrana yazan algoritma
Merhaba arkadaşlar. Programlama dersinde hocamız ibretlik bir soru sordu ve vizede çıkacağını söyledi. Soru Şöyle; "Pi sayısının virgülden sonraki 100 basamağını ekrana yazan algoritmayı yapınız" şeklinde. Bunu algoritmada yapabilmek için hangi yöntemi, metodu uygularım ? Yada herhangi bir öneriniz varsa paylaşın lütfen..
Merhaba, biraz kısa bir yoldan yaptım. Hazır kod -> CodePaste.NET -
Pi sayısının devamını bir matematik sitesinden aldım. String değişkene yerleştirdim. Ardından bir String dizisi oluşturdum ve split("") metoduyla stringin tamamını diziye çevirdim. 100. eleman sorulmuş, noktadan önce 2 eleman olduğu için ekrana dizinin 102'nci elemanını yazdırdım. Takıldığın bir yer varsa sorabilirsin.
Hocan tam olarak neyi istiyor anlamadim. Acaba hem hesaplatip hem de yazdirmani yoksa hazir olan sayiyi sadece ekrana yazdirmani istiyor. Pi sayısı - Vikipedi
Aşağida birçok pi formülü var. Burdan mesela newton formülünü seçebilirsin. Mesela newton formülünü ele alirsak: Öncelikle faktöriyel hesaplayan bir fonksiyon yazarsin veya yazildiğini varsayarsin. Daha sonra n=0 olacak şekilde bir integer , pi_sayisi=0 olacak şekilde bir double, hassaslik diye birde integer tanimlarsin. Hassasliği ne kadar büyük yaparsan pi sayisini o kadar iyi hesaplar. Neyse bir döngü yaratirsin bundan sonra döngüde n=0 dan hassasliğa kadar n=n+1 olacak şekilde pi=pi+(Newton Formülü). Burda hassaslik dizinin n=0 dan kaça kadar gideceği. Burdan sonra gerekli hassaslikda hesapladiktan sonra eğer c diliyse bu formatli yaziyi kullanirsin ve mesela printf("%101.100f",pi_sayisi) burda 101 karakter ayirip virgülden sonra 100 basamak yazacaği anlamina gelir.
John Machin 1706 da PI sayısını hesaplanabilmesi için şöyle bir formül geliştirmiştir,
Yukarıda formüle göre bunu Taylor serilerinde açabiliriz, arccot(ark kotanjant) özel bir fonksiyon olduğu için, hazır kütüphaneleri kullanmayacağım. (3rd sympy),
pardon eklemeyi unutmuşum, aslında arctan1/5 >> arccot5 'e eşittir.
arccot(x,u) fonksiyonu için, ilk döngüyü elde edebilmek için 10^n(10 üssü n) yani 10'un katları olan (u değişkenini) bölerek başladık ve tekrar tekrar x^2'e böldük. Bu ilerleyiş 3,5,7,9... şekline kadar ta ki term değişkeni 0'a ulaştığında ve gerçek değeri 10^-n den küçük olduğunda döngüden çıkacaktır.
PHP:
def arccot(x, u):
sum = ussu = u // x
n = 3
sign = -1
while 1:
ussu = ussu // (x*x)
term = ussu // n
if not term:
break
sum += sign * term
sign = -sign
n += 2
return sum
Ana formülümüzü yerine yazacak bir pi fonksiyonu oluşturuyoruz, bu fonksiyon kullanıcıdan istenilen basamak kavramını öne çıkartır hayliyle programa dinamiklik kazandırır.
PHP:
def pi(basamak):
u = 10**(basamak+10)
pi = 4 * (4*arccot(5,u) - arccot(239,u))
return pi // 10**10