Bu sayfadaki yazılar
Sayfanın metni
Sayfa 58
Bilgisayarın bir tuşa basılana kadar beklemesini sağlayan bir program yapalım.
10 203,63 20 GET A$;
FRE FONKSİYONU
Bilgisayarı ilk açtığınızda “38911 bytes free” yani yaklaşık olarak 39Kbyte boş yerimiz olduğunu görürüz. Ama
PRINT FRE (0)
PRINT FRE(0) komutunu verdiğimizde cevap olarak -26627 değerini alırız. Bu değere göre bilgisayarın boş hafızası olmadığı gibi, 26627 byte kaybetmiş görünüyor. FRE fonksiyonunun verdiği cevabı düzeltebilmek için 2'nin 16'ıncı kuvvetine, yani 65536 sayısına FRE fonksiyonundan aldığımız cevabı eklemek gerekir. FRE fonksiyonunun niçin böyle bir hata yaptığını anlamak için nasıl çalıştığını bilmemiz gerekiyor. Artık kullanılmayan karakter dizileri çıkarılıp hafızada boş yer açılır. Bu işleme “GARBAGE COLLECTION” adı veriliyor. Bu işlemden sonra boş hafıza alanı hesaplanıyor. Bunun için $33/$34 adreslerinde tutulan dizilerin başlangıç adresinden $31/$32 adreslerinde tutulan dizilerin bitim adresi çıkarılıyor. 16-bit şeklinde elde edilen netice “floating point” şekline çevriliyor. Çeviri yapıldığı anda elde edilen netice hatalı hale geliyor. Çünkü integer halindeki sonucumuz floating point çevrimi sırasında işaretli (+ veya -) olarak ele alındığından -32768 ile 32767 arası bir sayı haline geliyor. Eğer sayımız bu işleme tabi tutulmasaydı, 0 ile 65536 arasında bir değer taşıyacaktı. FRE fonksiyonunun nasıl çalıştığını ve neyin hataya sebep olduğunu gördük. Program Eki'ndeki PROGRAMI çalıştığında FRE fonksiyonu doğru çalışır hale gelecek.
OYUNLAR İÇİN KOLAYLIKLAR
Bazı PEEK ve POKE komutları sayesinde oyunları kısa yoldan bitirmek isterseniz oyun programını yükledikten sonra söylediklerimizi uygulayın.
KRAKOUT Puan tablosuna adınızı yazmak yerine (C) yazarsanız ilk 25 düzey için sonsuz hak elde edersiniz. TRAILBLAZER
SYS64738 Sonsuz zaman için POKE 29738,234 POKE 29739,234 Sonsuz atlama hakkı POKE 30889,234 POKE 30890,234 POKE 30891,234 SYS 25729 oyunu başlatır.
JACK THE NIPPER
Açılış ekranında iken ZAPIT yazarsanız ekranın kenarları beyazlaşır ve oyun süresince hiç ölmezsiniz. PANTHER
SYS64738 POKE 15324,234 SYS 4096
İlk üç düzeyde hiç saldırıya uğramayacaksınız. NEMESİS Oyunu yükleyin. Ateş tuşuna basmadan evvel SHIFT tuşuna basıp dört defa boşluk tuşuna basın. Sol üst köşede bir şeyler gözükecek. Kaç oyuncu istediğinizi seçin. Oyunculardan birinin gemisi görünmez olacak. MISSION CTRL, Commodore tuşu, 2, O, R, L, 1, K tuşlarına aynı anda basın. MUTANIS Oyunu yükleyin ve bilgisayarı RESET'leyin. POKE 9273,234 POKE 9274,234 SYS 4096 Artık sonsuz hakkınız var. THE EQUALISER Oyun başladıktan sonra C tuşuna basarken RESTORE tuşuna her basışınızda bir sonraki düzeye geçersiniz. Böylece oyuna istediğiniz düzeyden devam edebilirsiniz.
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 59
AMICA
SEYFETTİN ÇANKAYA
INPUT VE OUTPUT
Bilgisayarlarda gerekli bilginin girişi ve işlenmiş bilginin çıkışı için kullanılan keyboard ve ekran gibi donanımların işlevlerini yerine getirmekte kullandıkları getchar( ) ve putchar( ) fonksiyonlarını tanıyalım. Getchar( ) ve putchar( ) tek bir karakter uzunluğundaki bilginin giriş ve çıkış işlevini yerine getirir. Getchar( ) fonksiyonu her çağrılışta bir karakter uzunluğundaki bilgiyi keyboard'dan alır, benzer şekilde putchar( ) bir karakterlik bilgiyi ekrana gönderir.
Getchar( ) Kullanımı:
c = getchar( ) şeklindedir. Böylece getchar( ) ile klavyeden okunan ASCII kodları c değişkeninde saklanır. Bu
ve C (3)
bilgiyi ekrana aktarmak istersek, putchar(c)
fonksiyonunu kullanmamız gerekir.
Putchar( ) içinde yer alan c değeri getchar( ) ile elde edilen değeri içeren değişkendir. Kısa bir programla anlatılanları özetleyelim:
main ( ) / * keyboard okunan bilginin ekrana aktarılması*/ int c; c — getchar ( ) ; while (c ! - EOF) | putchar (©); c — getchar ( )
| |
Program getchar( ) ile okunan karakterin putchar(c) ile ekrana çıkışını sağlamaktadır. (!=) ifadesi (eşit değil) mantıksal durumuna karşılık gelmektedir. Önceden anlatılan while işlemi (c != EOF) şartı ile ortadan kalkana kadar devam etmektedir. EOF (end of file) gösterimi karakter girişinin sona erdiğini ifade eder. EOF değeri -1 veya 0'dır ve sembolik bir sabittir. Büyük harfle yazılmış olması da bunu göstermektedir. Programda önemli bir nokta c değerinin karakter değil de tamsayı (integer) olarak tanımlanmış olmasıdır. Bunun nedeni getchar ile elde edilen değerin ASCII kodu olmasıdır. Benzer şeyler putchar(c) için de söylenebilir. Şimdi yazdığımız programı daha kısa olarak tekrar yazalım:
main inte; while ((c — getchar ( )) ! EOF) putchar(c) ; |
Bu örnekte while çevrimi içinde hem karakter okunmakta, hem de karşılaştırma işlemi yerine getirilmektedir. (c = getchar( )) ifadesi parantez içindedir. Bunun nedeni işlem sırasının karışmaması içindir, çünkü
(c — getchar ( )! EOF)
ifadesinde getchar( ) != EOF mantıksal bir işlemdir ve ya 1 ya da 0 olması gerekir ve c de bu değeri alır.
KARAKTER SAYMA
Şimdi kaynak kitabımızın 16. sayfasında yer alan keyboard'dan okunan karakteri sayan programı inceleyelim: