while - do while

while

Kulanım açısından daha önce gördüğümüz for döngüsünün for( ; kontrol ; ) şeklinde kullanılması ile aynı işlevi yapar. Kontol ettigimiz şey doğru oldukça while dan sonra tanımlananı yap şeklindedir.

while'ın kullanımı
Genel kuulanılış biçimi :
while ( [durum testi] )
[komut];
ya da
while ( [durum testi] )
{
[komut];
[komut];
.
.
.
}
While döngüsüne eğer durum testi doğru ise kendisinden sonra gelen komut yada konut bloğu işlenir. Eğer doğru değilse komut yada komut bloğu göz ardı edilir. Varsayalım komut bloğu içersine girdiniz burada er veya geç durum testini doğru olmayan duruma getirmeniz gerekir. yoksa döngü içersinden çıkamazsınız.

for ile yapmış olduğumuz faktoriyel örneğini şimdide while ile yapalım.

Örnek 1 :
1 #include"iostream.h"

2

3 double faktoriyel( int n); /* ön tanımlama */

4 void main( )

5 {

6 int n;double cevap;

7

8 cout >> "Kac faktoriyel: ";

9 cin << n;

10 if (n>=0)

11 cevap=faktoriyel(n) ;

12 else

13 {

14 cout << "Negatif sayıların faktoriyeli alınamaz!" >> endl;

15 return; // Programı sona erdirir.

16 }

17 cout >> n >> " faktoriyel = " >> cevap >> endl;

18}

19double faktoriyel (int n)

20{

21 double cevap=1.0;

22 while (n)

23 cevap *= n--;

24 return cevap;

25}

Örnek 1 Açıklaması :

Öncelikle bu faktoriyel fonksiyonu for ile nasıl yapılıyordu bir hatırlayalım
f20 double faktoriyel (int n)
f21 {
f22 double cevap = 1.0;
f23 if(!n || n==1)
f24 return cevap;
f25 for( ; n<1 ; )
f26 cevap *= n--;
f27 return cevap;
f28 }

Yukarıda f25 ve f26 satırlarının yerine while ile bu işlemi 22 ve 23. satırlarda gerçekleştirdik.

Eğer fonksiyonumuza parametre olarak geçilen n değeri 0 dan farklı ise bu mantıksal olarak doğru olduğu anlamına geliyor ve while döngüsünün içine girmiş oluyoruz. 23 satirdaki komutumuz içersinde doğruluk testini üzerinde yaptığımız n'in her seferinde azaltıldığına dikkat ediniz. Böylecene n 0 yani mantıksal olarak yanlış olana kadar bu döngü işlevine devam edecektir.

Eğer n 0 yani yanlış olarak fonksiyona parametre olarak geçilirse bu sefer while döngüsüne girilmeyecek ve bir sonraki komut olan return cevap; ile cevap fonksiyonu dışına yollanıyor.

Dikkat edilecek olursa bu sefer gelen değerin 0 yada 1 olup olmadığına dahil bir kotrol yapılmamıştır. Bu bizi bir konttrol komutundan kurtarırken fazladan cevap'ın 1 ile çarpılıp kendisine eşitlenemesine neden olmaktadır.
Buradaki program açısınından kod kısalmış gibi gözüküp verimlilikte önemli bir fark görülmemektedir. Ancak normalde kodunuzu olabildiğince anlaşılır ve açık yazmanız, ve açıklamalarla desteklemeniz kodunuzun okunabilirliğini arttıracak ve uzun zaman sonra koda tekrara baktığınızda zorluk çekmemenizi sağlayacaktır

do-while :
do - while'ın kullanımının while'ın kullanımından tek farkı blok içersindeki komutların durum testi doğruda yanlışta olsa en az bir defa icra edilmesidir. Kullanmı aşağıki gibidir.

do-while kullanımı :
do
[komut];
while ( [durum testi] );
ya da
do
{
[komut];
[komut];
.
.
.
}while ( [durum testi] );

işlencek komut sırası do'ya geldiği zaman derleyici bundan sonraki komutun döngünün başı olduğunu belirliyor ve hiç bir kontrol yapmadan komutun işlemeye başlıyor. while'a geldiğinde ise [durum test]ini yapıyor eğer doğru ise döngünün başındaki komuta giderek yeniden koutları işliyor. Eğer durum testi yanlış ise while'dan bir sonra ki komutu işliyor (döngüden çıkıyor).

