CPP 009 – Mantıksal İfadeler

Olmak ya da olmamak işte bütün mesele bu. Bizim programlama dilinde kullanacağımız mantık da tam olaraka buna dayanıyor.

  • Olmak / true / 1
  • Olmamak / false / 0

Eğer bugün yağmur yağıyor ise şemşiye al

if (bugun_yagmur_yagiyor)
    cout<<"semsiye al" <<endl;

Eğer bugün yağmur yağıyor ise şemşiye al; Yağmur yağmıyorsa dondurma.

if (bugun_yagmur_yagiyor)
    cout<<"semsiye al" <<endl;
else
    cout<<"dondurma al" <<endl;

Şimdi bunu başka bir koşul ile birleştirelim.

Eğer bugün yağmur yağıyor ise şemşiye al; Yağmur yağmıyorsa ve hasta değilsen dondurma al.

if (bugun_yagmur_yagiyor){
    cout<<"semsiye al" <<endl;
} // ilk kısım aynı kaldı

else{ // burada ikinci bir koşul yazmamız lazım 
      if(hasta_değilim)
        cout<<"dondurma al" <<endl;      
}
    

İşleri biraz daha karıştıralım

  • Eğer bugün yağmur yağıyor ise şemşiye al;
  • Yağmur yağmıyorsa ve hasta değilsen dondurma al;
  • Yağmur yağmıyorsa ve hastaysan doktora git;
if (bugun_yagmur_yagiyor){
    cout<<"semsiye al" <<endl;
} // ilk kısım aynı kaldı

else{ // burada ikinci bir koşul yazmamız lazım 
      if(hasta_değilim)
        cout<<"dondurma al" <<endl;      
      else 
        cout<<"doktora git" <<endl;          
}
    

hasta_değilim değişkeninin tersini alabiliriz

      if(!hasta_değilim)
        cout<<"doktora git" <<endl;         
      else 
        cout<<"dondurma al" <<endl;     

Adalet varsa

#include <iostream> 
using namespace std;

int main(){

	bool adalet_var = true;
	
	cout << "adalet var: " << adalet_var << endl; // 1

	if (adalet_var)
		cout << "Dogrular hakim" << endl; // calisir 
	else
		cout << "Yanlislar hakim" << endl; // calismaz 



	cout << endl;

	// peki adalet ortadan kaldırıp yeni bir düzen kurarsak? 
	bool adalet_yok = !adalet_var; // artık adalet yok 
	cout << "!adalet_var: " << adalet_var << endl; // 0

	if (adalet_yok)
		cout << "Dogrular hakim" << endl; // calismaz 
	else
		cout << "Yanlislar hakim" << endl; // calisir 
}

gördüğünüz gibi ! operatörü mantıksal ifadenini tersini almak için kullanılır. Eğer değer doğru ise yanlış yapar. Yanlış ise doğru yapar. Bundan sonra yazılarımızda doğru yerine (true); yanlış yerine (false) kullanacağız.

Mantıksal ifadeleri cout ile bastırdığımızda bize true için 1 ve false için 0’ı verdi. O zaman ben sayıları koşul ifadelerinde kullanabilirim.

int main(){
	int i = 5; 

	while (i) {
		cout << i; 
		i = i - 1; 
	}
}
// çıktı:
// 54321
  • 0 dışındaki tüm sayılar true
  • 0 false değerini verir. (ne kadar kullanışlı değil mi?)

Daha önceki derslerimizden birinde bir sayının çift ya da tek olduğunu bulmak için % operatörünü kullanmıştık. Ne yaptığımızı hatırlıyalım:

int main(){
	int i = 7; 

	if (i % 2 == 0) 
		cout << "cift" << endl;	
	else
		cout << "tek" << endl;
}
  • 7 sayısı için i%2 -> 1 değerini verir;
    1 == 0 -> false değerini verir ve else bloğu çalışır.
  • 6 sayısı için i%2 -> 0 değerini verir;
    0 == 0 -> true değerini verir ve if bloğu çalışır.

tersini alma (negotation) (!) operatörünü öğrendik, ayrıca sayıları da true false yerine kullanabileceğimizi öğrendik. O zaman yukarıdaki ifadeyi aşağıdaki ifadeye çevirebiliriz.

#include <iostream> 
using namespace std;

int main(){
	int i = 7; 

	if (!(i % 2)) 
		cout << "cift" << endl;	
	else
		cout << "tek" << endl;
}

tabi tersini almak yerine if else bloklarının yeri de değiştirilebilir.

	int i = 7; 

	if (i % 2)
		cout << "tek" << endl;
	else
		cout << "cift" << endl;

Hayat ne kadar güzel değil mi?

Bunlar basit sadeleştirmelere olsa da bazı durumlarda sade olmayan halini yazmak sade halini yazmaktan daha anlaşılır olabilir ama bu bugünün konusu değil.


Liseden hatırlarsanız mantıksal değerlerle işlemler yapabiliyorduk. Bu işlemler neydi

  • VE (AND)
  • VEYA (OR)
  • zıttını alma (bunu yaptık)
Değer 1 Değer 2Sonuç
000
010
100
111
VE tablosu
Değer 1 Değer 2Sonuç
000
011
101
111
VEYA tablosu
  • VE işleminde her ikisinin de true olması bekleniyor
  • VEYA işleminde ise birinin true olması yeterli.
  • VE operatörünü && ile gösteriyoruz.
  • VEYA operatörünü || ile gösteriyoruz.
int main(){
	
	bool hava_sıcak = true;
	bool evdeyim = true;

  // hava sıcaksa ve evdeysen klimayı aç
	if (hava_sıcak && evdeyim)
		cout << "klimayi calistir" << endl;
}
int main(){
	
	bool atesin_var = true; 
	bool agrin_var = false; 

	// Ateşin veya ağrın varsa doktora git 
	if (atesin_var || agrin_var)
		cout << "doktora git" << endl;

}

Araştır

  • Mantıksal kapıların ne olduğunu araştır.
White abstract geometric artwork from Dresden, Germany

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *