Commodore sayı 73, sayfa 14

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 14

İşte POS fonksiyonundan başlayalım. POS size cursor'unuzun o anda ekranda bulunduğu kolonu verir. Eğer cursor ilk satırın 10. sütunundaysa POS(0) size C-64 ve C-128'de 9 değerini verir. Ama cursor'unuz bir sonraki ekranda aşağıdaki satırdaysa POS(0) C-128'de hâlâ 9 değerini verirken C-64'te 49 değerini verir. Peki neden farklı? Commodore 64 aslında mantıksal olarak 80 karakter alır. Ama bir satır 40 karakterden oluştuğu için bir mantıksal satır iki fiziksel satırı kapsar. Peki POS fonksiyonuna ne zaman ihtiyacınız olur? Eğer değişkenleri, grafik karakterlerini bir satıra yazmanız gerekiyorsa veya bir program bir mesaj yazmak için gerekli yer olup olmadığını da bu sayede algılayabilir. Mesela bir A$ değişkenini o satırda yeterli yer varsa o satıra, yoksa aşağıdaki satıra yazdıralım (40-kolon ekran).

201F LEN(A$) — 40-P THEN PRİNT 30 PRİNT A$

10. satır P değişkenine bundan sonra yazılacak mesajın ilk karakterinin kolonunu verir. Eğer P değişkeni 39'dan büyükse (yani bir alt satırdaysa) bu değişkenden 40 çıkarılarak normal hale gelmesi sağlanır. Bir sonraki satırda A$ değişkeninin uzunluğu kalan boşlukla karşılaştırır. Eğer A$ değişkeni o boşluktan daha uzunsa araya bir PRINT komutu girer ve cursor bu sayede bir sonraki satırın başına gider. A$ değişkeni boşluklara sığıyorsa doğrudan 30. satıra gidiliyor. 30. satırda ise A$ değişkeni cursor nerde ise oraya yazdırılıyor. POS fonksiyonunun parantezleri arasına ne yazdığınız aslında pek fark etmez. Yani POS bize cursor'un yatay pozisyonunu verir. Aslında cursor'un yatay pozisyonunu bilmek bize pek çok yarar sağlar. Hangi komut size cursor'un yatay pozisyonunu verir? Aslında böyle bir komut yok. Belleğin 214 (C-64'te) veya 235. (C-128'de) adreslerine bakmalısınız (PEEK ile). Bizim tanıdığımız BASIC çok eskiden beri kullanılıyordu. O zaman bilgisayarlar video monitörleri kullanmıyorlardı. Bu yüzden cursor sadece sağa sola doğru hareket ettirilebiliyordu. Cursor'u yukarı aşağı oynatmak mümkün değildi çünkü bilgiler bir kağıt üzerine dökülüyordu. Aslını söylemek gerekirse o zamanlar cursor bile yoktu. POS komutunun tek amacı printer kafasının yatay pozisyonunu öğrenmekti. Listemizde sıradaki komut programa cursor'un satırın neresinde olduğunu söylüyordu. SPC ise cursor'u aynı satırda belirtilen uzaklığa götürür. SPC komutu kolayca TAB komutu ile kullanılabilir. Aralarındaki farkı aşağıdaki programla daha rahat anlayabiliriz.

10 PRİNT A$; SPC(15);BS 20 PRİNT A$; TAB(15),B$

10. satır A$'ı ve B$'ı aralarında 15 karakter boşluk bırakarak yazar ve uzunluklarına dikkat etmez, 20. satır A$ değişkenini yazdıktan sonra B$'ı basmadan önce cursor'u 16. pozisyona götürür ve sonra B$’ı yazar (Neden 15 değil de 16? 16 çünkü en soldaki kolon 0 numarasını alır). Eğer A$ değişkeninin uzunluğu 15'ten büyükse B$ değişkeni onun üzerine basılır. Bu yüzden TAB komutunu kullanmak tehlikelidir. SPC ve TAB komutları o kadar kullanışlı değillerdir. Daha kullanışlı bir komut olan CHAR ise sadece BASIC 7.0'da mevcuttur. Bu komutta cursor'un gitmesini istediğiniz yerin hem yatay hem de dikey olarak koordinatlarını vermeniz yeterlidir.

BOŞ HAFIZA

FRE kullanışlı fakat gereksiz bir komuttur. Hiç programlarınızda boş kalan hafızayı öğrenme ihtiyacını duydunuz mu? Bu sık olarak karşınıza çıkan bir sorun olmamasına rağmen bazen ihtiyacınız olabilir. FRE(0) komutu size C-64'ünüzün ne kadar kullanılabilir RAM'ı olduğunu verir. İşin ilginç tarafı ise sonucun -32768 ile 32767 arasında olmasıdır. Eğer 40.000 bytes boş belleğiniz varsa, PRINT size -25536 gibi bir sonuç verecektir. Herhangi bir eksi sonuca 65536 eklemelisiniz.

PRİNT - 65536 * (ERE(0) 0)

Yukarıdaki komutla bilgisayarınızda ne kadar boş hafıza olduğunu hemen bulabilirsiniz. () ile birlikte yazacağınız sayının C-64'te bir önemi yoktur, ancak C-128'de 0 yazarsanız programlar için kalan hafızayı, 1 yazarsanız değişkenler için kalan hafızanın boyutunu öğrenebilirsiniz. FRE ile bir program ne kadar uzun dizeler yaratması gerektiğini kestirebilir. Her dizenin 5 bayt harcadığı biliniyorsa program doğrudan maximum dize sayısını hesaplayabilir.

10 D-FRE(1)/5-10 20 PRİNT D 30 DIM A(D) 40 PRİNT FRE(İ)

10 tane bayt eksilttik çünkü bunlar sizin belirlediğiniz dize ile ilgili bilgileri içereceklerdir. Eğer C-128'inizde bir “Out of Memory Error” ile karşılaşmak istiyorsanız 10. satırdaki 10'u 2 ile değiştirin. Dikkat bundan sonra bilgisayarınızı açıp kapatmanız gerekebilir. Aynı programı ufak bir değişiklikle C-64'ünüz için de uygun hale getirebilirsiniz.

10D-(FRE(1) - 65536 *

10'u küçültün ve sonucu görün, Bir süre sonra karşınıza “Out of Memory Error” çıkacaktır.

Tanjant

En son ATN fonksiyonunu ne zaman kullandınız? Peki ATN fonksiyonunun ne olduğunu bilmiyor musunuz? Biliyorsanız bilgisayarınızda neden ASN veya ACS olmadığını hiç düşündünüz mü? ATN fonksiyonu trigonometriyle ilgilidir. ATN ile ters tanjantı alabilirsiniz (ArcTangent). Mesela 45 derecelik bir açının tanjantı.

tan(45) = 1.0

BASIC genellikle derece cinsi açılarla değil “radyan” cinsi açılarla çalışır. Ama korkmanıza gerek yok radyan ve derece arasında basit bir bağlantı vardır.

1 derece = pi/180 radyan veya 1 radyan = 180/pi derece

Bu bağlantının sebebi ise tam bir dairenin 360 derece veya 2*pi radyan olmasıdır. Bunu başka bir şekilde de söyleyebiliriz.

1 derece > 0.01745 radyan veya 1 radyan = 57.30 derece

45 derecelik bir açının tanjantını şu şekilde bulabiliriz.

PRİNT

Şimdi bilgisayarınız size 1.0 sonucunu verecektir.

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