Programlamaya matematiksel bir arka plandan geliyorsanız, bu ince ayrıntı sizi kolayca yakalayabilir.

C++ yaygın olarak kullanılan bir programlama dilidir, ancak aynı zamanda programlama hatalarının en yaygın olduğu dildir. Bu hataların çoğu mantıksal hatalardan kaynaklanmaktadır. Özellikle karşılaştırma işlemleri sırasında yapılan hatalar kodunuzun doğruluğunu ve güvenilirliğini etkileyebilir.

C++ dili, birçok yeni geliştiricinin gözden kaçırdığı belirli bir karşılaştırma hatasına sahiptir. Bu hata, çoklu karşılaştırmalar yapılırken operatörlerin nasıl çalıştığının yanlış anlaşılmasından kaynaklanır. Bu yaygın hatadan nasıl kaçınacağınızı ve en başta neden oluştuğunu öğrenin.

C++'daki Karşılaştırmalar

C++ programlama dili, karşılaştırma işleçleri gibi temel işlemlerin yanı sıra birçok farklı özellik ve araç sunar. Karşılaştırma işleçleri, programlama dillerinde verileri birbiriyle karşılaştırmak için kullanabileceğiniz özel işlemlerdir. Geliştiriciler, özellikle algoritma oluştururken bu operatörleri oldukça sık kullanırlar.

instagram viewer

Karşılaştırma operatörlerini günlük hayatta birçok farklı örnekte görebilirsiniz. Örneğin bir marketten alışveriş yaptığınızda fiyatları karşılaştırmak için bu operatörleri aklınızda bulundurursunuz. Bir ürünün fiyatı diğerinden düşükse o ürünü tercih etmiş olursunuz.

Karşılaştırma işleçlerini şurada görebilirsiniz: if-else ifadeleri oldukça sık. Karşılaştırma işleçleri, bir değerin başka bir değerden büyük, küçük veya ona eşit olup olmadığını kontrol etmek için gidilecek yerlerdir. Gözden kaçırmamanız gereken çok küçük ama önemli bir detay var. Karşılaştırma ifadelerinin sonuçları, boole değerleri olan true veya false döndürür. Bu değerler, programlamadaki kontrol yapısının temel bileşenlerinden biridir.

Örneğin, C++ programlama dilinde "==" operatörü iki değerin eşit olup olmadığını kontrol eder. Değerler eşitse sonuç true değerini döndürür. Aksi takdirde sonuç yanlış olacaktır.

eğer (bir == b)
{
geri dönmekdoğru;
}
başka
{
geri dönmekYANLIŞ;
}

Karşılaştırma Problemine Bir Örnek

C++'a yeni başlayanların yaptığı yaygın hatalardan biri, karşılaştırma işleçlerinin kullanılmasıdır. Bu işleçler, programcıların iki değeri karşılaştırmasına ve bu karşılaştırmanın sonucuna göre farklı işlemler gerçekleştirmesine olanak tanır. Ancak bu işleçlerin yanlış kullanılması beklenmeyen hatalara neden olabilir.

Örneğin, 3 < 15 < 10 ifadesi matematiksel olarak yanlış olsa da, C++ sonucu doğru kabul eder. Aşağıdaki basit test programını yazarak bunu gösterebilirsiniz.

İlk olarak, adında bir dosya oluşturun. test.cpp. kullanarak bu dosyayı açın. favori kod editörü ve içine aşağıdaki kodu ekleyin.

#katmak
int bir = 15;

intana()
{
eğer (3 < bir < 10)
{
std::cout << "foo" << std::son;
}
başka
{
std::cout << "yuh" << std::son;
}

geri dönmek0;
}

Kodu derlemek ve çalıştırmak için bu komutu kullanabilirsiniz:

g++ testi.cpp -o Testi

Artık adında bir programınız var. Ölçek. Programı çalıştırın ve çıktısını inceleyin.

C++, bu programı çalıştırırken 3 < 15 < 10'un doğru olduğunu kabul etti. Matematiksel olarak yanlış bir ifade olduğu halde sonuç neden böyle çıkmış olabilir?

C++'da Karşılaştırma Probleminin Nedenleri

