25 Mart 2023 Cumartesi

QuickBasic - 29: Hata ayıklama-2

Yayınlama: 25 Mart 2023 

2. Çalışma Zamanı Hataları (Run-time Error)

Program kodlarının doğru göründüğü ancak çalıştırılması sırasında karşılaşılan hatalardır. Programcının ele almadığı bir takım aykırı durumlar ortaya çıktığında programın işletim sistemi tarafından kesilmesi ile ortaya çıkar. Bu tip hatalarda hata mesajı çoğunlukla çalışan işletim sisteminin dili ile verilir. Eğer bu tip hataları kullanıcı ele almışsa, program programcının vereceği mesajlarla ve uygun şekilde sonlandırılabilir. Bu tip hataların nerelerde ve hangi şartlarda ortaya çıkabileceğini bazen kestirmek zor olabilir.

Bazı yaygın çalışma zamanı hataları şunlardır:

a) Bellek Hataları:

Bellek hataları, programın belleğe yanlış bir şekilde erişmesi veya belleği yanlış kullanması sonucu oluşur. Bu hatalar, bellek sınırlarının aşılması, bellek sızıntıları veya bellek yönetimi hataları gibi nedenlerden kaynaklanabilir.
Örnek:
DEFINT A-Z
DIM personel(40200)
Bu kodlar çalıştırıldığında Overflow (taşma) hatası oluşturacaktır.
Çünkü QuickBasic dilinde bir dizi değişkenin eleman sayısı, dizi değişken boyutuna bağlı olarak belirlenen sınırların üzerinde olamaz. Bir dizi değişken elaman sayısı da dikkate alınarak bellekte en fazla 64K (65535 bayt) yer kaplayabilir.
INTEGER değişkenin her bir elemanı bellekte 2 bayt yer kapladığı için azami eleman sayısı 65535/2 = 32767
LONG ve SINGLE değişkenin her bir elemanı bellekte 4 bayt yer kapladığı için azami eleman sayısı 65535/4 = 16383
DOUBLE değişkenin her bir elemanı bellekte 8 bayt yer kapladığı için azami eleman sayısı 65535/4 = 8191
Not: Sayıların 1 eksik olmasının sebebi 0 ile başlamasından dolayıdır.
Önceki örnekte INTEGER değişkene 32767'den daha büyük bir değer girildiği için hata oluştu.
Detay için QuickBasic programında Yardım / Contents / Data types ve Yardım / Contents / Limits to QuickBasic / Arrays sayfalarına bakınız.

b) Bölme Hatası:

Bir sayıyı sıfıra bölmeye çalıştığınızda ortaya çıkar. Bu hata, bir programın çalışmasını durdurur ve Division by zero(Sıfıra bölünme) hata mesajı verir.

Örnek:
DEFINT A-Z
a = 3 * 2 - 6PRINT 5 / a
Kodlar çalıştırıldığında 3. satırda 5 rakamı sıfıra bölündüğü için Division by zero hatası oluşacaktır.
Hataları kontrol altına almak için ON ERROR kullanılabilir. Aşağıdaki gibi.
DEFINT A-Z
ON ERROR GOTO hata 'Herhangi bir hata olursa hata satırına git
a = 3 * 2 - 6 ' a=0
PRINT 5 / a ' 5/0
a = 32768
PRINT "-Program sonu-"
END

hata:
IF ERR = 11 THEN
    PRINT "Sayı sıfıra bölünemez"
ELSEIF ERR = 6 THEN
    PRINT "Taşma hatası"
ELSE
    PRINT "Bilinmeyen hata!"
END IF
RESUME NEXT 'Sonraki satırdan devam et

c) Dosya İşleme Hataları:

Dosya işleme hataları, dosyaları açarken, okurken veya yazarken ortaya çıkan hatalardır. Bu hatalar, dosyanın bulunamaması, dosyanın okunamaması veya dosyaya yazma izni olmaması gibi nedenlerden kaynaklanabilir.

d) Veri Tipi Hataları:

Veri tipi hataları, bir değişkenin beklenen veri tipine sahip olmadığı durumlarda ortaya çıkar. Örneğin, bir sayı değişkenine bir dize atamaya çalışmak gibi.

Örnek:
DIM a AS INTEGER, b AS STRING
a = "Merhaba"
b = 2023
2. ve 3 satırlar Type Mismatch (Tür uyuşmazlığı) hatası verecektir.

e) Fonksiyon Hataları:

Bir fonksiyonun beklenen sonucu üretememesi veya fonksiyonun yanlış kullanılması sonucu oluşur.

Örnek:
Aşağıdaki programda hata kontrolü yapılmadığı için sayı girişinde negatif bir sayı veya 12'den büyük bir sayı girildiğinde hata oluşturacak ve fonksiyon sonuç üretmeyecektir.
DEFLNG A-Z
CLS : PRINT "Faktoriyel Hesaplama"
INPUT "Bir sayı girin: "; num

sonuc = Factorial(num)

PRINT num; "! = "; sonuc

FUNCTION Factorial (n)
    IF n = 0 THEN
        Factorial = 1
    ELSE
        Factorial = n * Factorial(n - 1)
    END IF
END FUNCTION


Önceki Bölüm: 28: Hata ayıklama-1 ...:

Hiç yorum yok:

Yorum Gönder