20 Haziran 2023 Salı

QuickBasic - 2: Veri Tipleri

Yayınlama: 2000
Güncelleme: 20 Haziran 2023
QuickBasic'te çeşitli veri tipleri vardır.
Belleğe aktarılacak veriler için bellekte gereken boyutta yer açılır. Değişkenin içeriği ancak bu şekilde bellekte düzenli bir şekilde yerleşir.

Örnek:
A% = 126
A değişkenin yanındaki % işareti değişkenin bir INTEGER veri tipine sahip olduğunu gösterir.
A
değişkeni için bellekte 2 byte'lık yer açılır. Çünkü INTEGER veri tipi 2 byte'dır. 8 bit (binary digit= ikilik sayı) 1 baytı oluşturur.
1 baytın alacağı değer sayısal olarak 0-255, karakter olarak ise 1 karakter(harf, rakam, simge)dir.

Açılan bellek alanının bir kapasitesi olduğu için değişkene kapasitesinden daha büyük veri aktarmak Owerflow (aşırı yükleme, taşma) hatasına neden olacaktır.

Örnek:
A% = 32768 'Owerflow (taşma hatası)
PRINT A%
A% değişkeni 2 baytlık(16 bit) INTEGER değişken olduğu için alabileceği değer aralığı -32768 ile +32767 olduğu için örnekte verilen 32768 değeri sınırı aşmaktadır.
Yani bellekte açılan alana bu sayı aktarılamaz. O yüzden hata verir. Değişken türü ya da değeri değiştirilmelidir.

Normalde 2 bayt(16 bit) 256*256 = 0-65536 (2 üzeri 16 = 65536) arası değer alabilir. Ancak INTEGER değişkende negatif sayıları da kullanabilmek için 16 bitin 1 biti sayının + ya da - işareti için kullanılmaktadır.
Böylece sayı için 15 bit, işaret için 1 bit kullanılır.
15 bit (2 üzeri 15) = 32768

Değişkenlerin veri tipini tanımlamak şart değildir.
Tanımlanmamış değişkenler varsayılan değişken türü olan SINGLE (4 bayt) olarak ayarlanır.
Değişkenin bellekte hangi adreste bulunduğunu öğrenmek için VARSEG ve VARPTR kullanılır.
Değişkenin bellekteki konumu yeni başlayanlar için önemsiz bir konudur. İleri seviye programlamada bunlara gerek duyulur.

Bellek adresleri SEGMENT adı verilen bölümlere ayrılmıştır. Her bölümde ise POINTER adı verilen segmentdeki adreslemeler vardır.

VARSEG(degiskenadi) ile değişkenin segment adresi, VARPTR(degiskenadi) ile değişkenin segment içindeki konumu(pointer) alınır.

Örnek 1:

a = 214
PRINT VARSEG(a)'Segment
PRINT VARPTR(a)'Pointer
Örnek 2:
DEFINT A-Z
a = 120
b = 256
PRINT (VARSEG(a) * 65536) + VARPTR(a)'a değişkeni bellek adresi
PRINT (VARSEG(b) * 65536) + VARPTR(b)'b değişkeni bellek adresi
Örnek 3:

Bu örnekte A değişkeninin değeri A=222 satırıyla değil doğrudan bellek adresine yazılarak değiştirildiğine dikkat edin. POKE komutu bellek adresine 1 byte veri yazmak için kullanıldı.
DIM A AS INTEGER
CLS
A = 100
PRINT "A DEĞERİ = "; A ' A DEĞERİ = 100

PRINT "A SEGMENT = "; VARSEG(A)'A SEGMENT = 16592
PRINT "A POINTER = "; VARPTR(A)'A POINTER = 15844

DEF SEG = VARSEG(A) 'Varsayılan Segment = A değişkeni segment adresi
POKE VARPTR(A), 222 'A nın pointer adresine 222 yaz

PRINT "A DEĞERİ = "; A 'A DEĞERİ = 222

QuickBasic'te Veri Tipleri

QuickBasic diğer dillerdeki gibi tüm veri tiplerini kullanmanıza imkan vermez, fakat genellikle diğerlerine ihtiyaç duymayacaksınız.

QuickBasic ile kullanabileceğiniz veri tipleri:

STRING : 32767 karaktere kadar. Kullanılan karakter sayısı kadar byte yer kaplar.
INTEGER : 2 byte. Tam sayı
LONG : 4 byte. Tam sayı
SINGLE : 4 byte. 7 basamaklı sayı. Tam sayı olması şart değil. 7 basamaktan fazla bir sayı olursa bilimsel gösterim kullanılır.
DOUBLE: 8 byte. 15 basamaklı sayı. Tam sayı olması şart değil. 15 basamaktan fazla bir sayı olursa bilimsel gösterim kullanılır.

Veri tipleri hakkında daha detaylı bilgi almak için menüden HELP/Contents 'i ve çıkan ekranda Data Types i tıklayın.

Veri tipi tanımlama yolları

Değişkenlerin veri tiplerini tanımlamak için üç yöntem vardır.

1) DIM ve AS kullanarak
Bu en güzel görünen stildir ve iyi programcıların kullandığı stildir.
Tanımları düzgün yaptıktan sonra programın ileriki aşamalarında yalnızca değişken adını kullanmanız yeterlidir.

