14 Eylül 2020 Pazartesi

QuickBasic - 8: Karakter ve metinler ile ilgili işlemler

Yayınlama: 2000
Güncelleme: 14 Eylül 2020

PRINT

Verileri ekrana yazdırmak için kullanılır.

Kullanımı:
PRINT [ifade veya değişken][{,|;}]
ifade
olarak bir fonksiyon ya da matematiksel işlem ya da çift tırnak(") içinde metin olabilir.
Satır sonunda eklenmeyen 2. tırnak işareti satır terkedildiğinde otomatik eklenir.

Virgül(,): Verileri belli atlama noktalarına dizerek yazar.
Noktalı virgül(;): Verileri boşluk bırakmadan yazdırır.
A$ = "Quick" : B$ = "Basic" : C$ = "v4.5"
PRINT A$ , B$ , C$
PRINT A$ ; B$ ; C$
PRINT A$ + B$ + C$ ' üstteki satırla aynı işi görür
PRINT A$ ; " " ; B$ ; " " ; C$
PRINT LEN(A$)
PRINT (4582 - 256) * 24# / 2 ^ 3 + 20
Matematiksel işlem uygulandığında işlem öncelik sırası:
  1. parantez içi
  2. ^ (üs alma)
  3. * (çarpma)
  4. / (bölme)
  5. + (toplama)
  6. - (çıkarma)
PRINT 10 - 3 * 2
işleminin sonucu 14 değil 4 dür.
Çünkü *(çarpma) öncelikli olduğundan 3 * 2 = 6 işlemi önce yapılır. 10 - 6 = 4
10 dan 3 ü çıkarıp 2 ile çarpmak isterseniz
PRINT (10 - 3) * 2
olarak yazmalısınız.
PRINT komutu parametresiz olarak yazılırsa boş satır oluşturur. Yani 1 satır atlar.
PRINT komutunun sonunda (,) ya da (;) yoksa sonraki PRINT çıktısı bir sonraki satırdan başlar.
Virgül(,) olması durumunda sonraki PRINT komutu, sonraki duraklama noktasından;
Noktalı virgül(;) olası durumunda ise bir sonraki sütundan başlar.
Sayısal veriler ve değişkenler solunda bir boşlukla yazdırılır.

Örnek:
a=10: b=-25
PRINT a; b; b ' 10 -25 -25

WRITE

Kullanımı:
WRITE ifade listesi
PRINT komutu gibi verileri ekrana yazdırmak için kullanılır.

Farkları:
  • İfade ya da değişkenler arasında virgül(,) kullanılır. Noktalı virgül yazılmak istenirse virgüle dönüşür.
  • Sayısal verilerin solunda boşluk olmaz.
  • Metin içeriği ekrana çift tırnak(") içinde yazılır.
  • Veriler ekrana aralarına virgül(,) konularak yazılır.
  • Her WRITE yeni bir satırdan yazmaya başlar
Örnek:
CLS
A = 122: pi# = 3.14159265359#
ad$ = "Mesut": soyad$ = "Akcan"
PRINT A, -12 + 7 / 2, ad$, soyad$, pi#
WRITE A, -12 + 7 / 2, ad$, soyad$, pi#

LOCATE

Ekranda yazma konumunu(satır ve sütun olarak) ve klavye imleci durumunu ve şeklini belirler

Kullanımı:
LOCATE [satır][,[sütun],[durum][,başlangıç,bitiş]]]]
satır, sütun: Dikey ve yatay olarak konumu belirler. Belirtilmeyen değer olursa bir önceki komutun etkilediği konum değeri alınır.
durum: 0: İmleç görünmez, 1: İmleç görünür.
başlangıç, bitiş: Klavye imleç şeklinin dolu başlangıç satırı ve bitiş satırı.
80x25 metin ekran için başlangıç, bitiş değeri 0-7 arası bir sayı olabilir.

Örnek 1:
' LOCATE komutu örnekleri
' ©2020 Mesut Akcan
' mesutakcan.blogspot.com
SCREEN 0: WIDTH 80, 25: CLS

LOCATE 5, 20 ' Konum: satır 5, sütun 10
yaz

LOCATE 4, 19, , 0, 3 'Simgedeki 0-3. satırlar dolu
yaz

LOCATE 1, 1 'Sol üst köşe
yaz

