Turktekno.net yeniden yayına başladı!! .
Uzun süren kesintinin ardından yeniden sizlerleyiz.

C++ Dersleri 7

Yazar admin

C++ ile ilgili makalelerimize, yeni bir konu ile devam ediyoruz. Bu makalemizde ele alacağımız konu başlıkları ise "iF ELSE, ?: Komutu, Switch-case ve Döngü Komutları" olarak özetlenebilir.

IF ELSE:

if-else komutu iki işlemden hangisinin uygulanacağına karar verir. Else kısmı seçimlidir, gerekmiyorsa kullanılmayabilir. Yazılım kuralı ile şöyledir;

if ( ifade)
komut1;
else
komut2;

Daha genel şekliyle;

if ( ifade )
{
komut1;
komut2;

}
else
{
komut1;
komut2;

}

Veya lojik olarak baktığımızda sanırım daha iyi anlayacaksınız;

if (ifade)
blok_dogru (1);
else
blok_yanlis (0);

Sanırım artık açıklama yapmama gerek kalmayacak. Şimdi örneklerle bunu pekiştirmeye çalışalım:

//tekcift.cpp
//sayı tekmi çiftmi onu görüceğiz
#include
main()
{
int sayi;
cout<< "Bir sayı giriniz:";
cin >> sayi;
if (sayi %2==1 )
cout <<"tek";
else
cout << "çift" ;
}

Bir örnek daha verelim:

//ifelse.cpp
#include
main()
{
int not;
cout<< "Notu giriniz:";
cin >> not;
if (not >= 50)
cout << "Geçti!";
else
cout << "Kaldı!";
}

if kısmından anlatmaya başlayacağım. Eğer notumuz 50 ye eşit veya 50 den büyük ise geçiyoruz aksi halde kalıyoruz.

Bir de bir if-else in altında bir tane daha if-else kullanalım.

//sinav.cpp
// alt alta if-else
#include
main()
{
int not;
cout<< "Not`u giriniz:";
cin >> not;
if (not >= 50)
cout << "Geçtiniz!";
else
{
cout <<"Bütten alınan not:";
cin >>not;
if( not>=60 )
cout << "Geçtiniz!";
else
cout <<"Kaldınız!";
}
}

Burada da şunu inceledik: Diyelim ki sınava girdik ve notumuzu öğrendik, notu giriyoruz 50 nin altındaysa kalıyoruz ve bütünleme sınavına giriyoruz. Bütünlemede de geçer not en az 60. Sanırım bu basit örneklerle olayı iyice kavramışızdır. if-else i de burada bitiriyoruz.

?: Komutu

Bu komut, yalnızca C++ a özgüdür. Kendine özgü bir yazılımı ve mantıksal kullanımı vardır ve if-else komutunun kısaltılmışıdır. Fakat, tüm if-else komutları yerine kullanılmaz. Yalnızca karşılaştırma sonrası, tek komut kullanılan uygulamalar için geçerlidir. Bu söylediklerimizi örnek üstünde gösterelim:

//tekcift.cpp
//tekcift.cpp yi bu sefer ?: ile yapıyoruz
#include
main()
{
int sayi;
cout<< "Bir sayı giriniz:";
cin >> sayi;
cout << (sayi %2==1 ? "tek" : "çift") ;
}

Kullanış biçimi: cout << (sayi %2==1 ? "tek" : "çift") ; çok basit ama dikkat edelim. Her zaman kullanmıyoruz.

Switch-case Komutları:

Switch Case deyimi işlev bakımından if deyimine çok benzemektedir. Çok sayıda if işlem blokları kullandığımızda programın okunurluğu azalacak ve programı izlemek zorlaşacaktır. Programımızın bir değerini bir çok değerle karşılaştırmak gerektiğinde switch komutunu kullanacağız. Switch seçeneği ile değişkenin durumuna göre bir çok durum içersinden bir tanesi gerçekleştirilir. İstersek de if deyimi ile switch case’ yi birlikte kullanabiliriz. Switch in yaptığı iş kısaca, ifadenin değerini sırayla sabitlerle karşılaştırarak ve her satırı işlemektir.

