BASIC Öğreniyoruz

Bizim mantığımız, çağrışımlarımız ve içgüdülerimizle beslenen çok ince ve zengin bir mantıktır.

İskender SAVAŞIR daha karmaşık ve ciddi programlar yazmaya geçmek için ellerinizin kaşınmakta olduğunun farkındayım. Bu şartlar altında sadece iki komut, INPUT ve PRINT komutları üzerinde bu kadar durmamız, okurlarımızın sabrını kaçırmış olabilir. Ama ne yapalım ki, bu iki komut Commodore 64 Basic'inin dört temel köşe taşından ikisini oluşturuyor (diğer ikisi daha ileride ayrıntılı olarak inceleyeceğimiz PEEK ve POKE komutları). Özellikle PRINT komutunu, Commodore 64 Programcının El Kitabı'nda da belirtildiği gibi, Basic'in içinde yeralmakla birlikte, kendisi başlıbaşına bir mini bilgisayar dili oluşturan bir komut olarak düşünebiliriz.

PRINT Komutu ve Kontrol Karakterleri

Şimdiye kadar PRINT komutu ile birlikte iki ayrı türden değerin yazdırılabileceğini gördük: Sayısal değerler ve karakterler (ya da karakterlerden oluşan karakter zincirleri). Aralarındaki fark karakterlerin tırnak işaretleri içerisinde girilmesi, sayısal değerlerin ise doğrudan doğruya PRINT komutunun ardından yazılması idi. Ama PRINT komutunun asıl gücü kontrol karakterleri (ya da tuşları) ile birlikte kullanılabilmesinden ileri gelmektedir. Nedir kontrol karakterleri ya da kontrol tuşları?

Kursör Hareketleri

Bilgisayar klavyesinin üzerindeki tuşların çoğunun üzerinde bildiğimiz harf ve rakamlar yeralmakta.

Ancak bazı tuşların üzerinde, ilk bakışta esrarengiz görünebilecek bazı harf dizileri yeralıyor. Bu tuşların işlevi kursörünüzün hareketlerini ya da ekranın diğer bazı özelliklerini kontrol etmek (*). Bunların en basiti kuşkusuz RETURN ve SHIFT tuşları. Birincisinin işlevi herhangi bir daktilodaki satır atlama tuşunun işlevine benziyor. İkincisi ise büyük harf ya da küçük harf seçeneklerini seçmenizi sağlıyor. Kısaca diğerlerini de özetleyelim. Üzerinde CRSR yazan iki tuş, kursörünüzün sağa-sola ve yukarı-aşağı hareketlerini kontrol ediyor. CLR/HOME tuşuna basıldığında kursör ekrandaki en üst sol köşeye gidiyor. Bu tuşu SHIFT tuşu ile birlikte kullandığımız takdirde ise, kursör sol üst köşeye gitmekle kalmaz, aynı zamanda ekran da boşalır (temizlenir).

Dipnot: Şu ekran üzerinde yanıp sönen küçük işaretçiği nasıl adlandırma meselesi, zaten karmakarışık olan Türkçe bilgisayar terminolojisinin en karmakarışık alanı... Kullanım kılavuzu ve Programcı El Kitabı'nda bu işaret “Takipçi” diye adlandırılıyor (neyi takip ediyorsa). TDK Bileşim Sözlüğü ve onu izleyen Bilgisayar Ansiklopedisi ise “İmleç” terimini kullanıyor. Bu dergiye yazanların çoğu ise “kursor”, “kursör” ya da “cursor” terimini tercih ediyor.

Bilgisayarınızı etkileşimli tarzda kullanırken bu saydığımız işlevlerden herhangi birini, sözkonusu tuşlardan birine basarak yerine getirmeniz mümkün. Ama ya bu işlevlerden herhangi birinin programın çalışması esnasında yerine gelmesini isterseniz, o zaman ne olacak? İşte bu tuşları PRINT komutu ile birlikte kullanmak, programınızın bu işlevleri yerine getirmesini sağlıyor. Bunu örneklemek için önce tek satırlık bir program yazalım. Önce etkileşimli tarzdan çıkmak için bir satır numarası yazın (satır numarası sürece, etkileşimli tarzda kalıyoruz). Sonra PRINT yazıp bir tırnak işareti açın ve SHIFT ve CLR/HOME tuşlarına birden basın:

40 PRİNT “SHİFT CLR/HOME”

Bu satırı yazınca tırnak içinde SHIFT ve CLR/HOME tarafına değil, işaretine rastlayacaksınız. Daha sonra RUN yazarak programı çalıştırın. Ekranın boşaldığını ve kursörün ekranın sol üst köşesine çıktığını göreceksiniz. O halde genel kuralı şu şekilde yazabiliriz. PRINT komutundan sonra tırnak işareti açıp, kontrol tuşlarından herhangi birine basarsanız, ekran üzerinde tuhaf bir