Çoğu programlama dili gibi, C++ da kodu soldan sağa okur. Her karşılaştırma operatörü bir boole değeri üretir. Boole değerleri yalnızca doğru ve yanlış anlamına gelmez; matematiksel bir eşdeğerleri vardır.

çalışma prensibi bir bilgisayar birlere ve sıfırlara bağlıdır. Bir bilgisayar için, bir şeyin sonucu ya doğrudur ya da yanlıştır. Bilgisayar programları genellikle 1 sayısını doğru, 0 sayısını yanlış olarak kabul eder.

Karşılaştırma problemini tekrar inceleyin ve ifadeyi soldan sağa okuyun; iki farklı karşılaştırma olduğunu göreceksiniz. İlk karşılaştırma 3 ile 15 sayıları arasındadır. Bu gerçek bir değerdir çünkü 3, 15'ten küçüktür.

İkinci karşılaştırma, bu sonuç ile 10 sayısı arasındadır. Sayısal bir karşılaştırma yapması gerektiğinden, C++ boole gerçek değerini sessizce 1'e dönüştürür. 1, 10'dan küçüktür, bu nedenle genel sonuç doğrudur.

Sonuç olarak, matematiksel bir yanılgı gibi görünse de, bu ifade C++ ve bilgisayarlar için geçerlidir.

C++'da Karşılaştırma Problemleri Nasıl Çözülür?

C++, diğer birçok programlama diliyle birlikte, mantıksal karşılaştırma için geleneksel matematikten farklı bir sözdizimi kullanır. Matematiksel ifade 3 < a < 15 "3, a'dan küçüktür" anlamına gelir. Ve a, 15'ten küçüktür.” Ancak, gördüğünüz gibi, C++ bu ifadeyi farklı yorumlar.

C++'da ve'yi temsil etmek için && işlecini kullanın. Daha sonra boolean ifadeleri birbirine zincirleyebilir ve aşağıdaki gibi operatörleri kullanarak mantık oluşturabilirsiniz. && VE'yi temsil etmek, || VEYA'yı temsil etmek için ve ! DEĞİL temsil etmek. gibi diller Java aynı mantıksal işleçleri kullanır.

Doğru mantıksal işleci kullanarak, önceki örnekteki hatayı düzeltebilirsiniz:

#katmak
int bir = 15;

intana()
{
eğer (3 < bir && bir < 10)
{
std::cout << "foo" << std::son;
}
başka
{
std::cout << "yuh" << std::son;
}

geri dönmek0;
}

Şimdi bu kod, a değerinin 3'ten büyük olup olmadığını ve a değerinin 10'dan küçük olup olmadığını test edecektir. Programı derleyip çalıştırın ve sonucu gözlemleyin.

Önceki örnekte "foo" yazıyordu, ancak program şimdi amaçlandığı gibi "boo" yazdırıyor. Karşılaştırmanın sol tarafındaki boole değeri (3 < a) doğrudur. Sağ tarafın değeri (a < 10) yanlıştır. O zamandan beri doğru ve yanlış her zaman YANLIŞ, genel ifade false olarak değerlendirilir, böylece bu koşul başarısız olur ve başka blok çalışır.

AND'yi değiştirmeyi deneyin (&&) operatöründen OR (||) ve farklı sonucu gözlemlemek.

C++'da Mantıksal Kontrollerin Önemi

C++'daki mantıksal karşılaştırmalar, boolean değerlerin ve karşılaştırma işleçlerinin kullanımını içerir. Programlarınızın işleyişini kontrol etmek için doğru boole değerlerini ve karşılaştırma işleçlerini kullandığınızdan emin olun. Kötü biçimlendirilmiş ifadeleri tespit etmek zor olabilir, çünkü C++ genellikle tamamen başarısız olmak yerine farklı davranışlar sergileyecektir.

Artık derleyicilerin bu sorunu nasıl göz ardı ettiğini ve soldan sağa okurken her karşılaştırmayı bir boole olarak ele aldığını biliyorsunuz. Kullandığınız herhangi bir dilde bu soruna dikkat edin ve bir adım önde olabilmek için etkilerini tanımayı öğrenin.