Bu sayfadaki yazılar
Sayfanın metni
Sayfa 23
Bu ilk programda amacımızı POKE komulları ile gerçekleştiriyoruz. Önce ekran hafızasına, “A” harfinin kodunu yerleştiriyoruz, sonra da renk hafızasına gereken renk kodunu. Bu arada da, bir sayaç değişkeni ile kaç tane yazdırdığımızı kontrol ediyoruz. Zamanı ölçtüğümüzde 10.45 saniye elde ediyoruz. Çok can sıkıcı değil mi? Haydi, bir-iki değişiklik yapalım. 30 ve 40 numaralı satırları şöyle değiştirelim (TEST2):
30 Z-0:VİIDEO- 1024: RENK — 55296 40 POKE VİDEOM Z, 1: POKE RENK-4-Z,14
Burada yaptığımız, kullandığımız bazı sayıları, daha önceden değişkenlere yüklemek oldu. Zamanı ölçelim... Aman Tanrım! uçuyor! 7.25 saniye...
Tam 530.62 hız kazancımız var. TEST3 için, 30, 40 ve 60 numaralı satırları aşağıdaki gibi değiştirip, bu sefer tüm sayıları değişkenlere yükleyelim:
30 Z-0O:BİTİSDEGERİ — 374: VİDEO — 1024: RENK — 55296:HARF — 1: BASKI — 14 40 POKE VİDEO 4 Z,HARF: POKE RENK 4 Z,BASKI 60 İF Z-BİTİSDEGERİ THEN 1000
Ölçtüğümüzde, 6.03 saniye elde edeceğiz. TEST2'ye göre 16.82, TEST1'e göre 442.29 daha hızlı. Güzeeel... TEST4 için, verdiğimiz programa bakarak gereken değişiklikleri yapın. Burada, daha önce kullandığımız değişken adlarını iki karakter uzunluğa kısalttık. Sonuç: 5.6 saniye. TEST3'den 27.13, TEST1'den 446.41 daha hızlı. Hatta TEST5 için, bu adları daha da kısaltıp tek karakterli yapalım. Gereken değişiklikler:
30 Z-0:B-374:V— 1024: 14 40 POKE VA Z.H: POKE ZA 60 İF Z-B THEN 4000
Ölçtüğümüzde elde edeceğimiz 5.483 saniye, TEST4'ten 42.08 ve TEST1'den de 447,53 daha hızlı. Aklınıza gelir miydi, değişkenlerin uzunluğunun bu kadar önemli olacağı? Programı hemen hemen, 2 kat hızlandırdık. Ama durun, daha bitmedi! Daha da hızlanacak. Daha önce, İlk kurallarımız yazalım:
il! DİKKAT 1 H!
* Programda sık sık kullanılacak olan, özellikle döngülerin içinde yer alan sayıların programın başında değişkenlere yerleştirilmesi gerekir. * Bir değişkenin sahip olduğu değer, program içinde değişiyorsa bile, programın başında örneğin Z-0 gibi belirtilmesi faydalı olacaktır. * Programın başında, sayıları değişkenlere yerleştirirken, en çok kullanılacak sayıyı ilk önce yerleştirmek hız kazandıracaktır (Bilgisayar, o değişkeni daha çabuk bulabilecektir). * Şimdi TEST6'yı verildiği gibi yazın. Artık POKE komutu yerine, PRİNT komutunu kullanıyoruz. ve yeni bir rekor: 4 saniye. TEST5'e 427.04, TEST1/'e de 261.72 fark attık. Demek ki, PRİNT komutu POKE'dan hızlı çalışıyor. Ufak bir değişiklik yapalım. CHRS (65)'i önceden bir karakter değişkenine yükleyelim. Şu değişiklikleri yapın TEST7):
30 A$ -CHRS(65) 40 PRINTAS;
Zaman ölçümü ve 3.05 saniye ile bir hızlanma daha. TEST1 ise artık çok yavaş kaldı (470.81 fark var!!). Bu hızı, TEST8 ile azıcık da olsa artıracağız. Şu değişiklikleri yapın:
30 40 PRİNT “A”;
2.983 saniye ile bir hızlanma. Az ama önemli (TEST1'den hızlı). Toparlayalım...
!!! DİKKAT 2!!!
* Döngü halinde yazılması gereken yazıları POKE yerine, PRINT ile yazmak çok daha iyidir. * PRINT komutunun arkasından gelenlerin ya önceden yazı değişkenlerine yüklenmiş ya da tırnak içinde yazılmış olması gerekir. Gelelim TEST9'a... Küçücük bir değişiklik ve küçücük bir hızlanma:
60 IF GOTO 1000
THEN yerine GOTO koyduk ve program 2.96 saniye ile 40.77 daha hızlandı. Bir ufak değişiklik daha ve
60 40 Bu sırada, 70 numaralı satırı silebi-
lirsiniz, çünkü artık bir işe yaramıyor. Dolayısıyla programımızı bu ufak değişiklikle, bir satır kısaltmış olduk. Hızımız 2.93 saniye ile 41.01 daha arttı. TEST1'den ise 471.96 daha hızlıyız.
il! DİKKAT 3 Il!
* Döngülerde IF...GOTO komutu, komutundan daha hızlıdır. * Kontrollerde eşit olmama durumunun kontrol edilmesi, eğer programdan satır eksiltiyorsa yararlı olacaktır. Bu arada programlarla örnek vermeden bir diğer kural daha göstereceğiz, hazır laf IF...THEN komutundan açılmışken, Şöyle bir program parçası düşünün:
A-z1 AND B-2 AND C—3 THEN 999 110 GOTO 50
Bilgisayar, her defasında her üç şartı da kontrol edecektir ve ancak her üçü de doğru ise 999'a gidecektir. Diyelim ki, C'nin 3 olma ihtimali çok az, ama A=1 ve B=2 her zaman olabilir. Bu durumda C=3 olmadığı durumlarda da, diğer iki şart kontrol edilecek ve bu da boşuna zaman kaybı olacak. Ancak şöyle bir satır düşünün:
100 İF THEN IF THEN IF THEN 999
Bu durumda, sadece ve sadece C=3 olduğunda diğerleri kontrol edilecektir. Hatta A'nın kontrolü için de B=2 şartı aranacaktır. Bunun getireceği hızlanma herhalde tarafınızdan takdir olunur...
ll! DİKKAT 4 Ul!
* Birbirine AND ile bağlanmış birden fazla şarttan oluşan IF...THEN komutlarının, en ender olandan en sık olana doğru sıralanmış bir IF...THEN zincirine çevrilmesi gerekir. Şimdi sıra geldi TEST11'e... Artık biraz stil değiştirmenin zamanı geldi. Deminden beri kullandığımız GOTO komutlarının yerine, BASIC'in bize bahşettiği başka bir komutu, daha doğrusu komut ikilisini kullanacağız: FOR..NEXT Şimdi klavye başına geçin ve şu değişiklikleri yapın:
30 FORZ-1 TO 374 40 S0 NEXT Z
60 numaralı satırı da silebilirsiniz. Yeniden zaman ölçümü yaptığımızda yeni bir hızlanma daha görüyoruz: 1.1 saniye. TEST10'dan 462.45 ve TEST1'den de 489.47 daha hızlı.
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 22
Siz de mi Câ4'ün -hızından- (daha doğrusu yavaşlığından) şikâyetçisiniz? Hani, “BASIC'de program yazılmaz, yazılırsa çalıştığını görmeye ömür yetmez!” diyenlerden misiniz? Ama biz diyoruz ki: HAYIR, Cb4 HIZLIDIR. Şimdi de bazılarınızın, “Nayır, nolamaz, gene mi makina dili...” dediğini duyar gibiyiz. Ama yanılıyorsunuz. Bahsettiğimiz şey, bildiğimiz BASIC.
Şimdi size birkaç örnek programla birlikte, BASIC programlarınızı nasıl daha hızlı çalışacak biçimde yazacağınızı göstereceğiz. Örneğin, programlardan birinin çalışma süresini 10.45 saniyeden 0.96 saniyeye indireceğiz!! Evet, yanlış okumadınız; programı 590.81 hızlandıracağız!! Güzel değil mi? Ama bu kadar laf yeter, şimdi işbaşına... Ama önce anlatım sırasında izleyeceğimiz yöntemleri biraz görelim. Örneğin, programların çalışma zamanını nasıl ölçeceğiz? Verdiğimiz örnek programların 10 ve 1000 numaralı satırlarına bakarsanız, hepsinde aynı olduklarını göreceksiniz. 10 numaralı satırda, bilgisayarın içindeki saati sıfırlıyoruz. 1000 numaralı satırda ise, 18. ekran satırına o anki saat değerini saniye cinsinden yazıyoruz. Dolayısıyla 10 ve 1000 numaralı satırlar arasında kalan program kısmının kaç saniye sürdüğünü öğrenebiliyoruz. Öğreneceğimiz yöntemlerin bize olan faydalarını görmek için, önce bir program yazacağız ve bu programın çalışma süresini ölçeceğiz. Sonra aynı programın bazı komutlarını değiştirerek elde edeceğimiz zaman kazancını göreceğiz. Bu nedenle, ilk yazacağınız programı silmeyin. Böylece, sonradan gelen programları yeni baştan yazma zahmetinden kurtulacaksınız. Yeni program yazmanız gerektiğinde bu size belirtilecektir.
Tuna ERTEMALP
Bir diğer önemli nokta da, zaman Ölçümlerini “temiz” Commodore ile yapmanız gerektiği. Yani, bilgisayarınızı kapatıp açın ve bu yazıyı okuyup uygulamaya ondan sonra başlayın. Bunu altında yatan neden şu: Eğer Sİ-
MON'S BASIC, EX-BASIC, SUPERGRAP-HIK vs. gibi BASIC ilerletme programlarından yararlanmaya kalkışırsanız, ölçtüğünüz zaman değerleri uzayacaktır. Bu tip programlar ses, grafik vs. gibi işlemlerin dışında kalan programları yavaşlatırlar.
Bir de programı yazıp çalıştırdıktan sonra, bizim verdiğimiz zaman değerlerinden farklı sonuçlar elde ederseniz, sakın şaşırmayın. Eğer o programı birkaç kez çalıştırırsanız, çoğunlukla bizim verdiğimiz değeri elde ettiğinizi göreceksiniz. Ve son olarak... Yazımız ilerledikçe, elde edeceğimiz önemli bilgileri, DİK-KAT başlığı altında sırayla toparlayacağız. İsterseniz bu kuralları bir kâğıda yazıp, bilgisayarlarınızın yanına koyun!
Şimdi ilk programımıza başlayalım. Bu programımız oldukça basit bir iş yapacak. Amacımız, ekrana 374 tane A harfi bastırmak. Önce TEST1 programını yazın. Ama yazarken lütfen gördüğünüzün aynısını yazın; bütün komutları, aynı satır numaraları ile ve komutlar arasındaki boşluklarla birlikte.