21 Haziran 2019 Cuma

JustBasic Programlama Diline Giriş

BASIC Dili Hakkında


Bu yazı JustBasic programlama dili tutorial'ının 1. hafta dökümanının tercümesidir.

BASIC (Beginners All purpose Symbolic Instruction Code) programlama dili 1960'larda bilgisayar programlamaya kolay bir giriş yapılabilmesi amacıyla geliştirildi. BASIC'in basit yapısı ve interpreted (anında işlenen) özelliği yüzünden programcıya kısa sürede sonuç vermesi sayesinde çok kısa zamanda programcılar arasında popüler oldu ve bu güne kadar geldi. 

Bu yazıda Just Basic dilinin temellerini inceleyeceğiz. 




SalesTax.bas - Basit Bir Basic Programı


Başlangıç olarak basit bir program ile girişelim. Programımızın şunları yapmasını istiyoruz:
  1. Ürün için bir fiyat girilmesini isteyecek.
  2. %5 satış vergisini hesaplayacak.
  3. Vergi miktarı ve toplam miktarı ekrana yazacak.


GİRDİ


İlk önce bilgisayarın kullanıcıdan bilgi alması için bir komuta ihtiyacımız var. Basic dilinde bunu yapmak için değişik yollar var, burada biz "input" komutunu kullanacağız. Girdi için kullanacağımız komut satırı şöyle olacak:

input "Ürünün fiyatını lira ve kuruş olarak giriniz: "; fiyat
                                                            'fiyat bir değişken ismi

Bu komut satırı tırnak içindeki yazıyı ekrana yazar ve kullanıcının bir şeyler girmesini bekler. Enter basıldığında ekrana girilenler fiyat adındaki değişkene saklanır. 

Değişken nedir - Programcılıkta her bir veri parçasını saklarken ona bir isim veririz. Bu isim ve onun gösterdiği değere değişken denir. Çünkü değer parçası program kullanıldıkça değişebilir. Değişkenlere isim olarak içlerinde barındırdıkları veriye uygun isimler vermek önemlidir. Bu isimler Basic dili içinde kullanılan kelimeler olamaz (bunlara reserved words denir). Programda her değişkene içerdiği veriye uygun isimler verirsek hem bizim hem de başkalarının programımıza bakarken kolay anlamalarını sağlamış oluruz. 


HESAPLAMA


Şimdi ürün fiyatına karşı gelen vergi miktarını hesaplayacağız.

vergi = fiyat * 0.05

Araya niye yıldız koyduk diye düşünebilirsiniz. Bilgisayar klavyesine biraz aşina olanlar bu işaretin numerik padde çarpma işlemini ifade ettiğini bilirler. Burada da fiyat ile %5 değeri çarpılarak ürünün vergisi hesaplanıyor ve "vergi" adındaki değişkene saklanıyor. 


ÇIKTI


Vergi miktarını hesapladık şimdi sıra ekrana değerleri yazmaya geldi:

print "Vergi : "; vergi; ". Toplam : "; fiyat + vergi

print komutu arkasından aralarında noktalı virgül ile ayrılmış olarak gelen parametreleri ekrana yazar. Burada 4 parametre var:

  1. "Vergi : " - İki yanındaki tırnak işaretleri hariç aynen ekrana yazılır.
  2. vergi - vergi isimli değişkende saklanmakta olan değeri ekrana yazılır. 
  3. ".Toplam : " - Tırnak işaretleri hariç aynen yazılır.
  4. fiyat + vergi - Bu iki değişken içindeki değerler toplanarak toplama işlemi sonucu ekrana yazılır. 
Gördüğünüz gibi tırnak içinde yazılanlar ne olursa olsun aynen ekrana yazılıyor. Bu tırnak içerisine yazma şekli yazıları ifade etmek içindir. Tırnak içinde olmayanlar ise ya bir değişken değeri ya da bir Basic işlemi olmalı ve sonuçta ifade edilen değer ekrana yazılır.

Programın son hali şöyle:
input "Ürünün fiyatını lira ve kuruş olarak giriniz: "; fiyat
                                                            'fiyat bir değişken ismi
vergi = fiyat * 0.05
print "Vergi : "; vergi; ". Toplam : "; fiyat + vergi