Örnek 1:
DIM A AS INTEGER
DIM B AS STRING
DIM C AS INTEGER
DIM D AS LONG
DIM E AS SINGLE
DIM F AS DOUBLE
DIM G AS INTEGER, H AS INTEGER
DIM I, J, K AS STRING 'I ve J nin tipi belirtilmediği için SINGLE olur
I="Mesut" 'Hata: Type mismatch (Tür uyumsuzluğu)
2) DEFxxx kullanarak.
Değişkenin baş harfine göre tanımlanmamış olan tüm değişkenler DEF in yanındaki değişken türünde olur.

DEFINT: Integer
DEFSNG: Single
DEFDBL: Double
DEFLNG: Long
DEFSTR: String

Örnek 2:
DEFINT A 'A ile başlayan değişken adları INTEGER. Örnekler: A, AY, ABC, AYLIK 
DEFSNG C,F,H 'C F ve H harfleri ile başlayan değişken adları SINGLE
DEFDBL D 'D ile başlayan değişken adları DOUBLE
DEFLNG L-R 'L ve R arasındaki harfler LONG. Örnek: L, LA, M, MZ, NB, O1, P24, R
DEFSTR S 'S ile başlayan türü belirtilmemiş tüm değişken adları STRING
3) Tür işareti ile

$ işareti STRING
% işareti INTEGER
& işareti LONG
! işareti SINGLE
# işareti DOUBLE

Değişkende herhangi bir işaret yoksa ve başka bir tanım belirtilmediyse değişken türü varsayılan olarak SINGLE'dır.

Örnek:
A% = 253
Y! = 3.141
Z& = 254144
M# = 2358542689.2668#
ADI$ = "MESUT AKCAN"
S = 65.5636
Bu şekilde tanımlama yaptığınızda değişkeni hep aynı şekilde yazmak zorundasınız.
Yani A% nin değerini değiştirmek için A = 100 kullanmak sakıncalıdır.
Bu yöntem bazen kodlamayı zorlaştırır. Hatalara neden olabilir.

DİKKAT:
A! = 22.125
A& = 46500
A% = 255
A$ = "Mesut"
PRINT A!
PRINT A&
PRINT A%
PRINT A$
PRINT A
A = A * 10
PRINT A
Üstteki kodları yazıp çalıştırın. Sonucu inceleyin.

Sonuç:
22.125
 46500
 255
Mesut
 22.125
 221.25
Değişken adları aynı olmasına rağmen farklı yöntemle tanımlandığı için farklı değişken adı statüsündedir.

Kullanıcı Tanımlı Veri Tipi

Kendi veri tipinizi belirleyebilirsiniz Bu size bellekte kaplayacak olan verilerinizi kullanmanızı kolaylaştıracaktır. Örneğin kişilerin adres bilgileri üzerinde işlem yapmak istiyorsanız, kişi için kendinizin belirlediği bir veri yapısı oluşturabilirsiniz.
TYPE KisiselVeri
	AdiSoyadi AS STRING * 30
	Adresi AS STRING * 50
	Telefonu AS STRING * 18
	PostaKodu AS LONG
	DogumYili AS INTEGER
	Boyu AS SINGLE
	Agirligi AS SINGLE
	Geliri AS DOUBLE
END TYPE
Sanırım bu açıklamalar başlangıç için yetersiz olacaktır.
Daha detaylı bilgi almak için TYPE yazısı üzerinde iken F1 'e basarak yardım alabilirsiniz.
Tanımlamış olduğumuz KISISELVERI veri tipini kullanmak için bellekte yer açmalıyız.
Bunun için;
DIM Personel AS KisiselVeri
komutunu kullanırız.
Şimdi bu PERSONEL değişkenin elemanlarına değer aktaralım.
Personel.AdiSoyadi = "Mesut Akcan"
Personel.Adresi = "Antalya Caddesi No:68/4"
Personel.Telefonu = "0324-998 46 21"
Personel.PostaKodu = 33522
Personel.DogumYili = 1971
Personel.Boyu = 1.72
Personel.Agirligi = 74
Personel.Geliri = 3528.62
Bu tip değişken kullanımı QuickBasic'te yeni iseniz ve ya diğer BASIC dillere alışkanlığınız varsa garip gelecektir. Ama bu tip değişkenler diğer dillerde de kullanılmaktadır.
Şu an için telaşlanmanıza gerek yoktur. Zamanla bu yapıya alışıp gerekli yerlerde rahatlıkla kullanacaksınız.

Veri Tipleri Özet Tablosu

PÜF NOKTASI:

DIM BORCU AS LONG
şeklinde değişken tanımlandıktan sonra programın ilerleyen satırlarında
BORCU = 1250000
şeklinde kullanabiliriz.

Ama karmaşık programlar yazdığınızda bu kullanım hangi değişkenin hangi veri tipinde olduğunu anlamanızda zorluk çıkarır.

Kolayı: İmleç değişken üzerinde iken F1 tuşuna basarak değişkenin hangi modülde hangi veri tipinde kullanıldığını gösteren ekranı görebilirsiniz.

Hiç yorum yok:

Yorum Gönder