Visual Basic - Basic - PicBasic ve Türevleri
Güzel Bir Algoritma Sorusu ? (Bütün Diller İçin)
Güzel Bir Algoritma Sorusu ? (Bütün Diller İçin)
-
Private Sub Command1_Click()
Dim x As Doublex = 0
Do Until x = 4
x = x + 0.2
Debug.Print x
LoopEnd 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 ? -
walla sebebini bulmaya hiç kasamıcam pratik düşün
Private Sub Command1_Click()
Dim x As Doublex = 0
Do Until CStr(x) = "4"
x = x + 0.2
Debug.Print x
LoopEnd Sub
yap olsun bitsin xi yakalayamıo nedense double olarak artış yaparken bşeyler oluo sanırım ama çözemicem şu saat itibariyle :)
-
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...
-
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:)
-
renegadealien bunu yazdı:
0,2 değerini bi sayıya ata
a=0.2
x=x+aGü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ı?
-
testtest
-
#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..
-
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???
-
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..
-
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)
-
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.