Bu sayfadaki yazılar
Sayfanın metni
Sayfa 19
NEXT döngüsünü iki ayrı satıra ayırın, sonra tekrar çalıştırın. TIMER fonksiyonunun çalışmasını göreceksiniz. TIMER ON/TIMER OFF TIMER STOP KOMUTLARI: Kullanım Şekli: TIMER ON
TIMER OFF TIMER STOP Bu yönergeler sırayla zaman tabanlı event trapping'i açar, kapatır ve durdurur. TIMER ON yönergesi, ON TIMER .... GOSUB yönergesi kullanılarak zamanın okunmasını sağlar ve zamana göre program akışının değiştirilmesine izin verir. TIMER OFF ise ON TIMER dallanmalarına imkan vermez; program akışındaki bir TIMER ON yönergesi çalıştırılana kadar event trapping'i durdurur. TIMER STOP ise TIMER event trapping'i iptal eder. Event trapping devam etmektedir, ancak bir TIMER ON yönergesi çalıştırılmadan ON TIMER .... GOSUB yönergesini çalıştıramazsınız.
TRANSLATE$ KOMUTU: Kullanım Şekli: Fonem değişkeni=TRANSLATE$("dizi") Bu dizi fonksiyonu dizi'yi Fonem değişkeni içine SAY yönergesi ile söylenebilecek şekilde çevirerek yerleştirir. Burada kullanılan İngilizce fonem kurallarıdır. TRANSLATE$ komutu kullanılmadan, SAY "Amiga" gibi bir komut verilirse, "illegal function call" hata mesajına sebep olur. Zira SAY komutu ile verilen yazısal dizi Amiga tarafından doğrudan telaffuz edilemez. Bu yüzden dizinin önce Amiga'nın anlayacağı formata çevrilmesi gerekir. Bunun için TRANSLATE$ komutu kullanılır:
YAZI$=TRANSLATE$("Amiga") SAY YAZI$ TRANSLATE$ fonksiyonunun yaptığı iş verilen diziyi fonem kodlarına çevirmektir. Herhangi bir yazı dizisinin fonem kodlarını görmek isterseniz (mesela yukarıdaki örneğin), "PRINT YAZI$" yazıp "AHMIY3GAH" sonucunu alırsınız. TRON/TROFF KOMUTLARI: Kullanım Şekli: TRON TROFF AmigaBasic kullanıcıya, program hatalarını bulmada kolaylık olması açısından program izleme modunu (TRACE) da sunuyor. TRON ve TROFF komutları işte bu modu açıp kapatıyor. İzleme modu aktif durumdayken (Run menüdeki TRACE ON) program akışı sırasında işlenen aktif komut turuncu dikdörtgenle belirtilir. Bu dikdörtgen aracılığıyla program kontrolünü, komut akış sırasını ve döngüleri rahatlıkla görebilir, programınızı test edebilirsiniz. Tabii bunun için programı çalıştırdıktan sonra List penceresinin görüntülenmesini sağlamalısınız.
TROFF ise izleme modunu kapatıp normal moda dönmenizi sağlar.
UCASE$ KOMUTU: Kullanım Şekli: UCASE$("Yazısal Dizi") UCASE$ komutu, yazısal dizi içindeki tüm küçük harf karakterleri büyük harfe dönüştürür. Özellikle kullanıcıdan cevap isteyen programlarda çok yararlıdır.
INPUT "Devam etmek istiyor musunuz?"; CEVAP$
Satırı çıktığında, farklı kullanıcılar "Evet", "EVET", "E" ya da "e" olarak cevap verebilirler. İşte bu durumlarda UCASE$ komutu imdada yetişiyor:
A$=UCASE$(C$) IF A$="E" THEN deneme 1 IF A$="H" THEN deneme2 Dikkat ederseniz, program aldığı cevabı önce büyük harfe çevirip sonra dallanıyor.
Data girişi programlarında genellikle sıralama özelliği de aranır. Normal bir AmigaBasic program dataları alfabetik sıraya dizer. Ancak bunu yaparken ASCII karakter karşılıklarını esas aldığından büyük harfler ilk, küçük harfler sonraki sıralara yerleşirler. UCASE$ komutu bu durumlarda da çok faydalı bir komut. Girilen datalar UCASE$ komutu ile çevrilerek yerleştirilirse, sıralamada herhangi bir hata olmaz.
VAL KOMUTU: Kullanım Şekli: VAL("yazısal dizi") VAL fonksiyonu, STR$ fonksiyonunun tersidir. İçeriği sayı olan bir yazısal diziyi sayıya çevirir. Yazısal dizinin içeriği ilk harften itibaren çevrilecektir:
VAL"1234Merhaba" komutu 1234, VAL"1234Merhaba4567" komutu 1234, VAL"Merhaba1234" komutu 0 sonucunu verir.
VARPTR KOMUTU: Kullanım Şekli: VARPTR(değişken ismi) değişken ismi ile verilen değişkenin ilk byte'ının bellekteki yerleşim adresini verir. VARPTR çalıştırılmadan önce değişken ismi ile belirtilen değişkene bir değer atanmış olmalıdır; aksi halde AmigaBasic illegal function call hatası verir. Yazısal, sayısal ya da dizi değişkenlerinin isimleri kullanılabilir. Bellek adresleri, 0 ile 16.777.215 sınırları arasındadır. VARPTR, değişken ya da dizi adreslerini assembly dilinde yazılmış alt rutinlere geçirmek için kullanılır.
WAVE KOMUTU: Kullanım Şekli: WAVE kanal no,tamsayı dizi% WAVE kanal no,SIN SOUND komutu ile kullanılacak dalga şeklini değiştirmek için kullanılır. Dalga şekli, kanal no ile belirtilen ses kanalında geçerli olur. kanal no, 0 ile 3 arasında bir sayıdır ve bir ya da birden fazla kanala atanabilir. 0 ve 3, sol kanallar; 1 ve 2 ise sağ ses kanallarıdır.
SIN, sinüs dalga şeklidir. Tanımlı değer budur. Herhangi bir değişiklik yapılmadıkça kullanılmasına gerek yoktur.
tamsayı dizi% argümanında 256 eleman kullanılabilir. Burada kullanıcı tarafından tanımlanan dalga biçimi söz konusudur. Dizi değerleri -128 ile +127 arasında verilir. -128'in anlamı, titreşim için mümkün olan en düşük değer; +127 ise en yüksek değerdir.
Sinüs dalga biçimi dışında farklı ses tonları yaratan 3 tür dalga şekli vardır. Bunlardan birincisi üçgen dalga (triangle wave) biçimidir. Sinüs dalgaya benzer, ancak titreşimler sinüs eğrisi gibi derece derece değil, birdenbire tersine dönme şeklindedir. Bir üçgen dalgayı şu programla yaratabilirsiniz:
DIM t%(255) FOR X=0 TO 62 A=A+2:t%(X)=A NEXTX FORX=63T0 188 A=A-2:t%(X)=A NEXTX FORX=189T0 255 A=A+2:t%(X)=A NEXTX WAVE 0,t%:WAVE l,t%:WAVE 2,t% ERASE t% Örnekte önce tamsayı diziyi tanımladık. İlk FOR..NEXT döngüsü üçgen dalganın başlangıç noktasından en yüksek uç değe- rine çıktığı kısım. Sonraki döngü en alçak uç değerine inişi üretir. Son olarak da üçüncü döngü başlangıç noktasına geri yükseltir. Programı çalıştırdığınızda, ses tonlarında küçük değişiklikler olacak. Mesela BEEP komutunu vererek önceki ve programı çalıştırdıktan sonraki sesleri kıyaslayın. Programı çalıştırıp dalga biçi- mini değiştirdikten sonra sinüs dalgaya geri dönmek için program için ya da doğ- rudan komut modunda;
WAVE 0,SIN yazarak tek tek tüm kanalları sinüs dalgaya çevirebilir ve değişikliği iptal edebilirsiniz. Bu dalga biçimini geçen ay SOUND komutunda yazdığımız Star Wars müziği ile de deneyebilirsiniz.
Bir diğer dalga biçimi olan kare dalga (square wave), sadece bir tondan diğerine sıçrama sağlar ve ruhsuz bir ses üretir. Bir kare dalga sesi dinlemek isterseniz, aşağı- daki rutini yazın: DIM r%(256) FOR X=0 TO 127:r%(X)=127:NEXT X FOR X=128 TO 256:r%(X)=-128:NEXT X WAVE 0,r%:WAVE l,r%:WAVE 2,r% ERASE r%
Gördüğünüz gibi kare dalganın yapısı çok basit. Data alanının ilk yarısında maksimum 127 değerini, diğer yarısında da minimum -128 değeri okunur.
Dördüncü dalga şekli de beyaz dalga (white noise)'dır. Elektrik zili ya da alarm saatine benzer düzensiz sesler çıkarır. Titreşim değerleri, tamamen rasgele hesaplanır ve sık değişirler.
DIM n%(255) FORX=0TO127 n%(X)=RND*255-128 NEXTX WAVE 0,n% WAVE l,n% WAVE 2,n% ERASE n% Örnekte RND*255-128 formülü, -128 ile 127 arasında rasgele sayılar üretir. Bu, örnekleme sesleri için ayrılmış sınırdır.
Evet, bu aylık da bu kadar... Gelecek ay tekrar görüşmek üzere, hoşçakalın.
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 18
Merhaba. 1992 yılının bu ilk sayısında sizlere merhaba demekten mutluyuz. 1992'nin hepiniz için iyi bir yıl olmasını dileyerek, BASIC derslerimizi sürdürüyoruz. Bu yıl birkaç ayda tanıtımlarımızı tamamlayıp pratik örneklere geçeceğiz.
STRIG KOMUTU: Kullanım Şekli: STRIG (x) Birinci ya da ikinci porta takılı Joystick'in o anki durumunu belirtir. Bilgi, 0 ile 3 arasında verilebilen x değerine bağlı olarak okunur: STRIG(0) Son STRIG(0) komutundan sonra birinci porttan takılı olan joystick düğmesine basılmış olup olmadığını bildirir. Basılmışsa 1, basılmamışsa 0 değerini verir. STRIG(1) Joystick 1'in düğmesi o anda basılı durumdaysa 1, değilse 0 değerini verir. STRIG(2) Son STRIG(2) komutundan sonra ikinci porttan takılı olan joystick düğmesine basılmış olup olmadığını bildirir. Basılmışsa 1, basılmamışsa 0 değerini verir. STRIG(3) Joystick 2'nin düğmesi o anda basılı durumdaysa 1, değilse 0 değerini verir. Bu fonksiyonu kullanarak çeşitli programlara bekleme döngüleri yerleştirilebilir: PRINT "Yeniden oynamak için Fire'a basın" WHILE STRIG(3)=0:WEND STR$ KOMUTU: Kullanım Şekli: Dizi=STR$(değer) STR$, değer kısmında verilen sayıyı karakter dizisine çevirerek bir yazısal dizi değişkeni içerisine yerleştirir. Saklamak için byte üretmez; bunun yerine sayıdaki tüm rakamları içeren bir karakter dizisi yaratır. Karakter dizisinin pozitif sayılar için başında bir boşluk; negatif sayılar için eksi işareti yer alır.
STR$(4095) komutu, "4095" karakter dizisini oluşturur. STRING$ KOMUTU: Kullanım Şekli:
STRING$ (uzunluk,ASCII kod) STRING$ (uzunluk,dizi) Birinci kullanım şeklinde ASCII kod karşılığı karakteri ihtiva eden belirtilen uzunlukta bir dizi; ikinci kullanım şeklinde ise dizi'nin ilk karakterinden belirtilen uzunlukta bir dizi üretir.
STRING$(25,191) komutu, 25 adet 191 karşılığı ters soru işareti; STRING$(15,"A") komutu ise 15 adet "A" karakterinden oluşan bir dizi üretir.
SUB/END SUB EXIT SUB KOMUTLARI: Kullanım Şekli: SUB alt program adı [(parametre listesi)] STATIC
END SUB EXIT SUB Bu komutlar sırasıyla bir alt programı başlatır, bitirir ve alt programdan çıkışı sağlarlar.
Birinci formda, alt program adı kullanılarak bir alt programın başlangıcı tanımlanır, alt program adı, en çok 30 karakterlik bir etikettir, parametre listesi, ana programdan alt programa geçirilecek değişken listesidir; birbirinden virgül ile ayrılırlar. Parametre girişi sadece bir AmigaBasic satırının uzunluğu ile sınırlıdır. STATIC, değişken değerlerinin alt program içinde kalacağını belirtir. Yani değişken değerlerindeki değişiklikler sadece alt program için geçerlidir; ana programın değişken değerleri değişmez.
END SUB yönergesi, alt program sonunu belirtir. Bu komutla program kontrolü CALL ile alt programın çağrıldığı satırın bir alt satırından itibaren devam eder.
EXIT SUB yönergesi, program kontrolünün alt programdan dallanmasını sağlar. Dönüş yine alt programın çağrıldığı satırın bir sonrakinedir.
Aşağıdaki örneği inceleyin: x=-100 CALL con SUB con STATIC x=40:x=x* 100+3 PRINT x PRINT "Merhaba" END SUB PRINT x SWAP KOMUTU: Kullanım Şekli: SWAP değişken1, değişken2 Bu komut iki değişkenin değerlerini değiştirir. Yani komut verildiğinde değişken 1'in değeri değişken 2'ye, değişken 2'nin değeri değişken 1'e yerleşir. Kullanılan iki değişken aynı tip olmalıdır.
AMIGA BASIC
A$="AMIGA"
B$="DUNYASI" PRINTA$SPC(1)B$ SWAPA$,B$ PRINTA$SPC(1)B$ örneğini yazın ve çalıştırın. Komutun kullanımını daha iyi anlayacaksınız.
SYSTEM KOMUTU: Kullanım Şekli: SYSTEM Tüm açık dosyaları kapatarak AmigaBasic'ten çıkar ve Workbench'e geri döner. O an yüklü olan program kaydedilmemişse, AmigaBasic sizi bir uyarı penceresi ile ikaz eder.
TAB KOMUTU: Kullanım Şekli: TAB(x) PRINT, PRINT# ya da LPRINT yönergelerinde yazma pozisyonunu belirlemek için kullanılır. AmigaBasic, o anki yazma pozisyonunu x kolon boşluk yerleştirerek ilerletir ve basım işlemi x. karakterden başlar. Yazma pozisyonu o anki satırın x. karakterindeyse, basım işlemi bir sonraki satırın x. kolonundan itibaren başlatılır.
x değeri, 1 ile 155 sınırları arasında olabilir. Aynı komut satırında birden fazla TAB kullanılıyorsa, komutlar birbirinden noktalı virgül (;) işareti ile ayrılır.
PRINT TAB(10):"MERHABA" komutu, 10. kolondan başlayarak ekrana MERHABA yazısını basar.
Bu komutla aşağıdaki örnekte olduğu gibi formlar düzenlemek mümkün olur:
PRINT " STOK NO"; TAB(17);"ADI"; TAB(29); "MİKTAR"
PRINT " ------- "; TAB(13);"---------- "; TAB(27);".......
TAN KOMUTU: Kullanım Şekli: TAN(değer) Radyan olarak girilen değerin tanjantını hesaplayan fonksiyondur. INPUT "SAYIYI GIRIN":SAYI PRINT "TANJANT "SAYI"," TAN(SAYI)
TIME$ KOMUTU: Kullanım Şekli: TIME$ TIME$ fonksiyonu, sistem saatini verir. Sistem saati, Preferences'tan set edilebilir. Saat, 8 karakter uzunluğunda ve hh:mm:ss formunda görüntülenir, hh: saati (00'dan 23'e kadar); mm, dakikayı (00-59) ve ss, saniyeyi (00-59) gösterir.
TIMER KOMUTU: Kullanım Şekli: TIMER TIMER fonksiyonu, o anki sistem saatini saniye olarak verir. Bu, son geceyarısından (00:00:00) sonra geçen sürenin ifadesidir. Bu Amiga'nın dahili (iç) saatinden gelen bilgidir ve değiştirilmesi gerekli değildir. Ancak doğru olması için preferences'tan değiştirilmesi daha iyi olur.
et=TIMER FOR n=l TO 30000:NEXT n et=TIMER-et PRINT et Örneğimizi yazın ve çalıştırın. FOR..-