switch( Kontrol Değişkeni )
{
case Sabit1 : komut1;
case Sabit2 : komut2;
.
.
.
default : Komutson;
}

Buna en basit örneğimizi verelim:

//switch.cpp
// switch-case yi öğreniyoruz.
#include
main()
{
int i;
cout<< " 1 ile 4 arası bir sayı giriniz:";
cin>>i;
switch(i)
{
case 1 :cout<<"1 Girdiniz"; break;
case 2 :cout<<"2 Girdiniz"; break;
case 3 :cout<<"3 Girdiniz"; break;
case 4 :cout<<"4 Girdiniz"; break;
default:cout<<"1 ile 4 ten farklı";
}

Burada gördüğümüz gibi i değişkenine bağlı olarak Program işliyor. Case’lerinin aldığı değere göre kendinden sonra gelen komutları işliyorlar.

Burada daha önce görmediğimiz break komutunu gördük. Buna ilerde daha detaylı olarak değineceğim. Fakat biraz bahsetmek istiyorum.

Programımızda değişkene 1 değerini verdiğimizi farz edelim. Case 1 adlı satırı geçip ondan sonraki komut dizisini işleme soktuk. Bu işlemin tamamlanması için break komutu kullanılıyor. Yazılımda break komutu goto gibi işlev görür ve derleyiciye switch komutundan çıkması için talimat verir. Sorunu ortadan kaldırmak için her durum için break deyimi eklemeliyiz (tavsiye). Ne demiştik; bir çok karşılaştırma olduğunda switch’e ihtiyaç duyuyoruz. Karşılaştırmaların hiç biri olmadığı anda da ortaya default tan sonraki satırın işlenmesi kalıyor. Sanırım bu örnekte basit olarak anlamış olacağız.

Daha karmaşık bir örnek verecek olursak:

//ucgen.cpp
// Program gireceğimiz ölçülere göre üçgenin Alan, Yükseklik ve Tabanını bulur
// switch-case örneğimiz.
#include
int main()
{
char secenek;
float alan, yukseklik, taban;
cout << "Program gireceğimiz ölçülere göre üçgen’in Alan,
Yükseklik ve Tabanını bulur!\n" << endl
<< " A —> Alan : Bulmak için yükseklik ve tabanı gireceğiz:" << endl
<< " h —> Yükseklik : Bulmak için alan ve tabanı gireceğiz:" << endl
<< " t —> Taban : Bulmak için alan ve yüksekliği gireceğiz:" << endl
<< endl << endl;
cout<< "Seçeneğiniz? —> A, h, t :";
cin>> secenek;
switch(secenek)
{
case ‘a’:
case ‘A’:
{
cout<< endl <<<"Yükseklik: ";
cin>> yukseklik;
cout<<< "Taban: ";
cin >> taban;
alan = 0.5 * taban * yukseklik;
cout<<< endl << "Alanı: " << alan << endl;
break;
}
case ‘h’:
case ‘H’:
{
cout<< endl << endl <<"Alanı: ";
cin>> alan;
cout<<< "Tanabı: ";
cin >> taban;
yukseklik = 2.0 * alan / taban;
cout << endl << endl << "Yükselik: " << yukseklik << endl;
break;
}
case ‘t’:
case ‘T’:
{
cout << endl <<<"Alanı: ";
cin >> alan;
cout << endl << "Yüksekliği: ";
cin >> yukseklik;
taban = 2.0 * yukseklik / alan;
cout << endl << endl <<"Tabanı: " << taban << endl;
break;
}
}
return 0;
}

Gayet basit bir örnek değişkenleri tanımladık. Caseleri koyduk ve caselerden sonra gelecek komut satırlarını yerleştirdik. Bu program göründüğü gibi zor değildir.

Döngü Komutları:

Bir ya da birden fazla deyimin tekrar edilmesini sağlarlar. Döngüler, " belli bir koşul sağlandığı sürece sürekli çalıştırılacak kod parçası " olarak nitelendirilebilir. For döngüsü, while döngüsü, do-while döngüleri, diğer yüksek seviyeli dillerdeki gibidir. Ancak en büyük fark, programın bu tekrar döngüleri istediğinde terk edebilmesidir. C/C++, döngüden çıkmak için beş ayrı yöntem vardır.

Sonlama Tipi

Açıklama

normal

Tüm tekrarlar yapılır ve test ifadesi işartı sağlanırsa döngüden çıkar.

break

Beklenen hatayla karşılaştığında kullanılır

continue

Döngü içinde mantıksal akışa göre kullanılır

break ve continue

Yukarıdakilerin karmaşık bileşimi.

exit

Ciddi ve geri alınamaz hata oluştuğunda.

C/C++ da ki döngülerin arasındaki fark, beklenen döngü sayıları arasındaki farktan kaynaklanır. Eğer önceden belirli bir döngü sayımız mevcut ise For döngüsü kullanılır. while ve do-while döngülerinde döngü sayısı belli değildir. C++ nın bize vermiş olduğu esneklik sayesinde, döngüleri son derece esnek bir biçimde kullanma şansımız vardır.

While Döngüsü:

İçlerinde anlatımı ve anlaşılması en kolay olan döngüdür. While döngüsü, döngü sayısının belli olmadığı zamanlarda kullanılır.

while ( koşul )
Komut;

While döngüsü, içinde bulunan ifade doğru olduğu sürece altındaki komut veya komut bloğu yürütülür. Eğer yanlış ise kontrol bir sonraki komut veya komut bloğuna geçer.

While döngüsü daha genel şekliyle:

while ( ifade )
{
komut;
komut;
komut;
.
.
.
}

Burada bir şeye dikkat etmenizi istiyorum. Çoklu komutlar kullandığımızda { } parantezleri gereklidir.

// while1.cpp
// while döngüsünü kullandık
// girdiğimiz sayıdan 100 e kadar olan sayıları topladık
#include
main()
{
int x, y;
y= 0;
cout<< " Bir Sayı Giriniz ( Sayı 100 den küçük olucak ) : ";
cin>>x;
while (x< 101)
{
y =y+x;
x =x+1;
}
cout<< "Toplam= "<< y;
}

Burada önce x ve y yi tanımladık. y=0 değerini verdik. Sonra klavyeden girilen değerin x olduğunu yazdık. while (x< 101) işte burada ifademiz x< 101. Şimdi bu koşul sağlanıncaya kadar döngümüz devam edecek. While’ den sonraki bloğa geçtiğimizde ise. y` ye x i ekliyoruz ve x in değerini her seferinde 1 arttırıyoruz. Sanırım bu basit örnekte döngünün basit yapısını ve mantığını anlamış oldunuz.

Döngünün verilen ifade veya koşula göre sağlanması döngülerin en önemli konusudur. Eğer bir döngüden çıkılmazsa o döngü sınırsızdır. Buna da "sonsuz
döngü" denir.

Döngüler konusunda en çok rastlayacağımız hata da budur. Şimdi buna bir örnek verelim. Fakat, şimdiden uyarıyorum, sonsuz döngü yapıldığında bilgisayarınız kilitlenebilir. Onun için buna şimdiden hazır olun. Zaten bir sefer denediğimizde ne demek istediğimi anlayacaksınızdır.

//sonsuz.cpp
//while döngüsü ile sonsuz bir döngü yaptık
#include
main()
{
int x=1;
while(x)
cout<< "x= "<< x++<< endl;
}

Burada neden sonsuz bir döngü oldu? Evet işte x ifadesini koşula bağlamadık. Şayet while(x<10) demiş olsaydık. 1,2,3,4,5,6,7,8,9 a kadar x sayısı sıralanacaktı.

#include
//k
lavye.cpp
//while döngüsü ile klavyeden girilen sayı
main()
{
int x, y = 0;
while (y< 20)
{
cin>>x;
y = y+x;
}
cout<< "Toplam= "<< y ;
}

Bu programda da klavyeden girilen sayıların toplamı 20′ den büyük olunca program Toplam olarak söylüyor. Sanırım basit While yapısını anladınız. Şimdi birazda karmaşık programcıklar yapalım:).

1. Örnek: Girilen altı not’un ortalamasını alıyor.

//ortalama.cpp
// while döngüsü ile girilen notların ortalamasını aldık.
#include
int main()
{
int toplam,
sayac,
not,
ortalama;
toplam = 0;
sayac = 1;
while ( sayac <= 6 )
{
cout << "Notu giriniz: ";
cin >>not;
toplam = toplam + not;
sayac = sayac + 1;
}
ortalama = toplam / 6;
cout << "Sınıf ortalaması = " << ortalama << endl;
return 0; }

Bu örneğimizde yine toplam, sayac, not, ortalama gibi değişkenleri tanımladık. ( toplam =0 ; ve sayac = 1; ) de değişkenlere ilk değerlerini atadık. While döngüsünün içinde sayac değişkenimizi altı defa işlemesini söyledik. Sonra alttaki toplam ve sayac bölümlerinde ise toplam a not’ u ekliyoruz, her seferinde de sayaç değerini bir arttırıyoruz ve sayac değeri 6′ ya gelince while döngümüz duruyor. Program sonra toplamı alıp altıya böler bu sayede ortalamayı alır, sonrada çıktısını gerçekleştirir.

2. Örnek:

//faktoriyel.cpp
// while ile faktoriyel hesaplama
#include
int main()
{
int sayi;
long int faktoriyel=1;
cout << "Bir sayı giriniz: ";
cin >> sayi;
cout << sayi << " `in Faktöriyeli: ";
while (sayi > 1)
faktoriyel *= sayi–;
cout << faktoriyel << endl;
return 0;
}