Artık programı çalıştırabiliriz. Run düğmesine basarak , Run menüsünden Run komutu seçerek ya da Shift+F5 tuş kombinasyonu ile programı deneyebiliriz.


Programımızı File menüsünden Save As.. seçerek SalesTax.bas ismiyle kaydedebiliriz.







Goto - Bir Şeyleri Birden Fazla Tekrar Yapmak


Yukarıdaki SalesTax.bas programı bizim isteğimizi yapıyor ama sadece bir kez yapıp program sona eriyor. Bu çok yaralı programı bir kez daha kullanmak için yine çalıştırmak gerekiyor. Programın işini bitirdikten sonra tekrar başa dönüp yeni bir işleme başlamasına ihtiyacımız var. Basic ve diğer birçok programlama dilinde programı başka bir satıra göndermek için "goto" komutu kullanılır (ilginç, acaba neden goto dediler). 

Sadece goto komutu yeterli değil gidilecek te nereye gidilecek? JustBasic size nereye gideceğinizi sormayacak daha açık ifade etmemiz gerekir. JustBasic dilinde gidilecek yerleri belirtmek için "label" adı verilen etiketler kullanılır. 

Just BASIC'te gidilecek yeri belirten label'lar için iki yöntem vardır. İstersek satırın başına bir tamsayı koyarak yer işaretlemesi yapabiliriz ya da harflerle ifade edilen daha anlamlı yer işaretlemesi yapabiliriz. 

Tamsayı label'lara örnek olarak..
10 150 75 900 5400 ...
Alfanümerik (harf rakam karışık) label örnekleri..
 [start] [loopBack] [getResponse] [point1] ...
 Bazı kabul görmeyecek label örnekleri..
[loop back]  -  boşluk olmaması gerekir
start  -  köşeli parantezler yok.
(point1)  -   sadece köşeli parantez kullanın.

 Boşluklara izin verilmediği için çok kelimeden oluşan label'larda kelimeler arasında alt çizgi ya da her kelimenin ilk harfini büyük yazarak okunabilirliği artırabiliriz. [getTimedResponse] ya da [get_timed_response] gibi.

Biz programın başa dönmesini istediğimiz için programın başına [start] yada [begin] adıyla bir label koyabiliriz.
[start]
    input "Ürünün fiyatını lira ve kuruş olarak giriniz: "; fiyat
                                                            'fiyat bir değişken ismi
    vergi = fiyat * 0.05
    print "Vergi : "; vergi; ". Toplam : "; fiyat + vergi

Şimdi en sona da got komutumuzu ekleyelim
[start]
    input "Ürünün fiyatını lira ve kuruş olarak giriniz: "; fiyat
                                                            'fiyat bir değişken ismi
    vergi = fiyat * 0.05
    print "Vergi : "; vergi; ". Toplam : "; fiyat + vergi
    goto [start]


Artık programı çalıştırabiliriz. Her seferinde yine başa dönecektir. Böyle koşulsuz dallanmalara unconditional branching denir. Artı buradan çıkmak için işletim sisteminize göre takılıp kalan programlar nasıl kapatılıyorsa onu yapmak gerekir. 






IF ... THEN - Programa Biraz Akıl Eklemek (Yapay Zeka)


Bu yapay zeka lafını herkes kullanıyor ben de kullanayım dedim, benim neyim eksik. Yukarıda yazdığımız program bizim için sadece bir tek iş yapıyor alengirli bir tarafı yok. Hadi programa biraz akıl katalım. Bunu yapmanın yollarından biri if ... then yapısını kullanmak. 

If ... then yapısı şu meşhur kendin yap klavuzlarından türemiş bir yapıdır. Örneğin :

Problem : Arabanız çalışmıyor.
  1. Akü voltajını kontrol edin.
  2. Eğer voltaj 11 volttan düşükse 13. adıma gidin.
  3. Şase bağlantısını temizleyin ve sıkın.
  4. Eğer bu sorunu çözmediyse 5. adımla devam edin.
  5. Marş motorunu çıkarın.
  6. Marş motorunu direk aküye bağlayın.
  7. Eğer marş motoru dönmüyorsa 19. adıma gidin.
  8. Marş rölesini kontrol edin.
  9. ..
  10. ..
  11. ..
  12. ..
  13. Aküyü değiştirin.
  14.   
  15.  ...
  16. ...
  17. ...
  18. Marş motorunu değiştirme işlemleri için bölü 4'e gidin.

