C++ ternary tek çift sayı bulma

Yalniz_adam

Femtopat
Katılım
23 Eylül 2020
Mesajlar
44
Ternary operatorü kullanılarak;
Girilen 2 sayının tek mi çift mi olduğunu bulup, eğer girilen sayılar çift ise "çift", sayılar tek ise "tek", sayılardan biri çift biri tek ise "sayı farklı" yazan program için desteğinizi bekliyorum arkadaşlar.

Üçüncü koşulu sağlayamadım.

#Include <iOStream>
Using namespace std;
İnt main()
{
İnt A, B, C, D, F, toplam;

Cout <<"1. sayıyı gir:";
Cin >> a;
Cout << "2.sayıyı gir:";
Cin >> b;
Cout <<((a%2 && b%2)==0? "Sayı çift ":"Sayı tek");
Return 0;
}
 
Son düzenleyen: Moderatör:
C++:
int main()
{
    int a, b;

    cout << "Enter A->";
    cin >> a;
    cout << "Enter B->";
    cin >> b;
    cout << (((a % 2 + b % 2) == 1) ? "Sayilar Farkli" : ((a % 2 == 0 && b % 2 == 0) ? "Sayilar Cift" : "Sayilar tek"));

}

Önce sayıların farklı olup olmadığını kontrol etmeniz gerekiyor. Eğer farklı değilse tek mi yoksa çift olduğunu kontrol edersiniz.
 
C++:
 cout << ((((a % 2) + (b % 2)) > 0) ? "Sayilar Farkli" : ((a % 2 == 0 && b % 2 == 0) ? "Sayilar Çift" : "Sayilar tek"));

@The Anorak hocam, bu daha iyi olabilir. Kalanlar 1'den büyükse eğer sayıların aynı olduğunu zannedecektir. Onun dışında yazılan her şey doğru. Klavyenize sağlık. :p
 
C++:
 cout << ((((a % 2) + (b % 2)) > 0) ? "Sayilar Farkli" : ((a % 2 == 0 && b % 2 == 0) ? "Sayilar Çift" : "Sayilar tek"));

@The Anorak hocam, bu daha iyi olabilir. Kalanlar 1'den büyükse eğer sayıların aynı olduğunu zannedecektir. Onun dışında yazılan her şey doğru. Klavyenize sağlık. :p

Farklı olduğu zaman mecburen 1 olmak zorunda. 0 veya 2 ise sayılar aynıdır. Bu yüzden == 1 olmalı.
Eğer iki sayı da tek girilirse 1 + 1 = 2 olur. Yani aynı olduğu halde program tarafında farklı olarak algılanır.

Sadeleştirme olarak sağ tarafta hem a'yı hem de b'yi kontrol etmeye gerek yok. Zaten ilk adımdan sonra a ile b'nin aynı türde olduğunu biliyoruz.
C++:
    cout << (((a % 2 + b % 2) == 1) ? "Sayilar Farkli" : (a % 2 == 0 ? "Sayilar Cift" : "Sayilar tek"));

Daha da hızlandırmak için %(mod) operatörü yerine LSB'ye bakarak sayının tek mi yoksa çift mi olduğunu anlayabiliriz. (LSB, 1 ise tek değilse çift.) (LSB: Least Significant Bit)
C++:
cout << (((a + b) & 0x1) ? "Sayilar Farkli" : (!(a & 0x1) ? "Sayilar Cift" : "Sayilar tek"));

Tabii kodu bu hale getirdikten sonra pek de bir okunurluğu kalmıyor.
 
Son düzenleme:
Farklı olduğu zaman mecburen 1 olmak zorunda. 0 veya 2 ise sayılar aynıdır. Bu yüzden == 1 olmalı.
Eğer iki sayı da tek girilirse 1 + 1 = 2 olur. Yani aynı olduğu halde program tarafında farklı olarak algılanır.

Sadeleştirme olarak sağ tarafta hem a'yı hem de b'yi kontrol etmeye gerek yok. Zaten ilk adımdan sonra a ile b'nin aynı türde olduğunu biliyoruz.
C++:
    cout << (((a % 2 + b % 2) == 1) ? "Sayilar Farkli" : (a % 2 == 0 ? "Sayilar Cift" : "Sayilar tek"));

Daha da hızlandırmak için %(mod) operatörü yerine LSB'ye bakarak sayının tek mi yoksa çift mi olduğunu anlayabiliriz. (LSB, 1 ise tek değilse çift.) (LSB: Least Significant Bit)
C++:
cout << (((a + b) & 0x1) ? "Sayilar Farkli" : (!(a & 0x1) ? "Sayilar Cift" : "Sayilar tek"));

Tabii kodu bu hale getirdikten sonra pek de bir okunurluğu kalmıyor.
Evet hocam, kusura bakmayın, dünkü uyku mahmurluğu ile biraz yanlış düşünmüşüm. Teşekkür ederim.
 
C++:
int main()
{
    int a, b;

    cout << "Enter A->";
    cin >> a;
    cout << "Enter B->";
    cin >> b;
    cout << (((a % 2 + b % 2) == 1) ? "Sayilar Farkli" : ((a % 2 == 0 && b % 2 == 0) ? "Sayilar Cift" : "Sayilar tek"));

}

Önce sayıların farklı olup olmadığını kontrol etmeniz gerekiyor. Eğer farklı değilse tek mi yoksa çift olduğunu kontrol edersiniz.
Teşekkürler, sayıların farklı olup olmadığına nasıl bakılacağını bilmiyordum öğrenmiş oldum ve ternary'nin birden fazla kullanımını da net bir şekilde görmüş oldum :)
 

Yeni konular

Geri
Yukarı