Bu sayfadaki yazılar
Sayfanın metni
Sayfa 24
Bu başlangıç sayısına biz çekirdek sayı diyeceğiz. Bu işlemler siz bilgisayarınızı açtıktan sonra otomatikman yapılıyor. Eğer siz RND komutunu vermişseniz bu çekirdek sayı bilgisayarınız tarafından alınıp 11879546,4 sayısı ile çarpılıyor. Bu çarpımdan çıkan sonuç 0.0000000392767778 sayısı toplanır. Ve bilgisayar bu hesabın sonucunu tekrar 5 parçaya bölüp bellek bölgelerine yazar. Bu bellek bölgeleri kendi aralarında belli bir kural ile karşılaştırılır ve tekrar bir ondalıklı sayıya çevrilerek ekranınıza yazar. Neyse bu kadar işlemden sonra eğer kafanız karışmadı ise incelememizi daha da derine indirerek deminden beri bahsetmiş olduğum 5 bellek bölgesinin neresi olduğunu birlikte inceleyelim. Bu bellek bölgeleri C64'ünüzde 139 ila 143 arasında bulunmaktadır. Şimdi aşağıda vermiş olduğum satırları bilgisayarınıza girin. 10 X=139:Y=143 20 FOR A=X TO Y 30 PRINT PEEK(A) 40 NEXT A 50 PRINT RND(1) Bu ufak program sayesinde 5 bellek bölgenin değerini ve bu değerlerden oluşan rastlantısal sayıyı görürsünüz. Eğer 60 GOTO 10 satırını eklerseniz devamlı olarak sayıların değiştiğini görürsünüz. Yukarıda anlatmış olduğum işlem ne kadar karmaşık görünse de bu işlem aslında rastlantısal sayının devamlı değişik olmasının sebebi değildir. Çünkü yapılan işlem aynı kalmıştır. Peki rastlantısal sayının devamlı değişik olmasının sebebi nedir? İşte sıra şimdi orayı açıklamaya geldi. Rastlantısal sayı aslında RND(X) komutunun X değerine bağlıdır. Eğer X değeri herhangi bir pozitif sayı ise o zaman bilgisayarınız çekirdek sayı olarak 0.811635157 sayısını alacak ve 139 ila 143 arasına 128,79,199,82,88 sayılarını yazacaktır. Tabi ki bu böyle olunca bilgisayarınız açıldıktan sonra devamlı olarak aynı sayıları size verecektir. İsterseniz daha ayrıntılı olarak inceleyelim.
GOTO 10 RND
Şimdi bilgisayarı kapayıp açın ve aşağıdaki sayıları girin. 10 FOR A=1 TO 5 20 PRINT RND(1) 30 NEXT Evet bu satırları girdikten sonra elinize bir kağıt, kalem alın ve RUN yazın. Şimdi ekranda gördüğünüz sayıları sırasıyla kağıda yazın ve bilgisayarınızı tekrar kapayıp açın. Yukarıdaki programı tekrar yazın ve çalıştırın ve ekrandaki sayılar ile kağıdınızda bulunan sayıları kontrol edin hepsi aynı ve sırasıyla değil mi? Evet sizin de gördüğünüz gibi pozitif değerli bir RND komutu size tam anlamıyla bir rastlantısal sayı vermiyor. Çünkü bilgisayarınız ilk açıldığı anda aynı başlangıç sayısını aldığından dolayı aynı sayılar tekrarlanıyor ve burada sayısal değerin hiç bir önemi yok. Ancak bu başlangıç sayısını devamlı olarak değiştirmeyi başarabilirsek o zaman rastlantısal sayılara ulaşabiliriz. Peki bunu nasıl başaracağız? Bunun çözümünü hep birlikte birazdan göreceğiz. Neyse şimdi gelelim negatif değerli RND komutuna. Negatif değerli RND komutunda ise sonuç devamlı olarak aynı kalır. Bu sonuç ancak sayısal değer değiştirildiği zaman değişir. Örneğin PRINT RND(-55) komutunu bilgisayara direkt olarak girin ekranınızda belirecek sayı devamlı olarak 5.13446139E-08 olacaktır ve PRINT RND (-33) dersek o zaman sonuç 3.08555173E-08 olacaktır. Böylelikle yine gerçek bir rastlantısal sayı bulamadık. Ancak negatif değerli RND komutunda bizim önceden bilmediğimiz bir değer alırsak o zaman rastlantısal sayıya çok yaklaşırız. Bunu ise RND(-TI) komutlarını vererek yapabiliriz. Burada TI bilgisayarın içinde bulunan sistem saatinin değerini okuduğundan devamlı olarak değişmektedir ve bunun sonucu olarak bizi rastlantısal sayıya yaklaştırır. En son olarak da gelelim 0 değerli RND komutuna. Bu komuta ise bilgisayarınız RND(-TI)'a benzer şekilde sistemin saatinden yararlanır ancak belli bir süreden sonra sayı dizisi kendini tekrarlamaya başlar. Bu da herhalde hiç bir programcının istediği bir durum değildir. Bu kadar anlatımdan sonra size son bir tavsiye vermek istiyorum. RND komutu kullanan bir program yazmak isterseniz programınızın ilk başına RND(-TI) komutunu verdikten sonra RND(1) komutunu kullanmanız size en gerçekçi rastlantısal sayıyı verir. Burada RND(-TI) ile başlangıç sayısını değiştirdikten sonra RND(1) ile rastlantısal sayıyı çağırıyorsunuz. Bir de her INPUT, WAIT komutlarından sonra bu sistemi kullanırsanız rastlantısal sayılarınız daha gerçekçi olur.
Bir daha ki yazılarımda görüşmek üzere hepinize bol RND'li günler diliyorum.
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 25
BASIC ÖTESİ
Merhaba arkadaşlar. Bu sefer size yardımcı olacak pek çok PEEK ve POKE veriyoruz. Bunların size ne gibi yararlar sağlayacağını programlarınızı yazarken göreceksiniz. Sadece PEEK ve POKE'lar değil ayrıca çeşitli SYS komutlarımız da var. POKE 1,53- BASIC ve KERNAL devre dışı kalır (Bütün Gâk Byte boşalır ama kontrol sistemi önceden ROM'dan RAM'a kopya edilmemişse bilgisayar kilitlenir). Bu komut sadece makine dilinde kullanılabilir. POKE 1,54- Burada ise sadece BASIC devre dışı bırakılır. Bu komut da sadece makine dilinde kullanılır. POKE 1,55- Bu komutla normal hale geri gelirsiniz. PRINT PEEK(10)- Eğer sonuç sıfırsa son yapılan operasyon LOAD'tır. VERIFY olsaydı sonuç 1 olurdu. PRINT PEEK(17)- En son olarak alınan değişkenin hangi yolla alındığını belirtir. Eğer sonuç sıfırsa ya INPUT kullanılmış ya da şu ana kadar hiçbir komut kullanılmamıştır. Kullanılan komut GET ise sonuç 64, READ ise 152 olur. POKE 19,64- Bundan sonra INPUT'ta soru işareti çıkmaz. Ayrıca RETURN'e basıldığında kursor bir alt satıra geçmez. POKE 19,0- INPUT'ta yine soru işareti çıkmaya başlar.
POKE 22,35- Program satır numarasız verilir. POKE 22,25- Normal hale dönüş. PRINT PEEK(43)+PEEK(44)*256- Bu komutlarla BASIC programınızın başlangıç adresini bulabilirsiniz. Başlangıç adresini değiştirmek isterseniz buradaki değerlerin yerine yenilerini koymanız gerekir. PRINT PEEK(45)+PEEK(46)*256- Bu komutla BASIC programınızın bitiş adresini bulabilirsiniz. PRINT PEEK(57)+PEEK(58)*256- Bu komutla programın han-
Tolga Kale gi BASIC satırında durdurulduğunu bulabilirsiniz. PRINT PEEK(69)+PEEK(64)*256- DATA alınan en son satırın numarası. PEEK(69)/PEEK(70)- En son tanımlanan değişken. Normal değişkenlerde değer PRINT CHR$(PEEK(69)-128)+CHR$(PEEK(70)) ile bulunur. Yüzdeli değişkenlerin ismi PRINT CHR$(PEEK(69)-128)+CHR$(PEEK(70)-128) ile bulunabilir. Stringler, (mesela PRINT CHR$(PEEK(69))+CHR$(PEEK(70)-128) ile bulunabilir.