Yukarıdaki yazıların sorunu çözmeye nasıl yönlendirdiğine dikkat edin. Eğer kelimesi içeren satırlar sorunu çözmek için karmaşık yönlendirmeler yaparak çözüme akıl katıyor. Aynı şekilde if ... then yapısıyla programlarımızı daha akıllı hale getirebiliriz. 

Bunu nasıl uygulayacağımızı görelim. Diyelim bilgisayarın kullanıcıya programın kullanımı hakkında bilgiler vermesini istiyoruz. Bu bilgileri de değer olarak sıfır girdiğinde ya da değer girmeden direk enter bastığında vermek istiyoruz. 

Input komutuyla kullanıcıdan değer istendiğinde kullanıcı hiç bir değer girmeden enter basarsa JustBasic değişkene sıfır değeri yazar. Bu özelliği bizim SalesTax.bas programımızda kullanabiliriz. Değişkenin değerinin sıfır olup olmadığına göre klavuz yazılarımızın yayınlanmasını sağlayabiliriz. 

Programın yeni hali şöyle:


if ... then içeren sstır dikkatinizi çekmiştir. JustBasic bu satırı işlediğinde değişkenin değerinin sıfıra eşit olmasını kontrol eder. Eğer sıfıra eşitse o zaman [help] etiketli satıra gider. Satırı İngilizce anlamını incelerseniz tam da yaptığı işi tarif ediyor. E napalım bütün bunları gavurlar icat etmiş, siz çok çalışın da Türkçesini yapın.

Bu if ... then satırındaki goto kelimesi aslında opsiyonel, yani koymasanız da olur.
    if fiyat = 0 then goto [help]
- ya da -
    if fiyat = 0 then [help] 
satırları aynı anlama gelir. Ama then sonrası goto kullanınca biraz daha okunurluk bakımından iyi oluyor. Yine de siz bilirsiniz.

Sayıları karşılaştırmak - Eşitlik (=) operatörü bir if ... then satırında koşul oluşturmak amacıyla kullanılabilecek operatörlerden sadece biri. Şu karşılaştırmaları yapabiliriz.

  • a = b . . . a ile b'nin eşit olmasını test eder.
  • a <> b . . . a ile b'nin farklı olmasını test eder.
  • a < b . . . a'nın b'den küçük olduğunu test eder.
  • a > b . . . a'nın b'den büyük olduğunu test eder.
  • a <= b . . . a'nın b'den küçük ya da b'ye eşit olduğunu test eder.
  • a >= b . . . a'nın b'den büyük ya da b'ye eşit olduğunu test eder.
Örneğin yukarıdaki programda fiyatın sıfıra eşit olmasına bakacağımıza 0.01 den küçük olmasına da bakabilirdik (1 kuruştan küçük). Bu durumda şöyle yazacaktık
if fiyat < 0.01 then goto [help]
Yukarıdaki programı çalıştırdığımızda ekranda yazılanların biraz birbirine karıştığını göreceğiz. Görünüşü düzeltmek için yapabileceğimiz bazı şeyler var. Yazılanları birbirinden ayırmak için fazladan boş satırlar ekleyebiliriz. Bu amaçla programa parametresi boş olan print komutları ekleriz. Ayrıca yeni bir şey yazmadan önce ekranı temizleyebiliriz de. Bunun için de cls komutu kullanılır. Her iki tekniğin de kullanıldığı şekliyle programımız şöyle olacaktır.

input "Geriye dönmek için Enter basınız." satırı dikkatinizi çekmiştir. Bizim burada amacımız kullanıcıdan bir bilgi girişi beklemek değil, sadece programın orada durmasını istiyoruz. Bu amaçla dummyVariable isminde kullanılmayacak bir değişken koyduk parametresine.





String Değişkenler


Şu ana kadar değer saklamak için kullandığımız tek değişken tipi sayı saklama amacıyla kullanılan oldu. Sayı olmayan şeyleri ve harfleri (yazıları) saklamak için özel değişkenler vardır. Bunlara String değişkenler denir çünkü onlar içlerinde karakterlerden oluşan bir string (dizi) taşırlar. Bu karakterler şunlar olabilir.
  • Alfabeden harfler
  • Rakamlar 0123456789
  • Başka diğer semboller  , . < > / ? ; : ' " [ ] { } ` ~ ! @ # $ % ^ & * ( ) + - \ |  gibi.
