|
Hatırlarsanız bir önceki derste RND fonksiyonunu kullanarak zar atmamızı sağlayan küçük bir program yapmıştık. Ancak bu programda aksayan bir nokta vardı. Program her çalıştığında RND fonksiyonunun ürettiği değerin aynı olması idi. Bunu engellemek için FOR komutundaki çevrim süresini uzun tutmuş ve üretilen değerin 6'dan büyük olması halinde zarın 6 olarak kabul edilmesi gibi bir yönlendirme yapmıştık. Bu durumda 6 gelme olasılığı da daha yüksek olmuştu. Şimdi ise aşağıda verdiğimiz değişik bir zar atma programı ile hem program her çalıştığında farklı değerler üretilecek hem de 1 'den 6 'ya kadar olan her sayının gelme olasılığı eşit olacak. Programımız şu;10 RANDOMIZE TIMER 20 FOR Y=1 TO 2 30 ZAR=INT(6*RND+1) 40 PRINT ZAR 50 NEXT Y 60 END İşte bu programın 10 numaralı satırındaki RANDOMIZE TIMER komutu programın her çalıştırılışında farklı değerler üretilmesini sağlıyor. Yani rasgele sayılar üretiliyor. Yalnız unutmayın, sayıyı üreten RND komutudur. 2 0 Numaralı satırda ise for çevrim komutunu kullanarak 2 kez zar atılmasını sağlıyoruz. 1 TO 2 nin anlamını biliyorsunuz. İşlemi, 1 den başla 2 olunca bitir. Yani 2 kez yap anlamına geliyor. Demek ki buna göre 2 kez zar atılacak. Buradaki Y harfi FOR çevrim komutunun değişkeni. Bu değişken ismi tamamen bize kalmıştır. Bu değişken ismi Y yerine F, U, P veya TG2, SAY gibi harf veya harflerden veya harfle başlayan harf veya sayı karışımlarından olabilir. Ancak mutlaka sayısal değişken olmalıdır. Yani Y$, I$ gibi karakter değişkenler burada geçersiz olur.30 No'lu satırda ZAR ismini verdiğimiz değişkene RND komutuyla üretilen değer atanıyor. Ancak, bildiğiniz gibi RND ile üretilen sayılar 0 ile 1 arasında bir değer olduğundan bu değeri 6'ya kadar yükseltmek için 6 ile çarpıyoruz. Ayrıca Zarda 0 değeri olmadığından +1 ilave ediyoruz. Diğer yandan üretilen bu sayı ondalık haneli olacağından ondalık hanesini atmak için de INT komutunu kullanıyoruz. 40 No'lu satırda ise üretilen bu sayıyı ekrana yazdırıyoruz. 50 No'lu satırda 1. zar üretilip ekrana yazdırıldıktan sonra ikinci zarın üretilip ekrana yazdırılması için NEXT Y komutu ile çalışmayı FOR komutuna geri döndürüyoruz. Eğer ikinci işlem de yapılmışsa NEXT komutu Y değişkenindeki 2 değerini görüp işlemi sona erdirip bir alt satıra geçiyor. Burada NEXT komutunun sonundaki Y değişken ismini yazmamız şart değil. Aslında sadece NEXT yazıp bırakabilirdik. Ama eğer birden fazla iç içe FOR çevrimleri olsaydı. O zaman mutlaka NEXT satırının sonunda hangi FOR çevrimine ait ise o çevrimin değişken ismini yazınız. Bu hem olası bir hatayı engeller, hem de programcıya kolaylık sağlar.60 No'lu satır ise END komutu gereği çalışmayı sona erdirir.
KARAKTER FONKSİYONLAR LEN(KARAKTER DEĞİŞKEN) Len fonksiyonunun önüne parantez içer isinde yazılan karakter değişken içerisindeki bilginin karakter olarak uzunluğunu verir.Örnek : 10 A$="ORHAN" 20 PRINT LEN(A$) RUN 5 Ok LEN fonksiyonu karakter değişkenlerdeki bilgilerin kaç karakterden oluştuğunu hesaplar. Sayısal değişkenler üzerinde h ata verir.
VAL(KARAKTER DEĞİŞKEN) Karakter değişkenlerdeki bilgileri sayısal bilgiye çevirir. Eğer değişkendeki bilgiler sayı ve harf karmaşasından oluşuyorsa soldan ilk karaktere bakar, sayı ise ilk gördüğü harf veya simgeye kadar olan kısmı alır, diğer tarafı almaz. Örnek 1: 10 BAK$="123ORHAN" 20 BK=VAL(BAK$) 30 PRINT BK RUN 123 Ok 10 No'lu satırda BAK$ değişkenine 123ORHAN değerini atıyoruz. 20 No'lu satırda bu değeri sayısal değişken olan BK değişkenine sayısal olarak atıyoruz. Tabi ki 123 'den sonraki ORHAN kelimesi alınmıyor. Örnek 2: 10 YAZ$="HARUN67" 20 YAZ=VAL(YAZ$) 30 PRINT YAZ RUN 0 0k Eğer değişkendeki ilk karakter sayı değilse yukarıdaki örnek deki gibi 0 değeri elde edilir. Örnek 3: 10 TOPLA$="546" 20 TPL=VAL(TOPLA$) 30 PRINT TPL RUN 546 Ok
ASC("Karakter") Karakterlerin ASCII kod tablosundaki sıra numarasını verir. Her karakterin ASCII koduna göre bir değeri vardır. Ve bu değeri öğrenmek için ASC komutunu kullanabiliriz. Ayrıca ASCII değerini bildiğimiz bir karakterin bu sayısal değerini Alt tuşu basılı iken yazdığımızda bu karakter ekrana yazılır. Örneğin A karakterinin ASCII değeri 65 'dir. Bu harfi doğrudan klevyede A tuşuna basmak yerine; Alt tuşunu basılı tutarak sayısal tuşlarla 65 yazıp Alt tuşunu bıraktığımızda ekrana A harfi yazı lır. Diyelim ki bir çalışma esnasında klevyenizde bulunan aralık çubuğu bozuldu çalışmıyor. İşte bu durumda geçici çare olarak ALT+32 şeklinde aralık çubuğunun vazifesini Bilgisayarınıza yaptırabilirsiniz. Yani ALT tuşunu basılı tutuyorsunuz ve bu durumda iken aralık çubuğunun ASCII karşılığı olan 32 rakamını kodlamak için önce 3, sonra 2 tuşuna basıp ALT tuşunu bırakıyorsunuz. Bu kural sadece Gwbasic de değil başka programlarda da geçerlidir. Mesela bunu Word de de deneyebilirsiniz. Bunun haricinde herhangi bir tuşa başka bir tuşun değerini atamayı da ileride öğreneceğiz. Bu kodları öğrenmek için 128 'den başlayarak 256'ya kadar olanları ALT tuşu ile deneyin. Mesela 185, 187, 188, 200, 202, 203, 204, 205, 206 gibi sayıları ALT tuşu ile birlikte kullandığınızda klevyenizde bulunmayan çizgileri üreterek çerçeveler çizebilirsiniz. Bunları çizerken LOCATE komutu kullanıp istediğiniz çizginin sayfanın neresine çizileceğini tayin edebilirsiniz. Yalnız unutmayın ASCII kodların her birisi ayrı programlarda aynı sonuçları vermeyebilir. Bu söylediklerimi GWBASIC dışında uygulamaya kalkarsanız, bazıları hatalı görüntüler verebilir. Benim anlattıklarım BASIC ile ilgili konular olmakla beraber başka programlarda da bazıları uygulanabilir.
Örnek: ASC("A") Enter'a basıldığında ekranda Büyük harf A'nın karşılığı olan 65 değeri yazılır. Yani demek ki ALT ile beraber 65 yazılırsa Ekranda A harfi yazılırmış.
CHR$(SAYI) ACS fonksiyonunun tam tersidir. Burada da ASCII değerinin karşılığı olan karakter bulunur. Örnek 1: PRINT CHR$(65) Enter'a basıldığında ekrana A karakterini yazar. Örnek 2: PRINT CHR$(99) Enter'a basıldığında ekrana c karakterini yazar.
LEFT$(DEĞİŞKEN,SAYI) Belirtilen değişkenin içinde bulunan bilginin soldan başlayarak belirtilen sayıda karakterini alır. Örneğin A$ değişkenine KARAYOLU diye bir bilgi girelim. Bu bilginin ilk 4 karakterini almak için bu komutu şöyle kullanıyoruz: 10 A$="KARAYOLU" 20 PRINT LEFT$(A$,4) RUN KARA Ok Tabi bu bilgiyi ekrana yazdırmak yerine bir başka değişkene de aktarabiliriz. B$=LEFT$(A$,4) gibi. Yani böylece şunu demek isteriz. B$ değişkenine aktar. Neyi? Soldan başlayarak A$değişkenindeki ilk 4 karakteri. Zaten buradaki LEFT kelimesinin de İngilizce aslının Sol anlamında olduğunu biliyorsunuz.
RIGHT$(DEĞİŞKEN,SAYI) Aynı Left$ fonksiyonunda olduğu gibidir. Farkı belirtilen değişkenin belirtilen sayıdaki karakterini soldan değil de sağdan sola doğru almasıdır. Yukarıdaki A değişkenindeki KARAYOLU bilgisinin bu defa sağdan 4 karakterini alalım:
10 A$="KARAYOLU" 20 PRINT RIGHT$(A$,4) RUN YOLU Ok Buradaki RIGHT kelimesinin anlamı da bilindiği üzere İngilizce de Sağ anlamında.
MID$(DEĞİŞKEN,1.Sayı,2.Sayı )Bu fonksiyonun kullanılışı da LEFT$ ve RIGHT$ fonksiyonlarına benzer. Farkı alınacak karakter dizisinin nereden başlayıp nerede biteceğini belirleyebilmemiz. Örnek olarak, yukarıdaki örneklerdeki A değişkenindeki KARAYOLU kelimesini ekrana ARAYOL olarak yazdırmak istiyorsak. Bilgisayara şöyle bir komut vermeliyiz; A$ değişkenindeki bilginin 2. karakterinden başla ve 6 karakterini yaz. Bunu da basic diliyle Bilgisayara şöyle anlatırız: 10 A$="KARAYOLU" 20 PRINT MID$(A$,2,6) RUN ARAYOL Ok
Yukarıda belirttiğimiz LEN, LEFT$, RIGHT$ ve MID$ komutları bir programcı için çok önemli komutlardır. Niye diye soracak olursanız. Bunu ilerleyen derslerimizde daha iyi anlayacak olmanıza rağmen küçük bir açıklama yapayım: Diyelim ki herhangi bir ürün satışı yapan bir firmanın müşteri takibi ile ilgili bir program yaptınız. Bilgisayara bu program vasıtasıyla bütün müşterilerin isim ve soy isimlerini girdiniz. Binlerce isim kayıtlı olduğunu düşünelim. Şimdi de bu bilgiler içinden ismi Ahmet olanları veya Mehmet olanları çağırabilecek bir program yapmayı düşünüyorsunuz. İsim bilgilerini girerken, bilgilerin ara bellekte yerleştiği buffer değişkenlerin uzunluğunu İSİM bilgisi için 15 karakter olarak ayarladığınızı varsayalım. Eğer bu isimleri diske kaydederken LSET komutunu kullanmışsanız, mesela MEHMET ismi diske şu şekilde kaydedilmiş olur; MEHMET......... Yani Mehmet kelimesi 6 karakter olduğuna göre Mahmet kelimesinden sonra 9 karakter de boşluk yerleşmiş olacaktır. Böylece siz bilgisayara Mehmet kelimesi arattığınızda Bilgisayar hiçbir zaman için Mehmet kelimesini bulamayacaktır. Çünkü 6 karakterden oluşan MEHMET kelimesi ile sonuna 9 karakter boşluk ilave edilmiş 15 karakterlik MEHMET kelimesini farklı yorumlayacaktır. O halde ne yapmak gerekir. İşte burad a aradığımız kelimenin uzunluğunu LEN fonksiyonuyla Bilgisayara hesaplatırız. Ondan sonra da Bilgisayara arattığımız kelimenin karşılığı olarak değişkenlerdeki bilgilerin ilk 6 karakterine bakacağını belirtiriz. Bu anlattıklarım size her ne kadar bu aşamada biraz karışık gelebilirse de sakın ümitsizliğe kapılmayın. Çünkü şu aşamada sizin bu konuyu tam olarak anlamanızı zaten beklemiyorum. Ben sadece bu konuyu belki biraz fikir edinirsiniz diye açıkladım. Ama ilerleyen dersler sonunda bu konuyu tamamen anlayacağınıza inancım tam.
|