LOCATE 2, , 0
'Satır 2, İmleç gizlenir
yaz

LOCATE , 25, 1, 6, 7
'Satır değişmez, Sütun 25
'İmleç göster, Simgedeki 6 ve 7 satırlar dolu
yaz

LOCATE 6, 22, , 3, 6 'Simgedeki 3-6. satırlar dolu
yaz

LOCATE 10, 10, , 0, 7 'Simgedeki tüm satırlar dolu
yaz

SUB yaz STATIC
 n = n + 1
 COLOR n + 8
 PRINT "Örnek:"; n;
 SLEEP
END SUB
Örnek 2:
' LOCATE komutu örneği. Ekran koruyucu(screen saver)
' ©2020 Mesut Akcan
' mesutakcan.blogspot.com
CLS
LOCATE , , 0 'imleci gizle
DO
    IF r > 24 THEN ra = -1: COLOR INT(RND * 15 + 1)
    IF r < 2 THEN ra = 1
    r = r + ra
    
    IF c > 79 THEN ca = -1
    IF c < 2 THEN ca = 1
    c = c + ca
    
    LOCATE r, c: PRINT CHR$(3);
    FOR m = 1 TO 1000: NEXT
    'LOCATE r, c: PRINT " ";
LOOP UNTIL INKEY$ = CHR$(27)

CSRLIN

LOCATE, PRINT gibi komutlar ekran yazı yazma konumunu değiştirir.
CSRLIN fonksiyonu, yazı yazma konumunun satır numarasını verir.

Örnek:
' CSRLIN fonksiyonu örnek
' ©2020 Mesut Akcan
' mesutakcan.blogspot.com
CLS : LOCATE 12, 10
r = CSRLIN
PRINT "Aktif satır:"; r;

POS

Yazı yazma konumunun sütun numarasını verir.

Örnek 1:
CLS
LOCATE , , 1
DO
    a$ = INKEY$
    PRINT a$;
    IF POS(0) > 10 THEN PRINT CHR$(13); '13=Enter
LOOP UNTIL a$ = CHR$(27) '27=ESC
Örnek 2:
' CSRLIN ve POS fonksiyonları
' ©2020 Mesut Akcan
' mesutakcan.blogspot.com
CLS
LOCATE 10, 15
PRINT "Merhaba. ";
r = CSRLIN
PRINT "Aktif satır:"; r;
PRINT " Aktif sütun:";
c = POS(0)
PRINT c
Örnek 3:
' CSRLIN ve POS fonksiyonları
' ©2020 Mesut Akcan
' mesutakcan.blogspot.com
CLS
RANDOMIZE TIMER
FOR n = 1 TO 10
    LOCATE INT(RND * 24 + 1), INT(RND * 60 + 1)
    COLOR 10
    PRINT CHR$(16);
    COLOR 15
    r = CSRLIN 'satır
    c = POS(0) 'sütun
    PRINT "Satır:"; r; "Sütun:"; c - 1
NEXT
Örnek 4:
' POS ve CSRL fonksiyonu örneği
' ©2020 Mesut Akcan
' mesutakcan.blogspot.com
DEFINT A-Z
CLS
k$ = "X" 'karakter
g = 20 'genişlik
FOR n = 1 TO g * g
    r = CSRLIN 'satır
    c = POS(0) 'sütun
    COLOR 9
    IF c = r THEN COLOR 15
    PRINT k$;
    IF c = g THEN PRINT
NEXT

TAB

TAB komutu ile sonraki yazacağımız metnin başlangıç sütununu belirtiriz.

Örnek:
PRINT "1 - " ; TAB(5) ; "Qb 4.5"; TAB(20); "DOS"
PRINT "2 - " ; TAB(5) ; "Visual basic " ;TAB(20); "WIN"
Çıktı:

SPC

PRINT ve LPRINT komutunda kullanılır. Veri arasında istenilen sayıda boşluk bırakır.

Örnek:
PRINT "1 - " ; SPC(3) ; "Qbasic"; SPC(4); "DOS"
PRINT "2 - " ; SPC(5) ; "Visual basic" ; SPC(4) ;"WIN"

SPACE$

İstenilen sayıda boşluk karakteri oluşturmak için kullanılır. PRINT komutuyla boşluk yazdırmak için kullanılabildiği gibi boşluk miktarı bir değişkene de aktarılabilir.