Şöyle küçük bir örnek yazalım.


Bu iki satırlık program size isminizi sorar ve ne yapar? Çalıştırıp bakalım.


String değişken tipi için bir not daha, string değişkenler Basic dilinde $ işareti ile biter. Bu değişkenleri aynı sayısal değer saklayan değişkenler gibi program içerisinde input ve print komutları ile kullanabiliriz.

Daha önce yazdığımız programlarda aslında string kullanmıştık. Bir Basic program içinde bir satırda çift tırnak ile başlayıp biten yazılar görüyorsak bunlar da string değerlerdir (bunlara string literal denir) Bu bir string değeri Basic program içinde direk olarak kullanma yoludur. Bir string literal her zaman çift tırnak ile başlar ve çift tırnak ile biter. Arada çift tırnak karakteri kullanamazsınız. 

NOT: Bir string içinde hiç karakter olmayabilir de. Bunlara boş string denir, bu değeri ifade için iki adet çift tırnak arasına hiç bir karakter koymadan bitişik olarak yazılır. Örnek:
noCharacterHere$ = ""




Stringler ile Yapılabilen Bazı Şeyler

Bir bilgisayar programında  sayılarla toplama, çıkarma, çarpma, bölme (ve daha bir çok işlem) yapabileceğimiz gibi stringlerle de işlemler yapılabilir. 

Stringleri toplamak - Stringleri toplamak aslında birinin sonuna diğerini eklemektir. Buna concanation (birleştirme) denir. 


Bu örnekte kullanıcıdan firstName$ ve lastName$ değişkenlerine adını ve soyadını girmesini istiyoruz. Sonra bu ikisini aralarına " " string literali ile bir boşluk ekleyerek birleştiriyoruz ve fullName$ adında bir değişkene kaydediyoruz.


Stringleri Karşılaştırmak - Stringleri de sayıları yaptığımız gibi birbirleri ile karşılaştırabiliriz. Bunun anlamı if ... then yapısını stringler için de kullanabiliriz.  ( =, <>, <, >, <=, >= ) operatörleri stringler için şu anlama gelir.

  • a$ = b$ ... a$ değişkeni değeri ile b$ değişkeni değeri birbirine eşit.
  • a$ <> b$ ... a$ değişkeni değeri b$ değişkeni değerine eşit değil.
  • a$ < b$ ... a$ değişkeni değeri b$ değişkeni değerinden küçük.
  • a$ > b$ ...  a$ değişkeni değeri b$ değişkeni değerinden büyük.
  • a$ <= b$ ... a$ değişkeni değeri b$ değişkeni değerinden küçük ya da ona eşit.
  • a$ >= b$ ..  a$ değişkeni değeri b$ değişkeni değerinden büyük ya da ona eşit.
Bir stringin diğerine eşitliğine bakılırken tüm karakterlerinin bire bir aynı olması kast edilir. Birindeki küçük harfin diğerinde büyük olması ya da yazıldığında görünmeyecek olan bir boşluk bile fazladan olması eşitliği bozar. Örneğin:


Programı çalıştırdığımızda if .. then satırı işlenince karşılaştırma olumsuz dönecektir çünkü her ne kadar yazılınca aynı görünse de iki değişkenin değerleri arasında bir boşluk karakteri farkı vardır.






Fonksiyonlar


Şimdiye kadar neler yaptık? Verileri input komutuyla okuduk, print komutuyla değerleri ekrana yazdık verileri string ve nümerik değişkenler içinde sakladık, if ... then yapısı kullanarak programımızın karar verebilecek bir akıla sahip olmasını sağladık. Şimdi göreceğimiz fonksiyonlar ile programımızın yaptığı işlemlere daha yüksek değerli işlemler katarız.

Aşağıdaki örneğe bakalım.

İkinci program satırında len() fonksiyonu kullanılıyor. len() fonksiyonu bir string içindeki karakter sayısını geri döner. Parantez içinde verilen parametre ya bir string değişken olmalı ya bir string literal olmalı ya da sonuçta string değerin oluşacağı bir işlem olmalı. Bu da bize len() fonksiyonunun bir string fonksiyonu olduğunu gösterir. Başka string fonksiyonları da vardır (mesela val() ve trim$() gibi) .  Sonuç olarak sayısal bir değer döner ve bu değer matematiksel işlemlerde kullanılabilir.

