Amiga Dünyası sayı 4, sayfa 38

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 38

DERLEYİCİLER

önce (ing. prefix) (++nc gibi) hem de değiştirilecek sayıdan sonra (ing. postfix) (ne++ gibi) yazılabilirler. Bu iki tür yazım değişik sonuçlar verir. Fakat bunları yazı dizimin daha sonraki bölümlerinde inceleyeceğiz.

Karakter sayma programı sayaç olarak long bir sayı kullanmaktadır. Acaba neden integer (Tk. Tamsayı) kullanmadık? Bu sorunun yanıtı şöyle: Amiga'da normal int (int, tam sayının C'deki kısaltmasıdır) sayılar 16 bit'ten oluşur. Bu bitlerin 15'i sayıyı depolamak için, biri ise sayının işaretini belirlemek için kullanılır. Dolayısıyla bir int'in alabileceği en yüksek değer ikinin on beşinci üssünün bir eksiği, yani 32767'dir. Burada bir eksiğini almamızın sebebi sayılara sıfırın da dahil olmasıdır. Eğer programa verdiğimiz veride 32767'den fazla karakter varsa, programımız hatalı çalışacak ve yanlış cevaplar üretecektir. Bu durumu engellemek için Amiga'nın 32 bit'ten oluşan long int'lerinden (Tk. uzun tamsayı) yararlanabiliriz. Bu şekilde tanımladığımız bir sayaç ikinin 31'inci üssünün bir eksiğine kadar hatasız çalışabilir. Böylece programımızın karakter sınırı çok çok fazla artırılmış olur.

Doğal olarak programda while döngüsü yerine for döngüsü kullanılabilirdi, for döngüsünün kullanımını önce kendiniz yazın ve daha sonra üçüncü kutudakiyle karşılaştırın.

Görüldüğü gibi for döngüsünün içi boş. Çünkü bütün işlemler for döngüsünün test ve yeniden eşleme bölümlerinde yapılmakta (bu bölümler sırasıyla getchar( )!=EOF ve ++ne bölümleridir). Döngünün içi boş olmasına karşın C'nin gramer özelliklerinden dolayı bu boşluğu belirtmek için sadece boş işlem anlamına gelen ;'ü kullandık. Bu noktalı virgül istenilen yere konabilir. Örneğin hemen for döngüsünden sonra aynı satıra yazılabilir. Fakat ben burada en açık şekilde görülenini verdim.

Son olarak dikkat edileceği gibi, eğer programa giriş olarak hiçbir şey vermezsek program hemen çalışmasını kesecektir. Çünkü while ve for döngüleri önce test koşulunu kontrol ederler. Eğer bu daha ilk kontrolde yanlışsa döngünün içine hiç girilmeden döngüden çıkılır. Böylece bilgisayarın hiç zamanı çalınmayacaktır.

SATIR SAYMA PROGRAMI

Bu program girişindeki satırları sayar. Programda giriş satırlarının sonunda , yani yeni satır karakterinin olduğu varsayılmıştır. Şimdi dördüncü kutudaki programı yazın ve compile edin.

Görüldüğü gibi while döngüsünün içi, bir if komutunu içermektedir. Buradaki if komutunun görevi, nl değişkeninin artırılmasının kontrolüdür, if komutu parantezin içindeki koşulu test eder ve bu doğruysa hemen sonraki komut satırını (veya süslü parantezler içindeki birkaç satırı) işletir. Eğer koşul yanlışsa gövdesini (bir komutun kendine bağlı ve kendinden sonra gelebilecek komutlarına verilen ad, gövdedir. Bunlar bazen tek bir komut olabileceği gibi, bazen de süslü parantezler arasında sınırlanmış bir komut dizini olabilir.) işletmeden bir sonraki (gövdesinden sonraki) komuta geçer.

Programdaki == operatörü, C dilinde eşitlik testi anlamına gelen operatördür. Bu sembol programlardaki eşitlik testlerini eşleme amacıyla kullanılan = işaretinden ayırmak için kullanılmaktadır. Eşleme, bir değişkenin bir başka değişkene veya sabit değere eşlenmesine verilen addır, örneğin c = 5 veya c = nl gibi. == operatörü ise sadece eşitlik testlerinde kullanılır. Örneğin c == 5 gibi bir ifade, ancak başka komutların test bölümlerinde kullanılabilir (bu komutlar arasında while, for, if sayılabilir). c == 5'in kullanıldığı bir yerde eğer c, 5'e eşitse c == 5'in sonucu doğru anlamına gelen 1; eğer c, 5'e eşit değilse c == 5'in sonucu yanlış anlamına gelen 0 olacaktır. C dilinin yaratıcıları, programlarda eşleme işleminin eşitlik testlerinden genellikle iki kat daha fazla kullanılmasından dolayı eşleme operatörünü (=) eşitlik testi operatörünün (==) yarısı uzunluğunda yapmışlardır!

C dilinde herhangi bir karakter, kesme işaretinin (') arasında yazılırsa; bu, o karakterin bilgisayarın karakter setindeki numarasını içeren değerin alınacağı anlamına gelir. Örneğin Amiga'da kullanılan ASCII karakter setinde A harfinin karşılığı 65'tir. Eğer biz programımızda 'A' yazarsak bu değeri 65 olan bir sayı üretir. Doğal olarak bu gibi yazımlar, ancak başka operatörlerle beraber kullanılır, örneğin c = 'A' demek, c değişkenini 65'e eşlemek demektir.

Daha önce de gördüğümüz gibi, , tek bir karakter olan yeni satır karakterine karşılık gelen bir semboldür. Dolayısıyla, programda incelenen her yeni karakterin ' ' değerine eşit olup olmadığı kontrol edilmekte, eğer eşitse, nl değişkeni bir artırılmakta (++nl), eşit değilse bir sonraki karaktere geçilmektedir.

KELİME SAYMA PROGRAMI

Bu ayki son programımız; girişindeki kelimeleri, satırları ve karakterleri sayan bir program, önce beşinci kutudaki programı yazın ve compile edin.

Programın çalışma mantığı şöyle: Program bir kelimenin ilk karakteriyle karşılaştığında, onu sayar. Kelimeiçi adlı değişken o anda programın bir kelimenin içinde olup olmadığını belirler. Başlangıçta bu kelime, dışında anlamına gelen NO'ya eşlenmiştir. Burada sıfır ve bir yerine NO ve YES kullanmamızın sebebi, programın okunabilirliğini artırmak ve ileride yapılacak değişikliklerin daha kısa yapılabilmesine olanak tanımaktır. Doğal olarak bu kadar kısa bir programda bunun önemi pek açık değildir. Fakat program genişledikçe önem gitgide artacaktır.

nl = nw = ne = 0 satırı, her üç değişkeni de sıfıra eşlemektedir. Bu özel bir durum değildir. Çünkü C dilinde eşlemeler

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