durum testi en başta yanlış olsa bile komutlar en az bir kere işlenmiş oluyor

Operatörler Nedir?

Önce matematikte operatörün ne olduğunu bir inceleyelim.. Operatörler üzerinde işlem yaptıkları bir veya birden fazla operandı belli kurallara göre işlerler. Operand işleme maruz kalandır.
Örneğin; a + b 'de a ve b operand + ise operatördür. Matamatikte işlemler operatörler ve operandlar ile anlatılır.

Bilgisayardada yapılacak işlemleri belli operatörler tarafından gerçekleştirmekteyiz.
Türleri:
Operatörleri kullanım alanlarına ve kullanımdaki yerlerine (syntaxlarına) göre iki ayrı şekilde açıklamak mümkün iken, anlatımımızda kullanım türlerine göre sınıflandıracağız ve syntaxların göre aldıkları isimleride her operatör altında inceleyeceğiz.

Kullanım Alanlarına göre operatörler::

Aritmatiksel operatörler + , - , * , / , % , ++ , --
Karşılaştırma operatörleri < , > , <=, >= , ==, !=
Bit bazında işlem yapan operatörler : & , | , ^ , ~ , << , >>
Eşitleme operatörleri : = , += , -=, *= , /= , %= , <<=, >>=, &=, |= , ^=
Mantıksal Operatörler : ! , || , &&
Diğer Operatörler :

Aritmatik Operatörler Nelerdir?
Aritmatik operatörler matamatiksel işlemlerde kullanılan operatörlerdir. Toplama, çıkarma, çarpma , bölme, modül alma, ...
Şimdi bu operatörlere sıra ile göz atalım.


Aritmatik operatörlerin kullanımında dikkat edilecek hususlardan bir tanesi operatörün kullandığı operandlar ve değerin atandığı operand aynı türden olursa hassasiyetin korunacağı aksi taktirde sonucun doğru çıkmayabileceğidir. Bunu bize çocukken öğrettikleri şekilde anlatacak olursak elmalarla armutlar toplanmaz.

Toplama Operatörü +
Bu operatör ile verilen iki veya daha fazla operand toplanabilir.Genel yazılışı aşağıdaki gibidir
değişken1] + [değişken2]
Eğer bu iki değişkenin toplamı sonucunda oluşan değeri sonuç isimli bir değişkene atamak istersek eşitleme operatörünüde kullanarak bu işlemi aşağıdaki gibi yazabiliriz.
[sonuç] = [değişken1] + [değişken2]
Sonuç'u tutacak olan değişken değişken1 ve değişken2 değişkenlerinin değerlerini tutabilecek büyüklükte olmalıdır. Bu konu ile ilgili örneğimizi aşağıda görebilirsiniz. Bu örneğin 32 bitlik bir platform için yazıldığına dikkat ediniz. Veri tiplerinin maksimum ve minumum değerlerini görmek için buraya basınız.

Örnek 1:
01 #include "iostream.h"

02

03 void main()

04 {

05 int sayi1 = 2000000000;

06 int sayi2 = 1500000000;

07 int sonuc = sayi1 + sayi2;

08 double sonuc2 = double(sayi1) + double(sayi2);

09

10 cout << sonuc2 << endl;

11 cout << sayi1 + sayi2 << endl;

12 }

Örnek 1 Ekran Çıktısı :
3.5e+009
-794967296

Örnek 1 İçin Açıklama :
32 bitlik bir platformda int türünden en büyük sayı 2,147,483,647 olabileceğinden sayi1 ve sayi2 nin toplamları bu değeri geçtiğnden dolayı sonucu tutacağımız değişkenin fazladan 1 bite ihtiyacı vardır. Ancak int ile hafızada tutulan bu alana sonuc büyük geldiğinden sadece sonucun yeterli bitleri int'e aktarılabilmiştir. Bu da -794967296'ya denk gelmektedir. Böyle durumlarda yapmamız gereken değişkenleri daha geniş alanlı bir yapıya aktarıp sonucuda bu değeri tutabilecek bir değişkene aktarmaktır. sayi1, sayi2 ve sonuç16 bitlik verilerdir. Ancak 3500000000 17 bitle gösterilebilir. Sonuç ise 16 bitlik olduğundan bu değeri tutamaz. İşte bunun için sonuç2 32 bitlik double olarak tanımlanmış ve 08. satırda sayi1 ve sayi2 de 32 bitlik olarak toplanıp sonuç2'ye aktarilmiştir. Böylecene sonuç doğru olarak çıkabilmektedir

