25 Nisan 2013 Perşembe
Pisagor Teoremi - Algoritma
Dim Genişlik As Double
Dim Yükseklik As Double
Dim Birim As Double
Dim Hipotenüs As Double
Birim = 1
Hipotenüs = 5
Genişlik = 0
Do
Genişlik = Genişlik + Birim
Yükseklik = 0
Do
Yükseklik = Yükseklik + Birim
txtÖlçülen.Text = Genişlik & " " & Yükseklik
If Genişlik ^ 2 + Yükseklik ^ 2 = Hipotenüs ^ 2 Then
txtGUyanlar.Text = txtGUyanlar.Text & " " & CStr(Genişlik)
txtYUyanlar.Text = txtYUyanlar.Text & " " & CStr(Yükseklik)
End If
DoEvents
Loop Until Yükseklik >= Hipotenüs
Loop Until Genişlik >= Hipotenüs
Bir şeyin ölçümünü yapmak Pisagor teorimini kullanmıştım. Başlangıçta Hipotenüs değişkenine 5, Birim değişkenine 1 verdiğimizde algoritma gayet güzel işliyor. Genişlik'i 4, Yükseklik'i 3 buluyor – ve tam tersini. Birim'e 0.01 değerini de versek aynı sonuca ulaşacağını düşünebiliriz. Sadece daha çok sayıyı ölçeceğinden daha uzun sürecektir. Ama iş burada ilginçleşiyor. Garip bir şekilde Genişlik'in değeri virgülden sonra en fazla 2 haneli sayılar olması gerekirken “2,1234...” diye gidebiliyor. Bağıntıyı sağlayan 3,4 rakamlarını da bulamıyor. Birim'e 0.01 yerine 0.5 verirsek algoritma yine beklendiği gibi çalışıp doğru sonuçlara ulaşabiliyor.
Visual Basic'i yıllardır kullanırım. Daha önce Visual Basic'in mantık hatası yaptığını hatırlamıyorum.:-) Bu algoritma daha büyük bir yazılımın parçası olabilirdi. O yazılım bu algoritmadan dolayı yanlış hesap yapabilirdi. Gerektiği gibi çalışmamasına neden olabilirdi. Yazılımcıları sorunun nereden kaynaklandığını uzun süre fark edemeyebilirlerdi. Çünkü bu basit algoritma ilk bakışta gayet normal görünmektedir. Hatalı çalışacağına dair bir şey belli etmemektedir. Dolayısıyla sorunun aranacağı ilk yer olmayacaktır. :-)
Visual Basic yazılımcıları algoritmayı denemek isterlerse diye buraya aldım. Visual Basic'in bu mantık hatasını yapmasına neyin neden olduğu merak konusudur. Ne tür bir iç işleyişin sonucunda mantık hatası yapıyormuş gibi görünüyor! :-)
Kaydol:
Kayıt Yorumları (Atom)
Hiç yorum yok:
Yorum Gönder