folder Tahribat.com Forumları
linefolder Visual Basic - Basic - PicBasic ve Türevleri
linefolder Güzel Bir Algoritma Sorusu ? (Bütün Diller İçin)



Güzel Bir Algoritma Sorusu ? (Bütün Diller İçin)

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    cukurova
    cukurova's avatar
    Kayıt Tarihi: 21/Aralık/2003
    Erkek

    Private Sub Command1_Click()
    Dim x As Double


    x = 0


    Do Until x = 4
    x = x + 0.2
    Debug.Print x
    Loop


    End Sub


    x = 0 dan 0.2 lik atışla artıyor. x = 4 olduğu zaman döngünün bitmesi gerektiği halde sonsuza gidiyor.
    Hata nerede veya kimde ?


     


     

  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    ir2
    ir2's avatar
    Bilgi/Destek Madalyası Developer Madalyası
    Kayıt Tarihi: 10/Mayıs/2003
    Erkek

    walla sebebini bulmaya hiç kasamıcam pratik düşün


    Private Sub Command1_Click()
    Dim x As Double


    x = 0


    Do Until CStr(x) = "4"
    x = x + 0.2
    Debug.Print x
    Loop


    End Sub


    yap olsun bitsin xi yakalayamıo nedense double olarak artış yaparken bşeyler oluo sanırım ama çözemicem şu saat itibariyle :)

  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    i_drees
    i_drees's avatar
    Kayıt Tarihi: 21/Ağustos/2005
    Erkek

    delphi ile bende denedim dediğin gibi sonsuza gidiyor yada ben yanlış yapmış olabilirim delphi de yapan olursa yazsın merak ettim


    procedure TForm1.Button1Click(Sender: TObject);
    var x:extended;
    begin
    x:=0;
    repeat
    x:=x+0.2;
    until x=4;
    edit1.Text:=floattostr(x);
    end;


    ben böyle yaptım ama sonuç yok acayip...


    Son Of OTTOMAN Empire
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    renegadealien
    renegadealien's avatar
    Üstün Hizmet Madalyası Savaş Madalyası Başarı Madalyası Üstün Hizmet Madalyası Developer Madalyası
    Kayıt Tarihi: 23/Mart/2003
    Erkek

    Toplama ve . olduğundan dolayı algoritmada ve programlarda hata verebilir....


    Şölye bi denesene


    0,2 değerini bi sayıya ata


    a=0.2
    x=x+a

    Birde print x yaptığında x in 4 olduğu görülüyormu??? o önemli belki mantıksal bir hatadan dolayı tam olarak 4 çıkmıyordur.. Bu arada dahada kolay var..


    x = 0



    Do Until x = 20
    x = x + 1
    Debug.Print x
    Loop


    :)


    Sanıyorum kendi atasözümü yaptım, kaynak belirterek kullanabilirsiniz. 10.05.2013 tarihli google arama sonucu : Aradığınız - "herşeyin hayırlısı rampanın bayırlısı" - ile ilgili hiçbir arama sonucu mevcut değil. Not : Söyleyeni belli olduğu için(Ben) atasözü değil, özlüsöz oluyormuş, dolayısı ile kendi özlüsözümü yapmış oldum :)
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    cukurova
    cukurova's avatar
    Kayıt Tarihi: 21/Aralık/2003
    Erkek
    renegadealien bunu yazdı:



    0,2 değerini bi sayıya ata


    a=0.2
    x=x+a





    Güzel ama döngüden yinede çıkmaz.İstediğiniz döngüyü kullanın (for,while....) sonuç değişmeyecektir.
    Hatta farklı diller kullansanızda sorun aynı , VC++ kodu ;


    #include <iostream.h>

    int main( void )

    double a = 0; 
     while( a != 4.0 ) 

     a += 0.2; 
    cout << a << "n"; 

    return 0;
    }


    String e dönüştürme güzel ama bunu her zaman kullanamayız ve uygulamayı çok yorar(büyük sayılarda).Peki kodda hata olmadığına göre bu nasıl oluyor, başka yorumu olna arkadaş var mı?

  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    renegadealien
    renegadealien's avatar
    Üstün Hizmet Madalyası Savaş Madalyası Başarı Madalyası Üstün Hizmet Madalyası Developer Madalyası
    Kayıt Tarihi: 23/Mart/2003
    Erkek
    testtest

    Sanıyorum kendi atasözümü yaptım, kaynak belirterek kullanabilirsiniz. 10.05.2013 tarihli google arama sonucu : Aradığınız - "herşeyin hayırlısı rampanın bayırlısı" - ile ilgili hiçbir arama sonucu mevcut değil. Not : Söyleyeni belli olduğu için(Ben) atasözü değil, özlüsöz oluyormuş, dolayısı ile kendi özlüsözümü yapmış oldum :)
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Misanthrope
    Misanthrope's avatar
    Kayıt Tarihi: 25/Ekim/2005
    Erkek

    #include <iostream>
    using namespace std;
    int main()
    {
    double a = 0;
     while( a <= 4.0 )
    {
     a += 0.2;
    cout << a << "\n";
    }
    return 0;
    }


    bak böyle yapinca calisiyor:)


     


    " while( a != 4.0 ) " burda düsünme hatasi yapmissin.. sonsuz döngüye neden olan bu..


    yani yalnizca "a=4.0"i yazma digerleri yaz gibi birsey olmus..


    hadi kolay gele..


    Was mich nicht umbringt,macht mich stärker! Nietzsche
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    cukurova
    cukurova's avatar
    Kayıt Tarihi: 21/Aralık/2003
    Erkek

    Hayır, döngülerde veya kodlarda sorun yok.Sorun kayan nokta değişkenlerinin karşılaştırılmasıyla alakalı.
    Linuxde denemedim açıkcası ama VB6, Delphi veya VC++ sonuç değişmiyor.Debug penceresinde değişken 4.0 değerini almasına rağmen eşitliği sağlamıyor.


    Peki ama Neden???


     

  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Misanthrope
    Misanthrope's avatar
    Kayıt Tarihi: 25/Ekim/2005
    Erkek

    bak simdi arkadasim.. ben delphi bilmem.. c++  ile ilgili olan code hakkinda yorum yapayim..


    "neden?" sorusunun cevabi senin while döngünde.. "while( a != 4.0 ) " while döngüsü karsilastirma sonucunda "1" yada "true" alinca döner durur.. senin burda yazdigin code yalnizca bir kere "false" oluyor.. dogal olarak alet "4.0" dan sonra devam ediyor hesaplamaya..


    genel anlamda bir hata durumu daha var.. "type" sorunu..eger sen "a" yi integer tanimlarsan sorun yok.. ama "double" yada "float" tanimladiginda.. bunlarin tasiyabilecegi degerlerle ilgili sorun olabilir.. ama burda o durumda yok..(anlatmak istedigim su.. eger "int" ise "1" den sonra "2" gelir.. ama "float" oldugunda "1"den sonra "1,1" yada "1,000000000000001" de gelebilir..)


    hadi kolay gele..


    Was mich nicht umbringt,macht mich stärker! Nietzsche
  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    cukurova
    cukurova's avatar
    Kayıt Tarihi: 21/Aralık/2003
    Erkek
    Misanthrope bunu yazdı:

    bak simdi arkadasim.. ben delphi bilmem.. c++ ile ilgili olan code hakkinda yorum yapayim..
    "neden?" sorusunun cevabi senin while döngünde.. "while( a != 4.0 ) " while döngüsü karsilastirma sonucunda "1" yada "true" alinca döner durur.. senin burda yazdigin code yalnizca bir kere "false" oluyor.. dogal olarak alet "4.0" dan sonra devam ediyor hesaplamaya..
    genel anlamda bir hata durumu daha var.. "type" sorunu..eger sen "a" yi integer tanimlarsan sorun yok.. ama "double" yada "float" tanimladiginda.. bunlarin tasiyabilecegi degerlerle ilgili sorun olabilir.. ama burda o durumda yok..(anlatmak istedigim su.. eger "int" ise "1" den sonra "2" gelir.. ama "float" oldugunda "1"den sonra "1,1" yada "1,000000000000001" de gelebilir..)
    hadi kolay gele..



    Kardeş sen esas konuyu atladım, farklı konuya takıldın ama cevap vereyim. while( a != 4.0 ) anlamı a, 4 olmadığı sürece demektir.Yani a=4 olmadığı sürece döngüyü çalıştır , a=4 olunca döngüyü durdur demektir.Yani kodda hata yok.İkinci olarak "ama "float" oldugunda "1"den sonra "1,1" yada "1,000000000000001" de gelebilir.." kelimesi anlamsız çünkü debug penceresinde bakarsan sayı 0 - 0.2 - 0.4 - 0.6.... olarak 0.2 değerlerle artıyor ve 4.0 değerinide gayet net şekilde alıyor ama döngü durmuyor.
    Konunun C++ ile alakası yok hepsinde aynı şekilde davranıyor.Sorun kayan nokta değişkenlerinin karşılaştırılmasıyla alakalı hala...(Integer da tabikide çalışıyor)

  11. KısayolKısayol reportŞikayet pmÖzel Mesaj
    cukurova
    cukurova's avatar
    Kayıt Tarihi: 21/Aralık/2003
    Erkek
    Evet, uzun zaman oldu bu soruyu soralı... Sanırım eskiden kalma 3-4 böyle güzel sorum vardı. Fazla ilgi olmadığı için artıkda sormuyorum zaten. Forum artık programcılık, hack falan olmaktan çıktı iyice doğuhan gibi dallamalar yüzünden geyiğe döndü.Artık foruma yorum yazarken bile üşenmeye başladım.

    Tahribat forum nereye gidiyor, artık sadece t-shirt ve gnr gibi konular mı hit alacak merak ediyorum.
Toplam Hit: 2843 Toplam Mesaj: 15