Not: Bir yanıt gönderebilmek için kayıtlı olmalısınız. Kayıt olmak için, burayı tıklayın!
|
K O N U ı N C E L E M E |
sEcReTs |
İletim - 07/05/2006 : 18:47:41 Neden GWBASIC?
Aslında günümüzde Basic Programlama dili kullanılmayan bir dildir. Ayrıca, programcıya zahmet verecek derecede, aşırı dikkat ve çalışma İsteyen bir dildir. Yani basit bir programı yapmak için bazen saatlerce çalışmanız gerekebilir. Diğer yandan, günümüzde kullanılan programlama dillerinde bulunan bazı özellikler bu programlama dilinde bulunmayabilir. Yine de bütün bu olumsuz özelliklerine rağmen "neden GWBASİC ? "Sorusunu sormanız gayet doğal. Bana göre bu sorunun cevabı şu; Bu sayfaları programlama dillerinden hiç birini bilmeyenler için hazırladım. Hiç İngilizce bilmeyen bir insanın İngilizce dil kursuna gittiğini varsayalım. Tabiki en baştan başlayacaktır. 2. seviyeden veya 3. Seviyeden başlaması O kişiye hiçbir şey kazandırmaz. İşte bu da öyle bir şey. Programlamaya Gwbasic ile başlamanın yararı, ileride öğrenilecek diğer programlama dillerine temel olmasıdır. Değişik bir yorumla ben GWBASIC için;
PROGRAMLAMA DİLLERİNİN ALFABESİDİR .
Diyorum.
BURAYA TIKLAYARAK GWBASIC DERLEYİCİSİNİ ÜCRETSİZ İNDİREBİLİRSİNİZ
Gwbasic derleyicisini çalıştırdıktan sonra ekranın sol üst köşesinde derleyicinin ismi ve yapımcı firma ile ilgili bilgiler yer alır. Bu bilgileri silmek için, daha doğrusu ekran görüntüsünü temizlemek için öğreneceğimiz komut ilk komutumuz olacak.
CLS: Bu komut Clear Screen Deyiminin kısaltılmışı olarak Ekran Temizle Anlamında kullanılır ve CLS yazıp enter'a basıldığında o anda ekranda bulunan görüntüler silinir.
PRINT: Bu komut da istenilen bilginin ekranda görüntülenmesini sağllar.
1. Bilgilerin ekranda olduğu gibi görüntülenmesini sağlar.
2. Sayısal bilgilerin matamatiksel sonuçlarını görüntüler.
3. Hafızadaki karakter ya da sayısal bilgileri ekranda görüntüler.
Şimdi bu komutun kullanılışını görelim;
Bu komutun önüne yazdığımız tırnak işareti içindeki karakterler veya şekil ve sayılar bir alt satırda aynen yazılır.
Örneğin;PRİNT "Merhaba, bu daha başlangıç!"
Şeklinde bir satır yazıp enter'a bastığımızda hemen bir alt satırda şu ibare belirir:
Merhaba, bu daha bir başlangıç!
Hemen onun altında da Ok. İbaresi yer alır. Bu ibare işlemin hatasız olduğunu belirtir. Eğer hatalı bir işlem yaparsanız daha değişik mesajlar verir.
Mesela; PRINT "Merhaba" yazacakken, yanlışlıkla
PRYNT"merhaba" yazdığınızı, yani PRINT komutunu hatalı kullandığınızı varsayalım.
Bu takdirde Merhaba mesajı bir alt satırda görünmeyeceği gibi, alt satıra önce Syntax error yazacak (yani yazım hatası diyecek), ardından da onun altındaki satıra Ok diyecektir. Dolayısıyla işlem başarısız olacaktır. Demek ki burada önemli olan print komutu ile ekrana mesaj yazdıracaksak, mesajı " işaretlerinin içine alıyoruz. Esasen sondaki tırnak işareti takip eden başka bir komutu engellemiyorsa önemli değildir. Yani, PRINT "Merhaba şeklindeki bir komut satırı da başarılı sonuç verecektir.
Bir de PRINT komutunun matamatiksel işlemleri gerçekleştirme yönü vardır.
PRINT komutunun matamatiksel yönü de şöyle; Bu komutun önüne tırnak içine almadan yazacağımız rakamlar üzerinde yapacağımız işlemlerin sonucu bir alt satırda görüntülenir.
Toplama için; +
Çıkarma için; -
Çarpma için; *
Bölme için; /
Üs alma için; ^
İşaretlerini kullanırız.
Örnek:
PRINT 4+5
9
Ok.
Bir başka örnek:
PRINT 4+5-3
6
Ok.
Bu arada şunu da hatırlatayım. Kısa yoldan PRINT yazmak istiyorsanız; ALT ve P tuşlarına birlikte basarsanız (ALT+P) ekrana PRINT yazılır.
* İngilizcede İ ve ı harfleri olmadığı için PRINT komutunu yazarken; büyük harfle yazıyorsak PRINT, küçük harfle yazıyorsak print şeklinde yazmalıyız. *
Şimdi bir alıştırma yapalım: Ahmet, Mehmet, Ali isimli üç arkadaş beraber çalışıyorlar ve her günün sonunda kazandıkları parayı toplayıp üçe bölüyorlar. Gün sonunda, Ahmet'in 7.000.000.- TL., Mehmet'in 8.000.000.- TL. ve Ali'nin 12.000.000.- TL. olduğuna göre kişi başına ne kadar para düşüyor.
Muhtemelen bu işlemi yaparken siz şöyle yazacaksınız;
PRINT 7000000+8000000+12000000/3
Ve 19000000 şeklinde size göre anlamsız bir sonuç alacaksınız. Ama, eğer okul yıllarındaki bilgilerinizi hala unutmamışsanız, bir matematik kuralı olarak işlemlerdeki önceliği hatırlayacak ve doğru olan şekilde;
PRINT (7000000+8000000+12000000)/3
Şeklinde komutu yazarak, doğru olan neticeyi, yani 9000000 rakamını elde edeceksiniz.
Demek ki bu gibi işlemlerde şu kurallara dikkat edeceğiz:
Gwbasic derleyicisi, PRINT komutu ile işlem yapıldığında işlem satırında hesaplamaları yaparken, satırda yazılan sıraya göre değil, öncelik sırasına göre işlem yapar.
Nedir öncelik sırası;
Parantez içindeki işlemler (eğer iç içe birkaç parantez varsa en önce en içteki parantez) Üs alma işlemleri Çarpma ve bölmeler Toplama ve çıkarmalar. Örnek;
PRINT 4*5+3/3*(12+(3+4))-6/2
Burada önce en içteki parantez içindeki işlemi yapacak;
4*5+3/3*(12+7)-6/2
Sonra kalan diğer parantezi kaldıracak;
4*5+3/3*19-6/2
daha sonra çarpma ve bölmeler eşit öncelik hakkına sahip olduğu için önce ilk gördüğü çarpma veya bölme işlemini yapacak ve sırasıyla şöyle olacak;
20+3/3*19-6/2
20+1*19-6/2
20+19-6/2
20+19-3
bundan sonra da toplama ve çıkarma işlemleri de aynı önceliğe sahip olduğundan yine satırda ilk gördüğü toplama ya da çıkarma işlemini yapacak dolayısıyla;
39-3
ve
36
sonucunu elde ederiz.
Üs alma olayına gelince; bir sayının belirtilen kuvvetini almak anlamına gelir.
Bir örnekle açıklamak gerekirse;
4^5 şeklindeki bir üs alma işlemi, 4*4*4*4*4= ifadesinin yerini tutar.
Bu da 4 sayısının 5. dereceden kuvvetini almak demektir.
Sonuçta da 4^5 işleminin sonucu;
1024 rakamına tekabül eder.
Buraya kadar PRINT komutunun, ekrana karakter yazdırma ve sayılar üzerinde aritmetik işlemler yapma kısmını öğrendik. Ancak, burada PRINT komutunun bir başka görevi daha var, Bu komut ile hafıza da bulunan bilgileri ekrana yazdırabiliyor, ayrıca yine hafızada bulunan sayılar üzerinde işlemler yapıp, sonucunu ekranda görüntüleyebiliyoruz.
Yani sizin anlayacağınız yavaş yavaş öğrenimimiz sıkıcı olmaktan çıkmaya başlıyor. Pekala, hafızadan ekrana bilgi yazdırmayı anladıkta, bu hafıza nedir? Bu hafızadaki bilgiler nedir? Bu bilgileri kim girer? Nasıl girer? İşte önce bu soruların cevabını öğrenmemiz lazım ki, print komutunun bu son bahsettiğimiz görevini anlayabilelim.
Ekrana yazdığımız her bilgi geçicidir. Yani ekranı silmediğimiz sürece görebiliriz. CLS komutu ile sildiğimiz andan itibaren o bilgiler kaybolur. Tekrar görebilmemiz için, aynı işlemleri tekrarlamamız gerkir. Peki ne yapmalıyız ki, belli bir süre de olsa bilgilerimizi saklayabilmeliyiz.
Evet şimdi sıra hafızaya bilgi kaydetmeye geldi. (Dikkat edin, dosyaya bilgi kaydetme değil, hafızaya bilgi kaydetme.)
Bu işlemi yapmak için kullanacağımız komutlardan biri şudur:
Bu komut LINE INPUT komutudur.
Bu komut ile bilgisayarın geçici hafızasına, yani RAM belleğe bilgi girilir.
Nedir bu bellek?
Bu bellek bilgisayar kapanıncaya kadar, girilen bilgileri hafızada tutar.
Bilgisayar kapandığı anda, ya da bilgi girişi yapılan (çalışılan) programdan çıkıldığında bu hafızada ki bilgiler kaybolur. Dolayısıyla bu geçici bir hafıza dır. Peki bilgileri hafızada devamlı nasıl saklayacağız dediğinizi duyar gibi oluyorum. Ama yoo, acele yok. Bunun yolu dosyalama sistemi ama, her şeyin bir sırası var.
Şimdi LINE INPUT komutunun kullanılmasına bakalım.
Biz geçici hafızayı kendi kafamıza göre bölümlere ayırıyoruz ve bu bölümlere bir isim veriyoruz. Burada ayırdığımız bölümleri saha olarak, Bu sahalara verdiğimiz isimleri de değişken olarak tanımlayacağız.
Demekki;
Değişken : Geçici hafızada sahalara verilen isim anlamına geliyor.
Burada kural şudur;
Değişkenlerde; kesinlikle bir harf ile başlanmalıdır,
("!'^+%&/=?*-_) gibi özel işaretler kullanılmamalıdır.
CLS, PRINT, INPUT, GO, THEN, IF vs. gibi basic komutları değişkenlerde kullanılmamalıdır.
LINE INPUT komutuna mahsus olarak değişkenlerin sonunda $ işareti bulunmalıdır.
Bir değişkenin karakter uzunluğu 40 karakteri geçemez.
Ama siz kısa ve anlaşılır isimler seçin.
Örnekler;
Orhan$ geçerli değişken(saha ismi)
Orhan2$ geçerli değişken
Ah2met$ geçerli değişken
Kitap58oku$ geçerli değişken
7ali$ geçersiz değişken (sayı ile başlıyor)
olmaz!$ geçersiz değişken (özel işaret kullanılmış ! )
bune geçersiz değişken (sonunda $ yok) (LINE INPUT Komutu için)
buda ne$ geçersiz değişken (isimin arasında boşluk bırakılmış)
yukarıda bahsettiğimiz geçerli değişkenlere LINE INPUT komutu ile bilgi girişi yapabiliyoruz, ancak bu komutla girdiğimiz bilgiler sayı bile olsa karakter bilgi olarak algılanır. Yani bu bilgiler üzerinde matamatiksel işlemler yapılamaz. Yapabilmek için bu bilgileri sayısal bilgilere dönüştürmemiz gerekir.
Şimdi diyelim ki, LINE INPUT komutu ile, bir öğretmenin öğrencilerine verdiği notları bilgisayara gireceğiz. Burada gireceğimiz bilgiler şunlar olsun;
Sıra No
Adı
Soyadı
Aldığı Not
Bu bilgileri hafızaya kaydetmek istiyoruz. Bunun için de hafızada değişkenlere yerleştirmemiz lazım. İşte bu işlem için hafızadaki değişkenlere her bilginin yerleşeceği yer için istediğimiz bir ismi veriyoruz.
Mesela;
Sıra No bilgilerinin yerleşeceği sahaya; sırano$
Adına ait bilgilerin yerleşeceği sahaya; adı$
Soyadına ait bilgilerin yerleşeceği sahaya; soyadı$
Aldığı nota ait bilgilerin yerleşeceği sahaya; notu$
saha isimlerini (değişken) verelim.
Şimdi de hafızadaki bu değişkenlere bilgi girelim.
Örneğin, 1. sıraya 5 notu almış Ahmet Aygün'ü kaydedelim. İşlem şu şekilde olur;
Line input sırano$
yazıp enter'a bastığımızda, cursor (yani bilgiyi nereye yazacağımızı gösteren yanıp sönen gösterge) bir alt satırda bizim bilgi girişimizi bekler ve biz de buraya; 1 yazıp enter'a basarız.
Daha sonra;
Lıne input adı$
Yazıp alt satırda Ahmet cevabı veririz.
Daha sonra da line input soyadı$ komut satırına Aygün,
Line input notu$ satırına da 5 cevabı vererek işlemi tamamlarız.
Yukarıda gördüğümüz değişkenler yani saha isimleri ve girilen bilgiler line input komutu ile bilgi girdikten sonra oluşur. Yani önce saha isimleri açılıp sonra bilgi girilmez. Line input komutu ile bilgi girilirken bu belirtilen saha isimleri oluşur. Ayrıca bu sahalara bilgi girmenin tek yolu line input komutunu kullanmak değildir.
Mesela yukarıdaki bilgileri şu şekilde de girebilirdik;
sırano$="1"
adı$="Ahmet"
soyadı$="Aygün"
notu$="5"
Fakat, burada bilgileri girerken sonu $ ile biten saha isimlerine (değişkenlere) bilgi girişi yaptığımız için girdiğimiz bilgileri " işaretleri içerisinde gösteriyoruz.
Görüldüğü gibi bu şekilde sahalara bilgi girişi çok basit ve kısa, ancak programlama esnasında bu şekilde bilgi girişimiz bize yeterli gelmeyecek. Bu nedenle line input ve bir sonraki dersde öğreneceğimiz input komutlarını çok sık kullanacağız.
Şimdi bu bilgileri girdikten sonra CLS yazarak ekranı siliyoruz. Ve ne görüyoruz. Silinmiş bir ekran, en sol başta bir Ok yazısı ve altında yanıp sönen cursor. Yani biraz önce yazdıklarımızın hiç birisi yok. Şimdi sıra geldi PRINT komutunun diğer görevini, yani hafızadaki bilgileri ekranda göstermeyi öğrenmeye geldi.
Biliyorsunuz, hafızaya (sırano$, adı$, soyadı$ ve notu$ değişkenlerine) bilgi girişi yapmıştık. Şimdi şu komut satırını yazıyoruz;
Print sırano$
Ve enter'a bastığımızda, bir alt satırda
1
ibaresini göreceksiniz.
Şimdi girdiğimiz bilgilerin tamamını bir satırda görelim. Bunun için şöyle bir satır yazıyoruz;
PRINT sırano$ " " adı$ " "soyadı$" " notu$
Enter'a bastığımızda bir alt satırda şöyle bir görüntü oluşur;
1 Ahmet Aygün 5
Komut satırında değişkenler arasındaki " işaretleri ; aralarındaki boşluk kadar, değişkenlerdeki değerleri yazarken aralarına boşluk bıraktırmak için koyulur.
Yani anlamı şu;
Ekrana yaz sırano$ değişkenindeki bilgiyi, tırnak işaretleri arasındaki kadar boşluk bırak,
adı$ değişkenindeki bilgiyi yaz tırnak işaretleri arasındaki kadar boşluk bırak ..... gibi.
Demek ki, print komutu ile hafızada bulunan herhangi bir değişkendeki bilgiyi ekranda yazdırabiliyoruz. Bunu için print komutundan sonra değişken ismini yazmamız kafi. Ancak bu değişken ismini tırnak içine almıyoruz. Çünkü print komutu tırnak içinde gördüğü her şeyi göründüğü biçimde ekrana yazar. Burada dikkat edilecek bir başka konu daha var, o da şu;
Basic dilinde, komutlar büyük ya da küçük harfle yazılabilir, yani PRINT ya da print şeklinde yazılan her iki komut yazılışı da aynı vazifeyi görür. Ya da PrInT gibi büyük ve küçük harf karmaşası da olabilir.
Değişken isimlerinde Türkçe karakterler kullanamıyoruz.(ğ ü ç ö gibi)
Yukarıdaki değişkenlere yeni bilgi girişi yaptığımızda, eski girilen bilgiler kaybolur, yerlerine yeni girdiğimiz bilgiler geçer.
Mesela line input sırano$ yazıp enter'a bastığımız da buraya 2 sayısını girdiğimizi farz edelim. Bu takdir de daha evvel girdiğimiz 1 sayısı kaybolur ve print sırano$ dediğimizde ekranda 2 sayısını görürüz.
Ayrıca clear komutu da hafızadaki bütün değişkenlerdeki bilgileri siler.
Bu sayfamızda; LINE INPUT komutunun bir benzeri olan, INPUT Komutunu öğreneceğiz.
Kullanılışı;
INPUT (değişken)
Örnek:
INPUT a
Yukarıdaki örnek ile hafızadaki a değişkenine bilgi girilir. Şimdi burada dikkat edilecek konu şu;
Yukarıdaki örnek de dikkat edilirse a değişkeninin sonunda $ işareti yok. INPUT komutu ile sonu $ ile biten değişkenlere de bilgi girebiliriz. Ancak, INPUT ile böyle bir sahaya bilgi girildiğinde bu bilgi karakter bilgi olarak kabul edilir.
$ işaretli değişkenler : Karakter bilgilerin yerleştiği sahaları ifade eder.
$ işareti bulunmayan değişkenler: Sayısal bilgilerin yerleştiği sahaları ifade eder.
Demek ki, LINE INPUT ve INPUT komutlarının görevleri aynı olmakla beraber, (değişkenlere, yani hafızaya bilgi girmek) farkları LINE INPUT 'un karakter bilgi girmekte, INPUT 'un hem karakter hem de sayısal bilgi girmekte kullanılmasıdır.
Şimdi bir örnek yapalım;
INPUT a yazıp enter'a basalım. Alt satırda karşımıza çıkan soru işaretine 3 cevabı verelim.
INPUT b yazıp enter'a basalım. Alt satırda karşımıza çıkan soru işaretine 6 cevabı verelim.
Daha sonra ekrana PRINT a+b yazıp enter'a basarsak;
9 cevabını,
PRINT a*b yazıp enter'a basarsak;
18 cevabını
ekranda görürüz.
İşte bu matamatiksel işlemleri line input değişkenlerinde normal şartlarda yapamıyoruz. Çünkü line input ile ancak karakter bilgi girebiliyoruz.
Şimdi de ilk bölümden bu yana öğrendiğimiz CLS, PRINT, INUT ve LINE INPUT komutlarını beraber kullanacağımız minik bir program yapalım.
Ve böylece çok basit de olsa yapacağımız bu ilk program ile programlamanın mantığını da öğrenmeye başlayalım.
Gwbasic dilinde, komutların belli bir sırayı takip ederek arka arkaya çalışması için program yapılması gerekir. Yani her komut satırı için sırayla ekrana komut satırını yazıp cevabını almak yerine, yapılacak işlemlerin hepsini bir defa yazıp, sonra da bir seferde sonuçlarını görmek istersek program yapmak gerekir.
Gwbasic programlamada esas olacak ilk şart bir arada çalışmasını istediğimiz komutlar zincirini istediğimiz sıraya göre numaralandırmakdır.
Bir örnek vermek gerekirse;
Sırayla şu bilgileri girmek istediğimizi varsayalım;
Adı
Soyadı
Doğum Yılı
Ve bu girilen bilgilerden sonra da Bilgisayar ekrana şöyle yazsın;
Sayın, ......... ........... siz şu anda ... yaşındasınız.
Bu basit programı yapmak için mantığımız şu;
İlk önce hemen her basic programında olduğu gibi (daha evvelce ekranda bilgi kalmış olabileceği düşüncesiyle) CLS komutu ile ekran sildirilir. Önce Adı, sonra Soyadı LINE INPUT komutu ile ekrana mesajlı şekilde yazdırılarak belirleyeceğimiz değişkenlere bilgi girişi yapılması sağlanır. Bu adımda Doğum Yılı bilgisi, kişinin yaşının hesaplanabilmesi için sayısal bilgi girişi olması nedeniyle INPUT komutu ile ekrana mesajlı olarak yazdırılır. Bilgisayara kişinin doğum tarihine göre yaşı hesaplattırılır ve ekrana istenilen mesaj PRINT komutu ile yazdırılır. Program satırı END (Son) komutu ile bitirilir. 10 CLS
20 LINE INPUT "Adı : ",A$
30 LINE INPUT "Soyadı : ",B$
40 INPUT "Doğum Yılı (4 karakterli gir) : ",C
50 YAS=2000-C
60 PRINT:PRINT
70 PRINT "Sayın, "A$" "B$" Siz şu anda "YAS" yaşındasınız."
80 END
Şimdi yukarıdaki program satırındaki yeni gördüğümüz uygulamalara bakalım.
Bir kere LINE INPUT ve INPUT komutları öğrendiğimizden biraz farklı uygulanmış. Komut ile Değişken arasına tırnak içinde bir mesaj bölümü eklenmiş. İşte komut ile değişken arasına eklenen bu tırnak içindeki mesaj, bu komut çalıştığında kullanıcıya hangi bilgiyi girmesi gerektiğini göstermek için ekranda bu mesajın belirmesi amacıyla kullanılır. Bu komut satırının kullanılışında dikkat edeceğimiz hususlar;
Ekranda görünmesini istediğimiz mesaj; komut ile değişkenin arasında, mutlaka " işaretleri arasında olacaktır. Mesajın sonundaki " işaretinden sonra, yani değişkeni yazmadan önce mesaj ile değişken arasına , ya da ; koymalıyız. Eğer INPUT komutunu mesajlı kullanırken ; işareti koyarsak Bilgisayar bu satırdaki işlemi yaparken ekranda bir soru işareti belirir. Bu soru işaretinin çıkmasını istemiyorsak , işareti kullanmalıyız. Burada gördüğümüz diğer dikkat edilecek bir husus da PRINT:PRINT satırı. Biliyorsunuz, PRINT komutunu ekrana bilgi yazdırmada ve hesaplamalarda kullanıyorduk. Ancak PRINT komutu tek başına kullanıldığında satır atlama vazifesi görür. Yani boş bir satır bırakır ve bir alt satıra geçer. Burada iki PRINT komutunun arasında bir : işareti var. Bu işaret de iki komutu birbirinden ayırmada kullanılır. Yani yukarıdaki örnekte;
60 PRINT
70 PRINT
şeklinde iki satır yazacakken : işareti kullanarak iki komutu aynı satırda kullanmış olduk.
Şimdi yukarıdaki programın açıklamasını yapalım. Bu programı çalıştırdığımızda, program önce CLS komutunun gereği olarak ekranı silecek (temizleyecek), daha sonra 20 no'lu satırdaki işlemi yaparak, ekrana Adı : yazıp, cursor (imleç) bu yazının önünde yanarak bizim(kullanıcının) bilgi girmesini bekleyecek, bu haneye bilgi girilip enter'a basıldıktan sonra 30 no'lu satıra geçerek ekrana Soyadı : yazıp, bu alana bilgi girilmesini bekleyecek. Bu alana da bilgi girilip enter'a basıldıktan sonra 40 no'lu satırdaki işlemi yapacak, yani INPUT komutu ile hafızadaki C sahasına kullanıcı doğum yılına ait bilgiyi girecek, bundan sonrası bilgisayara kalıyor;
Burada, 50 no'lu satırda Bilgisayar C sahasındaki doğum tarihi bilgisini alıyor ve bulunduğumuz yıl olan 2000 yılından düşerek çıkan sayıyı yine hafızaya YAS isimli sahaya aktarıyor.
Geliyoruz 60 no'lu satıra; PRINT:PRINT komutu ile Bilgisayar ekranda iki satır alta geçiyor ve 70 no'lu satır ile de ekrana kişinin kaç yaşında olduğunu yazıyor. Dikkat edilirse burada bizim tırnak içindeki yazdığımız mesajlar sabit olup aynen ekranda görünür. Ancak aralara değişkenleri yerleştirmişiz. İşte bu değişkenlerdeki bilgiler kullanıcının girdiği bilgilerdir. Yani A$ ve B$ değişkenleri yazan yerlere Bilgisayar kullanıcının girdiği bilgileri, YAS değişkeninin bulunduğu yere ise Bilgisayarın kendisinin hesapladığı değeri yazacaktır.
Gelelim şimdi bu programın çalıştırılmasına;
Bu programı çalıştırmak için ekrana RUN yazıp enter'a basmak kafidir. Ya da direk klevyenin üst tarafında bulunan F2 tuşuna basarsanız aynı vazifeyi görür. Her run yazıp enter'a basışınızda veya her F2 tuşuna basışınızda program yeniden çalışır. Çünkü numaralandırılarak yazılan program satırları geçici hafızaya yerleşir ve new yazıp silinceye kadar ya da gwbasic derleyiciden çıkıncaya kadar kaybolmaz. Ekran silindikten sonra geçici hafızadaki program satırlarının ne olduğunu görmek için LIST yazıp enter'a bastığımızda veya F1 fonksiyon tuşuna bastığımızda program satırları ekranda listelenir. Bütün bu yeni öğrendiğimiz komutların detaylarını ve parametrelerini (parametre'nin ne demek olduğunu) ilerideki konularda göreceğiz.
Şimdi burada program yazılması esnasındaki kurallara bakalım;
Satır numaraları küçükten başlar büyüğe doğru gider, Satır numaraları - değerli olmamalıdır, kabul etmez. satır numaraları 1, 2, 3, 4 .... gibi ya da 5, 10, 15, veya 10, 30, 100 ... gibi artarak gitmelidir. Fakat ben satır numaralarının 1, 2, 3 .... diye değil de boşluklar verilerek, yani (yukarıdaki örnekteki gibi 10, 20, 30 .... şeklinde ) yazılmasını öneririm. Çünkü, diyelim ki arada bir komut satırı unuttunuz. Mesela 10 20 30 gibi sıraladığınız bir komutlar zincirinde 10 no'lu satır ile 20 no'lu satır arasında bir komut yazmayı unutmuşsunuz. Hemen ekrana 15 yazıp önüne komut satırını yazıyorsunuz ve enter'a bastığınızda otomatik olarak o komut satırı araya yerleşiyor. Herhangi bir komut satırını silmek istediğinizde komut satırının numarasını yazıp enter'a bastığınızda o satır silimir. Bir satır üzerinde düzeltme yapacağınızda LIST SATIR NO (mesela LIST 20) ya da EDIT SATIR NO (mesela EDIT 30) yazıp enter'a bastığınızda satır ekrana gelir, yön tuşlarının yardımı vasıtasıyla düzeltme yapılacak yere gelinir ve gerekli düzeltme yapıldıktan sonra enter'a basılıp satırın yeni şekli hafızaya kaydedilir. (KOMUT SATIRLARI CURSOR SATIRIN ÜZERİNDE İKEN ENTER'A BASMADIKÇA HAFIZAYA KAYDEDİLMEZ.) Satırlarda Yazım İşlemleri ve bazı klevye tuşları.
Ekranda komut satırlarının yazarken bazı yardımcı tuşları kullanmamız gerekir. Bu tuşlardan bazıları şunlardır;
Del tuşu: İstenilen karakterin silinmesini sağlar
Mesela Ekrana Orhan Aygün yazacağımız yerde Orhaın Aygün yazdığımızı farz edelim. Burada ı harfini silmek için yön tuşları ile ı harfinin soluna geliyoruz ve DEL ya da (DELETE) tuşuna basıyoruz.(İkisi de aynı tuştur.) Delete tuşuna her bastığımızda imlecin sağ tarafından bir karakter siler. Ya da ı harfinin sağına geliriz. Back (Geri) tuşuna her basışımız da sola doğru bir karakter siler.
INSERT tuşu: Araya karakter girer.
Yine aynı şekilde bu defa eksik karakter yazdığımızı, mesela Ohan Aygün yazdığımızı düşünelim. Bu defa yine imleci harfin girmesini istediğimiz yere götürüyoruz. Ve burada iken INS. Ya da ISERT tuşuna basıyoruz (imleç büyür) istediğimiz karakter ya da karakterleri giriyoruz. Daha sonra bu moddan çıkmak için tekrar INSERT tuşuna basıyoruz ve imleç eski haline geliyor. Eğer INSERT tuşunu kullanmazsak yeni yazdığımız karakterler eski karakterlerin üzerlerine yerleşir. Yani bu işlem araya harf sıkıştırma değil, cümleyi yeniden yazma olur.
LOCATE KOMUTU
Bu komut, ekran görüntümüzü düzenlemede kullanacağımız komuttur. Bir başka deyişle ekrana yazdıracağımız bilgilerin ekranın neresinde görüneceğini bu komutla belirliyoruz.
Gwbasic derleyicisini çalıştırdığımızda açılan ekran 25 satır'dan ve 80 sütundan oluşur.
Bu satır ve sütun sayıları Screen komutu ile değiştirilebilir. (Daha sonra ayrıntılarına bakacağız.)
Aşağıda ekranın sütun ve satırlarını görüyoruz. Tabi bu sütun ve satırları çıplak gözle böyle çizgili şekilde göremeyiz. Aşağıdaki her hücreye bir karakter yerleşebilir. Mesela çizelgedeki kırmızı işaretli hücre ekranda 6'ncı satır, 9'uncu sütuna denk gelir. Ekranın dikey her parçasına sütun, yatay her parçasına satır ismini verdiğimize göre bu satırı yukarıdaki gibi izah edebiliriz.
Şimdi bu kırmızı işaretli noktanın LOCATE komutu ile tarifini yapalım.
LOCATE Komutunun kullanılışı;
LOCATE SATIR NO,SÜTUN NO
Demek ki burada önce LOCATE sonra satır numarası, sonra araya virgül sonra da sütun numarası yazıyoruz. Böylece cursor'ün ekranın hangi noktasında bulunması gerektiğini ayarlamış oluyoruz.
Bu bilgilere göre yukarıda kırmızı renk ile işaret ettiğim alandan başlamak üzere ekrana Orhan AYGÜN yazdıracak olursak bunu şu şekildeki bir komut satırı ile gerçekleştirebiliriz;
LOCATE 6,9:PRINT "Orhan AYGÜN"
Burada kullandığım : işareti biliyorsunuz ki iki ayrı komut satırını birleştirmede kullanılan işaretti. Yani bu satır şu iki satırın birleşimidir diyebiliriz.
10 LOCATE 6,9
20 PRINT "Orhan AYGÜN"
Bir de yukarıdaki çizelgemizde yeşil renkli en alt satır var. İşte bu 25. satır, Gwbasic derleyicisi çalıştığında kısyolları gösteren satırdır. Yani klevyenin üst tarafında bulunan fonksiyon tuşlarını gösterir. Bunların kullanılışını daha sonra göreceğiz. Bunlardan F1=LIST ve F2=RUN komutlarına daha önce çok kısa olarak değinmiştik.
Biz bu alt satıra key (anahtar, açıklama) tuşlarını gösteren satır da diyebiliriz.
Eğer bu satır görüntüsünü kaldırmak istiyorsak ekrana key off yazıp enter'a basmamız kafi. Tekrar ekranda görünmesini istersek key on yazıyoruz.
Şimdi locate komutu ile küçük ve basit bir program yazalım. Ekrana şahıslara ait bilgi girişi yapalım ve girilecek bilgiler Sıra No, Adı, Soyadı ve Doğum Yılı olsun. Değişkenler de a$, b$, c$, d$ olsun.
10 CLS
20 LOCATE 5,7:LINE INPUT "SIRA NO : ",a$
30 LOCATE 7,7:LINE INPUT "ADI : ",b$
40 LOCATE 9,7:LINE INPUT "SOYADI : ",c$
50 LOCATE 11,7:LINE INPUT "DOĞ.YILI : ",d$
60 END
Bu örneğe göre önce ekran silinecek, Sonra da;
5'inci satır, 7'nci sütuna Sıra No,
7'nci satır, 7'nci sütuna Adı,
9'uncu satır, 7'nci sütuna Soyadı,
11'inci satır, 7'nci sütuna Doğum Yılı,
Bilgileri girilecektir.
MENÜLER OLUŞTURMA
Gwbasic ile program yaparken kullanıcıya kolaylık sağlamak amacıyla, kullanıcının istenilen bölüme kısa ve kolay yoldan ulaşmasını sağlayacak menüler hazırlamak gerekir. Bunu bir örnekle anlatmak gerkirse;
Bir Ticaret firmasının satış ve stok bilgileri ile ilgili yine çok basit bir örnek program yapalım.
A firmasının Mutfak gereçleri sattığını varsayalım ve bir programın bir bölümünde çok basit olarak elde bulunan mevcudu satışı ve stok miktarını gösteren çok küçük bir örnek program yapalım. (Şu ana kadar öğrendiklerimiz normal bir program yapmak için yeterli olmadığından bu programlar size çok basit gelebilir. Bu küçük program parçacıklarının ders amaçlı olduğunu, bu yüzden basit olduğunu gözardı etmeyin. Konuları takip ettikçe normal programlar yapmaya başlayacağız. Konuların sonunda yapacağımız programlar, Dünyanın her yerinde aksaklık göstermeden uygulanabilir ve randıman alınabilir programlar olacaktır. Henüz daha yolun başındayız. J )
Şimdi yukarıdaki örneğimize göre programı 3 bölüme ayıracağız;
Bilgi Girişi Satış Bilgileri Stok Bilgileri Burada girilecek değerlerimiz şunlar olacak
Mutfak Eşyasının Kodu Mutfak Eşyasının Adı Stok Miktarı Fiyatı Satılan Adet Tutarı Kalan Stok Miktarı Yukarıda gireceğimiz bilgileri geçici hafızada yerleştireceğimiz değişkenler de şunlar olsun;
Mutfak eşyasının kodu : kod$ Mutfak eşyasının adı : adı$ Stok Miktarı : stok Fiyatı : fiyat Satılan Adet : adet Tutarı : tutar Kalan Stok Miktarı : kalan Burada şu hususa dikkat edelim; üzerinde bilgisayara hesaplamalar yaptıracağımız sayısal bilgilere ait değişkenlerde $ işareti kullanmadık, çünkü bu değişkenlere bilgi girişi yaparken hesaplamalar yapacağımız için INPUT komutunu kullanacağız.
Şimdi yukarıda bahsettiğim gibi bilgi girişini ayrı bir bölümde ve satış bilgileri ile stok bilgilerini ayrı bölümlerde görüntülemek için programı menüler vasıtasıyla hazırlayacağız.
Ancak bu menülerden programın çalışma akışını istenilen bölüme yönlendirmek için öğrenmemiz gereken
Yeni iki komutumuz olacak. Onlar da GOTO ve IF komutu. Bunlar kontrol komutlarıdır.
GOTO KOMUTU
Bu komut, program çalışırken çalışmanın istenilen satıra atlamasını sağlar.
Kullanılışı;
GOTO SATIRNO
Yani GOTO deyiminin önüne yazdığımız satır numarası kaç ise, program hangi satırda olursa olsun belirtilen satırdan çalışmasına devam eder. Diyelim ki, program sırayla satırlardaki komutların gereğini yerine getirerek çalışmaya devam ederken (misal) 70 no'lu satırda GOTO 210 komutunu gördü. Bu takdirde 70 ile 210 nolu satırlar arasındaki komutları atlar 210 nolu satırdan çalışmasına devam eder.
Aşağıdaki şekilde görülen programın çalışması sonsuzdur.
10 print "merhaba, nasılsın"
20 print"sağol, iyiyim"
30 goto 10
Yukarıdaki program 10 nolu ve 20 nolu satırlardaki print komutu gereği belirtilen mesajları ekrana yazdıktan sonra 30 nolu satırdaki komut gereği tekrar 10 nolu satıra döner ve tekrar 10 ve 20 nolu satırdaki işlemleri yapar. Her seferinde 30 nolu satıra geldiğinde yeniden en başa döneceğinden bu işlem sonsuz döngü diye tabir ettiğimiz şekilde sürer gider. Ta ki programın çalışması kullanıcı tarafından durduruluncaya ya da bilgisayar kapanıncaya kadar. Bu döngüyü kesmek için Ctrl ve Pause(Break) tuşlarına beraber basınız.
Yani, bu komut anlayacağınız gibi program çalışmasını istediğimiz bölüme yönlendirmemizi sağlıyor.
IF KOMUTU
Kullanılışı;
IF Şart THEN İşlem ELSE İşlem
Bunu Türkçeleştirecek olursak;
IF Şart THEN İşlem ELSE İşlem
Eğer Şart uygunsa O zaman bu işlemi yap aksi takdirde bu işlemi yap
Bu bilgiler ışığında önce bahsettiğimiz programı yapıyoruz. Girilecek değerleri ve bilgileri bir kez daha hatırlayalım;
Mutfak eşyasının kodu : kod$
Mutfak eşyasının adı : adı$
Stok Miktarı : stok
Fiyatı : fiyat
Satılan Adet : adet
Tutarı : tutar
Kalan Stok Miktarı : kalan
Şimdi bu bilgilere göre programı üç bölüme ayıran menüyü daha önce öğrendiğimiz bütün komutları kullanarak yapıyoruz.
10 KEY OFF
20 CLS
30 LOCATE 4,30:PRINT "M E N Ü"
40 LOCATE 7,28:PRINT "1. BİLGİ GİRİŞİ"
50 LOCATE 9,28:PRINT "2. SATIŞ BİLGİLERİ"
60 LOCATE 11,28:PRINT "3. STOK BİLGİLERİ"
70 LOCATE 13,28:PRINT "4. ÇIKIŞ"
80 LINE INPUT X$
90 IF X$="1" THEN GOTO 200 ELSE 100
100 IF X$="2" THEN GOTO 500 ELSE 110
110 IF X$="3" THEN GOTO 800 ELSE 120
120 IF X$="4" THEN END ELSE GOTO 130
130 GOTO 20
200 CLS
210 LOCATE 5,5:LINE INPUT "Mutfak eşyasının kodu :",KOD$
220 LOCATE 7,5:LINE INPUT "Mutfak eşyasının adı :",ADI$
230 LOCATE 9,5:INPUT "Stok :",STOK
240 LOCATE 11,5:INPUT "Fiyatı :",FIYAT
250 LOCATE 13,5:INPUT "Satılan Adet :",ADET
260 TUTAR=FIYAT*ADET
270 KALAN=STOK-ADET
280 LOCATE 18,7:LINE INPUT "menü için enter'a basınız...",W$
290 GOTO 10
500 CLS
510 LOCATE 5,5:PRINT "Kod No : "KOD$
520 LOCATE 7,5:PRINT "Mutfak Eşyası : "ADI$
530 LOCATE 11,5:PRINT "Satılan Miktar : "ADET
540 LOCATE 13,5:PRINT "Fiyatı : "FIYAT
550 LOCATE 15,5:PRINT "Toplam Tutarı : "TUTAR
560 LOCATE 20,5:LINE INPUT "menu için enter'a basınız ...",W$
570 GOTO 10
800 CLS
810 LOCATE 5,5:PRINT "Kod No : "KOD$
820 LOCATE 7,5:PRINT "Mutfak Eşyası : "ADI$
830 LOCATE 11,5:PRINT "Mevcut : "STOK
840 LOCATE 13,5:PRINT "satılan : "ADET
850 LOCATE 15,5:PRINT "son stok durumu : "KALAN
860 LOCATE 20,5:LINE INPUT "menu için enter'a basınız ...",W$
870 GOTO 10
Yukarıdaki programın açıklaması;
10 En alt satırdaki fonksiyon (key) tanımlarını gösteren satır görüntüsünü kapatır.
20 - 70 Ekrana menü görüntüsü yazdırılır.
80 x$ değişkenine (if komutundaki şartı oluşturacak) bilgi girişinin yapılmasını sağlar,
90-120 x$ değişkenine girilen bilgiye göre programı istenilen bölüme gönderir.
130 x$ değişkenine girilen bilgiler seçeneklerden farklı ise programı yeniden seçim yapmak üzere başa döndürür.
200 - 290 Bilgi girişi programı
500 - 570 Satış Bilgileri görüntüleme programı
800 - 870 Stok Bilgileri görüntüleme programı
AND ve OR
Biliyorsunuz IF komut satırını yazarken IF kelimesinden hemen sonra şartı belirtiyorduk. Yani eğer belirttiğimiz şart geçerli ise Bilgisayarımız then kelimesinden sonra belirtilen işlemi yapıyordu.
Şimdi bu şartların sayısını ve ihtimallerini inceleyeceğiz.
Diyelim ki; x isimli değişkene INPUT komutu ile sayısal bilgi girişi yapıyoruz ve bu bilginin 3 haneli olup olamdığını, ayrıca pozitif ya da negatif değerli olduğunu Bilgisayar ekrana yazsın.
İşte burada şart bölümünü yazarken AND VE OR deyimlerini kullanacağız. Biliyorsunuz AND kelimesi İngilizce ve anlamına OR kelimesi de veya anlamına geliyor. Dolayısıyla aynı satırda birden fazla şart kullanmayı göreceğiz. Kullanacağımız komut satırları şu olacak;
10 CLS
20 INPUT"Bir Sayı Girin :";x
30 IF X=0 OR X>0 THEN PRINT "Bu sayı Pozitif (+) bir sayıdır." ELSE PRINT "Bu sayı negatif (-) bir sayıdır.
40 IF X>99 AND X<1000 THEN PRINT "Bu sayı 3 haneli bir sayıdır." ELSE PRINT "Bu sayı 3 haneli bir sayı değildir."
50 END
Burada öğrenmemiz gereken deyimler ve mantıksal operatörler şunlardır:
AND Ve OR Veya = Eşitse > Büyükse < Küçükse >= Büyük veya eşitse <= Küçük veya eşitse <> Eşit değilse (Farklıysa)
Şimdi bu bilgiler ışığında, yukarıdaki programımızı tarif edelim;
10 Ekranı sil.
20 X değişkenine (geçici hafızadaki x isimli sahaya) sayısal bilgi gir.
30 Eğer X değişkenine girilen bilgi 0 'a eşit veya 0 'dan büyükse ekrana; Bu sayı Pozitif (+) bir sayıdır. Yaz. Aksi takdirde Bu sayı negatif (-) bir sayıdır. Yaz.
40 Eğer X değişkenine girilen bilgi 99 'dan büyükse ve 1000 'den küçükse ekrana; Bu sayı 3 haneli bir sayıdır. Yaz. Aksi takdirde Bu sayı 3 haneli bir sayı değildir. Yaz.
50 Programı bitir.
FOR - NEXT KOMUTU
FOR bir döngü komutudur. IF THEN GOTO deyimleri ile yapılan da bir döngü olayıydı. Ancak FOR komutu ile yapılan döngü olayı biraz daha farklı.
Döngü istenilen koşul ve şartlar gerçekleşinceye kadar yapılması istenilen işlemlerin yapılması ve koşul gerçekleştiğinde diğer program satırlarına geçilmesidir.
Bu komutun kullanılışı;
FOR
İŞLEM
NEXT
Şeklinde olur. Yani döngü FOR komutu ile başlar NEXT ile biter. Aradaki işlem bölümüne de şartlar ve koşullar tamamlanıncaya kadar yapılacak işlemler yazılır. Bunu daha iyi anlayabilmek için basit bir program yapalım. Diyelim ki; Ekrana alt alta 15 kere Orhan yazdıralım. Bunu gayet tabi 15 satırda PRINT "Orhan" komutunu kullanarak yazdırabiliriz. Fakat bu işlem için FOR komutunu kullanırsak hem FOR komutunu hem de bu komutun kullanım amacını öğrenmiş oluruz. Bu işlem için şu program satırlarını kullanıyoruz;
10 FOR I=1 TO 15
20 PRINT "Orhan"
30 NEXT
40 END
Burada döngü kısmı FOR 'dan başlar NEXT 'de biter. Yani program çalıştığında bilgisayar FOR komutunun önündeki I değişkeninin aldığı değere bakar. (Değişken isminin I olması şart değildir. Herhangi bir isimde olabilir. Ancak Sayısal değişken olmalıdır, yani sonu $ ile bitmemelidir.) Burada biz bu değişkene 1 'den 15 kadar değer atamışız. Aradaki TO deyiminin anlamı malum, İngilizcedeki e, a, ye, ya anlamlarını taşıyor. Demek ki FOR komutunun önündeki değişkenin aldığı değere göre döngünün kaç kez tekrarlanacağını saptıyoruz. O halde burada FOR I=1 TO 15 komutu ile Bilgisayara; Çevrime (Döngüye) Gir, Bu çevrime 1 den başla 15 kez tekrarlanıncaya kadar devam et diyoruz. Böylece Bilgisayar FOR komutunun altındaki satırdan başlayarak NEXT komutunu görünceye kadar olan işlemleri I değişkeninde belirtilen değer kadar, yani 15 kez tekrarlayacaktır. Daha açık bir ifade ile FOR ile NEXT komutu arasında olan PRINT "Orhan" komut satırı gereği ekrana Orhan yazdıktan sonra NEXT satırını görünce bu 1 diyip tekrar FOR komut satırına dönecek tekrar bir alt satıra geçip ekrana Orhan yazacak, tekrar NEXT komutunu görünce daha evvelce bu 1 demişti ya, bu defaki 1 'i evvelki bir 'in üstüne ilave edecek ve bu 2 oldu diyecek, böylece her NEXT satırına gelişinde üstüne bir ilave edecek. Ne zamana kadar; Ta ki NEXT satırına gelip de bu 15 diyip FOR komutuna geri döndüğü zaman oradaki FOR I=1 TO 15 komut satırının sonundaki 15 'i görünce "ha bu 15 son muş" diyip daha hiçbir işlem yapmadan, aksine bir komut satırı yoksa NEXT komut satırının bir altındaki satırdan işleme devam edecek. Çünkü FOR - NEXT döngüsü içerisindeki gerekli işlemler yapılarak (Ekrana 15 kez Orhan yazdırılarak) FOR komut satırında belirtilen şart ve koşullar sağlanmıştır.
Şimdi de bu komuta yeni bir koşul ekleyelim: STEP
FOR komutunun sonuna ekleyeceğimiz STEP komutu, Komut satırında belirlenen işlem sayısının sayım sırasını farklılaştırır.
ÖRNEK;
FOR A=1 TO 10 STEP 2
Şeklindeki bir satırda STEP 2 koşulu kullanılmamış olsaydı NEXT 'e kadar olan işlemler 1 den başlayarak 10 kez tekrar edilecekti. Ancak burada Bilgisayar ilk işlemi yapıp bu 1 dedikten sonra FOR 'a dönüp sonundaki STEP 2 koşulunu görünce 2 adım atlıyor yani 1+2 diyor ve 3'den devam ediyor. Bir başka deyişle STEP 2 koşulu Bilgisayara "Evet 1 'den başla 10'a kadar tekrar et, ama 2'şer sayarak tekrar et" diyor. Demek ki Bilgisayar 1, 3, 5, 7 ve 9. kerelerde işlem yapacak diğer dönüşlerinde işlem yapmayacak. Bunu şöyle uygulayalım;
10 FOR A=1 TO 10 STEP 2
20 PRINT A
30 NEXT
40 END
Ekrana yazılacak olan sonuç şudur;
1
3
5
7
9
Burada PRINT A satırında FOR komutundaki A değerinin aldığı değerler yazdırılıyor. Eğer STEP 2 satırı olmasaydı Ekrana sırayla alt alta 1 2 3 4 5 6 7 8 9 ve 10 sayıları yazılacaktı. Eğer burada STEP 2 yerine STEP 4 yazılsaydı ekranda 1, 5 ve 9 sayıları yazılacaktı.
Ayrıca iç içe döngü komutları da kullanabiliriz. Örnekle gösterelim:
10 CLS
20 FOR C=1 TO 3
30 PRINT "ORHAN"
40 FOR D=1 TO 2
50 PRINT "AYGÜN"
60 NEXT D
70 NEXT C
80 END
Burada Bilgisayar önce FOR C satırındaki koşul gereği 3 kere tekrarlanacak bir döngüye girer. Bu döngü gereği önce ekrana Orhan yazar. Sonra FOR D döngüsündeki ikinci döngü gereği ekrana iki kez Aygün yazar. Bu işlemleri 3 kez tekrarlar ve ekranda şöyle bir görüntü oluşur.
ORHAN AYGÜN AYGÜN ORHAN AYGÜN AYGÜN ORHAN AYGÜN AYGÜN
Burada dikkat edilecek konular şunlardır. Hiçbir zaman döngüler birbirini kesmezler. Bir döngünün içindeki diğer döngü asıl döngü bitmeden bitmelidir. Dikkat ederseniz, FOR komutuna ait değişken ismi NEXT komutunun sonuna da eklenmiştir. Bu değişken ismi NEXT satırının hangi FOR komut satırının sonunu belirttiğini gösterir.
Bu şekildeki FOR - NEXT kullanımına NESTING LOOP (İçiçe döngü) diyoruz.
WRITE
WRITE komutu PRINT komutu ile aynı görevi yapar. Aralarındaki fark write komutu kullanıldığında karakter bilgilerin " işaretleri arasında görülmesi ve birden fazla değişken görüntülendiğinde aralarında virgül göstermesidir.
Komutun kullanılışı;
WRITE (değişken-1, değişken-2, ......)
Bunu bir Örnekle gösterelim;
10 AD$="ORHAN":SOYAD$="AYGÜN"
20 PRINT AD$,SOYAD$
30 WRITE AD$,SOYAD$
40 END
Bu programı çalıştırdığımız zaman ekranda şöyle bir görüntü çıkar;
ORHAN AYGÜN
"ORHAN", "AYGÜN"
PRINT USING
Değişkenlerdeki bilgileri ekrana belirli formatlarda yazdırmak için kullanılır. Farklı kullanılışları vardır. Örneklerle görelim:
PRINT USING "####";7845
Yukarıdaki örneğin sonucunda ekran görüntüsü aynen yazıldığı gibi 7845 olarak görüntülenir.
PRINT USING "#,###";7845
Yukarıdaki örnekte ise # işaretlemesinde belirtildiği gibi sağdan 3. # işaretinden önce binler hanesini , ile ayırır ve ekrana 7,845 yazar. Burada unutulmaması gereken nokta derleyici binler hanesini ayırma işareti olarak , kullanıyor. Eğer oraya nokta koysaydık noktayı ondalık ayırma hanesi olarak kabul edecek ve . işaretinden önce sadece 1 adet # işareti olduğu için ekranda %7845.000 şeklinde görüntü oluşacaktır. Çünkü . işaretinden sonraki # işaretlerinin anlamı ondalık hanesi anlamındadır.
PRINT USING "#,###.#";1784.5
Yukarıdaki örneğin sonucunda ekran görüntüsü 1,784.5 olarak görüntülenir.
PRINT USING "#,###";1784.5
Yukarıdaki örneğin sonucunda ekran görüntüsü 1,785 olarak görüntülenir. Çünkü yukarıdaki örnekte # işaretlerinde ondalık hane belirtilmemiş. Burada derleyici ondalık hane bölümündeki rakam 5 veya 5 den büyük ise asıl sayının son rakamını bir artırıyor ve ondalık hanesini kaldırıyor.
A=1784.2:PRINT USING "#,###";A
Yukarıdaki örneğin sonucunda ekran görüntüsü 1,784 olur.
A=2654598:PRINT USING "#######,";A
Yukarıdaki örneğin sonucunda ekran görüntüsü 2,654,598 olur. Yani burada # işaretlerinin sonundaki , işareti sayının her üç rakamda bir , ile ayrılacağını ifade eder.
A$="Orhan Aygün":PRINT USING "\ \";A$
Yukarıdaki örneğin sonucunda ekran görüntüsü Orha olur.
A$="Orhan Aygün":PRINT USING "\ \";A$
Yukarıdaki örneğin sonucunda ekran görüntüsü Orhan Ay olur. Yani yukarıdaki iki örnekte \ işaretleri arasında ne kadar boşluk bırakırsak ekranda o boşluğa sığacak kadar sayıda değişkenden karakter alarak yazar. Değişkenden karakterleri soldan başlayarak sağa doğru alır. \ (Path) işaretleri de karakter sayısına dahildir.
A$="Orhan Aygün":PRINT USING "&";A$
Yukarıdaki örneğin sonucunda ekran görüntüsü Orhan Aygün şeklinde olur. Buradaki & işareti ekrana yazdırılacak karakterlerin değişken içindeki karakter sayısı kadar olması anlamına gelir. Bu şimdilik size anlamsız gelebilir ama dosyalama sistemine geçtikten sonra anlamını daha iyi öğreneceğiz. Çünkü dosyalama sisteminde değişkenlerin uzunlukları ile değişkenlere yerleşen bilgilerin uzunluklarının farklı olduklarını göreceğiz.
A$="Orhan":B$="Aygün":PRINT USING "!";A$;B$
Yukarıdaki örneğin sonucunda ekran görüntüsü OA olur. Yani örnekteki tırnak işaretleri arasındaki ! (Ünlem) işaretinin anlamı ekrana her değişkendeki bilginin sadece ilk karakterlerinin yazılacağıdır. iki değişken arasındaki ; işaret ise bilgilerin aynı satırda yan yana yazılmasını sağlar.
LIST
Gwbasic Programlama dilinde yapılan program satırlarının ekranda listelenmesini sağlayan komuttur. LIST yazıp enter'a bastığımızda, geçici hafızada kayıtlı bulunan program numara sırasına göre ekranda alt alta listelenir. Bu şekilde parametresiz kullanıldığında, yani sadece LIST yazıp enter'a basıldığında programın bütün satırları ekranda listelenir. Bu komutun farklı kullanımları ise şöyledir:
LIST 80 Yalnız 80 no'lu satırı görüntüler.
LIST 30 Yalnız 30 no'lu satırı görüntüler.
LIST 40-60 Yalnız 40'dan 60 no'lu satıra kadar olan satırları görüntüler.(Yani 40, 50 ve 60 no'lu satırları görüntüler.)
LIST -30 Yalnız 30 no'lu satıra kadar olan satırları görüntüler. (30 no'lu satırda dahil olmak üzere)
LIST 30- Yalnız 30 ve 30 no'lu satırdan sonraki satırları görüntüler.
Yukarıda belirttiğimiz ekrana program satırlarının listelenmesi olayını ekran yerine yazıcıya da yönlendirebiliriz. Bunu yapmak için LIST komutunun başına L harfini eklememiz yeterli. Yani LLIST yazdığımızda tüm program satırları ekran yerine yazıcıya yazdırılacaktır. Normalde Gwbasic yazıcıyı LPT1 portundan tanımaktadır. Ancak günümüzde kullanılan yazıcıların cins ve markalarına göre yazıcının setup ayarlarının yapılması gerekebilir. Ayrıca DOS ortamında yazıcıdan (üğşçö gibi) Türkçe karakterlerin çıktısının alınabilmesi için yine Setup ayarlarının yapılması gerekmektedir. LLIST komutu tüm program satırlarını yazıcıya yazdırırken, belirli program satırlarının veya belirli satıra kadar olan program satırlarının, daha doğrusu yukarıdaki ekranda görüntüleme komutu olan LIST komutunun tüm uygulanış şekilleri LLIST komutu ile de uygulanabilir. Örneğin;
LLIST -50 50 no'lu satır da dahil olmak üzere 50 no'lu satıra kadar olan satırları yazıcıya yazdırır.
SAVE
Gwbasic programlama dili ile yapılan program satırları biliyorsunuz ki satır yazılıp enter'a basıldıktan sonra geçici hafızaya kaydoluyordu. Yani yazılan tüm programı geçici hafızaya kaydedebiliyor ve bilgisayarı kapatıncaya kadar veya Gwbasic derleyicisinden çıkana kadar ya da new yazıp enter'a basıp geçici hafızayı silene kadar program satırları geçici hafızada kalıyordu. Şimdi yazdığımız bir programın kalıcı olması için ne yapmamız gerektiğini öğreneceğiz. Diyelim ki bir program yaptık ve bunu her istediğimiz zaman bulmak istiyoruz. Yani Bilgisayarımıza kaydetmek ve her bilgisayarımızı açışımızda bu programı bulabilmek istiyoruz. Bunu yapmamız için yazdığımız satırlardan oluşan programı Bilgisayarımızın Harddiskine kaydetmemiz gerekir. Bu arada konuyu daha iyi anlamak için bu konuda hiç bilgisi olmayan izleyicilerin olduğunu varsayarak, RAM konusunda biraz açıklama yapmak istiyorum;
Bilgisayarın geçici hafızasının (RAM) geçici olduğu, Bilgisayar kapatıldığında veya programlardan çıkıldığında bu geçici hafızadaki (RAM'deki) bilgilerin de silindiğini daha önce öğrenmiştik. Hani bilgisayar alırken özelliklerini sorar ve bu arada bize "Bu bilgisayar 32 MB RAM'e sahiptir." Ya da " Bu bilgisayarda 64 MB RAM vardır." Gibi cevaplar verildiğinde veya kampanyalarda, gazetelerde, dergilerde Bilgisayar özelliklerini okurken gördüğümüz 64 MB RAM gibi yazılardan anlayacağımız şu: Hmm... Demek ki, bu bilgisayarın geçici hafızasının kapasitesi 64 MB. mış. Daha değişik bir deyişle, bu bilgisayarda en fazla 64MB. büyüklüğünde bir dosya çalıştırılabilirmiş. Öyleyse, 16 MB' dan daha büyük bazı programlar 32 MB. Ram'e sahip bir bilgisayar da çalışabilirken, 16 MB Ram'e sahip başka bir bilgisayarda çalışmaz. Gerçi konumuz bu değil ama bu arada ek bir bilgi olarak hatırlatmak istedim. Burada asıl bahsetmek istediğim konu şu. Ram büyüklüğü ne olursa olsun, geçici hafızalar nihayet bilgisayar kapanıncaya kadar aktiftirler. Bilgisayar kapandıktan sonra yeniden açıldığında geçici hafızanın içi bomboştur. Her şeyi yeniden yüklememiz gerekir. Çünkü çalışabilen her programın çalışabilmesi için bu geçici hafızaya yüklenmesi gerekir. İşte bunu yapabilmek için geçici hafızaya yükleyeceğimiz programları her seferinde yeniden yazmak yerine yazdığımız programları bir isim altında bir dosyaya kaydediyor ve bu dosyayı istenildiğinde sadece ismini kullanarak geçici hafızaya yüklüyoruz. Bunu yapmak için her programlama dilinde ya da her sistemde ayrı komutlar kullanılır. Gwbasic derleyicisinin kullandığı dosya kaydetme komutu SAVE 'dir.
Kullanılışı;
SAVE "[Adres]Dosya İsmi.Uzantı İsmi"
Şimdi aşağıdaki gibi bir program satırı yazdığımızı farzedelim:
10 CLS
20 LOCATE 4,28:PRINT "M E N Ü"
30 LOCATE 7,28:PRINT "1. BİLGİ GİRİŞİ "
40 LOCATE 9,28:PRINT "2. EKRAN LİSTE"
50 LOCATE 11,28:PRINT "3. YAZICI LİSTE"
60 LOCATE 13,28:PRINT "0. ÇIKIŞ"
70 LOCATE 16.30:LINE INPUT "SEÇİMİNİZ ....",X$
80 IF X$="1" THEN 500
90 IF X$="2" THEN 600
100 IF X$="3" THEN 700
110 IF X$="0" THEN END
120 GOTO 70
Yukarıdaki programın devamı tabi ki olmalı ama örneğimizi anlamak için şimdilik bu kadarı yeterli. Şimdi biz bu Gwbasic ile yapılmış programı her istediğimizde yeniden yazmadan bulabilmek amacıyla harddiskimize kaydetmek için şu satırı yazmalıyız(bu programı deneme ismiyle kaydedelim):
SAVE "deneme.bas"
Gwbasic de program isimleri her ne olursa olsun uzantı isimleri mutlaka bas olmalıdır. Diğer programlama dillerinde olduğu gibi, (istisnalar hariç) her program dosyasının mutlaka uzantı ismi olur ve program ismi ile uzantı ismi mutlaka birbirinden nokta işareti ile ayrılır. Aralarda boşluk bırakılmaz. Uzantı ismi olan BAS kelimesinin anlamı BASIC deyiminin ilk 3 harfidir. Uzantı ismi olarak BAS verilmesinin anlamı, kullanıcının bu ibareyi gördüğünde programın BASIC diliyle yapıldığını anlayabilmesidir.
Diyelim ki, biz bu programı Bilgisayarımızda bulunan bilgiler adında bir dizine kaydetmek istiyoruz. O zaman yapmamız gereken şudur;
SAVE "C:\bilgiler\deneme.bas"
Bu satırda C:\bilgiler\ kısmı adres bölümüdür. Yani ne demek istiyoruz, SAVE demekle kayıt et demek istiyoruz. C:\bilgiler\ demekle C isimli hardiskimizin altında bulunan bilgiler dizininin altına demek istiyoruz. deneme.bas demekle de deneme.bas ismiyle kaydet demek istiyoruz. Bu satırda verdiğimiz adresin aralarındaki path ( \ ) işareti anlam olarak tek başına kullanıldığında (root) yani en üst (directory) dizin anlamındadır. Ancak adres içinde kendisinden bir önce yazılan adresin altında olduğunu anlatır. Kendisinden bir sonra yazılan adresin bir üst dizine sahip olduğunu ifade eder.
SAVE "deneme.bas",P
Yukarıdaki örnekte görüldüğü gibi saklanan (kaydedilen) program, bir daha yeniden bilgisayara (geçici hafızaya) yüklenildiğinde program satırları ekranda LIST komutu ile listelenemez. Yani P parametresi bunu engeller.
SAVE komutunun diğer parametrelerini ilerleyen derslerde örnekleriyle beraber göreceğiz.
LOAD
Load komutu SAVE komutu ile bilgisayara kaydedilen dosyaların istenildiğinde yeniden ekrana (geçici hafızaya) çağrılmasını sağlar. Kullanılışı aynı SAVE komutunda olduğu gibidir.
LOAD "[Adres] Dosya İsmi.Uzantı İsmi"
Örnek:
LOAD "deneme.bas"
İstediğimiz Programı Hard diske kaydetmek yerine herhangi bir diskete de kayıt edebiliriz. Bunun için disket gözüne herhangi bir disket yerleştirip;
SAVE "A:deneme.bas" yazmamız ve enter'a basmamız yeterli.
Aynı dosyayı disketten hafızaya yüklememiz için ise disketi A gözüne takıp;
LOAD "A:deneme.bas" yazarız.
LOAD "deneme.bas",R
Yukarıdaki örnek ise hem programı geçici hafızaya yükler ve hem de yükler yüklemez çalıştırmaya başlar. Yani ayrıca run yazmaya gerek kalmaz.
DOSYA SİLME
Gwbasic programlama dilinde dosya silme komutu KILL dir. Kullanılışı;
KILL "[Adres] Dosya İsmi.Uzantı İsmi"
Örnek;
KILL "C:\bilgiler\deneme.bas"
Bu yazım şekli ile Bilgisayarımızın C sürücüsünün bilgiler dizininde bulunan deneme.bas isimli dosya silinir. Tabi varsa!
Eğer yoksa;
File not found
Ok
Şeklinde dosya bulunamadı anlamında hata mesajı verir.
Aynı dosyanın A gözünde takılı bulunan diskette bulunduğunu varsayarsak, o takdirde ekrana yazacağımız komut satırı;
KILL "a:deneme.bas"
Şeklinde olmalıydı. Burada dikkat edeceğimiz bir başka husus: Eğer dosya en üst directory'de (dizinde) ise yani herhangi bir alt dizin içinde değilse adres içinde kullandığımız \ işaretini kullanmamız şart değil. Kullansak da hiçbir mahsuru yok. Yani KILL"a:\deneme.bas" şeklinde yazsak da sonuç aynı olur. Burada komutu veya dosya ismini küçük veya büyük yazmamızın da bir önemi yok. Aynı satırı kill"a:deneme.bas" ya da KILL"A:\DENEME.bas" şeklinde yazabiliriz. Eğer burada kullanılan \ işareti kullanılmazsa bunun anlamı silinmesi istenilen dosyanın o anda çalışmakta olduğunuz dizin içinde olduğunu ifade eder. Eğer \ işaretini kullanırsanız bu dosyanın en üst directory'de yani root altında olduğu, herhangi bir alt dizin altında olmadığı anlamına gelir. Bu takdirde biz farklı bir dizinde çalışıyor olsak bile Bilgisayar çalıştığımız (bulunduğumuz) dizini değil, en üst directory'i (dizini) arar.
Çalışmakta olduğumuz dizinde den.bas dene.bas denem.bas deneme.bas isimli 4 adet dosya olduğunu düşünelim. Eğer bu 4 dosyayı aynı anda silmek istiyorsak ve den kelimesi ile başlayan başka bir dosya yoksa, ekrana;
Kill"den*.bas"
Ya da
Kill"den*.*"
Yazıp enter'a basarsak bu dosyaların hepsi silinir. Burada * hepsi anlamına geliyor. Yani den ile başlayan hepsi anlamında.
Eğer ekrana;
Kill"den?.bas" yazıp enter'a basarsak sadece dene.bas isimli dosya silinir. Çünkü burada ? işareti ne olursa olsun anlamını taşımakla beraber sadece bir tek karekteri temsil eder. Böylece yukarıdaki örnek ancak ve ancak 4 karakter uzunluğundaki bir isme ait dosyayı temsil eder. Soru işareti 4. hanede olduğundan dosya isminin 4. karakteri ne olursa olsun anlamına gelir.
Kill"*.??"
Yukarıdaki silme işleminin anlamı ise ismi ne olursa olsun, uzantı ismi de ne olursa olsun fakat uzantı ismi sadece 2 karakterli olan tüm dosyaları sil anlamına gelir.
Kill"D*.c??"
Yukarıdaki örnek ise İsmi sadece D ile başlayan ve karakter olarak dosya ismi uzunluğu ne olursa olsun, Uzantı ismi C ile başlayıp, uzantı isimlerinin uzunluğu mutlaka 3 karakterli olan dosyaların silineceği anlamına gelir.
Tüm dosyaları silmek istiyorsak;
KILL"*.*"
Komutunu kullanırız.
Yukarıdaki dosya silme komutlarında kullanılan * ve ? parametreleri DOS altında kullanılan DEL dosya silme komutunda da aynıdır. Yalnız KİLL"*.*" komutunun eş anlamlısı olan DEL"*.*" komutunu dos ortamında kullandığınızda ekranda dosyaların hepsinin silinmesini onaylamanız için bir mesaj belirir.
SATIR SİLME
Gwbasic diliyle yazılmış program satırlarını silmek için ise DELETE komutunu kullanıyoruz. Kullanılışı;
DELETE Satır No
Örnek;
DELETE 50
50 No'lu satırı siler.
FARKLI KULLANIMLARI:
DELETE 50-80
50 ile 80 no'lu satırlar arasında kalan satırlar silinir.
DELETE -40
40 no'lu satıra kadar olan satırlar silinir.
DELETE 70-
70 No'lu satırdan sonraki satırlar silinir.
YAZICIYA BİLGİ YAZDIRMA
Bildiğiniz gibi PRINT komutu ile ekrana komutun önüne yazdığımız bilgileri ya da değişkenlerdeki bilgileri yazdırabiliyorduk. Aynı şekilde yazdırmak istediğimiz herhangi bir mesaj ya da değişkenlerdeki bilgiyi ekran yerine yazıcıdan yazdırmak istersek PRINT komutunun başına L harfini ekliyoruz. Ve aynen PRINT komutu gibi kullanabiliyoruz. Örneğin;
PRINT"Orhan" Komutu ekrana Orhan yazdırır.
LPRINT"Orhan"
Komutu da yazıcıda bulunan kağıda Orhan yazdırır.
Ayrıca a$="Orhan Aygün" yazıp a$ değişkenine Orhan Aygün ismini atadığımızı farz edelim. Bu takdirde ekrana
LPRINT a$
Şeklinde yazacağımız komut satırı; enter'a basıldıktan sonra, ya da program içinde kullanılmışsa, program çalışırken sırası geldiğinde, yazıcıda bulunan kağıda Orhan Aygün yazdıracaktır.
Aynı şekilde nasıl ki PRINT komutu tek başına kullanıldığında ekranda bir satır boşluk bırakıyorsa LPRINT komutu da tek başına kullanıldığında yazıcıda boş bir satır atlatır. Mesela yazıcıda üç satır boş bırakmasını istiyorsak;
LPRINT:LPRINT:LPRINT
Şeklindeki bir komut satırı ile bunu gerçekleştirebiliriz.
OTOMATİK SATIR NUMARASI VERME:
Bilindiği üzere, Gwbasic programlama dilinde programı satırlar halinde yazıyor ve her satıra bir numara veriyorduk. Eğer bu satır numaralarının Gwbasic derleyicisi tarafından otomatik olarak verilmesini istiyorsak AUTO komutunu kullanırız. Bu komutu tek başına kullandığımızda Gwbasic derleyicisi bulunduğumuz satıra 10 numarası vererek her satırı yazıp enter'a bastığımızda kendiliğinden bir alt stırda satır numarasını 10 artırarak numara verir. Yani satırları 10, 20, 30, 40 .... gibi otomatik numaralandırır.
Eğer biz farklı bir numaralandırma yapmak istiyorsak, örneğin 500 nolu satırdan başlamasını ve 20'şer atlayarak numaralandırmasını istiyorsak bu takdirde bu komutu;
AUTO 500,20
şeklinde kullanmalıyız. Bu durumda Gwbasic numaralandırmayı 500, 520, 540, 560 ..... şeklinde devam ettirir.
Ne zamana kadar diye bir soru aklınıza gelebilir. Daha doğrusu bu konumdan nasıl çıkacağım diye sorabilirsiniz.
Otomatik Satır Numarası verme durumundan kurtulmak için Ctrl ve C tuşlarına beraber basınız.
SATIR NUMARALARINI DÜZENLEME:
Diyelim ki satır numaraları verirken unuttuğunuz satır numaraları oldu, sonradan araya yeni satır numaraları girdiniz ve tamamladınız. Ya da daha başka nedenlerle numaralandırma sistemi çok karışık oldu. Yani 10, 20, 21, 25, 30, 38, 45, 50,100,110,111,112,113,114,115,116,120 ... gibi ya da daha karışık bir numaralama sistemi oldu. Bu numaralama sırasını düzeltmek, belli bir sıraya koymak için de RENUM komutunu kullanıyoruz. RENUM yazıp enter'a bastığımızda programın satır numaraları 10'dan başlar ve 10'ar artarak devam eder. Eğer farklı bir numaradan başlamasını ya da programın sadece belli bir bölümünü düzenlemek istiyorsak komutu aşağıdaki şekilde kullanmalıyız;
RENUM [yeni numara],[eski numara],[artış miktarı]
Yeni Numara; yeniden numaralandırma yapılacak satır numarasını belirtir.
Eski numara; yeniden numaralandırmanın hangi satırdan başlayacağını belirtir.
Artış Miktarı; Satır numaralarının kaçar kaçar artacağını belirtir.
Diyelim ki yaptığımız program satırları içerisinde GOTO, THEN ve daha sonra öğreneceğimiz GOSUB gibi komutlar kullanmışız. Yani programın akışına göre çalışmayı belli satır numaralarına yönlendirmişiz. RENUM komutunu kullandığımızda yukarıdaki yönlendirme (kontrol) komutlarının önündeki satır numaraları da yeni numaralandırmaya göre kendiliğinden değişir. Ancak, program içerisinde bu kontrol komutları önünde bulunan satır numaralarını hatalı kullanmışsak (mesela olmayan bir satır numarasına yönlendirme yapmışsak) bu gibi durumlarda RENUM komutu bu hatalı gönderme deyimlerini değiştirmez ve hata mesajı verir.
RENUM kullanımına örnekler;
RENUM
Yukarıdaki kullanım şekline göre Gwbasic derleyicisi programı 10'dan başlayarak, 10'ar artırarak yeniden numaralandırır.
RENUM 150,5
Yukarıdaki kullanım şekline göre Gwbasic derleyicisi programı 150 no'lu satırdan başlayarak ve 5'er artırarak, yani, 150, 155,160,165,170,175..... şeklinde yeniden numaralandırır.
RENUM 300,150,5
Yukarıdaki kullanım şekline göre Gwbasic derleyicisi programı yeniden düzenlemek üzere o anda hafızada bulunan 150 no'lu satırı başlangıç olarak kabul eder ve bu satır numarasından başlayarak bu satırı 300 yapar ve daha sonraki satırları 5'er artırarak 300, 305, 310,315..... şeklinde devam eder.150 no'lu satırdan önceki satırlar aynen kalır.
BİLGİLERİN DOSYAYA KAYDEDİLMESİ
Buraya kadar iyi, güzel de, yaptığımız programları kullanarak girdiğimiz bilgilerin kalıcı olmasını nasıl sağlayacağız? Yani, programı save komutu kullanarak kaydedebiliyor, daha sonra istediğimiz zaman load komutu kullanarak bulabiliyoruz, ama değişkenlere girdiğimiz bilgiler; yerlerine yenisini girdiğimiz ya da programdan çıktığımızda kayboluyor, bunları nasıl saklayacağız?
İşte, girdiğimiz bilgilerin kalıcı olmasını sağlamak amacıyla Gwbasic programlama dilinde dosyalama sistemini kullanacağız.
GWBASIC (BASIC) PROGRAMLAMA DİLİNDE DOSYALAMA SİSTEMİ
Gwbasic programlama dilinde değişkenlere girdiğimiz bilgileri saklamak ve istenildiğinde bulabilmek amacıyla dosyalama sisteminden yararlanırız. Bunun için de disket veya sabit diskde (A , B , C veya D gözünde) herhangi bir dosya(kütük) açarız ve değişkenlerdeki bilgileri bu dosyaya aktarırız. Her girilen bilgiyi ayrı bir satıra kaydederiz. Şimdi bunu nasıl yaptığımızı inceleyelim:
KURAL: Gwbasic dilinde açılan bilgi dosyalarının isimleri ne olursa olsun uzantı isimleri .bil olarak verilir. (Bakın; bilgi dosyası diyorum. Save komutuyla kaydettiğimiz program dosyalarıyla karıştırmayın) Uzantı isminin .bil olarak verilmesindeki amaç, bu dosyanın bilgi dosyası olduğunu anlayabilmemizdir.
Gwbasic 'de iki çeşit dosyalama sistemi vardır:
Sıralı dosyalar (kütükler) Random dosyalar (kütükler) Sıralı dosyalar kayıtların disk veya disket ortamına girdiklerinde saklandıkları dosyalardır. Bu dosyalarda bulunan bilgilere ulaşım da sıralı olur. Örneğin 4. satırdaki bilgiye ulaşmak için, 1, 2 ve 3.satırdaki bilgilerin de okunması gerekir.
Random dosyalar ise bir tamsayı anahtara göre disk veya disketlere kaydedilen dosyalardır. Bu sayede kayda (istenilen bilgiye) ulaşım hızlı olur. Ancak girilen bilgiler artan sıralı girilmediği takdirde diskde daha fazla yer kaplar. Fakat günümüzde sabit disklerin büyüklüğü ile mukayese edilirse ne kadar fazla yer kaplasalar da önemli bir yer kaplamazlar. Sadece ulaşım hızı biraz azalabilir. Biz kullanım ve erişim kolaylığı nedeniyle bu tür dosyalama sistemini inceleyeceğiz.
OPEN
Dosya açmak için kullanacağımız komut budur. OPEN komutu ile normal şartlar altında bir program içerisinde aynı anda en fazla 3 bilgi dosyası açılabilir. Biz eğer 4 veya 5 dosyayı aynı anda açmak istiyorsak. Gwbasic derleyicisini çalıştırırken, ya dos ortamında veya toplu işlem dosyası içerisinden (sayfa sonunda açıklaması var) çalıştırarak ;
GWBASIC/F:<DOSYA SAYISI>
Şeklinde yazmalıyız. Diyelim ki aynı anda 5 dosya açılabilsin. O takdirde;
GWBASIC/F:5
Yazıp enter'a basacağız.
Komutun kullanılışı:
OPEN "Dosya İsmi.Uzantı İsmi" AS Dosya Numarası
Bunu açıklarsak, OPEN: Dosya aç Dosya ismi ve Uzantı İsmi: İlk defa açıyorsak bizim vereceğimiz herhangi bir dosya ve uzantı ismi (tabiki uzantı ismi bil olmalı) AS: gibi, olarak anlamında Dosya numarası da 1, 2, 3 gibi bir numara. Bir örnek yapacak olursak:
OPEN "orhan.bil" AS 1
Komutunda Gwbasic derleyicisi aracılığıyla bilgisayara şunu diyoruz:
Dosya aç İsmi orhan uzantı ismi bil olsun bunu 1 numaralı dosya olarak aç.
OPEN"C:\BELGELER\ORHAN.BIL" as 1
C gözünde belgeler dizininde bulunan orhan.bil dosyasını 1 numaralı dosya olarak açar.
OPEN"C:\DENEME\AHMET.BIL" as 2
C gözünde deneme dizininde bulunan ahmet.bil dosyasını 2 numaralı dosya olarak açar.
Bunun yanında bir ikinci dosya açarsak burada ikinci dosyanın sonuna AS 2 yazıyoruz. OPEN komutu hem dosya ilk kez açıldığında hem de olan bir dosyayı açmak için kullanılabilir. Yalnız OPEN komutu ile dosyayı açmak yetmiyor. Ayrıca dosyanın tanımlanması gerekiyor. Yani dosya içine yerleşecek bilgilerin yerleşeceği alanların isim ve özelliklerinin tanıtılması gerekiyor. Bu nedenle OPEN komutundan hemen sonra FIELD komutu ile gerekli tanımlamaları yapmamız gerekiyor.
FIELD
Dosyanın kayıt alanlarını, isimlerini ve byte olarak uzunluklarını tanımlar.
Diyelim ki yukarıdaki orhan.bil dosyasını açtık ve yaptığımız programdaki a$ değişkeni içindeki sıra no bilgisi, b$ değişkeni içindeki Adı bilgisini ve c$ değişkeni içindeki Soyadı bilgisini bu dosyaya kaydedeceğiz. İşte bu bilgilerin hard diske veya diskete yerleşmesi amacıyla bilgilerin önce bilgisayar ile hard disk veya disket arasındaki bufer (ara bellek) değişkenlerine yerleşmesi gerekir. Yani a$, b$ ve c$ değişkenlerindeki bilgileri önce yine isimlerini bizim belirleyeceğimiz bufer değişkenlerine aktarmamız gerekir. Bunun içinde bu bufer değişkenlerini FIELD komutu içerisinde tanımlamamız gerekir. Diyelimki;
a$ değişkenindeki sıra no bilgisini sıra$ ismi vereceğimiz bufer değişkenine aktaralım. Uzunluğu 3 karakter olsun
b$ değişkenindeki Adı bilgisini adı$ ismi vereceğimiz bufer değişkenine aktaralım. Uzunluğu 15 karakter olsun.
c$ değişkenindeki Soyadı bilgisini soyad$ ismi vereceğimiz bufer değişkenine aktaralım. Uzunluğu 15 karakter olsun.
Bu takdirde yazacağımız saha tanımlama komutu şu şekilde olur:
FIELD 1,3 AS SIRA$,15 AS ADI$,15 AS SOYAD$
Yani bu komutu açıklarsak;
1 numaralı Dosyanın değişken isimleri ve uzunlukları, 3 karakter olarak sıra$,15 karakter olarak adı$,15 karakter olarak soyad$ anlamına gelir.
Özet olarak, programın başında bilgilerin yerleşeceği dosyayı açmak için OPEN komutu ile dosyanın ismini ve kaç numaralı dosya olarak açılacağını belirtiyoruz. FIELD komutu ile de bu dosyanın içinde bulunan bilgilerin ara bellekte yerleşeceği değişkenlerin isimlerini ve içindeki bilgilerin ne kadar byte (karakter) uzunluklarında olduklarını açıklıyoruz.
Buna göre örnek bir program yapalım ve dosyanın açılması ve sahaların tanıtılmasını uygulamalı görelim daha sonra da bu dosyalara bilgilerin kaydedilmesini görelim.
Program:
Girilecek bilgiler: Sıra no, Adı Soyadı, Sınıfı, Öğrenci Numarası, Notu
Değişkenler:a$,b$,c$,d$,e$
Bufer (ara bellek) değişkenleri: sn$,adı$,snf$,numara$,notu$
Buna göre şöyle bir program yapabiliriz:
10 OPEN "DERS.BIL" AS 1
20 FIELD 1,3 AS SN$,20 AS ADI$,4 AS SNF$,5 AS NUMARA$,3 AS NOTU$
30 CLS
40 LOCATE 5,5:LINE INPUT "SIRA NO :",A$
50 LOCATE 7,5:LINE INPUT"ADI SOYADI:",B$
60 LOCATE 9,5:LINE INPUT"SINIFI :",C$
70 LOCATE 11,5:LINE INPUT"NUMARASI:",D$
80 LOCATE 13,5:LINE INPUT"NOTU :",E$
90 RSET SN$=A$:LSET ADI$=B$:LSET SNF$=C$:LSET NUMARA$=D$:RSET NOTU$=E$
100 PUT 1,VAL(A$)
110 LOCATE 16,5:LINE INPUT"Devam için 1, Çıkış için 2'yi seçiniz ...",x$
120 IF X$="1" THEN 30
130 IF X$="2" THEN END
140 GOTO 110
Şimdi bu mini programın açıklamasını görelim.
10 Çalıştığımız dizinde ders.bil isimli bir dosyayı 1 numaralı dosya olarak aç.
20 Bu 1 numaralı dosyanın ara bellek değişkenleri 3 karakter uzunluğunda sn$,20 karakter uzunluğunda adı$,4 karakter uzunluğunda snf$,5 karakter uzunluğunda numara$,3 karakter uzunluğunda notu$ 'dır.
30 Ekranı sil.
40 5. satır, 5. sütuna git, ekrana Sıra No yaz ve program çalıştığında bu mesajın önüne girilen bilgiyi a$ değişkenine yaz.
50 7. satır, 5. sütuna git, ekrana Adı Soyadı yaz ve program çalıştığında bu mesajın önüne girilen bilgiyi b$ değişkenine yaz.
60 9. satır, 5. sütuna git, ekrana Sınıfı yaz ve program çalıştığında bu mesajın önüne girilen bilgiyi c$ değişkenine yaz.
70 11. satır, 5. sütuna git, ekrana Numarası yaz ve program çalıştığında bu mesajın önüne girilen bilgiyi d$ değişkenine yaz.
80 13. satır, 5. sütuna git, ekrana Notu yaz ve program çalıştığında bu mesajın önüne girilen bilgiyi e$ değişkenine yaz.
90 Kırmızı Renkle yazılan bu yeni öğreneceğimiz komut satırını aşağıda açıklıyacağız.
100 Kırmızı Renkle yazılan bu yeni öğreneceğimiz komut satırını aşağıda açıklıyacağız.
110 16. satır, 5. sütuna git, ekrana Devam için1, Çıkış için 2'yi seçiniz yaz ve program çalıştığında bu mesajın önüne girilen 1 veya 2 değerini x$ değişkenine yaz.
120 Eğer x$ değişkenine girilen bilgi 1 ise bir başka bilgi girmek için 30 numaralı satıra dönerek yeniden bilgi girişi yapmak üzere programın çalışmasına devam et.
130 Eğer x$ değişkenine girilen bilgi 2 ise programı sona erdir.
140 (Eğer x$ değişkenine girilen bilgi 1 veya 2 'den farklı ise,120 veya 130 numaralı satırlarda belirtilen işlemler yapılmayacak ve çalışma ister istemez bu satırları işlem yapmadan geçecek. Bu nedenle, kullanıcının illa da 1 veya 2'yi seçmesi için bu satır çalışmayı tekrar 110 nolu satıra yönlendiriyor.) 110 no'lu satıra git.
Yukarıda kırmızı renklerle belirtilen satırlara gelince: Burada yeni öğreneceğimiz komutlar; RSET, LSET, PUT ve VAL komutlarıdır. Tek tek açıklayalım.
RSET: Bilgilerin ara bellek değişkenlerine sağa yanaşık yerleşmesini sağlar. Diyelim ki 15 karakter uzunluğundaki ADI$ sahasına (değişkenine) b$ değişkeninde bulunan Ahmet Aygün bilgisini aktaracağız. Bunu RSET komutu kullanarak RSET adi$=b$ şeklinde aktardığımız zaman bilgiler bu sahaya sağa yanaşık olarak;
....Ahmet Aygün
şeklinde yazılır.
LSET:
Bilgilerin ara bellek değişkenlerine sola yanaşık yerleşmesini sağlar. Yukarıdaki örneği bu defa LSET adi$=b$ şeklinde yazarsak;
Ahmet Aygün....
Şeklinde yazılır.
Burada RSET İngilizce de Right Set in kısaltılmışı LSET Left Set in kısaltılmışıdır. Biliyorsunuz İngilizce de Right Sağ, Left ise Sol anlamında kullanılır. Set ise yerleştirme anlamındadır.
Demek ki program içerisinde önce OPEN ile dosyayı açıyor, sonra field komutu ile dosya değişkenlerini tanıtıyor, daha sonra da programı yapıyor ve programın sonunda LSET veya RSET kullanarak program içindeki değişkenlerdeki bilgileri dosyaya kaydedilmek üzere ara bellek değişkenlerine yerleştiriyoruz. İşte bu ara bellek değişkenlerine yerleştirilen bilgilerin dosyay yazılması da put komutu ile oluyor.
PUT
İngilizce koymak anlamına gelen bu komut sayesinde bilgilerin dosyaya koyulması (yazılması) sağlanıyor.
Kullanılışı:
PUT Dosya no,Satır No
Buna göre yukarıdaki programda bulunan PUT 1,val(a$) komut satırının anlamı; ara bellek değişkenlerinde bulunan ve FIELD komutu ile uzunlukları belirlenen, RSET ve LSET ile sağa veya sola mı yanaşık yerleşeceği belirlenen bilgileri 1 numaralı dosyaya a$ değişkeninde bulunan sayılı satıra kaydet. Burada şuna dikkat edelim. Program içerisinde sıra numarası diye girdiğimiz (1,2,3,4 ... gibi) bilgi a$ değişkenine yerleşiyordu. İşte biz burada sıra numarasını 1 girmişsek dosyanın 1. satırına, 2 girmişsek 2. satırına vb. kaydeder. Fakat burada a$ değişkeninden önce val diye bir komut kullanmışız ve a$ değişkenini parantez içine almışız. Bu nedir?
VAL
Karakter değişkenlerde bulunan karakter bilgiyi sayısal bilgi haline çevirir.
Kullanılışı:
VAL(değişken adı)
Daha önceki derslerimizden hatırlayacağınız gibi LINE INPUT komutu ile karakter bilgi değişkenleri olan, sonu $ işareti ile biten sahalara bilgi girişi yapıyorduk. İşte yukarıdaki programda sıra numarasını girdiğimiz bilgi a$ isimli bir karakter sahaya kaydedilmiş. Bu nedenle onu sayısal olarak tanımlamak için val(a$) deyimini kullandık. Eğer bu bilgiyi line input komutu ile değilde;
INPUT "Sıra No :",a
Şeklinde girseydik, bilgiyi a$ değişkenine değil de a değişkenine sayısal olarak kaydedecektik ve biz de val komutunu kullanmaya ihtiyaç hissetmeyecek bu komut satırını;
PUT 1,A
Şeklinde yazacaktık.
Burada bu komutun yerine PUT 1,1 yazarsak, yani a değişkeninin yerine 1 rakamını koyarsak, girilen bilgiler her seferinde dosyanın 1. satırına kaydolur, dolayısıyla bir önceki girilen bilgiler silinir. Veya PUT 1,3 yazarsak bu defa girilen bilgiler 1 numaralı dosyanın 3. satırına kaydolur. Her girilen bilgi sürekli 3. satıra yerleşeceğinden bir önce girilen bilgi her defasında kaybolur. Bu nedenle bilgilerin sırayla 1. satırdan başlayarak, 2, 3, 4 ve artan sırada sırayla satırlara kaydolması ve önce girilen bilgilerin kaybolmaması için kullanıcıya bilginin dosyanın hangi satırına kaydedileceğini belirleme imkanı veriyoruz. Burada tavsiye şu: kullanıcı bilgileri 1. satırdan başlayarak sırayla ve bir artarak kaydetmeli. Bir önceki satırda sıra numarası 6 verilmişse bu defa 7 verilmelidir. Çünkü yine 6 sıra numarası verilirse bir önce girdiği bilgi kaybolur. Bilgiler dosyada tamsayıyla belirtilen satırlara kaydolur. Yani 1,5 ya da 1,2 veya 5,6 gibi satırlar olamaz.
Yukarıdaki örnek programda sıra no olarak ekrana yazdırdığımız mesajı, kayıt sıra numarası veya kullanıcının anlayabileceği bir başka şekilde mesaj olarak yazdırabiliriz. Bu programcının zevkine bağlı bir durumdur.
Bu kaydettiğimiz bilgilerin dosyadan nasıl çağrılıp okunduğunu bir sonraki sayfada göreceğiz. Ayrıca Dosyadaki kayıtları silme, düzeltme gibi diğer konuları da ilerleyen derslerde göreceğiz.
TOPLU İŞLEM DOSYALARI
MS-DOS Kullanıcıları gerek DOS ortamında, gerekse WINDOWS altında herhangi bir işlem veya işlemleri yapmak amacıyla, çoğunlukla aynı ve uzun komutlar zincirini tekrarlarlar. Toplu İşlem dosyalarını kullanarak, tek bir isim adı altında birden fazla işlemi bir seferde yapabilirsiniz.
Bu Dosyaların kullanılmasına ve çalıştırılmasına ait bazı bilgiler:
Her Toplu İşlem dosyasını .bat uzantı ismiyle kaydetmeniz gerekmektedir. Herhangi bir toplu işlem dosyasını çalıştırmak için uzantı ismini yazmanıza gerek yoktur. Toplu İşlem Dosyasında bir başka toplu işlem dosyasını da çalıştırabilirsiniz. Dos ortamında çalışıyorsanız komut satırının başına @ işareti koyarak o komut satırının ekranda yazılmasını engelleyebilirsiniz. Bir toplu işlem dosyasını herhangi bir editör vasıtasıyla yazabileceğiniz gibi, DOS ortamında da hazırlayabilirsiniz. Windows da çalışıyorsanız Başlat-Programlar dan MS-DOS Komut İstemini seçin ve açılan pencerede;
(Diyelim ki Hardiskimizin C gözünde BASIC dizini altında bulunan GWBASIC ile yazılmış fatura.bas isimli programı toplu işlem dosyası vasıtasıyla tek bir isim yazarak veya seçerek çalıştırmak istiyoruz.)
copy con fatura.bat
cd basic
gwbasic fatura
yazıp, F6 tuşuna basıp enter'a basın. Dosya fatura.bat ismiyle kaydolur. Artık ekrana sadece fatura yazdığınızda Bilgisayar önce C gözünde BASIC dizinine geçer, sonra gwbasic'i ve fatura.bas dosyasını çalıştırır. Bu dosyayı aynı zamanda Windows'da çalışırken Başlat-Çalıştır 'dan veya Bilgisayarımı açıp dosya hangi dizinde kayıtlı ise o dizine geçip açılan pencerede fatura.bat dosyasını gösteren simgeye ya da fatura.bat yazısına çift tıklayarak da çalıştırabilirsiniz. Yukarıdaki örnekte fatura.bat ismi rasgele verilmiş bir isimdir. İsmi dilediğiniz gibi verebilirsiniz. Mesela abc.bat, basla.bat, deneme.bat gibi. Ancak uzantı ismi mutlaka bat olmalıdır.
BİLGİLERİN DOSYAYA'DAN OKUNMASI
Daha önce herhangi bir bilgi dosyasına kaydettiğimiz bilgileri veya bu bilgilerden istediklerimizi görebilmek için yapmamız gereken şunlardır:
Önce içinden bilgileri alıp görmek istediğimiz dosyayı OPEN komutu ve FIELD komutu kullanarak açarız. Dosyadaki bütün bilgileri görmek için FOR çevrim komutunu kullanarak dosyanın birinci satırından son satırına kadar bir çevrime gireriz. Her satırdaki bilgileri sırayla birer değişkene kaydeder ve ekrana yazdırırız. Eğer işlem dosyanın son satırına gelmiş ise işlemi bitirir ve dosyayı kapatırız. Şimdi bir önceki derste hazırladığımız program ile girdiğimiz bilgileri ekranda görmek istediğimizi varsayalım.
Girilen Bilgiler neydi; Sıra No, Adı, Sınıfı, Numarası, Notu
Şimdi bu program ile Ahmet, Ali ve Veli 'nin bilgilerini girmiş olalım. Tabi bunları girerken sırayla girmiş olmamız lazım. Yani programı çalıştırdığımız zaman ekrana çıkan sıra no kısmına bir diyip, o sayfaya Ahmet'in adını soyadını sınıfını, numarasını ve notunu girdikten sonra ekranda yazan "Devam için 1, Çıkış için 2'yi seçin" mesajının karşısına 1 yazıp entera bastıktan sonra ekran yenilenip karşımıza sıra numarası soran mesaj çıktığında bu defa sıra numarasına 2 yazıp Ali'nin bilgilerini, 3. sefer Veli'nin bilgilerini girip çıktığımızı kabul edelim. Tabi bu şekilde daha bir çok kayıt girebiliriz. Bu bilgileri ekranda görmek için şöyle bir program hazırlayabiliriz: (Unutmayın bir önceki dersteki bilgi giriş programıyla bilgilerin girilmiş olması gerekir. Boş bir dosyadan bilgi alamazsınız.)
10 OPEN "DERS.BIL" AS 1
20 FIELD 1,3 AS SN$,20 AS ADI$,4 AS SNF$,5 AS NUMARA$,3 AS NOTU$
30 CLS
35 PRINT "SR.NO ADI SOYADI SINIFI NO'SU NOTU"
40 FOR I=1 TO LOF(1)
50 GET 1,I
60 IF EOF(1) THEN 100
70 A$=SN$:B$=ADI$:C$=SNF:D$=NUMARA:E$=NOTU
80 PRINT A$" "B$" "C$" "D$" "E$
90 NEXT
100 LINE INPUT "ÇIKIŞ İÇİN ENTER";JJ$
110 CLOSE
120 END
Şimdi bu programın satır satır açıklamasını yapalım:
10 OPEN komutuyla daha önce öğrendiğimiz gibi bilgi dosyasını açıyoruz. Örnekte açmış olduğumuz dosya daha önce oluşturduğumuz DERS.BIL dosyası.
20 Açtığımız dosyanın değişkenlerini tanımlıyoruz. Dikkat: Bir dosya ilk kez açılırken FIELD komutu ile değişkenleri nasıl tanımlamışsak aynı dosyayı daha sonra açtığımızda da tamamen aynı tanımlamaları kullanmalıyız. Aksi takdirde hatalara neden olabilir.
30 Ekranı sildiriyoruz.
35 Ekranın üst tarafında alt satırlarda görünen bilgilerin ne anlama geldiğini açıklayan bilgiler.
40 Burada daha önce öğrendiğimiz FOR çevrim (döngü) komutunu biraz daha farklı kullanmışız.
FOR I= 1 TO LOF(1) satırının anlamı:
FOR :Çevrime gir
I=Çevrim Değişkeni
1:1. Satır
TO:e, a - ye, ya
LOF:Line Of File (Dosyanın Satırları)
(1):1 no'lu Dosya)
Yani, demek ki bu satır ile şunu demek istiyoruz:
I çevrim değişkeninin alacağı değere göre çevrime gir. I değişkeni ise değerini = işaretinden sonra yazılan şekilde alacak, yani satır sonunda parantez işlemi içerisinde belirtilen 1 numaralı dosyada, 1 numaralı satırdan başlayarak dosya satırları boyunca çevrime girecek.
50 Burada yeni bir komut daha öğreniyoruz:
GET : Bu komut dosyadan belirtilen satırdan bilgi okumaya yarar.
Burada GET 1,I şeklindeki ifade; 1 Numaralı Dosyada , I değişkeninin aldığı değere eşit olan satırdan al anlamını taşıyor.
60 IF EOF(1) THEN 100 satırı ise Eğer çevrim tamamlanmış ve 1 no'lu dosyanın son satırına gelinmiş ise çalışmayı 100 no'lu satırdan devam ettir anlamına geliyor. Burada EOF deyiminin anlamı; End Of File şeklindeki İngilizce cümlenin karşılığı olan (Dosyanın sonu) dur.
70 FIELD komutu içerisinde tanımlanan ara bellek değişkenlerinde bulunan bilgileri başka değişkenlere aktarıyoruz.
80 Bu değişkenlerdeki bilgileri ekrana yazdırıyoruz. Esasen 70 nolu satırda yaptığımız işlemi yapmadan direk arabellek değişkenlerinden de ekrana yazdırabiliriz.
90 Programı dosyanın bir sonraki satırından bilgi okumaya devam ettirmek ve bir sonraki satıra geçeceğimiz için I çevrim değişkeninin değerini bir artırmak üzere NEXT komutuyla, FOR I= 1 TO LOF(1) komutunun bulunduğu satıra gönderiyoruz.
100 Dosyanın bütün satırlarının okunması tamamlandıktan sonra program 60 numaralı satır gereği bu satırdan itibaren çalışmaya başlar. Her ne kadar dosyadan bilgi okuma işlemimiz tamamlanmış ise de, kullanıcıya ekranda bilgilerin ne kadar kalması gerektiğini kendisinin belirleme imkanını tanımak amacıyla herhangi bir değişkene bilgi girişi yaptırarak (Burada JJ$ isimli değişkeni kullanmışız) Bu bilgi girişi yapılıncaya kadar ekranda bilgilerin sabit kalmasını sağlarız. Ne zaman ki kullanıcı "Çıkış İçin Enter" mesajı bulunan JJ$ sahasına bilgi girişini Enter'a basarsak yaparsa o zaman programdan çıkılmış olur. Ya da program devam ediyorsa program kaldığı yerden devam eder. Eğer böyle bir kontrol mekanizmasının olmadığını ve programın başka bölümler halinde devam ettiğini düşünürsek, program ekrana listelenmeyi bitirir bitirmez bu bölümü kapatacağından ve yeni işlemlere geçeceğinden kullanıcı ekrandaki bilgileri göremeyecekti. Eğer 100 no'lu satıra CLS komutu yazıp programı çalıştırırsanız konuyu daha iyi anlarsınız.
110 Bu komut, yani CLOSE komutu dosya kapatma komutudur. OPEN komutu ile açılan dosyayı kapatır. Aynı dosyadan bilgi almak için tekrar OPEN komutu ile açmak gerekir.
120 END (çıkış) komutu.
Yukarıda PRINT A$" "B$" "C$" "D$" "e$ şeklinde ekrana yazdırdığımız bilgiler yan yana ve aralarında satırda belirtilen " işaretleri arasındaki kadar boşluk bırakılarak ekrana yazılırlar. Eğer 35 no'lu satırda belirtilen başlık bilgilerinin altlarına tam olarak hizalanmazlarsa bu tırnak işaretleri arasındaki boşlukları artırarak veya eksilterek ya da 35 no'lu satırdaki başlık bilgilerinin birbirine uzaklıklarını ayarlayarak bu sorunu halledebilirsiniz.
FONKSİYONLAR
Gwbasic programlama dilinde bazı işlemleri yaptırmak için çeşitli fonksiyon komutları kullanırız. Bu fonksiyon komutlarını kullanım alanlarına göre 3 bölüme ayıracağız.
Matematiksel Fonksiyon Komutları Karakter Fonksiyonları Kursör (İmleç) hareket fonksiyonları
MATEMATİKSEL FONKSİYONLAR
ABS(X)
Bu fonksiyon x değerinin mutlak değerini hesaplar.
Örnek: PRINT ABS(-45)
Enter'a bastığınızda ekranda eksi ( - ) değerinden kurtulmuş olarak 45 mutlak değerini, yani pozitif değeri görürsünüz.
CINT(X)
Ondalık haneli sayılar bu fonksiyon ile kullanıldığında, sayının ondalık hanesini atar ve en yakın tamsayıya eşler. Eğer ondalık hanesi .5 'den küçükse ondalık haneyi atar tamsayıyı aynen alır. Eğer ondalık hane .5 'den büyük veya 5 'e eşitse ondalık haneyi atar tamsayıya 1 sayı ilave eder.
Örnek 1: PRINT CINT(7.49)
Enter'a basıldığında ondalık hanesindeki .49 değerini atar ve ekrana sadece 7 yazar.
Örnek 2: PRINT CINT(7.5)
Enter'a basıldığında ondalık hanesindeki değer .5 'e eşit olduğundan tamsayı hanesindeki 7 sayısına 1 sayı ilave ederek ekrana 8 değerini yazar.
Örnek 3: PRINT CINT(9.90)
Enter'a basıldığında ondalık hanesindeki değer .5 'den büyük olduğundan .90 değerini atar ve 9 sayısına 1 sayı ilave ederek ekrana 10 değerini yazar.
INT(X)
Sayının değeri eksi değerliyse (sıfırdan küçükse) ve aynı zamanda ondalık hanesi de varsa sayının değeri bir sayı büyür. Fakat sayı pozitif değerli ise, ondalık hane atılır. Sayının tamsayı değeri aynen kalır.
Örnek 1: PRINT INT(-3.2)
Enter'a basıldığında ondalık değer atılır. -3 olan tamsayı değeri -4 olarak ekrana yazılır.
Örnek 2: PRINT INT (6.9)
Enter'a basıldığında ondalık değer hiç dikkate alınmadan 6 tamsayısı aynen ekrana yazılır.
FIX(X)
Sayının - ya da + değerli olmasına bakmadan ondalık hanesi atılır. Tamsayı kısmı aynen alınır.
Örnek 1: FIX(-4,8)
Enter'a basıldığında sayının ondalık değeri atılır, tamsayı kısmı aynen -4 olarak ekrana yazılır.
SQR(X)
Sayının karekökünü verir.
Örnek 1: PRINT SQR(16)
Enter'a basıldığında ekrana karekökü olan 4 rakamını yazar. (4*4=16)
Örnek 2: PRINT SQR(8)
Enter'a basıldığında ekrana karekökü olan 2.828427 değerini yazar. (2.828427*2.828427=8)
LOG(X)
Sayının doğal logaritmasını verir.
Örnek : PRINT LOG(30)
Enter'a basıldığında ekranda 3.401197 değerini yazar.
SİN(X)
Sayının radyan cinsinden sinüs değerini verir.
Örnek : PRINT SIN(90)
Enter'a basıldığında ekrana .8939966 değeri yazılır.
COS(X)
Sayının radyan cinsinden cosinüs değerini verir.
Örnek : PRINT COS(0)
Enter'a basıldığında 1 değerini ekrana yazdırır.
TAN(X)
Sayının radyan cinsinden tanjant değerini verir.
Örnek : PRINT TAN(45)
Enter'a basıldığında ekrana 1.619775 değerini yazar.
RND
0 ile 1 arasında rasgele bir sayı üretir. Bu her seferinde farklı bir sayı olur.
Örnek : PRINT RND
Enter!a bastığınızda ekranda bu işlemi her yaptığınızda değişen; .5349368 , .2202465 gibi bir sayı görünür. Bu sayı 0 ile 1 arasında bie sayıdır.
Aşağıda; RND komutu kullanılarak yapılmış basit bir zar atma programı görüyorsunuz:
10 CLS
20 PRINT "Zarları atmak için * tuşuna basınız ..."
30 FOR I=1 TO 300
40 IF INKEY$="*" THEN 140
50 A=RND*10
60 A=INT(A)
70 B=RND*10
80 B=INT(B)
90 IF A>6 THEN A=A-6
100 IF A<1 THEN A=A+1
110 IF B>6 THEN B=B-6
120 IF B<1 THEN B=B+1
130 GOTO 160
140 PRINT "ATTIĞINIZ ZARLAR : " A " VE " B " DİR."
150 END
160 NEXT
170 GOTO 30
Burada öğrenmediğiniz komut olarak bir tek INKEY$ komutu var. Bu komutun şimdilik bir yönlendirme komutu olduğunu bilelim yeter. İlerideki derslerde bu komutun anlamını daha iyi öğreneceğiz. Tabi bu arada bu derste öğrendiğimiz INT komutunun kullanılışını da burada uygulamış olduk.
Az önce 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.
20 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çerisinde 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 hata 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 burada 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.
STR$(SAYISAL DEĞİŞKEN)
Str$ fonksiyonu sayısal bilgilerin karakter bilgi olarak algılanmasını sağlar. Daha değişik bir deyişle A, D, YAZ veya SAYI gibi sayısal değişkenlerdeki bilgilerin B$, KDJ$ ya da daha değişik (ismini bizim belirleyeceğimiz) karakter bilgi değişkenlerine aktarılmasını sağlar. Tabi sonu $ işareti ile biten karakter değişkenlerdeki bilgiler de her ne kadar sayı olarak da görünse üzerlerinde matematiksel işlem yapılmaz. Bilgisayar bu bilgileri sayısal olarak değil de karakter bilgi olarak algılar.
Örnek 1:
10 A=23
20 A$=STR$(A)
30 PRINT A$
RUN
23
Ok
Burada A sayısal değişkenindeki 23 değerini A$ karakter değişkenine str$ fonksiyonu ile atadığımızda ekran görüntüsünde herhangi bir değişiklik olmamakta, yan, print a ve print a$ komut satırlarının her ikisinin sonucu da ekranda 23 olarak görüntülenmektedir. Fark bilgisayarın bu değişkenlerdeki bilgileri farklı algılamasındadır. Bilgisayar a değişkenindeki 23 bilgisini sayısal olarak algılamakta ve bu değer üzerinde matematiksel işlemler yapabilmekte iken a$ değişkenindeki bilgiyi sadece karakter bilgi olarak kabul etmekte ve matematiksel işlem yapamamaktadır.
Örnek 2:
10 a=19
20 b=99
30 a$=str$(a)
40 b$=str$(b)
50 print a$+b$
RUN
1999
Ok
Gördüğünüz gibi bu programda a ve b sayısal değişkenlerindeki sayısal değerler a$ ve b$ değişkenlerine karakter bilgi olarak aktarılınca 50 no'lu satırdaki + işareti toplama vazifesi değil de yan yana birleştirme vazifesi görerek ekrana 1999 rakamı yazdırıldı. Eğer 50 no'lu satırda print a$+b$ yerine print a+b yazılsaydı sonuç 118 olacaktı.
STRING$(ADET,KARAKTER )
Diyelim ki ekrana 20 karakter uzunluğunda - karakterlerinden oluşan bir çizgi çekmek istiyorsunuz. Bunun için 20 kez - karakterini yazmak yerine şöyle bir işlem yapabilirsiniz;
PRINT STRING$(20,"-")
Enter'a basıldığında aşağıdaki görüntü oluşur:
--------------------
ya da aynı işlemi şu şekilde yapabilirsiniz:
PRINT STRING$(20,196)
Burada 196 değeri - karakterinin ascii kod karşılığıdır. Hatırlayın CHR$ komutunda öğrenmiştik. PRINT chr$(196) yazdığımızda bu karakter üretilir.
Daha değişik bir deyimle STRING$ fonksiyonunun önüne yazılan parantez içindeki ilk rakam üretilecek karakterin kaç tane olduğunu belirler. Virgül işaretinden sonraki ikinci hanede ise hangi karakterin üretileceği belirtilir. Bu üç şekilde belirtilebilir:
Doğrudan tırnak içerisinde karakter yazılır. ("&" gibi, veya "*" gibi) Üretilecek karakterin ASCII karşılığı olan sayısal değer girilir. Herhangi bir değişkende bulunan karakter üretilmek için değişken yazılır. Üçüncü şıkka Örnek:
10 A$="/"
20 PRINT STRING$(30,A$)
RUN
//////////////////////////////
Ok
Eğer değişkende birden fazla karakter mevcutsa sadece ilk karakter den üretilir. Mesela A$="ahmet" olsaydı 30 tane a karakteri üretilirdi.
Ya da değişken karakter değişken değil de sayısal değişken olsaydı ve değeri de 75 olsaydı (A$=75) bu takdirde 75 sayısının ASCII karşılığı olan K (Büyük harf K) karakterinden 30 adet yazılırdı.
SPACE$(sayı/sayısal değişken)
İstenilen sayıda boşluk karakteri üretir. Parantez içerisine ne kadar boşluk üretilecekse o değere eşit olan sayı ya da bu sayıya eşit değeri içeren sayısal değişken yazılır.
Örnek:
PRINT "ADI";SPACE$(7);"SOYADI";SPACE$(8);"ADRESİ"
Enter'a basıldığında sonuç şu olacaktır:
ADI.......SOYADI........ADRESİ
Tabi kelimeler arasındaki nokta (.) işaretleri olmayacak. Ben onları aralardaki boşluk sayısı belli olsun diye koydum. Bir de komut satırı içerisindeki ; işaretlerinin anlamını hatırladınız mı bilmiyorum ama yine de tekrar edeyim. Bu ; işaretlerinin anlamı Bilgisayarın bu işaretten önceki işlemi yaptıktan sonra bir alt satıra geçmeyip bulunduğu yerden devam etmesini sağlamasıdır. Aslında bu ; işaretleri olmasa da olur. Yani;
PRINT "ADI"SPACE$(7)"SOYADI"SPACE$(8)"ADRESİ" şeklindeki komut satırı da aynı sonucu verir. Çünkü bu işlemlerin hepsi bir tek PRINT komutu altında bir satırda toplanmış.
SWAP DEĞİŞKEN1,DEĞİŞKEN2
İki karakter değişkenin içeriğini değiştirir.
Örnek :
10 A$="ŞİİR":B$="OKUMA"
20 PRINT A$,B$
30 SWAP A$,B$
40 PRINT A$,B$
RUN
ŞİİR OKUMA
OKUMA ŞİİR
Ok
SPC$(BOŞLUK SAYISI)
SPACE$ fonksiyonunda olduğu gibi belirtilen sayıda boşluk bırakır.
10 PRINT="GWBASİC " SPC(10) "PROGRAMLAMA"
RUN
GWBASİC..........PROGRAMLAMA
Ok
Buradaki noktalar da kaç tane boşluk bırakıldığının görülmesi için koyulmuştur. Nokta yerlerinde boşluk vardır.
TAB(SAYI)
Ekrana veya yazıcıya bilgi yazdırılırken istenilen sayıda boşluk bırakılmasını, başka bir deyişle kursörü istenilen sütuna taşımayı sağlar. Bu fonksiyon muhakkak PRINT ya da LPRINT komutları ile birlikte kullanılır.
10 PRINT TAB(20);"SATIR DÜZENLEME"
RUN
....................SATIR DÜZENLEME
Ok
Burada TIRNAK içerisinde belirtilen bilgi yerine tırnak işareti kullanmadan herhangi bir değişkendeki bilgiyi de yazdırabiliriz. PRINT tab(15);a$ gibi.
INKEY$
Bu fonksiyon, programın çalışması esnasında klavyeden bir karakter bilgi girişi yapılmasını sağlar. Mesela ekrana devamlı Orhan Aygün yazdıran bir program yaptığımızı varsayalım. Tabi bunun sürekliliğini sağlamak için FOR çevrim komutunu kullanacağız. Diyelim ki bu program ekrana 30.000 kez Orhan Aygün yazdırsın. Fakat biz bu çevrim sırasında, yani ekrana Orhan Aygün yazdırılırken daha 30.000 kez yazdırmadan istediğimiz bir zamanda çevrimden çıkabilelim. İşte bu çevrimden çıkabilmek için yapacağımız müdahaleyi INKEY$ komutu sayesinde yapabiliriz.
Örnek 1:
10 CLS
20 FOR I=1 TO 30000
30 PRINT "Orhan Aygün"
40 IF INKEY$="K" THEN 100
50 NEXT I
60 PRINT "Program ekrana 30.000 kez Orhan Aygün yazdırarak çevrimini tamamlamıştır."
70 END
100 PRINT "Program ekrana " I ". kez Orhan Aygün yazdırdığında kullanıcı müdahalesiyle sona erdirilmiştir."
110 END
Program çalıştırıldığında, Ekranda her birisi alt satırdan devam etmek üzere 30.000 kez yazılmak üzere Orhan Aygün yazılmaya başlanır. Bu yazdırma işlemi sırasında eğer klavyeden büyük harf K tuşuna basılacak olursa çalışma 40 no'lu satır gereği 100 no'lu satıra gönderilir ve sona erer. Şimdi bu programdaki satırların anlamlarını açıklayalım:
10 Ekranı Sil
20 I değişkenin alacağı değere göre 1 den başla ve 30.000 olduğunda NEXT I komut satırının olduğu 50 no'lu satırın bir altındaki satırdan çalışmaya devam etmek üzere 30.000 'e kadar çevrime gir.
30 Ekrana her defasında Orhan Aygün yaz. (Çevrim 30.000 kez gerçekleşeceğine göre, müdahale olmazsa ekrana 30.000 kez Orhan Aygün yazılacak)
40 Eğer çevrim sırasında klavyeden (büyük harf) K tuşuna basılırsa çevrimden çık ve çalışmayı 100 no'lu satıdan devam ettir. (Burada K tuşu bizim belirlediğimiz bir tuştur. Buraya K yerine istediğimiz herhangi bir başka tuşu koyabiliriz. Aşağıda daha geniş açıklaması var.)
50 20 No'lu satırdaki FOR çevrim komutunda I çevrim değişkeninin değerini 30.000 'e tamamlanıncaya kadar her seferinde I 'nın değerini I=I+1 yaparak çalışmayı 20 no'lu satıra geri gönderir. Ne zamanki I değişkeninin 20 no'lu Satırın sonunda belirtilen 30.000 değerine ulaştığını görürse çevrimi bitirir ve çalışma bir alt satırdan devam eder.
60 Ekrana çalışmanın başarılı bir şekilde tamamlandığı mesajı yazdırılır.
70 Çalışma sona erer.
100 40 no'lu satırda belirtildiği gibi klavyeden K tuşuna basıldığı zaman çalışma yarıda kesilir ve 100 no'lu satıra gelir. Çalışmanın kesildiği ana kadar Ekrana kaç kez Orhan Aygün yazıldığı I değişkeninin değerinden bellidir. Bu nedenle çalışmanın kaçıncı kez Orhan Aygün yazdırılırken kullanıcı tarafından sona erdirildiği I değişkenindeki değere bakarak yazdırılabilir.
110 Çalışma sona erer.
Şimdi de INKEY$ komutu ile girdiğimiz karakterlerin ne olabileceği konusunda bir açıklama yapalım. Bu komutla klavyemizde bulunan bütün karakterleri kontrol amaçlı kullanabildiğimiz gibi. Klavyeden ekrana yazdıramadığımız karakterleri de daha değişik bir yolla kullanabiliriz. Nasıl mı?
Örneğin programı yarıda kesmek için ESC tuşunu kullanmak istiyoruz. Hani Şu klavyenin sol üst köşesinde olan tuş var ya, onu. Peki bu tuşu program satırlarına nasıl yazacağız? Çünkü bu tuşa bastığımızda ekrana bir şey yazılmasını bırakın, bütün satır olduğu gibi siliniyor. İşte burada imdadımıza ASCII kodları yetişiyor. ESC tuşunun ASCII kod karşılığı 27'dir. Bu tuşu da bilgisayara tanıtmamız için, (20. derste öğrendik, hatırlayacaksınız ) CHR$ komutunu kullanıyoruz. Yani;
40 IF INKEY$="K" THEN 100
Komut satırı yerine;
40 IF INKEY$=CHR$(27) THEN 100
Komut satırını kullanıyoruz.
Demek ki, Gwbasic programlama dilinde bazen tuşları kullanmak yerine ASCII karakter kodlarını kullanmak da gerekebiliyormuş.
Bu yukarıdaki K tuşu ya da ESC tuşu karşılığı olan CHR(27) ile yazdırılan karakterlerin yerine a, A, b, B, z, Z, *, - gibi veya benzer bütün karakterleri kullanabiliriz. Ancak burada sadece bir tek karakter girişi yapabiliriz. Ayrıca bu çevrimde ayrı ayrı iki INKEY$ komutu kullanırsanız program ilk gördüğü INKEY$ komut satırını geçerli kabul eder, ikincisini görmez.
DATE$
Bu komut kullanıldığı andaki, Bilgisayarın tarih bilgisini içerir. Şöyle diyelim; Ben bu sayfayı, her Pazar günü güncelleştirdiğime göre, bir önceki günden hazırlıyorum. Ve Saat 00:00 olmadan Cumartesi akşamları web adresime yüklüyorum. İşte sayfayı hazırladığım şu anda DOS penceresini açıyorum. Gwbasic derleyicisini çalıştırıp ekrana aşağıdaki komut satırını yazıp şu sonucu görüyorum:
PRINT DATE$ (Enter'a basıyorum)
07-01-2000
Burada gördüğünüz tarih formatında ilk iki karakter ay bilgisi, sonraki iki karakter gün bilgisi, sonraki dört karakter de yıl bilgisi. Demek ki bulunduğum tarih; 2000 yılının 7. ayının 1. günü.
TIME$
Bu komut kullanıldığı andaki, Bilgisayarın saat bilgisini içerir. Aynı yukarıda DATE$ komutunda olduğu gibi ekrana aşağıdaki komut satırını yazıp şu sonucu görüyorum:
PRINT TIME$ (Yine Enter'a basıyorum)
22:26:50
İlk iki rakam;saat bilgisi, sonraki iki rakam; dakika bilgisi ve son iki rakam da; saniye bilgisi.
Şimdi bu bilgileri öğrendikten sonra yine 20. derste öğrendiğimiz LEFT$, RIGHT$ ve MID$ fonksiyonlarını kullanarak;
Bugün **** yılının *. ayının *. Günündeyiz Saat; **'yi tam ** dakika ** saniye geçiyor.
Şeklinde ekrana yazı yazan bir program yapalım. Bu program her çalıştığında o ana ait bilgileri verecektir.
10 COLOR 3,1
20 CLS
30 AY$=LEFT$(DATE$,2)
40 YIL$=RIGHT$(DATE$,4)
50 GUN$=MID$(DATE$,4,2)
60 SAAT$=LEFT$(TIME$,2)
70 DAKIKA$=MID$(TIME$,4,2)
80 SANIYE$=RIGHT$(TIME$,2)
90 LOCATE 11,15:PRINT "Bugün " YIL$ "Yılının " AY$ ". ayının " GUN$ ". günündeyiz."
100 LOCATE 12,15:PRINT "Saat; "SAAT$ "'yi tam " DAKIKA$ " dakika, "SANIYE$ " saniye geçiyor."
110 END
Şimdi bu programı satır satır inceleyecek olursak;
10 Bu komut renk tespit komutudur. İleride ayrıntılı öğreneceğiz. Ekranın zeminin koyu mavi yazı rengini açık mavi olarak ayarlar.
20 Ekranı Siliyoruz.
30 Program çalıştığı andaki tarih bilgisinin soldan iki karakteri olan aya ait bilgiyi date$ komutunun içerisinden alıp AY$ değişkenine aktarıyoruz.
40 Yıl bilgisinin de sağdan 4 karakter olduğunu bildiğimize göre RIGHT$ komutu ile sağdaki 4 karakteri YIL$ değişkenine aktarıyoruz.
50 PRINT date$ yazıp enter'a bastığımızda ekrana yazılan tarih bilgisinin karakterlerini soldan başlayarak saydığımızda gün bilgisinin 4. karakter den başlayıp 2 karakter uzunluğunda olduğunu göreceksiniz. İşte burada da Bilgisayara DATE$ fonksiyonu içerisindeki tarih bilgisinin 4. karakterinden başlayarak iki karakterini al ve GUN$ değişkenine yaz diyoruz. Böylece gün bilgisini de elde ediyoruz.
60 Yukarıda izah edildiği gibi saat bilgisini SAAT$ değişkenine kaydediyoruz.
70 Yukarıda izah edildiği gibi dakika bilgisini DAKIKA$ değişkenine kaydediyoruz.
80 Yukarıda izah edildiği gibi saniye bilgisini SANIYE$ değişkenine kaydediyoruz.
90 Değişkenlerdeki bilgileri ekranda 11. satır ve 15. sütundan başlamak üzere açıklamaları ile birlikte yazdırıyoruz.
100 Değişkenlerdeki bilgileri ekranda 12. satır ve 15. sütundan başlamak üzere açıklamaları ile birlikte yazdırıyoruz.
Burada dikkat edilmesi gereken, ekranda olduğu gibi görünmesini istediğimiz mesajları tırnak içinde yazdırıyoruz. Ancak değişkenlerdeki bilgileri yazdırmak istiyorsak tırnak içine almıyoruz. Çünkü daha önce öğrendiğimiz gibi Gwbasic derleyicisi tırnak işaretleri içerisinde gördüğü her şeyi PRINT komutuyla olduğu gibi görüntüler, onu ekrana yazdırılacak mesaj olarak algılar.
Önemli not:
DATE$ VE TIME$ KOMUTLARI PRINT KOMUTU İLE KULLANILMAYARAK ÖNÜNE TIRNAK İÇERİSİNDE GEÇERLİ BİLGİLER YAZILDIĞINDA TARİH VE SAATİ DEĞİŞTİRMEK İÇİN KULLANILABİLİR.
ÖRNEK:
TIME$="22:12:00"
O anda bilgisayarınızın saati ne olursa olsun Saat 22:12:00 olarak değiştirilir.
GRAFİK FONKSİYONLARI
WIDTH
Bu fonksiyon ekranın genişliğini değiştirmede kullanılır. Ayrıca yazıcıya bilgi yazdırılırken bu komut ile bir satıra kaç karakter sığabileceği de ayarlanabilir. İşin yazıcıyla ilgili bölümünü ilerideki derslerde göreceğiz.
KULLANILIŞI:
WIDTH GENİŞLİK
Burada genişlik 1 ile 80 arasında bir tamsayı olmalıdır.
Örnek :
WIDTH 40
Enter'a basıldığında ekranın soldan ilk 40 sütunu kullanılabilir duruma gelir.
SCREEN
Bu fonksiyon da ekran modlarını değiştirir.
KULLANIMI :
SCREEN SAYI
Burada sayı kısmında grafik modunu kullanmak için duruma göre1 veya 2 yi kullanıyoruz. Normal yazı konumuna geçmek için SCREEN 0,0,0 ın karşılığı olan F10 tuşuna basıyoruz.
LINE
Bu komut ekranda belirtilen iki nokta arasına çizgi çeker. Ancak bu çizgiyi çekmek için grafik moduna geçmek gerekir. Yani SCREEN 1 ya da SCREEN 2 fonksiyonunu kullanarak ekranımızın modunu öncelikle değiştirmeliyiz. Normal ekranda LINE komutu hata verir.
KULLANILIŞI
LINE (X1,Y1)-(X2,Y2)
Burada x1 Ekran üzerinde çizginin soldan sağa kaçıncı piksel den (noktadan) Y1 de yukarıdan aşağıya kaçıncı noktadan başlayacağını gösterir. İkinci kısımdaki X2 ve Y2 ise bitiş koordinatlarını vermektedir. Burada dikkat edilmesi gereken şudur. Koordinatlar satır ve sütun cinsinden değil piksel cinsinden verilmektedir. Yani Ekran SCREEN 1 ile grafik moduna döndürüldüğünde 40 sütun ve 25 satırdan oluşmaktadır. Her bir karakter sığacak alana 10 nokta isabet ettiğine göre 10. satırı yukarıdaki sisteme göre 100 olarak ifade etmemiz gerekir.
DRAW
Ekran üzerinde çizgi çizmek için kullanılır.
KULLANILIŞI:
DRAW "KN"
K : Çizilecek yön kodunu belirtir.
N : Çizilecek çizginin nokta olarak uzunluğunu belirtir.
KOD ... AÇIKLAMASI
RN.......Sağa N nokta koyar
LN.......Sola N nokta koyar
DN.......Aşağı N nokta koyar
UN.......Yukarı N nokta koyar
EN.......Sağ yukarı köşeye N nokta koyar
HN.......Sol yukarı köşeye N nokta koyar
GN.......Sol aşağı köşeye N nokta koyar
FN.......Sağ aşağı köşeye N nokta koyar
BM x,y Kursorü x,y noktasına, nokta koymadan taşır.(Başlangıç noktası)
ÖRNEK
10 REM DİKDÖRTGEN ÇİZEN PROGRAM
20 SCREEN 1
30 CLS
40 DRAW "BM 50,50 R 100 D 50 L 100 U 50"
50 LINE INPUT "DİKDÖRTGEN ÇİZİLMİŞTİR. NORMAL EKRAN İÇİN ENTER",K$
60 SCREEN 0,0,0
10 numaralı satırda gördüğümüz REM komutunu sanırım ilk defa kullanıyoruz. Bu bir açıklama komutudur. Programın çalışmasına hiçbir etkide bulunmaz. Sadece programcıya kolaylık olması amacıyla program listelendiğinde görülebilen açıklamaları içerir. 20 no'lu satırda ekranı grafik moduna çeviriyoruz. 30 no'lu satırda ekranı sildiriyor, 40 no'lu satırda dikdörtgenimizi çizdiriyor ve bu dikdörtgeni görebilmek ondan sonra grafik modundan çıkmak için line input komutuyla ekranı biz enter'a basıncaya kadar durduruyoruz. Enter'a bastığımızda 60 nolu satır gereği ekranı grafik modundan normal moda çeviriyoruz.
CIRCLE
Ekran üzerinde çember çizmek için kullanılır.
GENEL KULLANIMI:
CIRCLE (X,Y),R1
X,Y = Koordinatları belirtir. (Çemberin Merkezi)
R1= Çemberin çapını belirtir.
ÖRNEK:
CIRCLE (200,100),50
LPRINT
Bu komut yazıcıya bilgi yazdırma komutudur. Herhangi bir veya birkaç değişkendeki bilgileri ya da komutun önüne tırnak içerisinde yazılan mesajı yazıcıya aktarabiliriz. Daha değişik bir deyimle PRINT komutunun yaptıklarını yapmakla beraber, PRINT komutundan farklı olarak sonuçları yazıcıya aktarır. Oysa PRINT komutunun sonuçlarını ekranda görürüz.
KULLANILIŞI:
LPRINT [x$] ["Orhan Aygün"] [a$+b$] [a$" "b$" "c$]
Burada [] işaretleri arasında yer alan işlemlerin kullanılması tercihe bağlıdır. Yani isteğimize göre herhangi bir değişkendeki bilgiyi yazdırabileceğimiz gibi hem bu değişkenşerdeki bilgileri hem de istediğimiz mesajı beraberce yazdırabiliriz.
Örnekler :
10 X$="1999"
20 V$="1 YIL"
30 LPRINT X$ " YILINDAN BU YANA " V$ "YIL GEÇTİ..."
Bu program çalıştığında yazıcıda hazır bulunan kağıda şu cümleyi yazar:
1999 YILINDAN BU YANA 1 YIL GEÇTİ...
LPRINT komutu tek başına kullanıldığında kağıt üzerinde boş bir satır bırakır ve alt satıra geçer.diyelim ki 5 satır boş geçmek istiyorsunuz. Bunun için şöyle bir komut satırı yazabilirsiniz;
LPRINT:LPRINT:LPRINT:LPRINT:LPRINT
Ayrıca LPRINT komutu ile yazıcının yazım şekillerini de ayarlayabiliriz. Bunun için bazı kodlar vardır. Bu kodları CHR$ fonksiyonuyla birlikte kullanırız. Bunlar şunlardır:
Kontrol karakter Kodu Görevi
CHR$(27)+"W1"....................Büyütülmüş yazı
CHR$(27)+"W0"....................Büyütülmüş yazı iptali
CHR$(27)+CHR$(15).............Küçültülmüş yazı
CHR$(27)+CHR$(18).............Normal yazı
CHR$(27)+"-1"......................Altı çizgili yazı
CHR$(27)+"-0"......................Altı çizgili yazı iptali
CHR$(27)+"E".......................Koyu yazı
CHR$(27)+"F".......................Koyu yazı iptali
CHR$(27)+"4".......................İtalik yazı
CHR$(27)+"5".......................Koyu yazı iptali
CHR$(27)+"W";CHR$(1) .......Geniş yazı
CHR$(27)+"W";CHR$(0) .......Geniş yazı iptali
CHR$(27)+"G"......................Çift yoğunluklu yazı
CHR$(27)+"F".......................Çift yoğunluklu yazı iptali
CHR$(27)+"S";CHR$(1) ........Alt indis
CHR$(27)+"T";CHR$(0) .........Alt indis iptali
CHR$(27)+"S";CHR$(0) ........Üst indis
CHR$(27)+"T";CHR$(0) .........Üst indis iptali
Yukarıdaki örnekleri uygulamanız için LPRINT komutu ile birlikte kullanmanız gerekir. Yani diyelim ki büyütülmüş yazı yazmak istiyorsunuz önce şu komut satırını yazacaksınız:
LPRINT CHR$(27)+"W1"
Bu satırı yazdığınızda yazıcıya hiçbir şey yazılmayacak sadece yazıcı büyütülmüş yazıya hazır hale gelcek ve bu komuttan sonraki LPRINT komutuyla kağıda yazdırılacak olan yazılar büyütülmüş olarak yazılacak. Ne zamana kadar;
LPRINT CHR$(27)+"W0"
Komutuyla büyütülmüş yazı durumu iptal edilinceye kadar.
LPRINT USING
LPRINT USING deyimi, 14. derste gösterilen PRINT USING deyimiyle aynı görevi görür. Aralarındaki fark; PRINT USING deyiminin sonucu ekranda görüntülenir. LPRINT USING deyiminin sonucu yazıcıya yazdırılır.
ÖNEMLİ :
Gwbasic derleyicisi bilindiği gibi DOS altında çalışan bir programlama dilidir. Bu nedenle yazıcı ayarları da DOS ortamına göre yapılmalıdır. Oysa günümüzde hemen bütün yazıcıların; Windows ortamında çalışıldığı varsayılarak setupları yapılmıştır. Bu nedenle yazıcıdan gerektiği gibi yararlanabilmek, özellikle Türkçe karakterlerin (ö,ç,ğ,ü,ş vb.) kağıda doğru şekilde yazdırılabilmesini sağlamak için kullandığınız yazıcının setup ayarlarının doğru yapılması gerekir. Yazıcınızın DOS ortamında Türkçe karakterleri yazdırma özelliği ayarlanmamışsa veya diğer özellikleri ayarlı değilse ve siz de bu ayarları yapmayı bilmiyorsanız elinizde bulunan kitapçıklarda da bu konular ile ilgili bilgiler yoksa yapacağınız şey, kullandığınız yazıcıya ait firmaların servislerinin veya merkezinin telefon numaralarını (genellikle yazıcıyla birlikte verilen kataloglardan) öğrenerek, bu servislerden yazıcınızın setup ayarlarını ve özellikle DOS ortamında türkçe karakterleri nasıl yazdırabileceğinizi öğrenmek olacaktır. Basit birkaç setup ayarından sonra hiçbir sorun kalmayacaktır. Bu setup ayarları yazıcınızın normal windows setup ayarlarını etkilemeyeceği gibi DOS tabanlı diğer programlardan da gerektiği ölçüde faydalanmanızı sağlayacaktır. Windows ortamında yazıcıdan Türkçe karakterleri doğru almanız DOS ortamında da Türkçe karakterlerin doğru yazdırılacağı anlamına gelmez. Dolayısıyla Windows altındaki herhangi bir programda yazıcıdan Ğ, Ü, Ş, Ç, Ö, İ gibi karakterleri doğru yazdırabilirken GWBASIC veya başka bir DOS altında çalışan program ile yazıcıdan bu karakterleri doğru alamıyabilirsiniz. Bunun çözümü doğru SETUP ayarlarının yapılmasına bağlıdır.
GOSUB / RETURN
Bir programda, programın ayrı yerlerinde aynı işlemi kullandığımızda bu işlemi her defasında programa eklemektense yapılan işlemi bir kere yazıp, programı istenildiğinde oraya yönlendirip işlem bittiğinde tekrar kaldığı yerden devam etmesi için bu komutu kullanırız. Tabi bu açıklama biraz, hatta biraz değil oldukça karmaşık oldu. Bu yüzden bu olayı örnekle açıklayalım. Diyelim ki bir satış ve stok programı yapıyoruz. Ve bu program da tabi ki menülerden oluşuyor. Bu menüleri yaparken ekranda bir çerçeve içerisinde görünmesini istiyoruz. Ana menümüz ve alt menüler şöyle olsun:
ANA MENÜ
STOK MENÜSÜ SATIŞ MENÜSÜ ÇIKIŞ STOK MENÜSÜ
BİLGİ GİRİŞİ DÜZELTME SİLME EKRAN LİSTE YAZICI LİSTE ANA MENÜ SATIŞ MENÜSÜ
BİLGİ GİRİŞİ DÜZELTME SİLME EKRAN LİSTE YAZICI LİSTE ANA MENÜ Şimdi bu üç menünün de aynı ebatlarda bir çerçeve içinde görünmesini istiyoruz. Normalde her menüyü yaparken önce ekrana bir çerçeve çizdirmemiz gerekir. Ama her üç menüde de aynı ebat ve özelliklerde çerçeve çizileceği, yani aynı işlem tekrarlanacağı için biz bu bölümü ayrı bir yerde bir defa hazırlıyoruz ve her menü için çerçeve çizileceğinde programı bu çerçeve çizdiren bölüme yollayıp işlem bittiğinde tekrar kaldığı yerden devam ettiriyoruz. Şimdi basit olarak yukarıdaki örneği görelim.
10 CLS
20 GOSUB 500
30 LOCATE 9,30:PRINT "A N A M E N Ü"
40 LOCATE 11,28:PRINT "1. STOK MENÜSÜ"
50 LOCATE 12,28:PRINT "2. SATIŞ MENÜSÜ"
60 LOCATE 13,28:PRINT "3. ÇIKIŞ"
70 LOCATE 15,28:LINE INPUT "Seçiminiz .......:";X$
80 IF X$="1" THEN 150
90 IF X$="2" THEN 300
100 IF X$="3" THEN END
110 GOTO 70
150 CLS
160 GOSUB 500
170 LOCATE 7,34:PRINT "STOK MENÜSÜ"
180 LOCATE 9,28:PRINT "1. BİLGİ GİRİŞİ"
190 LOCATE 10,28:PRINT "2. DÜZELTME"
200 LOCATE 11,28:PRINT "3. SİLME"
210 LOCATE 12,28:PRINT "4. EKRAN LİSTE"
220 LOCATE 13,28:PRINT "5. YAZICI LİSTE"
230 LOCATE 14,28:PRINT "6. ANA MENÜ"
240 LOCATE 15,28:LINE INPUT "Seçiminiz ........:";X$
245 IF X$="1" THEN 1000
250 IF X$="2" THEN 1100
255 IF X$="3" THEN 1200
260 IF X$="4" THEN 1300
265 IF X$="5" THEN 1400
270 IF X$="6" THEN 10
275 GOTO 240
300 CLS
310 GOSUB 500
320 LOCATE 7,34:PRINT "SATIŞ MENÜSÜ"
330 LOCATE 9,28:PRINT "1. BİLGİ GİRİŞİ"
340 LOCATE 10,28:PRINT "2. DÜZELTME"
350 LOCATE 11,28:PRINT "3. SİLME"
360 LOCATE 12,28:PRINT "4. EKRAN LİSTE"
370 LOCATE 13,28:PRINT "5. YAZICI LİSTE"
380 LOCATE 14,28:PRINT "6. ANA MENÜ"
390 LOCATE 15,28:LINE INPUT "Seçiminiz ........:";X$
400 IF X$="1" THEN 2000
410 IF X$="2" THEN 2100
420 IF X$="3" THEN 2200
430 IF X$="4" THEN 2300
440 IF X$="5" THEN 2400
450 IF X$="6" THEN 10
460 GOTO 390
500 CLS
510 LOCATE 6,25:PRINT "Bu bölüme siz bu yazıları değil de ALT tuşu ile beraber 201, 205 ve 187 yazarak çift çizgi ile çerçeve çizeceksiniz."
520 LOCATE 7,25:PRINT "alt+186 YETERİ KADAR BOŞLUK VE alt+186"
530 LOCATE 8,25:PRINT "alt+186 YETERİ KADAR BOŞLUK VE alt+186"
540 LOCATE 9,25:PRINT "alt+186 YETERİ KADAR BOŞLUK VE alt+186"
550 LOCATE 10,25:PRINT "alt+186 YETERİ KADAR BOŞLUK VE alt+186"
560 LOCATE 11,25:PRINT "alt+186 YETERİ KADAR BOŞLUK VE alt+186"
570 LOCATE 12,25:PRINT "alt+186 YETERİ KADAR BOŞLUK VE alt+186"
580 LOCATE 13,25:PRINT "alt+186 YETERİ KADAR BOŞLUK VE alt+186"
590 LOCATE 14,25:PRINT "alt+186 YETERİ KADAR BOŞLUK VE alt+186"
600 LOCATE 15,25:PRINT "alt+186 YETERİ KADAR BOŞLUK VE alt+186"
610 LOCATE 16,25:PRINT "alt+200 YETERİ KADAR BOŞLUK VE alt+188"
620 RETURN
510 nolu satırdaki PRINT komutundan sonra tırnak içinde yazılan bölüme oradaki yazıları yazmayacaksınız. Onlar açıklama. Burada yapacağınız işlem şu. Tırnak işaretini açtıktan sonra bir parmağınızla klavyedeki Alt tuşunu basılı tutarken diğer elinizle klavyenin numerik bölümünden 201 yazıp Alt tuşunu bırakacaksınız. Bıraktığınız anda Çerçevenin sol üst köşesi çizilecektir. Aynı şekilde Alt tuşu basılı iken 205 yazıp Alt tuşunu bıraktığınız zaman yatay çift çizgi çizilir. Bu çizgiden 27 adet çiziniz. En sonunda da Alt tuşu ile beraber 187yazınız bu da çerçevenin sağ üst köşesidir.
520 no lu satırda ise Alt tuşu ile 186 yazdığınızda dikey çift çizgi çizilir. 27 kez aralık çubuğuna basıp sonra yine Alt+186 yazın. Bu şekilde Alt tuşu ile beraber diğer çizgileri de üretebilirsiniz. Ayrıca 27 kez yatay çizgi çekmek yerine daha evvelki sayfalarda öğrendiğiniz STRING$ komutunu kullanarak tek bir komutla 27 çizgi çizebilirsiniz. Yani buna göre 510 no lu satırı şöyle de yazabiliriz:
510 LOCATE 6,25:PRINT CHR$(201);:PRINT STRING$(27,205);:PRINT CHR$(187)
Şimdi yukarıdaki programa bakarsak (tabi bu bir programın sadece menü kısmı) 10 nolu satırda ekran siliniyor. 20 nolu satırda ise bir GOSUB 500 komutu var ki bunun anlamı şudur. 500 no 'lu satıra git ve oradaki işlemleri yap. Ne zamana kadar; Ta ki RETURN komutunu görünceye kadar. Bu RETURN komutunun anlamı ise NEREDEN GELDİYSEN ORAYA DÖN VE BİR ALT SATIRDAN DEVAM ET. Demek ki program 20 no lu satırdan 500 no lu satıra geldiğine göre 620 no lu satırda RETURN komutunu görünce 20 no lu satıra geri dönerek bir alt satırdan yani 30 no lu satırdan çalışmaya devam edecek. Eğer 160 no lu GOSUB 500 komutu ile 500 no lu satıra gitmiş ise 620 no lu satıra gelip RETURN komutunu görünce 160 no lu satıra geri dönüp bir alt satırdan yani 170 no lu satırdan çalışmaya devam edecektir.
COLOR
Gwbasic programlama dilinde ekran ve yazı rengini belirlemek için kullandığımız komuttur. Renkler sayılarla gösterilir. Örneğin Ekran renginin açık mavi, yazı renginin ise kırmızı olmasını istiyorsak bu komutu;
COLOR 4,3
Şeklinde kullanmalıyız. Burada COLOR komutundan sonra yazdığımız 4 ve 3 rakamlarından ilk yazılan 4 yazı rengini belirler ikinci sırada yazılan 3 ise ekran rengini belirler. Böylece 4 ün kırmızı 3 ün ise açık maviyi temsil ettiğini de öğrenmiş olduk. Eğer tersini yazsaydık, yani;
COLOR 3,4
yazsaydık bu defa yazı rengi açık mavi, ekran rengi ise kırmızı olacaktı. Sayıların hangi renklere denk geldiğini öğrenmek için 1 den başlayarak color komutu ile birlikte kullanın.
Normal şartlarda Gwbasic, COLOR 7,0 komutu ile gösterilen siyah ekran beyaz yazı rengi ile açılır.
PLAY
Bu arada bir nota çaldırma programı olan play komutundan da bahsedelim. Play komutu ile bilgisayarımızdan müzik notalarını çaldırabiliriz. Ancak ne var ki normal şartlarda çıkan sesi ses kartımız yoluyla hoparlörden değil sadece bilgisayarın içindeki hoparlörden duyabiliriz. Bu nedenle ses oldukça zayıf duyulur. Sanırım bu sesi ses kartına ve oradan harici hoparlöre iletme imkanı var.
Bu komutla notaları çalmak için play komutunun önüne tırnak işaretleri içerisinde notalara denk gelen harfleri yazıyoruz.
Örneğin; do re mi fa sol la si şeklinde notaları çaldırmak için şu komutu yazıyoruz.
PLAY "cdefgab"
Burada notalara karşılık gelen harfler şunlar:
C = DO
D = RE
E = Mİ
F = FA
G = SOL
A = LA
B = Sİ
Normal şartlarda Gwbasic bu sesleri (notaları) 4 Oktav kalınlığında çıkartır. Ancak oktavını bizim belirleme imkanımız da vardır. Mesela yukarıda verdiğimiz örneği en kalın biçimi ile çalmak için;
PLAY "o0cdefgab"
En ince biçimi ile çalmak için de;
PLAY "o6cdefgab"
Şeklinde bir komut kullanmamız gerekir.
Burada o harfini oktavı belirtmek için, o harfinin önündeki sayıyı ise oktavın kalınlığını belirtmek için kullanıyoruz. Bu sayı 0 dan 6'ya kadar olabilir.
Ayrıca oktavın yanında notaların vuruş süresini de belirleyebiliriz. Normalde notalar yalın yazıldığında 4 lük vuruşlar halinde ses çıkartır. Fakat çalmasını istediğimiz notanın kaçlık vuruşla çalmasını istiyorsak notanın karşılığı olan harfin önüne istediğimiz vuruşun sayısal değerini yazarak çalma süresini uzatabilir veya kısaltabiliriz. Burada 1 sayısı tam değeri, yani en uzun süreyi, 64 sayısı ise en kısa süreyi gösterir. Bir örnek ile göstermek gerekirse;
Play "c1d64e8"
şeklinde yazılan komut satırında c harfine tekabül eden do notası en uzun şekilde çalacak, d harfine denk gelen re notası en kısa şekilde çalacak, mi notası ise 8 lik vuruş şeklinde çalacaktır.
Ayrıca notalar arasında bir müddet duraklama gerekiyorsa bunun içinde p harfini kullanıyoruz. Ancak duraklamanın ne kadar olduğunu p harfinin önüne yazacağımız sayıyla belirlememiz gerekiyor. Bir önceki örnekte nasıl vuruş süresini belirliyorsak burada da duraklama süresini belirlememiz gerekiyor.
Örnek:
Play "c4p2d4
Şu dizini yazın ve dinleyin:
PLAY “o4eedcp4eedcp4eefgfefdefedep4eefgp4eedcp4”
|
3 S O N Y A N I T L A R (En Son İleti ılk Sırada) |
mj |
İletim - 11/05/2006 : 01:22:22 o kadar da havalanma..bu programı kimse kullanmaz...o kadar da degil yani...ama yinede ellerine sağlık..emeğine sağlık.. |
sEcReTs |
İletim - 08/05/2006 : 18:44:45 eklemeyi unuttum da bu yazının yüzde kırkı benimdir. mesela program örnekleri benimdir. bir de özür dilerim link vermeyi unuttum linki de :http://www.geocities.com/KindlyRat/GWBASIC.EXE.zipolacak bu arada en sondaki müzik de benimdir yani güzel oldu övünmek gibi olmasın :) |
mj |
İletim - 08/05/2006 : 17:26:09 ne ders olmuş beaa...ellerine sağlık... |
|
|
|