C64 için Püf Noktaları
Özenle diskete veya kasete sakladığımız verileri kaybetmek çok üzücü olur. Veri dosyalarını kaset kullanıcıları her zaman, disket kullanıcıları da genellikle sequential dosyalar olarak saklarlar. Verilerle bir değişiklik yaptığımızda dosyayı yeni baştan yazmak gerekir. Disket kullanırken dosyayı yeni haliyle tekrar diskete yazmak için.
OPEN 2,8,2, dosya, SW”
komutunu kullanırız. Burada x yerine disket sürücü numarası olarak genelde 0 yazılır. SEQ dosya yerine veri dosyasının adı konur. Ancak bu komut veri dosyasını yeni haliyle saklanmasını sağlamakla birlikte bazen veri kaybına sebep olur. Veri kaybını yüzde yüz engellemek için ilk olarak eski dosyayı silip daha sonra yeniden yazmak gerekir. Aşağıdaki ufak program ilk olarak eski programı silip daha sonra yenisinin yazılmasını sağlar:
10 OPEN DOSYA”; CLOSE 15
20 OPEN DOSYA SW”
30 PRİNT 2, “VERİ”
40 CLOSE 2
OYUNLAR İÇİN KOLAYLIKLAR
Burada sözü oyunlar için çeşitli kolaylıklar gönderen arkadaşlarımıza bırakıyoruz. Kemal Serdar Dinç adlı arkadaşımız bize birçok oyun için POKE komutu göndermiş, kendisine teşekkür ediyoruz. Bulduğunuz oyun kolaylıklarını diğer Commodore'cu arkadaşlarla paylaşmak isterseniz bize gönderin: Commodore Dergisi Oyunlar için kolaylıklar köşesi Silahhane Cad. Ralli Apt. 59/3 80200 Teşvikiye-İstanbul Bu POKE komutlarını oyunu yükledikten sonra yazıp RUN komutu verin.
Kaktüs
POKE 4565,255
Kungfu Master
POKE 39613,189:POKE 4566,176
Laser Strike
Poke 16475,173
Oryles mine
POKE 9251,44
Blue moon .
POKE 7316,x
Defender
POKE 3005,5:POKE 2814,255
Donkey Kong
POKE 12118,234
Who Dares Wins Il
POKE 15697,173:POKE 5209,255:POKE 5012,255
POKE 32318,165
Zorro
POKE 5423,127:POKE 6431,125
Bomb Jack
POKE 6819,173
Bruce lee
POKE 5423,127:POKE 6434,125
POKE 5472,99
Camels
POKE 11639,x
Buck Rogers
POKE 8825,36:POKE 2490,9
Falcon Patrol
POKE 9564,234:POKE 9596,234
Lemons
POKE 2547,x
Wizard of war
POKE 10430,x:POKE 10435,x
POKE 16017,44
Yie are Kungfu
POKE 41603,208:POKE 36445,173
Ghost and Goblins
POKE 4070,170:POKE 4170,10 POKE 40315,221:POKE 40316,248
POKE 2198,1 Pago Joe
Flack POKE 18486,16:POKE 2779,36
POKE 478,36 | Popeye |
Ghostbusters POKE 2405,255:2506,255
POKE 22014,19:POKE 24440,40 Rambo
Choplifler — POKE 6099,234:POKE 6160,243:POKE 6101,234
POKE 8011,73 POKE 6099,175:POKE 4820,173:POKE 6099,173
Drelbs Surviver di
POKE 8813,255:POKE 10445,250 POKE 19523,254:POKE 19528,254:POKE 19563,255
POKE 19523,200
POKE 14652,25 Şimdi bazı arkadaşlarımızın oyunlar hakkında sor-
Cauldron 5 dukları sorulara cevap verelim:
Ankara'dan Egemen Aker Superstar Soccer hakkında şu soruları soruyor: (1) Bir sezonda kaç maç olması nasıl belirleniyor? Oyun başladıktan sonra karşımıza çeşitli seçenekler çıkıyor. İlk olarak bu seçeneklerden sağ tarafta en altta bulunan NEW LEAGUE'i seçin. Bundan sonra sizden takımınıza bir isim vermeniz istenecek. İstediğiniz ismi yazın. Karşımıza çıkan seçeneklerden TERRITORY, maçların, Amerika'da mı İngiltere'de mi oynandığını belirliyor. Diğer seçenek bir sezonda 15 maç veya 7 maç arasında seçim yapılmasını sağlıyor. Bu seçimlerin tamamlanmasıyla birlikte tekrar ana menüye dönüyoruz. (2) Defans 1, Defans 2, Covr 1, Covr 2 ne gibi işlevlere sahip? Maç başlamadan evvel takımın oyun tarzını belirlemek gerekiyor. Ancak takım menajerliğini bilgisayara bıraktıysanız bu seçimi bilgisayar yapar. Takımın oyun tarzı için mesela Defans 1 seçip diğer oyuncuların defansif bir oyun tarzı benimsemelerini sağlarsınız. (3) Oyuncu transferi nasıl yapılır? Ana menüde sağ taraftaki seçeneklerden ikincisi olan A PLAYER TRADE'i seçin. Karşınıza çıkan seçeneklerden TRY TRADE'i seçin. Ancak oyuncu alışverişi yapabilmek için TRADE POINT'inizin olması gerekir. (4) Takımın performansı, aldığı neticeler, attığı yediği golleri nasıl öğrenebiliriz? Ana menüden sol taraftaki GAME SCORES'u seçerek bütün sorulara cevap bulabilirsiniz. (5) Kupalardaki başarılar, ligin kaçıncı olarak bitirildiği nasıl öğrenilir? Ana menüden sol taraftaki A TEAM HISTORY'i seçin. Karşınıza takımınızın çeşitli senelerde elde ettiği dereceler bir tablo halinde gelecek. BASIC PROGRAMLAR
Karakter veya sayısal verilerin genellikle sıralanması gerekir. Sıralama işlemini gerçekleştirecek çeşitli yöntemler var. Bunlardan bir tanesi de BUBBLE SORT. İlk olarak bu sıralama yönteminin hangi mantıkla çalıştığına bakalım. Birbirini izleyen iki eleman birbiriyle karşılaştırılır. Karşılaştırılan çift sırasızsa dizideki yerleri değiştirilir. Dizideki karşılaştırma sona erdiğinde eğer elemanlar arasında yer değiştirme yapılmışsa işleme yeniden başlanır. Eğer hiçbir değiştirme yapılmamışsa dizi sıralanmış demektir. Şimdi anlattığımız yönteme bir örnek verelim. Bu yöntemi kullanarak aşağıdaki kelimeleri sıralayalım: Ani ağır evlat diş menü tır düş hür Karşılaştırmaya dizinin her iki yönünden de başlayabiliriz. Örneğimizde karşılaştırmayı soldan sağa doğru yapacağız. İlk olarak Ani ve ağır kelimelerini karşılaştırıyoruz. İki kelimenin sıralanışı doğru. Hiçbir değişiklik yapmadan ağır ve evlat kelimelerinin karşılaştırmasına geçiyoruz. Bu iki kelimede sıralı olduğundan değişiklik yapmıyoruz. Ancak diş ve evlat kelimeleri sırasız vaziyette olduklarından dizide bu iki kelimenin yerlerini değiştiriyoruz. Sıra evlat ve menü kelimelerine geliyor. (Bir evvelki karşılaştırmada evlat kelimesi yer değiştirmişti). Bu iki kelimede sıralı vaziyette. İlk turun sonunda dizimiz aşağıdaki hale geliyor: Ani ağır diş evlat menü düş hür tır İlk turun sonunda tır kelimesi en üste çıktı. Bir sonraki turda menü kelimesi sıralamada gelmesi gereken yere gelecek. Şimdi bu sıralama yönteminin dezavantajlarını inceleyelim. En basit sıralama metodları N üstü metodları olarak sınıflandırılır. Buna bir örnek verelim: Eğer dizimizde 10 eleman varsa 9 * 9 = 81 karşılaştırma yapmak zorunda kalırız. Ancak eleman sayımız 1000 taneyse 999 * 999 = 998001 karşılaştırma yapmamız gerekir. Bu sayıda karşılaştırma çok uzun zaman alacağından bu tür yöntem işimizi olumsuz yönde etkiler. Bu sorunu halletmek için HEAPSORT gibi başka sıralama yöntemleri geliştirilmiş. Bu yöntemlerde artan eleman sayısına karşın karşılaştırma sayısı daha az artıyor. Karşılaştırma sayısını bize N LOG N formülü veriyor. Mesela 10 elemanımız varsa sadece 10 karşılaştırma yapmamız gerekiyor. Bubble sort yönteminin bir başka dezavantajı da verileri fazlaca hareket ettirmesidir. Karşılaştırılan çiftler sıralı değilse yer değiştiriliyor. Yer değiştirme işlemi hem zaman kaybına, hem de Garbage Collection adını verdiğimiz, bilgisayarın uzun süre beklemesine sebep olan soruna yol açıyor. Ancak bu sorunu indeksleme yöntemi ile gidereceğiz. İndeksleme yöntemini kısaca açıklayalım. Dizideki elemanların yerlerini değiştirmek yerine bu elemanların yerini gösteren indekslerin yerlerini değiştireceğiz. Eğer verilerimiz gruplar halinde düzenlenmişse, mesela tarih, hesap numarası ve tutar şeklinde veri alanlarımız varsa, bu veri alanlarını gösteren indeksin yerini değiştirmek daha kolay olacaktır.
Şimdiye kadar bubble sort yönteminin dezavantajlarından bahsettik. Ancak bu yöntem bazı yönlerden çok kullanışlı. Eğer sıralamanın yapılacağı dizideki elemanlar hemen hemen sıralı durumdaysa sıralama işlemi çok çabuk biter.
En önemli avantajlardan birisi sıralama devam ederken ilk sıralanmış elemanları kullanıcıya verebilmektir. Birçok sıralama yönteminde sıralama bitene kadar kullanıcı beklemek zorundadır. Ancak bubble sort yönteminde sıralama işleminin başlaması ile birlikte derhal sonuç almaya başlarız.
Şimdi örneğimizdeki kelimeleri kullanarak bubble sort'un nasıl çalıştığını inceleyelim: ANİ AĞIR EVLAT DİŞ MENÜ TIR DÜŞ HÜR Sıralamaya başlamadan evvel dizinin en altında ANİ kelimesi en üstünde HÜR kelimesi yer alıyor. Sıralama işleminde karşılaştırmayı üstten alta veya alttan üste doğru yapabiliriz. Ancak üstten alta karşılaştırma yapmak her seferinde en azından bir elemanı sonuç olarak ortaya çıkaracağından tercih edilebilir. Karşılaştırılan elemanlar arasında değişiklik yapıldığında yukarı çıkan elemanları işaretleyeceğiz. (Örneğimizde hür kelimesi hariç diğer kelimeleri büyük harfle yazarak işaretledik). Bir sonraki turda sadece yukarı doğru çıkan (işaretlenmiş kelimeler) elemanları karşılaştırmak yeterli olacak. Sıralama işlemine ilk başladığımızda en üstte bulunan hür kelimesi hariç tüm elemanları işaretliyoruz. Yukarıdan aşağıya doğru ilk olarak düş ve hür elemanlarını karşılaştırıyoruz. Bu iki eleman sıralı olduğundan bir sonraki karşılaştırmaya geçiyoruz. Tır ve düş elemanları sırasız olduğundan yerleri değişiyor. TIR kelimesi yukarı çıktığından bu kelimeyi işaretliyoruz (büyük harfle gösteriliyor). İlk turun sonunda dizinin durumu: ani ağır diş EVLAT düş MENÜ TIR hür evlat, menü ve tır kelimeleri yukarı doğru çıktıklarından işaretlendiler. Bir sonraki turda sadece bu üç kelime yukarıdaki kelimelerle karşılaştırılacaklar. EVLAT kelimesini de bir sonraki tur için en alt nokta olarak işaretleyebiliriz. Bu noktadan daha aşağı karşılaştırma yapmaya gerek yok. Ani, ağır ve diş kelimelerini kullanıcıya sonuç olarak verebiliriz çünkü dizi buraya kadar sıralandı. İkinci tura başladığımızda ilk olarak TIR ve hür kelimelerinin yerlerini değiştiriyoruz. Menü ve hür kelimeleri de yer değiştiriyor. Düş kelimesi işaretlenmediğinden hür kelimesiyle karşılaştırılmıyor. EVLAT ve düş kelimeleri sırasız olduklarından yer değiştiriyorlar. İkinci turun sonunda dizimiz aşağıdaki hale geliyor: ani ağır diş düş EVLAT hür MENÜ tır Bu noktada dizimiz sıralandı ancak biz bunu üçüncü turda anlıyoruz. Program döküm ekindeki program normal bubble sort programının geliştirilmişidir. Buna rağmen sıralama N log N kuralına göre çalışıyor. Ancak yeni eklemelerle bu yöntemin eskisine göre çok hızlandığını söyleyebiliriz.
Şimdi programı biraz açıklayalım: İlk olarak dizideki eleman sayısı soruluyor. Daha sonra dizideki elemanları giriyoruz. Girilen veriler N$ adlı diziye yerleştiriliyor. Verileri kullanıcıdan almak yerine bir dosyadan da okuyabilirsiniz. 180 numaralı satırda sıralama işlemine başlıyoruz. J değişkeninde şimdiye kadar sıralaması bitmiş ve sonuç olarak kullanıcıya iletilmiş eleman sayısı saklanıyor. Bu değişkenin ilk değeri sıfır. 190-220 satırları arasında indeks dizisi hazırlanıyor. Sıralamaya başlamadan evvel indeks dizisindeki elemanların değeri çok basit: ilk eleman 1, ikinci eleman 2, üçüncü eleman 3.
İndeks dizisinde herhangi bir verinin bir üstteki veriyle kontrol edilip edilmemesi gerektiğini de saklıyoruz. Eğer indeks dizisindeki değer eksi işaretliyse, işaret ettiği elemanın bir üstteki elemanla karşılaştırılması gerekir. İlk turda tüm elemanların karşılaştırılmasını istediğimizden son eleman hariç diğerlerine eksi işaret veriyoruz. J8 değişkeninde dizide karşılaştırmanın yapılacağı en alt noktayı saklıyoruz. İlk turda tüm dizide karşılaştırma yapacağımızdan bu değişkenin ilk değeri birdir. 250-330 arasındaki satırlarda dizideki taramayı yapıyoruz. İki elemanın karşılaştırılması için X2 değişkeninin negatif olması gerekiyor. Eğer X2 değişkeni pozitifse karşılaştırma yapmadan 330 numaralı satırdaki NEXT komutuna atlıyoruz. Eğer J2 ve J3 değişkenlerinin işaret ettiği elemanlar sırasızsa bunlara karşılık gelen indekslerin yerini değiştirip yukarı çıkanı eksi olarak işaretliyoruz. Bir sonraki tura başlamadan evvel 360 numaralı satırda sıralanmış elemanı ekrana yazıyoruz. Bu kısa programı sıralama gerektiren programlarınızda kullanarak zamandan kazanabilirsiniz. Şimdilik hoşçakalın.