59 işaret göreceksiniz (işaretlerin listesi aşağıda verilmiştir). Daha sonra programı çalıştırdığınızda programın o noktasında, sözkonusu kontrol tuşunun işlevi yerine getirilecektir.

labilecek üçüncü bir kontrol karakter türü, renk kontrol komutlarıdır. Bunları kullanarak çıktınızın alacağı rengi değiştirebilirsiniz. Renk kontrol karakterleri, tırnak içinde aynı anda CTRL ya da

Tuş

İT ersRr

GÖRÜNTÜ

Negatif Karakterler

PRINT komutu ile kullanabileceğiniz ikinci bir kontrol türü RVS modu (RVS, İngilizce “reverse” kelimesinin harflerinden türetilmiş bir kısaltma) diye bilinen, negatif karakterler yazdırma imkânı. Şimdi önce etkileşimli tarzda iken, aynı anda CTRL ve 9 tuşlarına basın. Bundan sonra yazdıklarınızın ekran üzerinde negatifinin (tersinin) göründüğünü göreceksiniz. Düz yazıya geçmek için, aynı anda CTRL ve 0 tuşlarına basmanız gerekiyor. İşte bu karakterler de diğer karakterler gibi PRINT komutundan sonra ve tırnak işaretleri içerisinde kullanılabilir. Örneğin MERHABA kelimesini negatif olarak yazdırmak için, tek satırlı şu programı yazabilirsiniz:

40 PRİNT “CTRL 9MERHABACIRL 0”

CTRL ve 9 tuşlarına bastığınızda ekranda negatif basılmış bir R harfi, CTRL ve 0 tuşlarına bastığınızda ise yine negatif basılmış tuhaf bir grafik karakter göreceksiniz.

Renk Kontrolü

Commodore (ekranın en alt sol köşesindeki tuş) tuşu ile rakam tuşlarından birine basarak elde edilir. Bunu yaptığınızda ekranda göreceğiniz görüntü ve elde edeceğiniz renk aşağıdaki listede verilmiştir:

Kontrol Karakterleri

ve Sayısal Değerler:

Buraya kadar kontrol karakterlerini, karakter zincirlerinin bilgiyazımını yaparken, özel bazı etkiler elde etmek için kullandık. Bu sebepsiz değildi. Gerek karakter zincirlerinin, gerekse kontrol karakterlerinin tırnak içinde yazılması gereği, örneklemede belli bir kolaylık sağlıyor. Ama bu demek değildir ki, aynı etkiler sayısal değerlerin bilgiyazımında da elde edilemez. Bu takdirde yapmanız gereken tek değişiklik, önce tırnağı açıp kontrol karakterini yazdıktan sonra tırnağı tekrar kapamanız ve sayısal değerleri ancak bundan sonra yazmanız. Örneğin, 40 PRINT “CTRL 5”

satırı, 2*3 işleminin sonucunu, yani 6 rakamını, eflatun renkte yazdıracaktır.

PRINT komutu ile birlikte kullanı-