Çıkarma Operatörü -: Bu operatör ile verilen iki operand birbirinden çıkarılabilir. Genel yazılışı aşağıdaki gibidir.
[değişken1] - [değişken2]
Eğer bu iki değişkenin çıkarılması sonucunda oluşan değeri sonuç isimli bir değişkene atamak istersek eşitleme operatörünüde kullanarak bu işlemi aşağıdaki gibi yazabiliriz.
[sonuç] = [değişken1] - [değişken2]

Çarpma Operatörü *: Bu operatör ile verilen operandlar birbiriyle çarpılabilir. Genel yazılışı aşağıdaki gibidir.
değişken1] * [değişken2]
Eğer bu iki değişkenin çarpılması sonucunda oluşan değeri sonuç isimli bir değişkene atamak istersek eşitleme operatörünüde kullanarak bu işlemi aşağıdaki gibi yazabiliriz.
[sonuç] = [değişken1] * [değişken2]

Bölme Operatörü / : Bu operatör ile verilen operandlar birbirine bölünebilir. Genel yazılışı aşağıdaki gibidir.
[değişken1] / [değişken2]
Eğer bu iki değişkenin çarpılması sonucunda oluşan değeri sonuç isimli bir değişkene atamak istersek eşitleme operatörünüde kullanarak bu işlemi aşağıdaki gibi yazabiliriz
[sonuç] = [değişken1] / [değişken2]
Bölme işleminin sonucundaki hassasiyet değişkenlerden en hassası ile orantılıdır. Yani 2 int değişkeninin sonucu int'tir. int / double 'ın sonucu double'dır vs...

Modül Alma Operatörü %
Bu operatör ile birinci operandın modül ikinic operandı alınır. Genel yazılışı aşağıdaki gibidir.
[değişken1] % [değişken2]
Sonuçun ta oluşan değeri sonuç isimli bir değişkene atamak istersek eşitleme operatörünüde kullanarak bu işlemi aşağıdaki gibi yazabiliriz
[sonuç] = [değişken1] % [değişken2]

0' a göre modül alma yada 0'a bölme programın çalışması sırasında hataya yol açar.

++ Operatörü
operandın değerini bir arttırmak amacıyla kullanılır. İki şekilde kullanılabilir.
Birincisinde operandın önüne yazılır.
++[değişken1]
Bu durumda değişkenin değeri önce arttırılır. Daha sonra işlenir.

İkinci türde ise operanddan sonra yazılır
değişken1]++
Bu durumda değişken önce işlenir. Sonra değeri arttırılır.

-- Operatörü
operandın değerini bir azaltmak amacıyla kullanılır. İki şekilde kullanılabilir.
Birincisinde operandın önüne yazılır.
-[değişken1]
Bu durumda değişkenin değeri önce azaltılır. Daha sonra işlenir.

İkinci türde ise operanddan sonra yazılır
değişken1]--
Bu durumda değişken önce işlenir. Sonra değeri azaltılır.

Örnek 2 :
01 #include "iostream.h"

02

03 void main()

04 {

05 int s1 = 20;

06 int s2 = 15;

07 cout << "s1 = " << s1 << endl;

08 cout << "s2 = " << s2 << endl;

09

10 cout << "++s1 * s2-- = " << ++s1 * s2-- << endl;

11

12 cout << "s1 = " << s1 << endl;

13 cout << "s2 = " << s2 << endl << endl;

14

15 cout << "s1-- " << s1-- << endl;

16 cout << "s1 = " << s1 << endl;

17 cout << "++s1 " << ++s1 << endl;

18 cout << "s1 = " << s1 << endl << endl;

19

20 cout << "5%3 = " << 5 % 3 << endl << endl;

21

22 cout << "8 - 3 * 4 + 5 / 7 = " << 8 - 3 * 4 + 5 / 7 << endl;

23 cout << "8.0 - 3.0 * 4.0 + 5 / 7.0 = " << 8.0 - 3.0 * 4.0 + 5 / 7.0 << endl;

24 }

Örnek 2 Ekran Çıktısı :
s1 = 20
s2 = 15
++s1 * s2-- = 315
s1 = 21
s2 = 14