Benzer şekilde sayısal fonksiyonlar da vardır. Örneğin:


Bu program 1 den 90'a kadar açıların sinüslerini verir. Benzer olarak cos() fonksiyonu da açının kosinüsünü verir. PI/180 ile çarpmamızın sebebi trigonometrik fonksiyonların açı parametresini radyal biçimde alması. Yani bildiğimiz 360 derecelik açı 2*PI değerinde yazılmalı. Birden başlama sebebine gelince, biz önceden count değişkenine bir değer vermedik, JustBasic bu değişken adını ilk gördüğünde daha önceden kaydedilen değeri olmayınca ona sıfır değeri atayarak başlar. Diğer bir çok programlama dili değişkene değer verilmeden matematik işlem içinde kullanmaya kalkınca hata verir. 

Nereden nereye, goto komutunu ilk kullandığımızda sürekli başa geri dönüyordu ama şimdi oldukça etkili döngüler yapmaya başladık.






Basic Programın Dökümantasyonu


Şimdi geldik işin gıcık ama bir o kadar da gerekli konusuna. Şimdiye kadar hep küçük programlar yazdık, 3 -5 satır üzerinde biraz göz gezdirip programın ne iş yaptığını rahatça anlayabiliriz. Programlarımız büyümeye ve binlerce satır olmaya başlayınca bu şekilde anlaşılması gittikçe zorlaşacaktır. Programcıların (evet yani senin) Basic programları daha anlaşılabilir yapması için uygulayabileceği bazı yöntemler vardır. 


Değişken İsimleri


JustBasic dili değişkenlere istediğimiz anlaşılabilir isimleri vermemiz için bize imkan tanıyor. Değişken ismi istediğimiz kadar uzun olabileceği gibi büyük ya da küçük harfler de içerebilir. Bu sayede anlaşılabilir değişken isimleri kullanabiliriz.

Örneğin bir dik üçgen hipotenüsünden hesapla çaprazlama bir kablo uzunluğu hesaplayalım.
c = (a^2 + b^2) ^ 0.5
Bunu böyle yazacağımıza şöyle de yazabiliriz.
kabloUzunlugu = (noktayaMesafe ^2 + noktaYuksekligi ^2) ^ 0.5
İkisi de çalışacaktır ancak ikinci anlaşılabilirlik bakımından çok daha açıklayıcı.



Dallanma Etiketleri


goto komutu gibi komutlarla programın başka yerine dallanırken vereceğimiz label isimleri de arkasından gelen programın ne iş yaptığını açıklar şekilde olursa daha iyi anlaşılacaktır. Daha önce [start] , [finish] gibi etiketlerde kullandığımız gibi. 




Kodun İçine Yorum Satırı Eklemek