Örnek 1:
PRINT SPACE$(8); "Merhaba!"
Örnek 2:
FOR i = 0 TO 20
   X$ = SPACE$(i)
   PRINT X$; i; X$; i
NEXT
Örnek 3:
DEFINT A-Z
DIM s AS STRING
COLOR 15 ,1 : CLS
a = 1
DO
    s = SPACE$(n)
    PRINT s; "MESUT"
    n = n + a
    IF n = 9 THEN a = -a
LOOP UNTIL n = -1
Çıktı:

PRINT USING

Metin ya da rakamları belirtilen biçimde yazar. Biçimleme için özel karakterler kullanılır.
Sayısal değerler için
# : rakamın konumunu
. (nokta) : küsuratı
, (virgül) : binler ayıracı
+ (artı) : sayının negatif veya pozitif işaretinin konumu
- (eksi) : negatif sayılarda, sayıdan sonra - konur
$$ : Dolar işareti ekler.
PRINT USING "$$###.##" ; 458.62
Çıktı: $458.62
** : Sayının başına * ekleyerek her sayının aynı genişlikte olmasını sağlar
**$ : * ve $ bileşik
PRINT USING "**$###,###.##" ; 31458.82
Çıktı: ***$31,458.82
^^^^ : Sayıları üslü olarak gösterir.
PRINT USING "##.##^^^^"; 234.56
Çıktı: 2.35E+02
Sözel değerler için
& : Değişkenlerin yerleştirileceği yeri belirler.
PRINT USING "Gülen & ağlayan &"; "ayva"; "nar"
Çıktı: Gülen ayva ağlayan nar
! (ünlem) : Metnin ilk karakterini verir
PRINT USING "!!"; "Mesut"; "Akcan"
Çıktı: MA
_ (alt eksi) : Bu tablodaki özel karakterlerden birini(#.,+-$*+^&!) yazdırmak istersek önüne _ konur.
PRINT USING "! 1500_!"; "Qbasic"
Çıktı: Q 1500!
Herhangi bir karakter : (Bu tabloda verilen karakterlerin dışında karakter) Olduğu gibi aynı konumda yazılır.

Örnek:
DIM AY AS DOUBLE
CLS
AY(0) = 454121.3654 : AY(1) = -6845.587 : AY(2) = 982.6
FOR N% = 0 TO 2
   PRINT USING "###,###.##+"; AY(N%)
NEXT
Çıktı:
454,121.38+
  6,845.59-
    982.60+
Örnek:
a = 12345.758#
b = 1000
PRINT USING "TL #,###,###.##"; a
PRINT USING " $ #,###,###.##"; b

STR$

Bellekte sayı olarak tutulan bir değeri metne(STRing) dönüştürür.
STR$(sayısal değer ya da değişken)

Örnek 1:
CLS
A% = 1986 : B% = 15
PRINT "Bu yıl ";
PRINT A% + B%;
PRINT " yılındayız"
PRINT "Bu yıl ";
PRINT STR$(A%) + STR$(B%);
PRINT " yılındayız"
Yukarıdaki kodları denediğinizde A% ile B% yi toplayabilirken bunu STRing e yani metne dönüştürdüğünde toplamak yerine birleştirdi.
Çünkü daha önce PRINT komutunda da görmüştük string verilerde sayısal işlem yapılamaz.

Örnek 2:
PRINT 1 + 1 ' sonuç: 2
PRINT "1" + "1" 'sonuç: 11 , ama sayısal 11 değil

VAL

Bellekte metin olarak tutulan sayıyı, sayısal işlemlerde de kullanılabilecek sayı değerine(VALue) dönüştürür.
VAL(sözel değer ya da değişken)

Örnek:
INPUT "Doğum yılınız"; T$
PRINT "Yaşınız "; VAL(RIGHT$(DATE$,4)) - VAL(T$)
Örnekte metin olarak girdiğimiz T$ sayısal işleme sokulamaz VAL ile dönüşüm sağlanarak sayısal işlem yapılmıştır.

STRING$

Aynı karakterden çok sayıda kullanmanız gerekiyorsa kullanılır.
STRING$(sayı,karakter)

Örnek:
PRINT STRING$(2000,"*") ' ekranı * ile doldurur
PRINT STRING$(80,"=") ' Bir satırı = ile doldurur

ASC

Bir karakterin ASCII kod karşılığını verir. ASCII (American Standard Code for Information Interchange = Bilgi Değişimi İçin Amerikan Standart Kodlama Sistemi)

Kullanımı:

ASC(karakter)
PRINT ASC("A") '65
PRINT ASC("MESUT") 'Kelimenin ilk harfi olan M harfi dikkate alınır. 77

CHR$

ASCII koduna denk gelen karakteri(CHaRacter) verir.

Kullanımı:

CHR$(ASCII kod)

Örnek:
PRINT CHR$(65) 'ekrana A çıkar
FOR N% = 32 TO 255 ' 32 den 255 e kadar olan
   PRINT CHR$(N%); " "; 'ascii karakterleri yaz
NEXT
Çıktı:
QBASIC ASCII Karakterler

INKEY$

Klavyeden girilen tuşun ASCII karakter kodunu alır.
Örneğin ESC tuşunun ASCII kodu 27 dir. Ayrıntı için: Bölüm 25: Klavye kullanımı

Örnek: Basit bir editör
DO
   A$ = INKEY$
   IF A$ = CHR$(27) THEN EXIT DO 'Çıkmak için ESC tuşuna basın
   PRINT A$;
LOOP

LCASE$ , UCASE$

LCASE$: Verilen metni küçük harflere(Lower CASE) dönüştürür.
UCASE$: Verilen metni büyük harflere(Upper CASE) dönüştürür.
Her iki komutta da yalnızca İngilizce harfler dikkate alınır.

Örnek:
PRINT LCASE$("MERHABA Dunya") 'merhaba dunya
PRINT UCASE$("Merhaba Dunya") 'MERHABA DUNYA
Problem 1:

Verilen bir metindeki kelimelerin baş harflerini büyük harfe dönüştüren programı yazın.

Problem 2:

Verilen bir metindeki cümlenin baş harflerini büyük harfe dönüştüren programı yazın.

LEFT$ , RIGHT$ , MID$

LEFT$: Metnin belli sayıda sol(LEFT)undaki karakterleri alır.
RIGHT$: Metnin belli sayıda sağ(RIGHT)ındaki karakterleri alır.
MID$: Metnin belli sayıda orta(MIDDLE)sındaki karakterleri alır.

Örnek:
PRINT LEFT$("QuickBasicV4.5",5) ' Quick
PRINT RIGHT$("QuickBasicV4.5",4) ' V4.5
PRINT MID$("QuickBasicV4.5",6,5) '6. karakterden itibaren 5 karakter. Basic
MID$ ın farklı kullanımı:

Burada verilen metin içinde değişiklik yapar
A$ = "O adam 25 yaşında"
MID$(A$,3)="kadın"
PRINT A$ 'O kadın 25 yaşında

LEN

Verilen metnin veya değişkenin bellekte kapladığı miktarı bayt cinsinden verir.

Örnek 1:
DIM b AS DOUBLE
DIM c AS LONG
DIM d% 'integer
DIM e$ 'string
DIM f 'single

PRINT LEN("Merhaba") '7
PRINT LEN(b)'8
PRINT LEN(c)'4
PRINT LEN(d%)'2
PRINT LEN(e$)'0
PRINT LEN(f)'4
Örnek 2:
A$ = "MESUT AKCAN"
G% = LEN(A$)
PRINT G% '11 , çünkü boşluklar da sayılır
FOR N%=1 TO G%
   PRINT LEFT$(A$,N%)
NEXT
Çıktı:
11
M
ME
MES
MESU
MESUT
MESUT 
MESUT A
MESUT AK
MESUT AKC
MESUT AKCA
MESUT AKCAN

LTRIM$ , RTRIM$

LTRIM$: Metnin solundaki boşlukları siler
RTRIM$: Metnin sağındaki boşlukları siler

Örnek:
PRINT LTRIM$(RTRIM$(" MESUT AKCAN "))

STRING'İ SAYIYA DÖNÜŞTÜRME

CVI, CVS, CVL, CVD komutları kullanılır.
Ayrıntı için Dosya İşlemleri-3 bölümüne bakınız



Önceki Bölüm: 7: Alt program ve Fonksiyon Sonraki Bölüm: 9: Sayılarla ilgili işlemler

Hiç yorum yok:

Yorum Gönder