TUŞ RENK GÖRÜNTÜSÜ | Siyah HE Beyaz A Kırmızı («| Turkuvaz hi B TE Yeşil (7 | Mavi m co Sarı Turuncu m Kahverengi DA Açık kırmızı Do Ba © B Gri 2 Bö Açık Yeşil BI İCe| Açık mavi Gri 3 "

Diğer Kontrol

Karakterleri

Buraya kadar incelediğimiz kontrol karakterlerinin ortak özelliği, hepsinin PRINT komutundan sonra tırnak içerisinde kullanılması gerekliliğiydi. Bu yüzden bu kontrol karakterlerinin kullanılması, bazen Quote Mode (Alıntı Modu) olarak da anılır. Şimdi inceleyeceğimiz kontrol karakterlerinin kullanılması ise klavyenizdeki INST/DEL tuşuna bağlıdır. Bunların kullanılması daha önce gördüklerimiz kadar kolay olmadığı gibi, işlevleri de diğerleri kadar hoş ve

“şık” değildir. Bildiğiniz gibi normal olarak INST/DEL tuşuna bastığınızda, kursör durduğu yerden bir önceki karakterin üzerine giderek onun silinmesini sağlar. Bu tuşa SHIFT tuşu ile birlikte basıldığında ise, kursörün üzerinde bulunduğu karakter bir sağa kayar ve onun yerine bir boşluk açılır. (Bu, normal olarak, araya bir karakter girmenizi sağlar.) Ancak bir PRINT satırında INST tuşu ile böyle bir boşluk açıldığı takdirde, bu boşluk otomatikman tırnak içindeymiş gibi işlem görür. Örneğin,

40 PRİNT “MERHABA ARKADAŞLAR”

satırını yazdığınızı düşünelim. Ancak MERHABA ve ARKADAŞLAR'ı ayrı ayrı satırlara yazdırmak istiyorsunuz. Bunun için önce kursörü MERHABA ile ARKADAŞLAR'ın arasındaki boşluğa getirin ve INST (SHIFT INST/DEL) tuşuna basarak burada bir boşluk daha açın ve aşağı CRSR tuşuna basın. Kursör aşağı burada bir ters Q harfi basılacaktır. Programı çalıştırdığınızda ise, program bu noktaya geldiğinde CRSR aşağı işlevi yerine getirilecek, dolayısıyla ARKADAŞLAR kelimesi bir aşağı satırda yazılacaktır. Bu tuşun daha ilginç bir işlevi ise, DEL işlevinden programlarda yararlanmanıza imkân vermesidir. INST ile açtığınız bir boşluğun üzerinde yeniden DEL tuşuna basarsanız (yani SHIFT tuşuna basıp INST/DEL tuşuna basarsanız), ters basılmış bir T harfi görürsünüz. Bu ise programın içinde DEL işlevinden yararlanmanızı, yani önce yazdığınız şeyi sonra silmenizi sağlar. Bu tür yaz/boz çok yararlı bir işlem olmadığından üzerinde fazla durmayacağız.

Çıktıların Düzeni

Bilgisayar dilinde bir programdan elde edilen sonuçlara çıktı dendiğini biliyorsunuz. Şimdi bir soru: PRINT komutu çıktıları nereye yazdırır? Soruyu tuhaf bulacaksınız. Elbette ekrana ya da kağıt üzerine. (Biz şimdilik ekran üzerine yazımları görüyoruz. Kağıt üzerine yazıma sonra geleceğiz.) Bu kuşkusuz doğru ama, arada bir adım var. PRINT komutunun kendisinin tanıdığı mantıki (ya da hayali) bir satırı vardır. Çıktıları önce bu satırın üzerinde yerleştirir; daha sonra buradan ekrana ya da kağıda gösterir. Bu mantıki satır 10'ar karakterlik 8 bölgeden oluşur. Aynı PRINT komutu ile birden fazla çıktı yazdırmak mümkündür. Bu çıktılar noktalı virgül ile ayrıldığında ardarda yazılır; virgül (,) ile ayrıldıklarında ise bir sonraki bölgeden başlayarak yazılır. Örneğin,

40 PRİNT “BİRİN YARISI”, 1/2;“DİR”

satırı, “BİRİN YARISI” ile 1/2 arasında 8 karakterlik bir boşluk bırakır. Çünkü “BİRİN YARISI” 12 karakterden oluşmaktadır (boşlukların da birer karakter olarak sayıldığını asla unutmayın) ve dolayısıyla ilk iki bölgede yazılmıştır (yani mantıki satırın 12. karakterinde biter). Üçüncü bölge ise 20. karakterden başlamaktadır. Arada virgül (,) olduğu için 1/2 buradan yazılmaya başlayacaktır. İkinci çıktı ile üçüncü çıktı ise noktalı virgülle ayrılmış olduklarından ardarda yazılıyor. Tabii ille de bu seçeneklere mahkûm değilsiniz. Yukarıda anlattığımız kontrol karakterlerinden yararlanarak daha ara çözümler de kullanabilirsiniz. Ancak virgüller ve noktalı virgüller, çıktı olarak tablo istendiğinde çok faydalı olur:

40 PRİNT
20 PRİNT 4,4*4,41*4*4
30 PRİNT
40 PRİNT 3.3*3,3*3*3
50 PRİNT 4,4*4,4*4'4
60 END
RUN
DEĞER KARESİ KÜBÜ
4 4 4
2 4 8
3 9 27
4 16 64

İkiden fazla PRINT elemanı virgül (,) ile ayrıldığında, aynı satıra yazılıp yazılmayacağı, bir satırın kaç tane önceden tespit edilmiş yazım alanına bölündüğüne bağlıdır. Mesela, ekranda bir satırın azami 32 karakter olabileceğini ve yazım alanlarının da 16 karakter olarak tespit edilmiş olduğunu farkedelim. O takdirde PRINT 10,20,30 gibi bir komutun çıktısı şöyle olacaktır:

410 20
30

Ancak çıktılar arasında boşluk bırakırken, önceden tespit edilmiş olanlara bağlı kalmak istemiyorsanız, o zaman TAB(x) komutunu kullanmanız icabeder:

PRİNT TAB(410); A
TAB(X) sadece PRINT komutu ile

birlikte kullanılabilir ve kendisinden sonra gelen değişkenin han-

gi sütuna yazılacağını tayin eder. Yukardaki misalde, A değişkenin değeri satırın 10. sütununa yazılır. TAB(x) komutunda, x'in değeri olarak, daha önce zaten üzerine yazılmış bir sütunun numarasını verirseniz, o zaman çıktı bir sonraki satırın aynı sütununa yazılacaktır:

40 PRİNT TAB(27):
20 END
RUN

Yukarıdaki örnekte, 31. sütuna A harfi yazılmış olduğu için, yazıcı ikinci çıktıyı, yani 1 rakamını, ikinci satırın 34. sütununa yazdı. Eğer bir PRINT satırı noktalı virgül (;) ile bitiyorsa, onu takip eden ikinci PRINT komutunun gerekleri de aynı satıra yazılır. Mesela şu iki program,

40 PRINT “3 KERE 3-”;3*3
20 END

ve

O PRİNT “3 KERE 3-”;
45 PRİNT 3*3
20 END

aynı çıktıyı verir: 3 KERE 3=9

Son olarak PRINT komutunu hiçbir ifadenin takip etmediği bir satırın, çıktıda boş bir satırın yazılmasına, yani bir satır atlanmasına yol açacağını belirtelim:

40 PRİNT “BU SATIRDAN SONRA”
20 PRİNT
30 PRİNT “BİR SATIR BOS KALACAK”
RUN

BU SATIRDAN SONRA

BİR SATIR BOŞ KALACAK ASCII Kodu

Şimdi bu noktada bir an duralım. Daha önce bilgisayara verilen tüm verilerin elektrik sinyalleri tarafından temsil edilebilir bir biçimde olması gerektiğini söylemiştik. Kısaca da bu gerekliliği ikili sayı sisteminin karşıladığını söylemiştik. Oysa şimdi bilgisayara klavye aracılığıyla, üç farklı türden bilgi (harfsayısal -yani karakterler-, sayısal ve kontrol) iletebileceğimizi, PRINT komutlarında üç farklı türden değişken kullanabileceğimizi söylüyoruz. İkili sayı sisteminde olmayan bu bilgileri bilgisayar nasıl okuyacak? Haydi ilişkisini bir yana bıraktık sayısal, dahi olmayan karakter ve kontrol karakterleri bilgisayar içerisinde nasıl temin edilecek? Kısaca tekrarlayalım: Tüm sayısal cihazlar gibi bir bilgisayar da yalnızca 0 ve 1 simgelerini ayırdedebilir. Bu sebeple veriler (sözcükler ya da sayılar) bilgisayara girmeden önce bir sıfırlar ya da birler dizisine çevrilir. Bilgisayarın içindeki verilere ulaşabilmek içinse bunun tersi işlemi yapmak, yani sıfırlar ve birlerden oluşan bir diziyi harflere ya da 10 tabanlı bir sayıya çevirmek gerekir. Bu çevirme işlemlerinden birincisine kodlama (şifreleme), ikincisine de kod çözme (şifre çözme) denir. Kodlamanın en basit şekli 10 tabanlı bir sayıyı 2 tabanlı eşdeğerine çevirmektir. Bu yeni biçimde sayı 0 ve 1 simgeleriyle ifade edilir. Alfabenin harfleri için böyle “matematiksel” bir kodlama yoktur. Tek çare tamamıyla isteğe bağlı olabilecek bir kodlama cetveli hazırlayıp harflerin (ya da başka simgelerin) birler ve sıfırlarla gösteriliş biçimini belirlemektir. Bu gösteriliş biçimine KOD denir. Böylece her harfin kendi kodu bulunur ve bilgisayar kodlanmış harfi tanır. Bilgisayarın verileri dışarıya vermesi için, iki tabanlı bilgileri kullanıcının anlayacağı yazı veya çizi biçimine dönüştürecek devrelere ihtiyaç vardır. Gelişigüzel kodlamalar kullanışlı değildir, çünkü çeviri çizelgeleri farklı olursa bilgisayarlar veri değiş tokuşu yapamazlar, yapsalar da kodların birbirine çevirisi için karmaşık metodlara ihtiyaç vardır. Bundan başka gelişigüzel kodlamada bir verinin doğru çevrilip çevrilmediğini, hatasız olup olmadığını kontrol etmek mümkün olmaz. Bu sebeplerden ötürü üreticiler standart bir kodu, ASCII kod kullanıyorlar. ASCII “American Standard Code for Information Interchange” sözcüklerinin kısaltmasıdır. Bu koda göre bir simge 7 bitle gösterilir, dolayısıyla 128 simge kodlanabilir (0-127'ye kadar). ASCII kodları, her birinin farklı işlevi olan üç gruba ayrılır:

— Kontrol karakterleri — Simgeler ve sayılar — Harfler

Kontrol Karakterleri

Kontrol karakterlerinin ekran kontrolüyle ilgili olan bir kısmını zaten yukarıda görmüştük. Daha genel olarak kontrol karakter kodlarını, alfabede karşılıkları olmayan ve komutların iletiminde kullanılan kodlardır, diye tanımlayabiliriz. Bilgisayarla onlara bağlı çevresel birimlerin arasındaki veri değişimi sırasında, çevresel birimlerin yönlendirilmesi için birtakım komutlar gereklidir. Misal olarak bilgisayarın yalnızca ekrana değil, bir bilgiyazara da satır ilerleme ve satır hareketi için komut vermesi gerekir. Yazma komut sırası şöyledir:

1/ Harf basım biriminin birinci satırın başında hazır olması 2/ İlk satırın yazılması 3/ Harf basım birimine “sayfanın sol kenarına git!” komutunun verilmesi 4/ Kağıdın bir satır ilerlemesi için komut 5/ İkinci satırın yazılması Çevrim yeniden (3) ile başlar ve böyle sürer.

1., 3. ve 4. adımlarda iletilen kodlar, bilgiyazarın kontrolünü sağladıklarından, kontrol işaretleri olarak adlandırılır. Varışlarında yorumlanır ve kontrolü sağlayan devrelere ulaştırılırlar. Kontrol işaretlerinin çoğu, bilgisayarlar arası veri değiş tokuşu gibi özel gayelerle kullanılır. Kullanıcı programlarında yer almazlar. Uygulamada sık kullanılan bazı kodlar aşağıda gösterilmiştir. Aşağıdaki çizelgede daha iyi anlaşılmaları için, ASCII kodlarının Türkçe anlamları da yer alıyor, ancak kodlar normal olarak İngilizce adları ile isimlendirilir. Kısaltılmış simgeleri de İngilizce isimlerinden türetilmiştir. Bu kodları

Bu iki koşul, bir çizim üzerinde, aşağıdaki gibi gösterilebilir: Olayı özetlemeye A anında başlıyoruz. A ile B arasında (diyelim ki bir saniye süresince) sinyal ne demek? Değişik sayılama sistemleri içinde, mantığımıza en uygun olanı konumsal sistemdir. Bu sistemde her rakamın, bulunduğu konuma

Cİ lin düzeyi tabanda (yani 0 değerinde) kalır (0 düzeyi, a harfiyle de belirtilebilir). B ve C arasında (çok kısa bir sürede) 0 düzeyinden 1 düzeyine geçilir, 1 düzeyi genelde y harfiyle gösterilir. y düzeyi C-D boyunca sürer. D- E aralığında (yine çok kısa bir sürede) y düzeyinden a düzeyine geçilir. 0 düzeyi durumu, sonsuza sürebilir. Bu çevrim:

"DARBENİN SÜRESİ"

DARBENİN GENİŞLİĞİ

Lİ

- > ZAMAN

— a düzeyi —y düzeyi — a düzeyi darbe adını alır.

İşte bilgisayarda bütün sayıların 1'er ve 0'lar dizisi halinde, daha da doğrusu iki ve yalnızca iki simgeyle gösterilme gereği buradan kaynaklanmaktadır. Çünkü bilgisayar yalnızca iki durum tanıyabilir. Öyle bir simgesel sisteme ihtiyacımız var ki, sistemin her simgesine bağlı olarak bilgisayarı oluşturan bileşenler (devreler) alabilecekleri iki durumdan birini alsın. Tabi aynı zamanda bu sistemle aritmetik bir mantık işlemleri de yapabilmemiz gerekiyor. Sözkonusu sistemin adının “iki tabanlı sayı sistemi” (binary code) olduğunu duymuşsunuzdur. Peki ne demek bu "iki tabanlı sayı sistemi?”

Sayılama Tabanları

İki tabanlı sayı sistemi, adından da anlaşılabileceği gibi her şeyden önce bir sayılama sistemidir ve tabanı 2 olan bir sayılama sistemidir. (Bu laflar ilk bakışta o kadar totolojik olmayabilir. Biraz sabredin.) Bir sayılama sistemi ile ne kastediyoruz? Sayılama sistemlerinin tabanlarına bağlı bir ağırlığı ya da değeri vardır. 5 sayısını yazarken 5 birim kastediyoruz. Eğer 5 simgesinin konumunu değiştirecek olursak, 5 tane onluk (50), 5 tane yüzlük (500) vb. kastedmiş oluruz. Öyleyse 5 simgesi, bulunduğu konuma göre bir değer almaktadır. Konum ile değer arasındaki bu bağlantıyı bir tabloda görelim:

Yüzler Onlar — Birler Ağırlık 100 10 1 Üs 10^2 10^1 10^0 Konum değeri — 500 50 5 Değer 500 50 5

Konumunun her değişmesinde, sayı 10 ile çarpılır. 10 değeri sayılama sistemimizin tabanını teşkil etmektedir. Bu yüzden de 10 tabanlı konumsal sistem adını alır (başka bir deyişle, Arap sayılama sistemi).

Romen sayılaması, konumsal olmayan bir sistem örneğidir. Bu sistemde, 5 değeri V simgesiyle, 50 değeri de L simgesiyle gösterilir. 5'ten 50'ye geçmek için, 5(V) simgesinin konumunu değiştirmek yetmemekte, bir (L) işin içine sokulması gerekmektedir. Yorumlanması pratik olmayan ve hesaplara da yatkın olmayan bu sayılama sistemi bırakılmıştır: Yerine, evrensel olarak konumsal sistem kabul edilmiştir. En yaygın konumsal sistem 10 tabanlı sistemdir; bu sistemde 10 simge vardır ve taban da 10'dur. Fakat bilgisayarlarda 10 değişik simge kullanılamaz. Daha önce de söylediğimiz gibi, makine yalnızca iki durumu tanıyabilmektedir: VAR (yüksek düzey) ve YOK (alçak düzey). Bu durumda yalnızca iki simgeyi 1 (VAR) ve 0 (YOK)'u kavrayabilmektedir.

İşte bu sebeple yalnızca 1 ve 0 simgelerini kullanan bir sistem gereklidir. Bu da iki tabanlı sistemdir. Bu tip sayılama, sanılanın tersine, bilgisayarla birlikte doğmamıştır. XII. yüzyıla doğru Çin'de çoktan kullanılıyordu. İki tabanlı sistem de konumsal sistemdir, çünkü mevcut iki simgenin değeri, konumlarına bağlıdır. Herhangi bir bilginin bilgisayar tarafından işlenebilmesi, saklanabilmesi ya da mevcut bilgilerden yeni bir bilgi türetilebilmesi için, önce bilgilerin elektriksel darbelere tercüme edilmesi, yani elektriksel darbeler tarafından temsil edilecek bir hale getirilmesi gerekir. İşte 2 tabanlı sayı sistemi, bilgileri elektriksel darbeler tarafından temsil edilebilecek bir şekle tercüme eden matematiksel bir notasyondur. Bizim saklamak istediğimiz bilgiler ya da bu bilgiler üzerinde yapılmasını istediğimiz işlemler, bilgisayarın içinde daima 2 tabanlı sayı sistemi ile gösterilir. Bu yüzden 2 tabanlı sayı sistemine makine dili de denir.

Ancak sayısal ve mantıksal bilgilerin nasıl 2 tabanlı sayı sistemi tarafından temsil edilebildiğini görmek için konumsal bir sistemin ayrıntılarını daha da yakından inceleyelim. Bildiğimiz 10 tabanlı sayı sisteminde her sayının 0, 1, ..., 9 gibi rakamların yan yana sıralanmasıyla ifade edildiğini görmüştük. Bu sıra içerisindeki herhangi bir rakamın, diyelim 5'in

PRINT komutunda, parantezlerin içine yerleştirerek, söz konusu kontrol işlevinin yerine gelmesi sağlanabilir. 1- DEL: Bir karakter geriye gitme komutudur. Normal olarak ekrandaki hataları düzeltmek için kullanılır. Kodu 20'dir. Yalnızca ekranda kullanılmasının nedeni, doğru simge yazıldığında yanlışının silinebilmesindendir. 2- RETURN: İşlevini zaten biliyorsunuz, şaryoyu geriye döndürme komutudur. Bilgisayarlarda şaryonun hareketini, ekranda ise kursörün yerini etkiler. Kodu 13'tür. 3- INST: İşlevini anlatmıştık; yazmış olduğunuz karakterlerin arasına karakter girmenizi sağlar. 4- SPACE: Boşluk tuşunun ASCII kodu ise 160'tır. Dolayısıyla CHR$(160) komutu, ekranda bir boşluk yazılmasını sağlayacaktır. Diğer kontrol karakterlerinin kodlarını da istediğiniz takdirde Programcının El Kitabı'nda EK.C olarak bulabilirsiniz.

Harfler

Nasıl kontrol karakterleri özel hiçbir anlama gelmeyen sayılarla temsil ediliyorsa, harfler ve rakamlar da böyle temsil edilir. Rakamlar da nereden çıktı, diyeceksiniz. Unutmayın ki, rakamları da birer karakter olarak kullanmak mümkün. Başka bir deyişle, tırnak içerisinde verilen “4” rakamı, artık aritmetik bir işlem için bir girdi teşkil edebilecek bir sayı değil, sadece grafik bir anlamı olan harfsayısal bir simgedir. Ve dolayısıyla sayıları kodlayan kodlama sistemi ile değil, harfleri kodlayan ASCII kodu ile kodlanır. Neyse ki, harfleri ve rakamların kodlarını ezberlememize gerek yok. Commodore 64'ün Basic'i özel bir fonksiyon aracılığıyla istediğimiz karakterin ASCII kodunu öğrenmemizi sağlıyor. (Acele etmeyin, “fonksiyon” demenin de, bu Basic denen tuhaf dilde ne anlama geldiğini göreceğiz.) Bu fonksiyonun adı ASC. Dolayısıyla, örneğin,

PRİNT ASC(“H”)

yazdığınızda, ekranda 72 rakamını göreceksiniz. Bu anlamda, ASC() fonksiyonu CHR$() fonksiyonun tam tersi işlevi görüyor. Herhangi bir sayı verdiğinizde, o sayının ASCII kodu olan işlevi yerine getiriyor (dolayısıyla, PRINT CHR$(72) yazdığınız takdirde, ekranda H harfinin yazıldığını görürsünüz). ASC() ise parantez içinde verilen karakterin ASCII kodu olan sayıyı veriyor. Sayılar ve kontrol işaretlerinden başka, büyük ve küçük harflerle, yazarken kullanılan diğer bazı simgeler de ASCII koduna dahildir.

yının bilgisayarda nasıl temsil edilebileceği meselesini çözmüş değiliz. Kendisi, eninde sonunda sadece bir dizi elektrik devresinden oluşan bilgisayar, bilgileri hangi anlamda sayar? Bu bölümde simgelerimize (yani rakam ya da harflere) bilgisayarın kullanılabileceği bir biçim verme yollarını göstereceğiz. Bölümün sonunda, bu simgelerden hesap yaparken, yararlanma metodlarını da vereceğiz. Yalnız dikkat! Bizim mantığımız, çağrışımlarımız ve içgüdülerimizle beslenen çok ince ve zengin

OlOl| / 00100!

mını göreceksiniz; çünkü 72, H'nın

“BU KOMUTA UYMALISIN” cümlesini yazabilmesi için, bilgisayara verilmesi gereken komutları görelim:

1- Önce “Sayfanın başından başla” (FF) komutu verilir. 2- Bunu yazılacak cümlenin kodları izler. 3- Yeniden bir sayfa başı komutu (FF) verilir. Birinci ve üçüncü adımlarda kullandığımız FF komutunun kodu 10 tabanlı 12'dir (16 tabanlı C). İkinci adımda ise cümle harf harf kodlanır. Sayfa 114'teki kodlar tablosundan bu cümle için bize gerekli olan kodları buraya aktaralım:

Sayılama Sistemleri

Dikkatli (ve sabırlı) okurlarımız, ASCII kodlarının, problemin ancak bir kısmını çözdüğünü fark etmiş olacaklardır. ASCII kodları, karakterleri sayılara çeviriyor. Ancak henüz hâlâ herhangi bir sabit mantıktır. Ama bu bölüm okunurken tamamen unutulması gerekir, çünkü bilgisayarın düz mantığı okurun mantığının inceliklerini ve zenginliklerini yorumlayamaz. Bu yüzden bu bölüm ilk bakışta sevimsiz ve hatta zor gelebilir. Dikkatinizi, verilen örneklerin ayrıntısındansa, sorunun kavramsal yönüne yoğunlaştırmanıza salık veririz. Bilgisayarla bir problem çözmek ilk bakışta zor görünse de, aslında çok basittir. Vereceğimiz örnekler Basic dilini kullanmakla, bilgisayara ne yaptırmakta olduğunuz hakkında bir fikir sahibi olmanıza yardımcı olacaktır.

Darbeler

Hangi elektronik sayısal cihaza bakacak olursak olalım, yalnızca iki durum tanıdığını görürüz:

VAR (ON)—Sinyal var YOK yok durumu cihaz için bir nirengi noktasıdır ve 0 DÜZEYİ adını alır. 1 durumu sinyalin en yüksek düzeyi olarak sunulur ve 1 DÜZEYİ adını alır.

değeri, bulunduğu konuma ya da başka bir deyişle, o rakamı izleyen basamakların sayısına bağlı olarak değişir. Örneğin 50 sayısı 500'den böyle ayrılır. Temel alışkanlıklarımızdan biri olduğu için, 10 tabanlı bir sayı yazmak özel bir akıl yürütme gerekmez; yine de basit görünen bu işlem bile aslında soyut bir işlemdir. Bu sayı sisteminde her rakamı, 10 tabanının ardışık kuvvetlerinin çarpanı olarak kullanırız. “Kuvvet” kavramının, sayının sağ üstüne yazılan üst tarafından gösterildiğini ve kendi kendisiyle çarpılması demek olduğunu hatırlayalım. Örneğin;

sıfır kuvveti

birinci kuvvet

fonlar basamağı) ikinci kuvvet (yüzler basamağı) üçüncü kuvvet basamağı)

10 -10 2 40 <10*10 3 10540*40*10

On tabanlı sayılamada her rakam, sağdan başlayıp sola doğru 10 tabanının bir üst kuvvetinin çarpanıdır. (Bu yüzden sık sık kullandığımız birler, onlar, yüzler vb. basamağı deyimleri yalnızca 10 tabanlı sayı sistemi içerisinde bir anlam ifade ederler. Yoksa, her sayı sistemine uygulanacak bir adlandırma için, birinci kuvvet, ikinci kuvvet vb. basamaklardan söz etmemiz gerekirdi.) 10 tabanlı sayı sisteminde bir sayı nasıl yorumlanır ve değeri nasıl elde edilir? Bu soruları 1024 tamsayısını örnek olarak cevaplandıralım:

Basamak di. c b. dü Sayı (rakam) ak 0 cd Taban kuvveti Konum ağırlıkları 40 410 40 40 Rakamların değeri — 1000 100 10 1 (takam'konum ağırlığı) 1000 0 — 20 4 Sayının değeri 1000 * O * 20 4 4 — 1024

* Her sayının sıfırıncı kuvveti 1'e eşittir. Buna göre 2'nin de sıfırıncı kuvveti 1'dir; yani 2^0=1. Kimilerine göre 10 tabanının bunca yaygın olmasının nedeni 10 parmağımızın olmasıdır. Bu görüşe göre parmaklarımız “Sayı” kavramını kolaylıkla somutlaştırmamızı sağlıyorlar. Aristo da halkın çoğunluğunun onlarla saydığını belirtmişti. Ancak burada, başka herhangi bir sayının da taban olarak kabul edilebileceğini söylemeliyiz. Örneğin, birçok dilde, hatta Aristo'nun Yunancasında bile, 5 tabanlı sayı sisteminin kalıntılarına rastlamak mümkün. Başka bir sayının taban kabul edilmiş olduğu bir sistemde yazılmış bir rakamı yorumlamak için başvurmak zorunda olduğumuz adımlar, 10 tabanlı örnekte kullandığımız adımların aynıdır. Her sayı sisteminde kullanılacak simgelerin sayısını seçilen taban belirler.

10 tabanı için 10 simge: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 2 tabanı için 2 simge: 0, 1 (ya da a, y) 8 tabanı için 8 simge: 0, 1, 2, 3, 4, 5, 6, 7 16 tabanı için 16 simge: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F

İki tabanlı sayı sisteminin C-64 için özel bir önemi var. Bu yüzden kendisini daha sonra ayrıntılı biçimde inceleyeceğiz. Şimdi 2 tabanlı sayı sistemini gözden geçirelim.

2 Tabanlı Sayı Sistemi

Tıpkı 10 tabanlı sayı sistemi gibi 2 tabanlı sistem de konumsaldır. 10 tabanlı sayı sisteminde herhangi bir sayıyı yazmak ve yorumlamak için yapılması gereken işlemleri hiç düşünmeden, otomatik olarak yaparız. Oysa 2 tabanda düşünmek zorundayız. Ancak kurallar her iki sistemde de aynıdır. Yine de okura aşinalık kazandırmak için, bu bölümde 2 tabanlı sistemde yazılmış sayı ve yapılmış işlemler için birkaç örnek vereceğiz.

Mümkün olan her sayı, 2 tabanlı sistemde de yazılabilir. Şöyle ki, her rakama karşılık olmak üzere yalnızca iki simgeden biri kullanılır: ya 0 ya 1. Değişik konumlarda bulunan rakamlar, 2 tabanının ardışık kuvvetleriyle çarpılır. Bir örnek olarak herhangi bir sayının, örneğin 1011'in yorumlanma biçimini, 10 tabanlı sistem için verdiğimiz örneğe benzeterek gösterelim:

Basamak dc. b a Sayı (rakam) Taban kuvveti Konum ağırlıkları 1 Rakamların değeri — 4 04 4 ağırlığı 8 0 2 4

Sayının 8 * 04-2 4 1 < 11 (10 tabanlı) değeri

Buraya kadar söylediklerimizden, bizim kullandığımız her sayının, içinde bir dizi 1 ya da 0 ile gösterildiği sonucunu çıkarabiliriz. Makine 1 ve 0 dışında hiçbir simge bilmediği için, aynı işlem harflere de uygulanacaktır. Bizimle konuşabilmek için bilgisayarın, bizim kullandığımız harf ve rakamları kendi kullandığı simgelere çevirmesi gerekir. Başka bir deyişle, bizim kullandığımız tüm çizgisel simgeler bilgisayarda 2 tabanından bir sayıya dönüştürülür. Örneğin kullanıcı makinenin belleğine A harfini girmek istediği zaman, bu harfin önce bir sayıya, kodu adını verdiğimiz bir sayıya çevrildiğini zaten görmüştük. Şimdi yapılması gereken işlemlerin tamamını da görebiliriz. Bu harfin kodunun da iki tabanlı bir sayıya çevrilmesi gerekmektedir. B harfinin kodunu elde etmek için ise, A harfinin koduna 1 eklemek yetecektir. Bu işlem tüm alfabeye uygulanabilir. Bu yöntemle bizim kullandığımız tüm anlatım simgelerinin bilgisayarın içinde temsil edilmesi mümkün olmaktadır.

65