Basic dili ayrıca sizin program içine anlaşılabilir olmasına katkı yapacak yorumlar yapmanıza imkan tanır. rem komutu (remark'ın kısaltması) arkasından gelecek yazılar program tarafından dikkate alınmaz. rem komutu arkasına istediğimizi istediğimiz şekilde yazabiliriz. Örneğin:


Tamam bu kadar küçük programa bu kadar yorum fazla gibi durabilir ama bu çok büyük bir programın parçası olduğunda siz kendiniz bile ne yaptığınızı kendinize hatırlatmak zorunda kalırsınız. Ayrıca çok faydalı bir yöntem de program bir sürü iş yapacaksa bunların hepsini bir arada düşünmektense yapılacak işleri küçük parçalara ayırıp önce her birinin başındaki bu yorum satırlarını yazıp ana temeli kurduktan sonra altlarındaki program parçacıklarını yazmak çok daha kolay ilerlemenizi sağlayacaktır. 

Bundan başka programın belli işleri yapan grupları arasına boş satırlar bırakmak da çok faydalı olacaktır. 

Herhalde bu rem kelimesinin kodmuş gibi görünmesinden rahatsız oldular ki Basic dili tasarımcıları ' (apostrof) karakteri ile de yorum yapılabilmesini sağlamışlar. Yukarıdaki örneği böyle uygularsak ikisinin arasındaki yorumun belirginliğine göre siz karar verin.


Daha değişik bir yöntem olarak satır sonlarına da apostrof kullanarak yorumu yazabiliriz. Bir yorum satır sonuna eklendiyse o satırın anlamını ifade eder. Ama araya komple bir satır olarak eklendiyse kendisinden sonra gelen bir grup satırın yaptığı işi ifade edebilir.


Tabi burada anlattıklarım içinde benim tercihlerim de var. Program yazmaya devam ettikçe kendinize çok daha değişik stiller geliştireceğinize eminim.






Bir Program Yazalım - HILO.BAS


Şimdiye kadar öğrendiklerimizi kullanarak basit bir oyun programı yazacağız. Oyun programımızda şunları kullanacağız.
  • input komutu
  • print komutu
  • Matematik işlemler
  • Değişkenler
  • goto komutu
  • if ... then yapısı ile koşullu dallanma
  • fonksiyonlar
  • Yorumlar



HILO.BAS Oyunu


Bu basit bir tahmin oyunu. Bilgisayar 1 ve 100 arası bir sayı tutacak, kullanıcı en kısa sayıda tahminle sayıyı bulmaya çalışacak. Tahminde bulunduğumuzda bilgisayar bize tahminimizin tuttuğu sayıdan küçük ya da büyük olduğunu söyleyecek. Hey gidi günler 1984 yılında Casio FX3600P programlanabilir hesap makinamı aldığımda ilk yazdığım program böyle bir şeydi. Makina diline benzer garip bir programlama dili vardı. Tahminimizle tutulan sayıyı bildiğimizde bilgisayar bize kaç tahminde sayıyı bulduğumuzu söyleyecek. 

Kod yazmaya başlamadan önce programımızın nasıl çalışacağının ana hatlarını çizelim. 
  1. 1 ile 100 arasında rastgele bir sayı seç.
  2. Program başlığını ve bazı kullanım açıklamalarını yaz.
  3. Kullanıcıdan bir sayı tahmin girmesini iste.
  4. Tahmini ekrana çeteleye yaz.
  5. Tahmin doğruysa adım 9'a git.
  6. Eğer tahmin tutulan sayıdan küçükse kullanıcıdan tahmini yükseltmesini iste.
  7. Eğer tahmin tutulan sayıdan büyükse kullanıcıdan tahmini azaltmasını iste.
  8. Adım 3'e geri dön.
  9. Biple ve kullanıcıya kaç tahminde bildiğini yaz.
  10. Kullanıcıya bir daha oynamak ister mi sor.
  11. Eğer cevap evet ise tahmin çetelesini sil ve 1. adıma git.
  12. Kullanıcıya oyun penceresini nasıl kapatacağını yaz.
  13. Oyunu bitir.
Burada yaptığımız gibi programı yazmadan önce ana hatlarını listelersek, ortaya çıkan listeye pseudo code (sahte kod) denir. Bu bir yazılımı oluşturmadan önce çok faydalı bir yardımcı yoldur. Kodu yazmaya başlamadan önce aklımıza bir çok olasılık gelebilir. 

Şimdi yukarıdaki pseudo code'un her adımına karşı gelen JustBasic kodlarını yazalım.


1. 1 ile 100 arasında rastgele bir sayı seç



İlk iki satır programın tanıtımını yapan yorum satırları. [start] etiketi programın bu satırına ileriden geri dönebilmek amacıyla kondu. 

En altta sayı tahmini yapan program satırı var. Burada 2 fonksiyon kullanılmış. 

rnd() fonksiyonu bu satırın temelini oluşturuyor. Parantez içinde 1 sayısını parametre aldığı için 0 ile 1 arasında rastgele (ya da rastgeleye yakın) bir noktalı sayı üretiyor (mesela 0.3256). Sonra bunu 100 ile çarptığımızda 0 ile 100 arası bir noktalı sayımız oluyor (0.3256 için 32.56 gibi). 

int() fonksiyonu parantez içindeki sayının noktadan sonrasını atarak tamsayı kısmını geri döner (32.56 sayısının 0.56 kısmı atılacak sadece 32 tamsayısı dönecektir). 

Sonra buna 1 ekliyoruz. rnd() fonksiyonu bize en fazla 0.9999999 sayısını üretecektir. Bunu 100 ile çarpıp int() fonksiyonuna verdiğimizde en fazla 99.99999 sayısından 99 elde ederiz, aynı şekilde en küçük sayı da int fonksiyonu tarafında 0 olarak dönüştürülecektir. Ama biz 1 ile 100 aralığında bir sayı istiyoruz, bu amaçla sayıya 1 ekliyoruz. 

Tutulan bu sayıyı da gördüğümüz gibi guessMe isimli değişkene saklıyoruz.


2. Program başlık yazısı ve bazı kullanım açıklamaları yazılması



Bu satırlar oldukça basit. Ekrandaki herşeyi sildikten sonra programın başlık satırını ve bazı açıklamaları ekrana yazıyor. Açıklamaların başında ve sonunda boş satırlar print ederek görüntüde karışıklık olması engelleniyor.




3. Kullanıcıdan bir sayı tahmini girmesini iste



Burada [sor] etiketi kullanıcıdan tekrar bir tahminde bulunması gerektiğinde kullanılacak etikettir. Sonra kullanıcıdan tahminini girmesini istiyoruz ve girdiği tahmini guess isimli değişkende saklıyoruz (çok anlamlı bir isim guess = tahmin ). 



4. Tahmini çeteleye yaz



Kullanıcı her tahmin girdiğinde count değişkeni değerini bir arttırarak kaç tahmin olduğunun çetelesini tutuyoruz.



5. Eğer tahmin doğruysa adım 9'a git



Eğer kullanıcının tahmini olan guess değişkeni değeri , tutulan sayı olan guessMe değişkeni değerine eşitse [win] etiketli olacak olan 9. adıma git.



6. Eğer tahmin tutulan sayıdan küçükse kullanıcının tahminini yükseltmesini iste



Eğer tahmin tutulan sayıdan küçükse ekrana daha büyük bir tahmin yapması gerektiği yazılıyor.




7. Eğer tahmin tutulan sayıdan büyükse kullanıcının tahminini düşürmesini iste




Eğer tahmin tutulan sayıdan büyükse ekrana daha küçükük bir tahmin yapması gerektiği yazılıyor.



    8 . Adım 3'e geri dön



    Tekrar tahmin istemek için geri dönüyor.




    9. Biple ve kaç tahminde bilindiğini yaz



    Bu kod kullanıcı sayıyı doğru bildiğinde çalışır. İlk satır .wav uzantılı dosyaları çalmak için playwave komutunu kullanır. print komutu ile kaç defada bilindiği yazılır. Son olarak da sayaç sıfırlanarak sonraki tura hazırlanır.



    10. Kullanıcıya tekrar oynamak ister mi sor


    Kullanıcıya tekrar oynamak ister mi soruluyor ve cevabı play$ isimli değişkende saklanıyor.



    11. Eğer cevap evetse adım 1'e dön



    instr() fonksiyonu parantez içnde birinci verilen string içinde ikinci verilen stringi arar ve eğer varsa kaçıncı karakterden itibaren olduğunu geri döner. Eğer yoksa sıfır değeri döner. Bu durumda eğer kullanıcı "e" , "E" , "evet" ya da "EVET" cevaplarından hangisini girerse girsin sıfırdan büyük bir sayı dönecektir, böylece kullanıcının evet cevabı verdiğini değerlendirip programın başına geri dönüyoruz. 



    14. Kullanıcıya bu pencereyi nasıl kapatacağını bildir



    Kullanıcı tekrar oynamak istemediği için artık oyun penceresini kapatmak isteyecektir.



    13. Programı bitir



    Programımızın sonuna end koymasak da oraya gelince bitecektir fakat sonun geldiğini belirtmek için görsel olarak yararlı olacaktır. end programını program içinde bir yerlere koyarsak program çalışırken o satıra geldiğinde çalışmayı bitirecektir. 




    HILO.BAS Programının Tamamı





    JustBasic dilinin ilk eğitimi bu kadar. Umarım kodları resim olarak verdiğim için ve kopyalayamadığınız için kızmazsınız. Böyle hem bana kolaylık oluyor (ben ihtiyar adamım) hem de sizin biraz eliniz yazmaya alışır. Yazmaktan hoşlanmayanları Limnor eğitimine bekleriz.

    Görüşmek üzere..





    Hiç yorum yok:

    Yorum Gönder