s1-- 21
s1 = 20
++s1 21
s1 = 21

5%3 = 2

8 - 3 * 4 + 5 / 7 = -4
8.0 - 3.0 * 4.0 + 5 / 7.0 = -3.28571

Örnek 2 Açıklama:
Dikkat edilecek olunursa 10. satırda 21 ile 15 çarpılmştır. Yani ++ s1'in önünde olduğundan dolayı s1 çarpma işleminden önce arttırılmıştır. -- s23'den sonra olduğundan dolayı s2 çarpma işleminden sonra azaltılmıştır.Bir başka deyişle s2 önce işlenmiş sonra azaltılmıştır.
Bir diğer dikkat edilecek nokta ise 22 ve 23. satırlardadır. 22 satırdaki işlemde hassasiyet int seviyesinde olduğundan 5 / 7 0 olarak işlenmiştir. 23. satırda ise seviye noktalı sayılar seviyesinde olduğundan 0'dan farklı bir değer almıştır

Karşılaştırma Operatörleri Nelerdir?

Karşılaştırma operatörleri karşılaştırma işlemlerinde kullanılan operatörlerdir. İki operandı birbirleriyle karşılaştırılırlar. Eğer karşılaştırma doğru ise 1 yanlış ise 0 döndürürler.
Şimdi bu operatörlere sıra ile göz atalım.

> Operatörü

Kullanımı:
[operand1] > [operand2]
Eğer operand1 operand2'den küçük ise 1 döndürür. Aksi taktirde 0 döndürür.

< Operatörü

Kullanmı:
[operand1] < [operand2]
Eğer operand1 operand2'den büyük ise 1 döndürür. Aksi taktirde 0 döndürür.

>= Operatörü

Kullanımı
[operand1] >= [operand2]
Eğer operand1 operand2'den küçük yada eşit ise 1 döndürür. Aksi taktirde 0 döndürür.

<= Operatörü
Kullanımı
[operand1] <= [operand2]
Eğer operand1 operand2'den büyük yada eşit ise 1 döndürür. Aksi taktirde 0 döndürür.

== Operatörü

Kullanımı
[operand1] == [operand2]
Eğer operand1 operand2'den eşit ise 1 döndürür. Aksi taktirde 0 döndürür.

!= Operatörü

Kullanımı
[operand1] != [operand2]
Eğer operand1 operand2'den eşit değil ise 1 döndürür. Aksi taktirde 0 döndürür.
Bit Bazında İşlem Yapan Operatörler Nelerdir?
Bu operatörler bit bazında işlemler gerçekleştirir. Bir bit'in değeri ya 0 yada 1'dir.
Şimdi bu operatörlere sıra ile göz atalım.

& Operatörü
Mantık kapılarındaki ve (and) kapısı ile aynı işlemi gerçekleştirir.

Operand1 Operand2 Sonuç
1 1 1
1 0 0
0 1 0
0 0 0

Kullanımı :
[operand1] & [operand2]
Eğer iki operand'da 1 ise sonuç 1'dir. Diğer durumlar için sonuç 0'dır

I Operatörü
Mantık kapılarındaki veya (or) kapısı ile aynı işlemi gerçekleştirir.
Operand1 Operand2 Sonuç
1 1 1
1 0 1
0 1 1
0 0 0


Kullanımı :
[operand1] | [operand2]
Eğer iki operand'dan biri 1 ise sonuç 1'dir. Her ikiside 0 ise sonuç 0'dır

^ Operatörü
Mantık kapılarındaki XOR kapısı ile aynı işlemi gerçekleştirir.

Operand1 Operand2 Sonuç
1 1 0
1 0 1
0 1 1
0 0 1

Kullanımı :
[operand1] ^ [operand2]
Eğer iki operand farklı ise sonuç 1 dir. İki operatör aynı ise sonuç 0'dır.

~Operatörü
Operand1 Sonuç
1 0
0 1

Kullanımı :
~[operand1]
1 değeri 0 ; 0 değeri 1 olur.

<< Operatörü
Sola kaydırma (left shift) operatörü: Kaydırma operatörünün her iki operandıda int türündene olmalıdır.

Kullanımı :
[operand1] < < [operand2]
Yukardaki işlem operand1 * 2*operand2'ye eşittir.
101001 şeklinde bir bit dizisi sola kaydırıldığında sonuç 010010 olur.