Burda while (sayi>1) şeklinde koşulumuzu belirttik. Bir altında ise faktoriyel *= sayi–; evet burda da daha önce gördüğümüz gibi eşitleme operatörü olan ( *= ) i kullandık.

Yani faktoriyel’e faktoriyel*sayi– nin değeri atanır. Matematiğini düşünürseniz; 7 sayısının faktöriyeli 7 *= 7– gibi. yani 7 ye devamlı 7– oda 6 demektir. 6 ile çarpımı eklenir, bu 6– ile devam eder. En basit anlatımı bu. :)

Sonrada tüm while döngüsü bittikten sonrada faktoriyel’ in sonucu çıktı olarak ekrana gelir. Bu örnekte negatif sayıların faktöriyelini de 1′e eşit tutuyor: Dikkat ediniz.

Negatif sayıların faktöriyeli alınmaz şartını koymadık. Şayet siz koymak isterseniz bir if else bloğu yerleştirmelisiniz if(sayi>=0) faktoriyel al yoksa faktoriyel alma gibi.

3. Örnek:

// maas.cpp
// while if-else ile bir maas vergi uygulaması
#include
int main( )
{
unsigned long maas, net, vergi = 0.0; // maas net vergi bunları tanımladık
cout<< "Lütfen maaşınızı giriniz: "; // maası giriyoruz
cin>> maas; // maası programa alıyoruz
while( maas >= 0.0 ) // maaşın koşlunu yazıyorus döngüye
{
if( maas <= 250000000 ) // maaş 250 milyondan az ise
vergi = 0.0;
else // vergi yok:)
if( maas < 500000000 ) // maas 500 den az ise
vergi = maas * 0.10; // vergi %10
else // 500 den fazla ise
vergi = maas * 0.20; // vergi %20
net = maas - vergi; // net maaşımız vergi düşünce çıkar
cout<< "Ödenmesi Gereken vergi " << vergi << endl; // vergi ekranda
cout<< "Net maaşınız: " << net << endl; // geriye kalan maaşımız
cout<< "Lütfen maaşınızı giriniz: "; // bir dahaki ayki yeni maaşımız
cin>> maas; // maaşı program alıyor
}
return 1; }

Bu örnekte sanırım fazla açıklama yok. Sizden istediğim, üç kişinin maaşını girdikten sonra onların alacağı toplam maaş ve ödemeleri gereken toplam vergiyi bulmanız. Bunu yaparsanız buraya kadar olanlardan bir şeyler anlamışızdır.

Burada bırakmak istiyorum. Bir sonrakikonularımızda Döngü tiplerine devam edeceğiz. Görüşmek üzere.

Faruk Alkaya
Selçuk Üniversitesi - Teknik Eğitim Fakültesi

Eski bölümlere ulşamak için Öğretimler kısmımızda C++ bölümüne girebilirsiniz.

Yorum Yapın