C#, Asp.Net, .Net Core
C# For Döngüsünde Basit Aritmetik İşlemindeki Hatam Nerede?
C# For Döngüsünde Basit Aritmetik İşlemindeki Hatam Nerede?
-
double b = 10.00000000; for(int i = 0; i < 35; i++) { b = b - i * Convert.ToDouble(1/7); richTextBox1.Text =richTextBox1.Text+ $"{b.ToString()}, "; }
amacım 10 dan 5'e doğru 35 adet veri yazdırmak. her veri arasındaki fark 5/35 ten 1/7 olması gerek.
olması gereken çıktı; 10, 9.857, 9.714 falan filan, 5.142, 5
benim aldığım çıktı; 10, 10, 10, 10 falan filan, 10 hep 10 geliyor ya.
bunu yapma amacım da yine başka bir şeyi beceremediğimden. matlab simulinkte kare dalga genliğini 10 dan 5'e doğru düşürmem lazım. genliği değişken yapıp matlab scripti falan yazmak gerekiyor birşeyler yaptım ama bu sefer de matrix uyumsuzluk hatası falan veriyor dedim onunla mı uğraşıcam? açarım bi simulinkte stair generatör tüm değerleri kendim girerim. o değerleri de hızlıca c# ile yazdırırım. zaman değerlerini hallettim de genlikte niye hep 10 dönüyor anlamadım. kod doğru bence. :d double int dönüşümünde hata olabilir diye düşünüyorum bulamadım. kafayı yedim gece gece. konu açayım dedim.
Mallığım nerede? c# ta yeni de değilim yani iki bin satır koddan oluşan yazılım falan yazmışlığım var c#'ta. takır takır çalışıyor.
-
b = b - (double)i * Convert.ToDouble(1/7);
gibi birşey yapman gerekiyor olabilirmi?
-
GuArDiAn55 bunu yazdı
double b = 10.00000000; for(int i = 0; i < 35; i++) { b = b - i * Convert.ToDouble(1/7); richTextBox1.Text =richTextBox1.Text+ $"{b.ToString()}, "; }
amacım 10 dan 5'e doğru 35 adet veri yazdırmak. her veri arasındaki fark 5/35 ten 1/7 olması gerek.
olması gereken çıktı; 10, 9.857, 9.714 falan filan, 5.142, 5
benim aldığım çıktı; 10, 10, 10, 10 falan filan, 10 hep 10 geliyor ya.
bunu yapma amacım da yine başka bir şeyi beceremediğimden. matlab simulinkte kare dalga genliğini 10 dan 5'e doğru düşürmem lazım. genliği değişken yapıp matlab scripti falan yazmak gerekiyor birşeyler yaptım ama bu sefer de matrix uyumsuzluk hatası falan veriyor dedim onunla mı uğraşıcam? açarım bi simulinkte stair generatör tüm değerleri kendim girerim. o değerleri de hızlıca c# ile yazdırırım. zaman değerlerini hallettim de genlikte niye hep 10 dönüyor anlamadım. kod doğru bence. :d double int dönüşümünde hata olabilir diye düşünüyorum bulamadım. kafayı yedim gece gece. konu açayım dedim.
Mallığım nerede? c# ta yeni de değilim yani iki bin satır koddan oluşan yazılım falan yazmışlığım var c#'ta. takır takır çalışıyor.
Hehehhe geçenlerde aldım benzeri hatayı,
double b = 10.00000000; for(int i = 0; i < 35; i++) { b = b - i * Convert.ToDouble(1.0 /7.0 ); richTextBox1.Text =richTextBox1.Text+ $"{b.ToString()}, "; }
1.0 / 7.0 olacak hocam (:
int/int'ten dolayı 0 geliyor
EDIT: Bir düzeltme yapayım hocam, sizin yazdığınız kod 10 < -- > 5 arasında gitmiyor.
b = b-i * Convert.toDouble/1.0 / 7.0); işleminde i sayısı ile çarptığınız için sayı gitgide büyüyor ve negatif şeyler çıkıyor.
Bunun yerine başlangıç ve bitiş değerlerini istediğiniz gibi değiştirebileceğiniz bir kod yazdım. Umarım yardımı olur.
double b = 10.00000000; double upperNumber = 10.0; double lowerNumber = 5; int frequency = 35; for (int i = 0; i < frequency; i++) { b -= (upperNumber - lowerNumber) / frequency; MessageBox.Show(b.ToString()); //richTextBox1.Text = richTextBox1.Text + $"{b.ToString()}, "; }
-
GodKlaus bunu yazdı
Hehehhe geçenlerde aldım benzeri hatayı,
double b = 10.00000000; for(int i = 0; i < 35; i++) { b = b - i * Convert.ToDouble(1.0 /7.0 ); richTextBox1.Text =richTextBox1.Text+ $"{b.ToString()}, "; }
1.0 / 7.0 olacak hocam (:
int/int'ten dolayı 0 geliyor
EDIT: Bir düzeltme yapayım hocam, sizin yazdığınız kod 10 < -- > 5 arasında gitmiyor.
b = b-i * Convert.toDouble/1.0 / 7.0); işleminde i sayısı ile çarptığınız için sayı gitgide büyüyor ve negatif şeyler çıkıyor.
Bunun yerine başlangıç ve bitiş değerlerini istediğiniz gibi değiştirebileceğiniz bir kod yazdım. Umarım yardımı olur.
double b = 10.00000000; double upperNumber = 10.0; double lowerNumber = 5; int frequency = 35; for (int i = 0; i < frequency; i++) { b -= (upperNumber - lowerNumber) / frequency; MessageBox.Show(b.ToString()); //richTextBox1.Text = richTextBox1.Text + $"{b.ToString()}, "; }
Kralsın hocam. İyi delirtti beni. :P C# böyleyse Javascript'i düşünemiyorum valla. Allah kolaylık versin Javascript kodlayanlara.
Benim kodda negatife gidiyor çünkü sürekli b'yi değiştirmişim. Döngüde i ile çarpmasam sorun çözülür dediğiniz gibi. Bi hata daha. Yazılımda kesinlikle ara vermemek lazım ya. Kendimden utandım hataya bak.
edit: imlâ