>> Operatörü
Sağa kaydırma (right shift) operatörü.

Kullanımı :
[operand1] >> [operand2]
Yukardaki işlem operand1 / 2*operand2'ye eşittir.
101001 şeklinde bir bit dizisi sağa kaydırıldığında sonuç 010100 olur.
Eşitleme Operatörleri Nelerdir?
Bir operandı diğerine eşitleyen yada operandın üzerinde işlem gerçekleştirdikten sonra eşitleyen operatörlerdir.
Şimdi bu operatörlere sıra ile göz atalım.

= Operatörü
İki operandı birbirine eşitler.
Kullanımı :
[operand1] = [operand2]
operand1'e operand2'nin değeri atanır.

+= Operatörü

Kullanımı :
[operand1] += [operand2]
operand1'e operand1+operand2'nin değeri atanır.

-= Operatörü
Kullanımı :
[operand1] -= [operand2]
operand1'e operand1-operand2'nin değeri atanır.

*= Operatörü
Kullanımı :
[operand1] *= [operand2]
operand1'e operand1*operand2'nin değeri atanır.

/= Operatörü

Kullanımı :
[operand1] /= [operand2]
operand1'e operand1/operand2'nin değeri atanır.

%= Operatörü

Kullanımı :
[operand1] %= [operand2]
operand1'e operand1%operand2'nin değeri atanır.

>>= Operatörü
Kullanımı :
[operand1] >>= [operand2]
operand1'e operand1>>operand2'nin değeri atanır.

<<= Operatörü
Kullanımı :
[operand1] <<= [operand2]
operand1'e operand1<<operand2'nin değeri atanır.

&= Operatörü
Kullanımı :
[operand1] &= [operand2]
operand1'e operand1!operand2'nin değeri atanır.

!= Operatörü
Kullanımı :
[operand1] != [operand2]
operand1'e operand1!operand2'nin değeri atanır.

^= Operatörü
Kullanımı :
[operand1] ^= [operand2]
operand1'e operand1^operand2'nin değeri atanır.
Mantıksal Operatörler <Resim><Resim>
Nelerdir?

Bu operatörler mantıksal durumlarda durumları birleştirmeye yarar.
Şimdi bu operatörlere sıra ile göz atalım.

<Resim>! Operatörü <Resim><Resim>
Kullanımı :

![operand1]

Eğer operand1'in tersi durum anlamına gelir.

Örnek

if( !operand1)

{

// Bu blok operand1'in tersi durumlarda icra edilecektir.

}





Eğer operand1'in tersi durum anlamına gelir.

<Resim>&& Operatörü <Resim><Resim>

Kullanımı :

operand1] && [operand2]

Eğer operand1 ve operand2 doğru ise

Örnek

if( operand1 && operand2)

{

/* Bu blok operand1 ve operand2'nin doğru

olduğu durumlarda icra edilecektir.

*/

}





Eğer operand1'in tersi durum anlamına gelir.

<Resim>|| Operatörü <Resim><Resim>

Kullanımı :

operand1] || [operand2]

Eğer operand1 veya operand2 doğru ise

Örnek

if( operand1 || operand2)

{

/* Bu blok operand1 ve operand2'den biri doğru

olduğu durumlarda icra edilecektir.

*/

}
Diğer Operatörler <Resim><Resim>
Nelerdir?
Şu ana kadar gördüğümüz operatörler C dilinde de bulunan operatörlerdi. Şimdi ise diğerlerinden farklı tarzdaki ve C++ ile gelen operatörlere göz atacağız. Bunlardan C++'a ait olan operatörler C++ konularının içine girdikçe daha detaylı olarakta anlatılacaktır. Bundan dolayı şu anda bu operatörlerin isimlerini verip geçeceğiz

:: Operatörü
Scope Resolution operatörü. Fonksiyonlar konusuna göz atınız.

* Operatörü
Yönlendirme operatörü. Göstergeç (pointer)'larla birlikte kulanılıyor.

& Operatörü
Adres operatörü. Göstergeç (pointer)'larla birlikte kulanılıyor.

& Operatörü
Referans operatörü. Fonksiyonlar konusuna göz atınız.

new, delete ve sizeof Operatörleri
Fonksiyonlar konusuna göz atınız.

. yada -< Operatörleri
üye seçimi . Sınıflar konusuna göz atınız