- 19 May 2021
- 48
- 15
Döngüler
Döngüler birden fazla tekrarlanması gereken olayların gerçekleşmesinde yardımcı olan yapılardır. Döngülerle yapacağımız olayları daha hızlı, daha okunaklı ve hemde daha az kod satırı ile yazmamıza olanak sağlar. Basit bir örnek olarak ekrana 1000 tane "merhaba" yazısı yazdırmaya kalkarsak bu işlem bizi çok zorlar ama bu işlemi döngüler yardımı ile yapmaya kalkarsak çok daha hızlı ve kolay şekilde yapabiliriz. C# da 4 farklı döngü türü mevcuttur. Bunlar for, foreach, while, do while'dır.For Döngüsü
Tekrarlanması istenen kod bloğunun, belirtilen şart sağlandığı sürece ve belirtilen artış veya azalış sayısı kadar tekrarlanmasını sağlayan yapıdır. Programlamada en çok kullanılan döngü for diyebiliriz. For döngüsü aşağıdaki gibi kullanılır:
Kod:
For (sayaç değişkeni; şart; artış veya azalış değişkeni)
{
Yapılacak işlemler;
{
Döngü ilk çalıştığında sayaç değişkeni çalışır ve daha sonra şart'a bakılır. Şart sağlanıyorsa {} içindeki kod çalışır ve son olarak artış yada azalış değişleni işleme konulur ve döngü tekrarlanır.
Örnek olarak 100 den geriye doğru çift sayıları ekrana yazan bir program yazalım.
Örnek kod:
C#:
for (int i = 100; i >= 0; i -= 2)
{
Console.WriteLine(i);
}
Console.ReadKey();
Çıktı:
Kod:
100
98
96
.
.
.
0
Yukarıda int i = 100 ile bir başlangıç değeri tanımladık ve şart olarak i >= 0 kodunu yazdık. 100 olan i 0 dan büyük veya eşit olduğu sürece yukarıdaki kod bloğu çalışacaktır. Son olarak i -= 2 kodu ile i değişkenini her döngü döndüğünde 2 azaltık.
Şimdi biraz daha zor bir şey yapalım, ilk okulda öğrendiğimiz çarpım taplosunu konsol ekranına yazalım.
Kod:
C#:
int satır = 0;
int sütün = 0;
for (int i = 1; i <= 10; i++)
{
for (int j = 1; j <= 10; j++)
{
Console.SetCursorPosition(sütün, satır + j);
// imlecin ekrandaki konumunu belirledik
Console.WriteLine("{0} X {1} = {2}", i, j, (i * j));
}
sütün += 15;
if (i == 5)
{
sütün = 0;
satır = 15;
}
}
Console.ReadKey();
Çıktı:
Kod:
1 X 1 = 1 2 X 1 = 2 3 X 1 = 3 4 X 1 = 4 5 X 1 = 5
1 X 2 = 2 2 X 2 = 4 3 X 2 = 6 4 X 2 = 8 5 X 2 = 10
1 X 3 = 3 2 X 3 = 6 3 X 3 = 9 4 X 3 = 12 5 X 3 = 15
1 X 4 = 4 2 X 4 = 8 3 X 4 = 12 4 X 4 = 16 5 X 4 = 20
1 X 5 = 5 2 X 5 = 10 3 X 5 = 15 4 X 5 = 20 5 X 5 = 25
1 X 6 = 6 2 X 6 = 12 3 X 6 = 18 4 X 6 = 24 5 X 6 = 30
1 X 7 = 7 2 X 7 = 14 3 X 7 = 21 4 X 7 = 28 5 X 7 = 35
1 X 8 = 8 2 X 8 = 16 3 X 8 = 24 4 X 8 = 32 5 X 8 = 40
1 X 9 = 9 2 X 9 = 18 3 X 9 = 27 4 X 9 = 36 5 X 9 = 45
1 X 10 = 10 2 X 10 = 20 3 X 10 = 30 4 X 10 = 40 5 X 10 = 50
6 X 1 = 6 7 X 1 = 7 8 X 1 = 8 9 X 1 = 9 10 X 1 = 10
6 X 2 = 12 7 X 2 = 14 8 X 2 = 16 9 X 2 = 18 10 X 2 = 20
6 X 3 = 18 7 X 3 = 21 8 X 3 = 24 9 X 3 = 27 10 X 3 = 30
6 X 4 = 24 7 X 4 = 28 8 X 4 = 32 9 X 4 = 36 10 X 4 = 40
6 X 5 = 30 7 X 5 = 35 8 X 5 = 40 9 X 5 = 45 10 X 5 = 50
6 X 6 = 36 7 X 6 = 42 8 X 6 = 48 9 X 6 = 54 10 X 6 = 60
6 X 7 = 42 7 X 7 = 49 8 X 7 = 56 9 X 7 = 63 10 X 7 = 70
6 X 8 = 48 7 X 8 = 56 8 X 8 = 64 9 X 8 = 72 10 X 8 = 80
6 X 9 = 54 7 X 9 = 63 8 X 9 = 72 9 X 9 = 81 10 X 9 = 90
6 X 10 = 60 7 X 10 = 70 8 X 10 = 80 9 X 10 = 90 10 X 10 = 100
Yukarıda "Console.SetCursorPosition(sütün, satır + j);" kodu ile ekranda yazacağımız yazının konumunu belirledik. İlk for döngüsündeki i ilk çarpanı temsil eder ve j ise ikinci çarpanı temsil eder. İlk başlarda bu iç içe for döngüsü zor görünebilir ama zamanla uğraştıkça daha kolay gelmeye başlıyor.
Şimdide kullanıcıdan aldığımız bir stringi consol ekranına dik eşkenar dörtgen şeklinde yazdıran bir program yazalım.
Kod:
C#:
int satır = 0;
int sütün = 50;
string kelime;
Console.Write("Bir kelime giriniz:");
kelime = Console.ReadLine();
Console.Clear();
for (int i = 0; i <= 9; i++)
{
Console.SetCursorPosition(sütün - i, satır + i);
Console.WriteLine(kelime);
Console.SetCursorPosition(sütün + i, satır + i);
Console.WriteLine(kelime);
if (i == 9)
{
for (int j = 0; j < 10; j++)
{
Console.SetCursorPosition(sütün - (i - j), satır + (i + j));
Console.WriteLine(kelime);
Console.SetCursorPosition(sütün + (i - j), satır + (i + j));
Console.WriteLine(kelime);
}
}
}
Console.ReadKey();
Çıktı:
C#:
TÜRK HACK TEAM
TÜTÜRK HACK TEAM
TÜRKTÜRK HACK TEAM
TÜRK HTÜRK HACK TEAM
TÜRK HACTÜRK HACK TEAM
TÜRK HACK TÜRK HACK TEAM
TÜRK HACK TETÜRK HACK TEAM
TÜRK HACK TEAMTÜRK HACK TEAM
TÜRK HACK TEAM TÜRK HACK TEAM
TÜRK HACK TEAM TÜRK HACK TEAM
TÜRK HACK TEAM TÜRK HACK TEAM
TÜRK HACK TEAMTÜRK HACK TEAM
TÜRK HACK TETÜRK HACK TEAM
TÜRK HACK TÜRK HACK TEAM
TÜRK HACTÜRK HACK TEAM
TÜRK HTÜRK HACK TEAM
TÜRKTÜRK HACK TEAM
TÜTÜRK HACK TEAM
TÜRK HACK TEAM
Son olarak kullanıcıdan alınan bir sayının faktoriyelini hesaplayan bir program yazalım.
Kod:
C#:
int s;
int fak = 1;
Console.WriteLine("Bir sayı giriniz:");
s = Convert.ToInt32(Console.ReadLine());
for (int i = 1; i <= s; i++)
{
fak *= i;
}
Console.WriteLine("Sonuç :" + fak);
Console.ReadKey();
Foreach Döngüsü
Foreach döngüsü diziler veya koleksiyonlar üzerinde çalışacağımız zaman oldukça işimize yarar. Eleman sayısının bilinmediği durumlarda çok kullanışlıdır. Foreach dizinin veya koleksiyonun içindeki verileri tek tek döndürmemize olanak sağlar.
Foreach aşağıdaki gibi tanımlanır:
Kod:
foreach (DeğişkenTipi Değişkenİsmi in ListeYadaKoleksiyonİsmi)
{
Çalışacak kod;
}
Foreach ile yaptığımız işlemleri for döngüsü ile de yapabiliriz ama foreach daha pratik ve hızlıdır. Örnek olarak for döngüsü ile bir kod yazalım:
Kod:
C#:
string[] isim = { "Ali", "Veli", "Ahmet", "Mehmet", "Cemal", "Kemal" };
for (int i = 0; i < isim.Length; i++)
{
Console.WriteLine(isim[i]);
}
Yukarıda "isim.Length" ile isim dizisinin eleman sayısını öğrendik ve "Console.WriteLine(isim);" ile hepsini tek tek ekrana yazdırdık. Dizinin eleman sayısını "isim.Coun()" ile de öğrenebiliriz.
Şimdi aynı işlemi Foreach Döngüsü ile yapalım:
Kod:
C#:
string[] isim = { "Ali", "Veli", "Ahmet", "Mehmet", "Cemal", "Kemal" };
foreach (var i in isim)
{
Console.WriteLine(i);
}
Yukarıda var i ile bir i değişkeni oluşturduk ve foreach döngüsü ile isim dizisinin elemanlarını sırayla i değişkenine atadık ve ekrana yazdırdık.
Çıktı:
Kod:
Ali
Veli
Ahmet
Mehmet
Cemal
Kemal
While döngüsü
Kısaca while döngüsü şart sağlandığı(yani True) sürece bloğun içindeki kodu döngü şeklinde çalıştıran bir yapıya sahiptir. While döngüsünde tekrar sayıları belli değildir, daha doğrusu kaç kez tekrarlanacağını belirtmek zorunlu değildir, tekrar sayısını daha sonradan biz belirleyebiliriz.
While döngüsü aşağıdaki gibi kullanılır:
Kod:
While(şart)
{
Yapılacak işlem;
}
Şart sağlandığı sürece kod bloğunun içindeki kod çalışmaya devam eder.
Örnek olarak while döngüsü ile klavyeden girilen bir sayının basamaklarının toplamını yazan bir program yazalım.
Kod:
C#:
int sayi, toplam = 0;
Console.Write("Bir sayi giriniz:");
sayi = Int32.Parse(Console.ReadLine());
while (sayi != 0)
{
toplam += sayi % 10;
sayi /= 10;
}
Console.WriteLine($"Basamakların toplamı :{toplam}");
Console.ReadKey()
toplam += sayi % 10; satırı ile sayının son basamağını toplam değişkenine ekledik ve sayi /= 10; yardımı ile sayımızın son basamağını sildik. Böyle devam ederek sayı değişkenimiz son durumda 0'a eşit olacak ve sayi != 0 (sayi eşit değildir 0'a) şartımız artık sağlanmadığından döngü son bulacaktır.
Şimdi daha kolay bir örnek yapalım 1'den 100'e kadar olan sayıları toplayan bir program yazalım.
Kod:
C#:
int sayac = 1;
int toplam = 0;
while (sayac <= 100)
{
toplam += sayac;
sayac++;
}
Console.WriteLine($"toplam :{toplam}");
Çıktı:
Kod:
5050
Gördüğünüz gibi sayacımızı döngümüzün içinde kendimiz oluşturduk. Böylelikle döngü 100 kere çalışıp sayac 100'den büyük olunca program döngüden çıkacaktır.
Do while Döngüsü
Kod:
Do
{
Çalışacak kod;
}while(şart);
Do while döngüsü while döngüsüne çok benzer. Tek farkları while döngüsü şartı döngünün başında kontrol ederken, do while döngüsü şartı döngünün sonunda kontrol eder. Bu durum do while döngüsünün şart sağlansın veya sağlanmasın kodu bir kereliğine çalıştırmasına neden olur.
Bu durumu anlamak için basit bir örnek yazalım:
C#:
int i = 0;
do
{
Console.WriteLine("Merhaba dünya");
} while (i > 10);
Console.ReadKey();
Çıktı:
Kod:
Merhaba dünya
Yukarıda şart sağlanmamasına rağmen döngü bir sefer çalıştı çünkü do while döngüsünde şart en son kontrol edilir.
Contınue ve Break deyimleri
Bu bölümde döngüler içinde kullanacağımız Continue ve Break deyimlerinden bahsedeceğim.
Continue deyimini döngünün herhangi bir turunu atlamak istediğimizde kullanılır. Örnek olarak 1'den 100'e kadar olan çift sayıları toplayan bir program yazalım.
Kod:
C#:
int toplam = 0;
for (int i = 1; i <= 100; i++)
{
if (i % 2 == 1)
{
continue;
}
toplam += i;
}
Console.WriteLine($"toplam :{toplam}");
Console.ReadLine();
Yukarıda i değişkeninin i % 2 == 1 ile tek sayı oldup olmadığını tespit ettik ve tek sayı olduğu durumlarda if yardımı ile continue deyimini kullanarak döngünün o turunu es geçmesini sağladık.
Şimde gelelim break deyimine. Break deyimi döngüden çıkmamızı sağlıyor. Örnek olarak kullanıcıdan alınan değer sıfır olana kadar, alınan değerleri toplayan bir program yazalım.
Kod:
C#:
int toplam = 0;
int değer;
while (true)
{
Console.WriteLine("Bir değer giriniz:");
değer = Convert.ToInt32(Console.ReadLine());
if (değer == 0)
{
break;
}
toplam += değer;
}
Console.WriteLine("Değerlerin toplamı : " + toplam);
Console.ReadLine();
Yukarıda if yardımı ile kullanıcıdan alınan değer 0 olduğunda break deyimi ile döngüden çıkıyoruz.