Commodore sayı 75, sayfa 21

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 21

Faktöriyel de Alalım

Geçen sayı söz verdiğim gibi, örneklerle uğraşmaya devam ediyoruz. Bu sefer de faktöriyel alma işlemiyle uğraşalım azıcık. Çoğunuz biliyorsunuz faktöriyel alma işlemi bu şekilde tanımlanmıştır:

(k-2)x...x2x1

Ünlem işareti “faktöriyel” olarak okunur ve faktöriyel alma işlemini temsil eder. Örneğin “5 faktöriyel”i hesaplarsak:

değerini elde ederiz. Buradan sadece tam sayıların faktöriyelleri bulunabilmiş gibi görünüyor, ama matematikçiler 0 ile 1 arasındaki sayıların faktöriyelini hesaplamak için de bir polinom bulmuşlar. Bu sayede (mesela) 4.6'nın faktöriyelini rahatlıkla hesaplayabiliriz: Tabii ki ilk olarak 0.6'nın faktöriyelini hesaplayabilmeliyiz. Bunu (yeterince yaklaşmak için) 8. dereceden bir polinom olarak yazdığımızda şu katsayıları elde ederiz:

al — 1 al- -.577191652 a2- -,897056937 ad - ,918206B57 a5 - -,756704078 a6 — 482199394 -.193527818 a8 — 035868343

Program 2'ye bir göz atarsanız 0 ile 1 arasındaki sayıların faktöriyelini hesaplayan makine dili rutinini görebilirsiniz.

POLINOM — LDA #<KATSAYI LDY #>KATSAYI JMP POLİNOM

$E059

KATSAYI .BYT 8 .FLP .035868343 .FPL -.193527818 .FLP .482199394 .FLP -.756704078

.FLP .FLP

918206857 -.897056937 .FLP ,988206891 .FLP -.57719652 .FLP

Program-2: 0 ile 1 arasındaki sayıların faktöriyelini hesaplayan program.

USR fonksiyonunun 828'i göstermesini de sağladıktan sonra

PRINT USR(X) komutuyla X sayısının faktöriyelini görebilirsiniz. Örneğin:

- -

0.951350564 0.886227246

Ve tüm sayıların faktöriyelini hesaplamak istersek kısa bir BASIC program makine dili rutinimize eşlik edebilir. Program 3'de bu işi yapacak olan BASIC programını görebi- lirsiniz. Programda farkedeceğiniz gibi, USR(X) fonksiyonunu her türlü değer ata- malarında (Y— Yx USR(X) gibi) kullanabi- lirsiniz. 10 INPUT "ARGUMAN"; X 20 TF X<0 OR X>33 THEN 10 30 IF X-0 THEN Y-İ: GOTO 70 40 Y-X: IF X<1 THEN Y-USR(X): GOTO 70 50 X-X-1: TF X>1 THEN Y-Y*XŞ GOTO 50

60 IF THEN Y-Y*USR(X) 70 PRİNT "FAKTOÖRİYEL -"; Y

Program-3: Program-2'yi kullanarak, tüm sayıların faktöriyelinin alınmasını sağlayan BASIC programı.

BASIC programın 20. satırı, negatif ve 30'dan büyük sayıların faktöriyelini almaya çalışmamızı engelliyor. Faktöriyel işlemi, tanım olarak sadece sıfır ve üstü için geçerlidir. 30'un üstündeki sayıların faktöriyeli, bilgisayarınızın hesaplayabileceğinden (1E38) daha büyük bir sonuç vereceğinden, program hata verecektir. Sıfır faktöriyel 1 olarak tanımlandığından, 30. satırla bu kontrolü yapıyoruz. 50. satır ise programın beynini oluşturuyor. Sayı 0 ile bir arasında bir değere ulaşana kadar Y ile çarpılıp bir eksiltiliyor. Son olarak, sayının artan kısmı birden küçükse USR(X) ile Y'yi çarpıyoruz. Y'nin değeri 70. satırda ekrana yazılıyor. Programı birkaç örnek değer için çalıştırırsak:

0 - | - | 15 — 1.32934087 2 - 2 3 - 6 05 — ,886227246

7.35 = 102087.3151 Aslında tüm faktöriyel alma rutinini makine dili kullanarak yazabiliriz. Bunun için sadece deminki BASIC programının makine dili eşdeğerini yazmamız gerekecektir. Tablo 3'te bu makine dili programının akış şemasını görebilirsiniz. Kendinizi denemeniz için bu programı yazma kısmını size bırakıyorum. Eğer sonuçlarınızı bana yollarsanız, ben de sizin konuyu ne kadar takip edebilmiş olduğunuzu anlayabileceğim. İlk sayı sonra kaç arkadaşımızın bu programı yapabilmiş olduklarını ve genel hataların (çalıştıramayanlar da bana yazsın demek oluyor bu) neler olduğunu açıklayacağım. Tabii ki böyle bir şeyi yapmam için bana yazmanız gerekiyor. Nedense sizlerle bir iletişim ağı kurmayı pek başaramadım. Bu sebeple de konuları hâlâ körü körüne seçip “Umarım birilerinin işine yarıyordur” demek zorunda kalıyorum. Yanlış anlamayın, “Su Şişesi”yle rekabet gibi bir amacım yok, Yalnızca sizin burada anlatılanlardan ne kadar yararlanabildiğinizi anlamak istiyorum.

SON

SON

Neyse, bu ayki vaazımı da verdiğime göre yazıyı bitirebilirim. Gelecek ay garip garip konularda buluşmak üzere hoşça kalın.

Klavyeyle gezinmek için ← ve → tuşları.