-
Tekrar eden yapılanmaları tekrar eden kodlarımızı tekrar etmesi gereken programlarımızı bir koşula bağlı olarak yani kombinasyona bağlı olarak belirli sayıda tekrarlayabilen işleyebilen yapılara döngü diyoruz.
-
Döngü dediğimiz yapı fiziksel olarak dönen ve üzerinde işlem yapılan yapılanma değil. Döngüden kastımız burada dönmesinden kasıt belirli bir koşula belirli bir kombinasyona bağlı olması koşul doğrulandıkça o kombinasyonun koşulu doğrulandıkça bu döngü kendi içerisindeki kodları tekrar eder tekrardan tetikler. Tekrardan tetikleme operasyonu neticesinde buna en güzel isim döngü olarak verilmiştir.
-
Döngü yapısı programlamanın temelini teşkil eder. Temel yapıtaşlarından birisidir. Değişkenler nasıl yapıtaşlarından birisi
if else
,switch
, akış kontrol mekanizmaları hata kontrol mekanizmaları bunlar programlama dilinin kendi fıtratında olan bir temel yapıtaşıysa dögü de aynı şekilde programlama dilinin dahilinde olan bir yapıtaşıdır. Hatta bir programlama dilinde döngü yoksa ki mümkün değil o programlama dilinde hiçbişey yapamazsınız. -
Siz yapısal olarak han daavranış olarak şöyle bir ihtiyaca sahip olabilirsiniz en temelde olayı değerlendirelim. Diyelim ki ekrana 10 defa kendi adımı yazdıracaksam 10 kez
Console.WriteLine("Musa UYUMAZ")
yazarak yazıdrabilirim. Şimdi bir yazılımcı probleme öyle ya da böyle çözüm bulur. Sıkıntı değil. İster 10 defa teker teker yazarsın biz buna ameleus felsefesi diyoruz. Ya da biz burada kodları tekrar etmektense bunlardan bir tanesini numune olarak alır derim ki 1'den 10'a kadar bir kombinasyon oluşturur ve ilk değerimi sayısal bir değeri birer birer arttırarak 10'dan küçük olduğu her bir durumda bu kodu tekrar ettiririm. Dolayısıyla tekrar eden bu tarz kodları döngülerle tek satırda tek tanımlama da belirli kombinasyona dair yani oradaki koşula bağlı bir şekilde istediğim kadar tetiklettirebilirim. -
İstediğin kadar tetiklettirebileceğin bir yapılanma varken bunu manuel bir şekilde yazmak doğru değildir. Döngüler yapısal olarak koşula bağlı belirli sayıda bu koşul sağlandığı sürece ilgili kodu tekrarlayan yapılardır. Ben öyle bir kombinasyon koyacağım ki ortaya benim istediğim sonucu bana verecek tek satırlık/konseptlik/algoritmalık işlem olacak.
-
Döngü dediğimiz yapılanma sizin kodlarınızdaki analitik çözümleri hızlı bir şekilde yapmanızı sağlayan yapılanmadır.
-
Temelde 3 tane döngümüz vardır.
for
döngüsüwhile
döngüsüdo while
döngüsü
-
foreach
bir döngü değildir iterasyondur.
# Döngüler Nedir?
System.Console.WriteLine("Musa UYUMAZ");
System.Console.WriteLine("Musa UYUMAZ");
System.Console.WriteLine("Musa UYUMAZ");
System.Console.WriteLine("Musa UYUMAZ");
System.Console.WriteLine("Musa UYUMAZ");
System.Console.WriteLine("Musa UYUMAZ");
System.Console.WriteLine("Musa UYUMAZ");
System.Console.WriteLine("Musa UYUMAZ");
System.Console.WriteLine("Musa UYUMAZ");
System.Console.WriteLine("Musa UYUMAZ");
-
Yapısal olarak biz 3 tane döngü yapısını inceleyeceğiz.
for
döngüsüwhile
döngüsüdo while
döngüsü
-
Hangi döngü nerede kullanılıyor sorusu yanlış bir sorudur. Çünkü hepsi bir kombinasyona bağlıdır. Hepsi bir mantığa göre çalışmakta o kombinasyondaki sonucun doğrulanmasına göre çalışan yapılanmalardır. Yani birini diğerinin yerine kullanabilirsin. Ya da sadece birini öğrenip diğerlerini öğrenmeyebilirsin. Programlama hayatın boyunca da onu kullanbilirsin.
-
Döngülerde hepsi birbirlerinin yerine kullanılabiliyor. Ama bazı senaryolara bazı döngüler daha yatkındır. Örneğin ardışık bir sayım işlemi oluyorsa
for
döngüsü daha yatkındır daha çok yakışır. Ya da sonsuz bir yapılanma söz konusuysawhile
ya dado while
daha çok yakışacaktır.do while
ise böyle manevratik takla atacağımız belirli bir mantığa göre işleyen bir yapılanmadır. Hepsi birbirinin yerine oturabilmekte nihayetinde hepsinde bir temel bir mantık/kombinasyon işlemekte ama daha çok yakılan yönleri vardır ya da böyle yakışmayan yönleri vardır ama yakışmayan yerde de yine istediğin döngüyü kullanbilirsin. -
Hangi döngü nerede kullanılmalıdır? sorusu YANLIŞTIR! Doğru soru hangi döngü nereye/hangi senaryoya daha çok yakışır...
-
Sen bir çözüm bulacan elindeki senaryoya göre bir tane döngüyü seçmen lazım rastgele gözün kapalı seçebilirsin sıkıntı yok ama hangisi daha çok yakışır sorusunu soracaksın cevabını arayacaksın.
-
1'den 100'e kadar sayman lazım bunun için
do while
de de yapabilirsinwhile
de de yapabilirsina ama ardışık işlemlerdefor
döngüsünü kullanman bu senaryoda daha çok yakışacaktır. -
Sonsuz bir denetleme yapman lazım sonsuza giden bir durum yani sonunu bilemeyeceğimiz sonunu hiçbir zaman tahmin edemeyeceğimiz durumlarda işlem yapmam gerekiyorsa işte burada
for
ile de yapabilirsindo while
ile de yapabilirsin. Amawhile
'ı daha çok severiz biz böyle durumlarda. Diğerleriyle yapamazsın anlamına gelmiyor. -
Bu döngülerin hepsi bir kombinasyona bağlı bir şekilde çalıştıkları için ennnn nihayetinde birbirlerinin yerine kullanılabilirler...
-
Senaryoda istediğin dönügüyü seçebilirsin
for
la çözebildiğiniwhile
la dado while
la da çözebilirsin.do while
la çözdüğünüfor
la da çözebilirsin vs. -
Nihayetinde bunlar senaryoya uygun iskeletler değil bunlar kombinasyonla sadece tetikleme yapıyor. Bir kombinasyonu var orada ona göre tetikleme yapıyorsa sen buna istediğini kullan. Madem ki bişey döndüreceksin madem ki belirli bir kod tetikleyeceksin istediğin döngüyü kullanbilirsin buradaki önemli olan hangisi daha çok elindeki senaryoya uygundur hangisi daha çok yakışıyor ona bakacaksın.
-
Döngülere birbirinden farklı yapılar olarak bakmayacaksın. Birbirlerinden ayrılar farklılar tamam ama senaryo senaryo bakmayacaksın. Diyeceksin ki bu döngülerin hepsi aynı. Aynı şeyi öğreniyorum aynı işi yapabileceğim yapılanmayı öğreniyorum sadece bunlar senaryolara yakışabilecek durumları vardır onun dışında hepsinin kurallarını bildikten sonra kullanımlarıyla aynı sonuçları üretebilirim diyeceksin
-
Prosedürel programlama da döngü yapılarından birisi de
for
döngüsüdür. -
Genellikle kombinasyonel olarak ardışık işlemlerde kullanılan bir döngü yapılanmasıdır
-
Örneğin ben 1'den 100'e kadar yazdıracaksam 1'den 100'e kadar olan bütün sayıları birer birer, ikişer ikişer, beşer beşer, on yedişer on yedişer olsun ardışık nihayetinde bunlar için
for
döngüsünü kullanbilirsiniz. -
Ardışık bir işlem ardışık bir algoritma yapacaksanız ardışıklık üzerinden gidecekseniz algoritmanız üzerinde
for
döngüsünü kullanabilirsiniz. -
Prototip
for(int i = 0; i<10 ; i++) {}
Döngü de 3 tane parametremiz olacaktır. Bu parametreleri;
ile ayırıyoruz.- ilk parametre de Genellikle başlangıç değeri ismi verilen değişken tanımlanabilir. İlk parametre olmasa da olur.
for
döngüsünde başlangıç değeri dediğimiz değişken eğer tanımalanacaksa burada tanımlanabilir. Bu birinci parametre kısmı başlangıç değeri ya da ilk değer denilen değişkeni tanımlamak için vardır ama illa kullanmak zorunda değilsin. - İkinci parametre de kombinasyonun şartını yazdığımız yer.
- Üçüncü parametre de genellikle başlangıç değerinin değerini arttırmak ya da azaltmak için burası kullanılır.
- ilk parametre de Genellikle başlangıç değeri ismi verilen değişken tanımlanabilir. İlk parametre olmasa da olur.
-
for
döngüsü parametreleri zoraki yapmak zorundasın demiyor. -
for
döngüsü belirli bir ardışık algoritmalarda kullanılan bir döngü. Ardışık algoritmalarda bir ardışık işleme başlayabilmek için ilk değere ihtiyacımız var. -
Genellikle for döngüsünde başlangıç değeri olarak
int
bir sayısal değer tanımlanır işte 0'dan ya da 1'den başlatılır ardından şart ilk değere yani başlangıç değerine bağlı bir şekilde şart kontrol edilir. Biz ilk değere yani başlangıç değerine bağlı şart yazmak zorunda da değiliz. -
Örneğin sen ilk değerde 1 değerini tanımladın
int i = 1
dedin şartta da diyorsun ki elimdeki bu i 10'dan küçük olduğu sürece/küçükse diyorsun. i değeri 10'dan küçük olduğu sürece tetiklenecek yani kendi scopeları içerisindeki kodlar tekrarlı bir şekilde işleyecektir. -
Başlangıç değer ya da ilk değer atama kısmı : Ardışık algoritmalalarda genellikle bir ilk değere ihtiyaç vardır İşte bu ihtiyacı burada tanımlayabiliriz. Amma velakin bu tanımlama zorunlu DEĞİLDİR!!!
- Burası illa sayısal bir değer olmak zorunda değil. Sen bunu metinsel/char/boolean tanımlayabilirsin yani burası bir değişken tanımlama alanı.
- Genellikle buradaki kombinasyonda kullanacağımız değişkeni tanımlarız.
- Başlangıç değeri burada tanımlanıyorsa eğer illa ki bir değerin atanması gerekmektedir.
-
Şart Kısmı : Herhangi bir şart koşul ifadesi tanımlanabilir. Lakin genellikle ilk döngü olarak tanımlanan değişken durumu burada kontrol edilir. Yani bir şarta bağlanır. Şart
true
olduğu sürece döngü tetiklenecektir.- Genellikle biz başlangıç değeri olarak tanımlanan değişken üzerinden bir şart koyarız. Zorunlu değildir ama bu şekilde şart koyarız.
- Şart
true
olduğu sürece döngü dönecektir. İçindeki kodları tetikleyecektir.
-
Arttırma Kısmı : Herhangi bir değişken üzerinde işlem yapabiliriz. Genellikle bir başlangıç değeri üzerinde bir arttırma yahut azaltma işlemi yapılır. Amma velakin bir değerinin dışında diğer arttırma ve azaltma işlemleri de ihtiyaca binaen yapılabilmektedir. Veee illa ki kullanmak zorunda da değiliz. Arttırma ve azaltma operasyonlarını biz başka yerde yapabiliriz.
- Genellikle başlangıç değerinin değeri arttırılır.
-
Scope Kısmı : Şart
true
oldukça bu scope tetiklenecek ve döngü çalıştırılmış olacaktır.
-
for
döngüsünde parametleri tanımlamak zorunda değilsin. Peki neden oluşturuldu parametreler? Bir algoritma oluşturuyorsun o algoritma da kullanılan parametrelerin onun kalıbında olması kontrol açısından daha kolaylaştırıcıdır. -
Kombinasyonda yapacağın işlemin sadece o işleme özel parametrelerse bunların koordinasyonun yapıldığı noktanında tek bir merkezden yönetilmesi esasında bizim içinde bir avantajdır.
-
Temelde biz bir başlangıç değeri tanımlarız ardından bir şart uygularız ilgili başlangıç değişkenine ve ardından ilgili başlangıç değişkeninin değerini arttırırız.
-
Compiler kodları tek tek işlerken bir geliyor
for
ahandafor
şimdi döngüye girecez. İlk olarakfor
u gördükten sonra;- Akış ilk olarak başlangıç değişkeni tanımlama kısmına girecektir. Eğer ki bir değişken tanımlama ifadesi varsa ilgili değişkeni tanımlayacaktır.
- Ardından koşula gidecek ve koşulu değerlendirecektir.
- Eğer ki koşul
true
ise döngüye girecektir.- Koşul kontrol edildikten sonra döngü ilgili değeri arttıracak parametreye gidecek ve yapılan aritmetik işlemi değişkene uygulayacaktır.
- Sayısal değeri arttırılmış ya da azaltılmış yani değiştirilmiş/değiştirilmemiş olan değişkenden sonra yeniden koşulu kontrol edecek ve ardından
true
ise 3 değilse 4. adımlar tekrar edecektir.
- Yok eğer koşul
true
değil ise döngüden çıkacaktır.
-
I. adıma bir kereye mahsus girecektir
for
döngüsünde 2. ve 3. adımlar kendi aralarında durmadan paslaşacaktır. Yani ilk öncefor
döngüsüne girdiğinde 1. adıma gidecek değişkeni tanımlayacak 2. adıma gidecek şartı kontrol edecek ardından eğertrue
ise döngüye girecek değilse döngüden çıkacak. Döngüye girerse eğer işlemini bitirdikten sonra değişkenin değerinde değişiklik yapmaya gidecek değeri değiştirecek ya da değiştirmeyecek daha sonra koşula geri dönecek koşul eğer hala sağlanıyorsa bir daha döngüye girecek daha sonra geri bir daha değişkenin değerinde değişiklik yapmaya gidecek daha sonra koşula tekrar gidecek vs şeklinde paslaşma yapacak ta ki koşulfalse
olana kadar buradaki işlemler tekrar edecek ve döngü tetiklenmiş olacaktır. -
Yapısal olarak
for
döngüsü bir kombinasyona bir ardışık operasyonlarda kullanılabilirliğe daha yatkın bir döngüdür. Nihayetinde burada arttırma azaltma işlemlerini çok fazla yaparız. O yüzden ardışık operasyonlarda çok kullanırız diye nitelendiriyoruz.
-
Başlangıç değeri her daim tanımlanmak zorunda değildir ama tanımlıyorsanız eğer bir değer atanmak zorundadır.
-
Şartımız herhangi bir şart olabilir mesela
true
şimdi şart kısmı normalde şart dediğimiz bir kıyaslamadır kıyaslama neticesinde sonuçbool
dönecektirtrue
ya dafalse
eğer sen direkt gelir burayatrue
yazarsan bu döngü hangi değer olursa olsun farketmiyor sürekli sonsuza kadar şartı koşulutrue
olacağından dolayı sonsuz döngü olacaktır. -
Compiler kodun akışında
for
döngüsünü gördüğü zaman öncelikle başlangıç değerini ya da ilk değer dediğimiz değişkeni tanımlama alanına gelecektir. Varsa ilgili değişken tanımlayacaktır tanımladıktan sonra koşula bakacaktır. Koşultrue
olduğu sürece döngüye girecektir. Yani scope içine girecektir. Daha sonrasında değişken değerini değiştime alanına gelecek daha sonrasında ise tekrar koşula bakacaktır. Koşultrue
olduğu sürece yine döngüye girecektir. Böyle böyle koşulfalse
olana kadar devam edecek koşulfalse
olduğunda ise döngüden çıkacaktır. -
Ardışık operasyonlarda geliştirilen algoritmalarda
for
döngüsü daha efektiftir. Çünkü hızlı bir şekilde ardışık yapılanmayı sana verecektir
#for Döngüsü
for (int i = 1; i < 10; i++)
{
System.Console.WriteLine("Musa UYUMAZ");
}
-
Başlangıç değişkenine verilen değer ne ise ona göre bundan sonraki mantıksal kombinasyon şekillenecek.
-
for
döngüsündeki esas mantıktır.for
döngüsünün parantezleri içerisindeki formülü çözdüğünüz zaman ilgili operasyon o formüle göre tetiklenecektir. -
Biz mümkün mertebe 0'lardan 1'lerden başlatıp olayı ele almayı severiz. Çünkü hesaplaması kolay oluyor.
-
Matematik niye var? Minimize edilmiş rakamlarla siz devasa major yapılanmaları göresiniz diye var.
-
for
döngüsündeki mantığı diğer döngülerde de aslında aynıfor
döngüsündeki mantığı kurduğunuz zaman operasyon bitiyor. -
for
döngüsünde kombinasyona odaklanacaksınız çünkü kombinasyon önemli.
#for Döngüsü - İnceleme 2
//Serhat değerini 10 kere ekrana yazdıralım.
#Ameleus
System.Console.WriteLine("Serhat");
System.Console.WriteLine("Serhat");
System.Console.WriteLine("Serhat");
System.Console.WriteLine("Serhat");
System.Console.WriteLine("Serhat");
System.Console.WriteLine("Serhat");
System.Console.WriteLine("Serhat");
System.Console.WriteLine("Serhat");
System.Console.WriteLine("Serhat");
System.Console.WriteLine("Serhat");
#Döngü ile
for (int i = 0; i < 50; i += 5)
{
System.Console.WriteLine("Serhat");
}
-
Bir
for
döngüsünde illa hep artış yapmak zorunda değilsiniz. Algoritmayı tersine de alabilirsiniz. -
for
döngüsündeki kombinasyona ne kadar hakim olursan ne kadar oradaki kombinasyonu çözebilecek analitiğe sahip olursan döngüyle falan problemin kalmıyor. -
Eğer ki ardışık işlemlerde artış yapılıyorsa i'nin değeri genellikle
<
(Küçüklük) durumuyla değerlendirilir. Yani sen burada küçüklüğüne bakıyorsun çünkü o artıyordur bişeyden küçük olduğu sürece oradaki şart doğrulanacaktır. O küçüklük bir gün aştığı zaman yani küçük olmadığı zmaan oradaki döngüden çıkacaktır. -
Yok eğer ardışık işlem eksiliş gösteriyorsa i'nin değeri genellikle
>
(Büyüklük) durumuyla değerlendirilir. Nihayetinde orada büyüklük durumu yani orada i büyüktür belirli bir eşiğe kadar gelecektir bundan büyük oldukça tetiklenecektir. Bu eşiğe eşit ya da küçük olduğu durumlarda tetiklenmeyecektir.
#for Döngüsü - İnceleme 3
//Serhat değerini 10 kere ekrana yazdıralım.
for (int i = 50; i > 0; i -= 5)
{
System.Console.WriteLine("Serhat");
}
-
Hangi senaryo da hangisini kullanmalıyızdan ziyade hangi senaryoya hangisi daha çok yakışır diye sorulduğunda eğer ki bir ardışık operasyon varsa
for
döngüsü direkt aklımıza gelecek. -
Benden problem ne istiyorsa benim onu karşılayabilmem lazım.
-
İlla değerler sizin için önemli değildir aslında kombinasyon önemli.
-
Mümkün mertebe analitik çözüm getirmeye çalışıyorsunuz.
-
Kompleksliği analitiklik olarak algılayan yazılımcılar var bu böyle değildir alakası da yoktur. Analitiklik basitlik demektir. Ne kadar basit çözebilirseniz. Ama basitlik profesyonel olmayan kod anlamına gelmiyor Analitiklik, Basitlik, Profesyonellik bunlar birbirine bağlı yapılanmalar. Öbür türlü komplekslik dışarıda bambaşka yapılanma işte komplekslik istemediğimiz sonuç zaten Analitik yazılan Basit yazılan kod profesyoneldir. Dolayısıyla her ikisinide kapsar. Yani kompleks olmaması gerekiyor. Onun için kompleks yapacağım yazdığım kodu daha değerli göstereceğim diye derdiniz o olursa biraz saçmalamış olursunuz. Mümkün mertebe en doğru hamlelerle en doğru verilerle çalışmaya özen göstereceğiz
#Örnek 1
//1'den 10'a ladar olan sayıları alt alta ekrana yazdıralım.
#1. Çözüm
for (int i = 1; i <= 10; i++)
{
System.Console.WriteLine(i);
}
#2. Çözüm
for (int i = 50; i < 60; i++)
{
System.Console.WriteLine(i - 49);
}
-
Herşeyi sen bilemzsin problem sana vermeli. Problem sana vermeli. Problem ne istediğini sana vermediği sürece o da ayrı bir problem.
-
Bir ardışıklık söz konusuysa aklına
for
döngüsü gelmeli.while
ladado while
lada yapabilirsin. Amafor
döngüsü bu senaryoya en yatkını. -
Senaryo => 1 ile 40(Dahil) arasındaki çift sayıları toplayarak sonucu ekranda gösterelim.
for (int i = 1; i <= 40; i++)
Bu kombinasyon her bir turda 40 ile 1 arasındaki bütün değerleri i değişkeni üzerinden bana veremeyecek mi verecek.- Burada başlangıç değerine ve bitiş değerine sen karar vermeyeceksin yazılım karar verecek.
- Bir sayının çift olma durumunu ilgili sayıyı 2'ye bölerek öğrenebilirim.
- İlgili sayıyı ikiye böldükten sonra kalanın 0 olup olmamasını nasıl değerlendiririm? Burada bir karşılaştırma değerlendirme var değil mi yani akış kontrol mekanizmaları.
for
içerisinde her şeyi kullanabilirsin.if
,switch
,try catch
vs.- Gerek olmayan bişeyi yazmayın. Gördüğün algoritmada şartla bakma. Algoritmaya mantıkla bak akılla bak.
#Örnek 1
//1 ile 40(Dahil) arasındaki çift sayıları toplayarak sonucu ekranda gösterelim.
int toplamSonuc = 0;
for (int i = 1; i <= 40; i++)
{
if (i % 2 == 0)
{
toplamSonuc += i;
}
}
#İkinci Çözüm
int toplamSonuc = 0;
for (int i = 0; i <= 40; i += 2)
{
toplamSonuc += i;
}
System.Console.WriteLine("Toplam Sonuç : " + toplamSonuc);
-
Senaryo Klavyeden girilen sayının faktöriyelini bulan programı yapalım.
- Birinci Çözüm olarak 1'den başlayıp sayıya kadar olan sayıları çarpıp elde edebiliriz.
- İkinci Çözüm olarak sayıdan'dan başlayıp 1'e kadar olan sayıları çarpıp elde edebiliriz.
-
Bir döngünün içerisindeki aritmetik işlemleri toplayan, çarpımların sonuçlarını toplayan kendisinde tutan sayısal ifadeler döngünün dışında tanımlanır. Zaten bu algoritmanın gereğidir. İçeride durmadan değeri ezmektense dışarıda tanımlanmış bir değişkende ilgili değerleri toplamayı yeğleriz.
#Örnek 3
//Klavyeden girilen sayının faktöriyelini bulan programı yapalım.
System.Console.WriteLine("Faktöriyelini alacağımız sayıyı girelim.");
int sayi = int.Parse(Console.ReadLine());
int faktoriyel = 1;
#1. Çözüm
for (int i = 1; i <= sayi; i++)
{
faktoriyel *= i;
}
System.Console.WriteLine("Faktöriyel : " + faktoriyel);
#2. Çözüm
int faktoriyel = 1;
string sonuc = "";
for (int i = sayi; i > 0; i--)
{
faktoriyel *= i;
sonuc += i + (i == 1 ? " = " : " x ");
if (i == 1)
sonuc += i + " = ";
else
sonuc += i + " x ";
}
System.Console.WriteLine("Faktöriyel : " + sonuc + faktoriyel);
-
İlk varyasyonu
for(int i = 0; i < 10; i++) {}
- İlk parametrede bir başlangıç değeri tanımlarız.
- İkinci parametrede başlangıç değerine bağlı bir şart oluşturuyoruz genellikle ama illaki bağlı olmak zorunda değil.
- Üçüncü parametrede ise başlangıç değerini arttırdığımız operasyonunu gerçekleştirdiğimiz alanı tanımlıyoruz.
-
Bu varyasyonda hiçbişey zorunlu değil istersen başlangıç değerini tanımla tanımldaıktan sonra şartı bambaşka bişey üstünden ver illa başlangıç değeri üzerinden vermek zorunda değilsin. Herhangi bir değişkenin değerini burada arttırıp azaltabilirsin. İlla ki başlangıç değerini arttırıp azaltmak zorunda değilsin.
-
Burada amaç Bir döngüde operasyonel olarak kullanılan tüm parametrelerin tek bir çatı altında toplanması hani bakınca tek bir seferde görebilmektir. Zaten buradaki parametrelerin hiçbiri zorunlu değil.
#Varyasyonlar
for (int i = 0; i < 10; i++)
{
}
-
Başlangıç değerini tanımlamadan direkt dışarıda da tanımlayabilmektesiniz. Başlangıç değerini dışarıda tanımladıktan sonra
for
döngüsünde Başlangıç parametresini boş geçip ardından koşula odaklı bir şekilde değerinizi yazıp başlangıç değerini burada yönetiyor olabilirsiniz. -
Değişkenin değerinin dışarı da tanımlandığı ve içeriye herhangi bir şekilde tanımlama yapılmaksızın direkt koşullarda ve arttırma azaltma noktasında kullanıldığı bir varyasyon.
#Varyasyon 2
int i = 0;
for (; i < 10; i++)
{
}
-
Başlangıç değerinin dışarıda tanımlayarak gene içeride referans gösterebiliyorsunuz. Amma velakin burada bişeye dikkat etmemiz gerekiyor her ne kadar dışarıda tanımlanısada içeride hata verecektir. Çünkü yine başlangıç değeri tekrardan bir değer ataması yapılmak zorunda.
-
Dışarıda tanımlıyorsan bir değişkeni içeriye verdiğin taktirde içeride bir daha buna bir değişken başlangıç değeri ataman gerekiyor diye uyarmaktadır.
-
Bu varyasyonda dışarıda tanımlanan değişkeni
for
döngüsünde başlangıç değeri olarak göstermek istiyorsak eğer yine bu değişkene bir başlangıç değeri atamamızı zorunlu kılmaktadır... Yani içeride bu başlangıç değerini vermemiz gerekmektedir.... Aksi taktirde derlenmeyecektir kodumuz.
#Varyasyon 3
int i = 0;
for (i = 0; i < 10; i++)
{
}
-
for ( ;i < 10;)
-
for
döngüsünde başlangıç değerini dışarıda tanımlayabiliyorduk aynı şekilde başlangıç değerinin arttırıp azaltma işlemini de yani değişim işlemini de burada yapmak zorunda değiliz. buradan da kaldırıp boş geçebiliriz. Eğer burayı da boş geçiyorsak arttırıp azaltma işlemini de yani değişim işlemini içeride yapabiliriz. Ya da duruma göre uygun bir noktada i'yi/başlngıç değerini arttırıp azaltmanız gerekecektir. -
Varyasyon olarak dışarıda tanımlayıp ne buraya bildirmek zorundasınız ne de burada arttırmak zorundasın.
#Varyasyon 4
int i = 0;
for ( ;i < 10;)
{
i++;
}
-
Şart kısmı illaki başlangıç değerine bağlı olmak zorunda değildir.
-
Şart kısmını genellikle başlangıç değerine bağlı olarak kullanırız ama her zaman değil.
-
Buradaki parametrelerde illaki normal yüzeysel tanımlar yapılan içeriklerde olduğu gibi illa başlangıç değerin olacak illa şartın ona göre olacak illa arttırman olacak vs. Bunlar olmak zorunda değil hepsi opsiyonel hepsi senin iradene bağlı ama genellikle biz başlangıç değerini tanımlar ona bağlı bir şekilde koşul oluştururuz.
#Varyasyon 5
string adi = "Serhat";
for (int i = 0; adi == "ahmet"; i++)
{
}
int a = 10;
for (int i = 0; a != i * 2; i++)
{
Console.WriteLine("Musa");
}
-
Başlangıç değerini vermek zorunda değiliz. Aynı zmaanda koşulu da vermek zorunda değiliz. Hatta arttırma azaltma miktarını da bildirmek zorunda değiliz. Bu şekilde bir
for
döngüsü tanımlanabilir. -
Bu döngü sonsuz döngüdür. Scope'undaki kodlar durmadan işler.
-
İçerisinde bulunan ilgili kodları sonsuza kadar ebediyyen yazdıracaktır.
#Varyasyon 6
for (; ; )
{
System.Console.WriteLine("Musa");
}
- Bir şart belirtiyorsanz bu şarta uygun bir şekilde hareket edecektir. Amma velakin siz başlangıcı ya da artış azalış miktarını belirttiniz ama şartı belirtmiyorsanız bu yine bir sonsuz döngüye alamet olacaktır.
#Varyasyon 7
for (int i = 0; ; i++)
{
System.Console.WriteLine("Musa");
}
-
for
döngüsünün başlangıç değerini tanımlama kısmında birden fazla değişken tanımlaması yapabilmekteyiz. -
Nihayetinde bakarsanız eğer başlangıç kısmı bir değişken tanımlama kısmı ve burada bir değişken tanımlanmakta dolayısıyla biz , diyerek birden fazla değişken tanımlaması yapabilmekteyim.
-
Eğer ki
for
içerisinde birden fazla değişken ihtiyacınız varsa tabikide bu değişkeni dışarıda tanımlayabilirsiniz. Tabiki ezilme pahasına da olsa içeride de tanımlayabilirsiniz ama hani şöyle kalıba baktığında direkt göreyim istiyorsan başlangıç kısmında normal değişken tanımlar gibi tanımlayabiliyorsunuz. -
Aynı şekilde bu değişkene
for
döngüsü içinde erişerek kullanabiliyoruz. Gerek şart kısmında gerek artış kısmında gerekse scope kısmında. -
Bu yapılanmaya baktığımızda
,
ile sen bir değişken daha oluşturdun hem şarta da ekleyebiliyorsun. Şarta normal mantıksal yapılanmayla ekledik. Artış kısmında da,
ile diğer değişkeninde değerinde artış azalış yani değişiklik sağlayabiliyoruz. -
Bu şekilde birden fazla tanımlama yapabiliyorsan yine bu şekilde birden fazlasınında değerini arttırıp azaltabilirsin.
-
Birden fazla değişken durumunda
,
ile bunları arttırma azaltma kısmında ayırdığımıza dikkatinizi çekerim. -
İçeri de ise her ikisine de erişim sağlayabiliyoruz.
#Varyasyon 8
for (int i = 0, i2 = 0; i < 10 && i2 < 5; i++, i2++)
{
System.Console.WriteLine(i);
System.Console.WriteLine(i2);
}
-
while
döngüsüfor
döngüsüne bakarak daha sade daha ilkel ilk varyasyonlardan biri gibi. -
Hiçbirşeyi yok sadece bir scope'u ve parantezi var.
while(........) {}
-
while
döngüsünün parantezinde sadece Şart var ne bir başlangıç değeri var ne bir başka arttırma azaltma noktası var. -
while
döngüsü şart doğrulandıkça tetiklenir... -
Şart doğrulandığı sürece
while
döngüsü tetiklenecektir. -
while
döngüsü sadece şarta bağlı bir döngüdür. Şart doğrulandıkça tetiklenecektir. -
for
a nazaran daha ilkel ve sade bir döngüdür. -
while
döngüsü programlamanın ilk tasarlanmış döngüsüdür. -
for
olmayan dil vardır amawhile
döngüsü tüm dillerde vardır. Hiçbir döngü yoksawhile
döngüsü varsa bütün işlemlerini bu döngüyle yapabilirsin. Kezafor
döngüsüylewhile
döngüsüyle ne yapabiliyorsan onuda yapabiliyorsun. -
Genellikle sonsuz döngülerde yahut süreci bilinmeyen durumlarda kullanılan bir döngüdür. Amma velakin istediğiniz yerde kullanabilirsiniz.
-
for
döngüsünü nerelerde kullandıysanwhile
döngüsünü de birebir o noktalarda kullanabilmektesin.
-
for (int i = 0; i < 10; i++) {}
for
döngüsünün genel iskeleti bu şekilde bir başlangıç değişkenimiz var bir şartımız var ve ilgili değişkenin artış azalış miktarını belirttiğimiz bir operasyonumuz var. -
while (true){}
while
döngüsü ise görüldüğü üzere sadece bir şarttan ibaret. Yani buraya sadece şart yazıyoruz. -
while
döngüsündefor
gibi çalışmak için kombinasyonu kendimiz oluşturmalıyız.
- Kombinasyonu oluşturabilmem için
while
döngüsünün parantezleri içinde parametreleri yok yani bir başlangıç değeri tanımlayabileceğim bir artış azalış miktarını belirleyebileceğim bir alan yok. Dolayısıylawhile
döngüsünde başlangıç değerimi dışarıda tanımlıyorum devamında ise şartım neyse parantez içine bunu yazıyorum daha sonrasında ise artış miktarını her bir döngü döndüğünde kendi içerisinde değeri arttırsın. Yani scope içine yazıyorum.
- Compiler yukarıdan gelecek bakacak
while
döngüsü diyecek ki şarta bakacak eğer kitrue
ise döngüye girecek. Diyelim ki işlemini bitirdi bitirdikten sonra yine şarta bakacaktrue
ise yine döngüye girecek yine şarta bakacak döngüye girecek şarta bakacak ta kiiwhile
döngüsü şartfalse
olana kadar tetiklenecektir.
- Yapısal olarak
for
dan farkı vardır ama işleyiş olarak mantığı kurduğunuz an hiçbir fark olmayacaktır. Hani sonuçta aynı sonuçları elde edebilirsiniz.
#while Döngüsü - for İle Kıyaslama
for (int i = 0; i < 10; i++)
{
System.Console.WriteLine("Musa");
}
System.Console.WriteLine("**********************************");
int _i = 0;
while (_i < 10)
{
System.Console.WriteLine("Musa");
_i++;
}
-
Senaryo :Ekrana 10 kere "Merhaba Dünya" yazdıran bir program yazalım
-
1'den 10'a kadar saydırmak belki
for
ile daha kolay olabilir amma velakin operasyonel olarakwhile
da nasıl yapılır buna bakacağız. -
while
döngüsü şarta bağlı bir şekilde içindeki kodu yazdıran bir döngü. İçindeki kodu şarttrue
olduğu sürece çalıştıracaktır/tetikleyecektir. -
Bu senaryoya göre yapacağımız manevralar
for
dakiyle aynı mantıkta olacaktır. Yani benim süreci takip edebileceğim kontrol edebileceğim bir sayısal değer oluşturmam gerekiyor. Ardından buna uygun bir kombinasyonsa koşul yapıyorum. Ve ardından tabikide sayısal değeri attırmam gerekiyor ki sonsuz döngüye girmesin.
#İnceleme 1
//Ekrana 10 kere "Merhaba Dünya" yazdıran bir program yazalım
int i = 1;
while (i <= 10)
{
i++;
System.Console.WriteLine("Merhaba Dünya");
}
-
Senaryo : Klavyeden girilen sayıdan geriye doğru 0'a kadar sayan bir sayaç hazırlayalım.
-
while
döngüsünde arttırma azaltma işlemlerini yaparken yaptığınız yere dikkat edin. Arttırıp azaltacağınız değer algoritmada o an kullanacağımız bir değerse algoritmada kullanılacak değer önceden işleme tabi tutulmamalıdır. -
Bu senaryoya göre sayıyı yazdırmadan önce sayıya müdahale edersem yanlış çıktılar alırım. Yani bir mantıksal hata yapmış oluruz. Böyle bir algoritmada sayının değeri işlem yapıldıktan sonra değiştirilmelidir.
-
while
döngüsünde çalışırken arttırma azaltma işlemlerini nerede yapıldığına iyi dikkat etmeniz gerekiyor.
#İnceleme 2
//Klavyeden girilen sayıdan geriye doğru 0'a kadar sayan bir sayaç hazırlayalım.
int sayi = int.Parse(Console.ReadLine());
while (sayi >= 0)
{
//sayi--;
System.Console.WriteLine(sayi);// Bu senaryoda
sayi--;
}
-
Senaryo : 0 ile 100 arasındaki tek sayıları toplayarak sonucu ekranda gösteren programı yapalım.
-
Birşeyi 2'ye böldüğünde kalan 1 ise bu sayı tek sayıdır. 0'sa çift sayıdır. Bu tarz algoritmalarda etkisiz elemanı kullanmalıyız.
-
Eğer ki senin içeride kullanmış olduğun değer bir yandan arttırman ya da azaltman gereken değerse işlemden önce/algoritmadan önce onu işleme tabi tutmamalısın/çalışma yapmamalısın. Aksi taktirde sen oradaki çalışmayı bozarsın. Doğru değerle çalışmak için ilk önce bir çalışayım ardından değeri değiştireyim.
-
while
döngüsünde ya dafor
döngüsünde döngüden bağımsız hani bu biraz daha manevratik görebileceğiniz bir yapılanma değeri toplarkende direkttoplam += i++;
diyebilirsiniz. Nihayetindei++
operatörü ilk i'nin değerini döndürecek sonra i'nin değerini 1 arttıracaktır. Amma velakin bu senaryoda maalesefki işe yaramayacaktır. Çünkü i değerinin mod değeri 1 ise artacaktır değilse sonsuz döngüye girecektir.
#İnceleme 3
//0 ile 100 arasındaki tek sayıları toplayarak sonucu ekranda gösteren programı yapalım.
int i = 0, toplam = 0;
while (i <= 100)
{
//i++;
if (i % 2 == 1)
toplam += i;
i++;
}
-
Senaryo : Klavyeden girilen sayının faktöriyelini hesaplayalım.
-
Bir formülasyonda kullanacağımız değeri arttırıp azaltma işlemini önceden yapmayacağız o formülasyondan/algoritmadan/koddan önce yapmayacağız sonra yapacağız. Öncesinde arttırıp azaltırsak eğer değerle oynadığımız için işlemin sonucu değişecek ve ortaya mantık hataları çıkacaktır.
#İnceleme 4
//Klavyeden girilen sayının faktöriyelini hesaplayalım.
int sayi = int.Parse(Console.ReadLine());
int faktoriyel = 1;
while (sayi > 0)
{
faktoriyel *= sayi--;
// sayi--;
}
-
Senaryo : O anki tarihin saniye değeri 5'in katıysa eğer tarihih ekranda gösteren uygulamayı yazalım.
-
Tarih değerini direkt
while(...)
Şart kısmında kontrol edersek eğer şart sağlanmadığı andafalse
döneceği için döngüden çıkacaktır. Yani bir süreklilik arz eden bir kod olmayacaktır. -
Sonsuza giden bir algoritma da içeride kontrol yaparken
while
daha şık olacaktır. -
for
döngüsüyle de yapabilirdik ama sonsuza gitmemiz gereken durumlardawhile
daha şık olduğundanwhile
ı tercih ediyoruz
#İnceleme 5
//O anki tarihin saniye değeri 5'in katıysa eğer tarihih ekranda gösteren uygulamayı yazalım.
while (true)
{
if (DateTime.Now.Second % 5 == 0)
System.Console.WriteLine(DateTime.Now);
}
-
while
döngüsüne inanılmaz derecede benzer. -
while
döngüsünde yapıwhile(...ŞART...) {İlgili Çalışacak Kodlar}
do while
döngüsünde isedo{Çalışacak kodlar}while(...ŞART...)
-
while
döngüsü şarttrue
oldukça döngü tetiklenecektir.do while
döngüsü ise yine aynı mantıkla şarttrue
oldukça tetiklenecektir. -
Aralarında küçük bir teknik vardır onun dışında birebir aynı çalışıyorlar.
-
while
döngüsü önce şarta bakar daha sonra kodu çalıştırır davranışı bu şekildedir. Yani önce şarta bakar şarttrue
ise kodu çalıştırır yokfalse
ise kodu çalıştırmaz. -
do while
döngüsü ise önce kodu çalıştırır sonra şarta bakar. -
do while
döngüsü kodu bir çalıştırır ondan sonra şarta bakarwhile
döngüsü ise şarta bakar kodu çalıştırır. Aradaki teknik fark budur. -
Hangi durum olursa olsun siz bir kodu
while
ile çalıştırıyorsanız hiç çalışmama ihtimali de var ya da şarta uygun çalışma ihtimali de var. Amma velakindo while
ile çalıştırıyorsanız şarttrue
da olsafalse
da olsa ilgili döngü bir kereye mahsus tetiklenecektir. -
while
ile yapılan kontrolde şarttrue
olursa döngü tetiklenecek,false
olursa hiçbir zaman tetiklenmeyecektir. -
do while
döngüsü şarttrue
da olsafalse
da olsa ennn az bir kere tetiklenecektir. -
while
döngüsü şudur. Önce havaya bakarsın duruma göre şemsiye alırsın. Bazen de şunu yaparız önce şemsiyeyi alırız sonra havaya bakarız yağmurlu da olsa yağmursuz da olsa şemsiyeyi bir kereye mahsus alıyorsun. -
Öncelikli işlemler yapılıp ardından şartı kontrol edip daha sonra tekrar edecek durumlar varsa
do while
döngüsünü tercih ediyoruz. Önceden birden fazla veritabanı sorgusu çalıştırılacaksa bu birden fazla veritabanı sorgusunu tek birstring
üzerinde yazıyorduk. Bunlarıdo while
ile işleme sokuyorduk. Diyorduk ki al sen bunu çalıştır ilk önce 1.sini çalıştırıyordu daha sonra kontrol ediyordu ikincisi var mı varsa bir daha çalıştırıyordu. Bak şimdi zaten ilk verdiğin zaten vardır.do while
'dakiwhile
ikinciye bakıyordu var mı daha diye varsa eğer bir daha giriyordu ikinciyi tetikliyorduk daha sonra bir daha soruyordu var mı diye diye o şekilde kullanıyorduk o senaryolarda.
do while
döngüsü ile while
döngüsü amcaoğludur :)
while
şarta bakar daha sonra kodu tetiklerdo while
ise ilk baş kodu tetikler daha sonra şarta bakar.
#do while döngüsü
while (false)
{
System.Console.WriteLine("while döngüsü");
}
do
{
System.Console.WriteLine("do while döngüsü");
} while (false);
-
Herhangi bir döngü
for
,while
do while
fark etmiyor yapacağı işlem eğer tek satırlık tek konseptlik işlemse scope'suz tanımlayabilmekteyiz. -
Tek satırda yazılan kodlarda genellikle kodun maliyetini vs düşürmek için kullanıyoruz.
-
İlgili döngüye ait birden fazla komut işleyecekseniz bunların hepsinin scope içerisine alınması gerektiğine dikkat ediyorsunuz.
#Scopesuz Döngüler
for (int i = 0; i < 10; i++)
System.Console.WriteLine("Musa UYUMAZ");
while (true)
System.Console.WriteLine("");
do
System.Console.WriteLine("asfdasfdsad");
while (true);
-
Bu kavram bazen bizim için bir hataya girmiş olduğumuz farkında olmadan iradesizce girmiş olduğumuz bir hatayı tarif ederken bazen de bazı operasyonlarda irademizle kasıtlı bir şekilde kullandığımız bir durumu tarif etmektedir.
-
Bir döngünün kombinasyonun eğer ki sonsuza kadar olma ihtimali/olma durumu ya da koşulu sonsua kadar sağlama durumu söz konusuysa o döngü hiçbir zaman sonlanmayacağından dolayı sonsuz kere çalışacak yani sonsuz bir döngüye girecektir. Bir başka deyişle bir döngünün sonlanması için kombinasyonel bir koşul var Eğer ki o koşul asla ve asla sağlanmayacak durumdaysa o döngüye de sonsuz döngü denmektedir. Yani her türlü bir döngünün sonlanmasını sağlayacak koşul doğrulanmış bir şekilde doğru bir mantıkla inşa edilmediyse sonsuz döngüye gireceksiniz.
-
İnşa edilen kodlarda bazen biz yazılımcılar açısından yanlışlıkla girilen ya da belirli mantıksal hatalardan dolayı istemsizce girilebilen döngülerdir. Bazen de bazı operasyonlarda sonsuzluk durumunda kontrol etmemiz gereken bazı durumları kontrol edebilmek için irademizce kullandığımız bir döngü yapılanmasıdır.
-
Şimdi sen bir yazılımcı olarak sen kod yazıyorsun. Yazmış olduğun kodu daha pratik yazabilmek için döngüleri kullanıyorsun. İşte döngülerde kombinasyon oluşturuyorsun yeri gelecek sonsuz döngü kullanacaksın yeri gelecek sonsuz döngüden kaçınacaksın oradaki koşulla ilgili döngü yapacağın işlemden sonra sonlandırabilecek bir şekilde düşünebilirsin. Dikkat edilmesi gereken nokta sonsuz döngülerde tüm yapılanmalarda nasıl kontrol edebileceğini bilmek yani ihtiyacın olduğu durumda sonsuz döngüyü nasıl kullanacaksın ve bunu nasıl kontrol altına alacaksın bunları bilmen gerekiyor.
-
for
döngüsünde sonsuz döngüye girmek istiyorsanız koşulu ilelebettrue
yapacak şekilde ayarlamanız gerekiyor. -
Şimdi sen
for
üzerinden sonsuz döngüye giriyorsan dikkat etmen gereken noktalar var.- Döngü ne kadar sonsuz bir döngü gibi gözükse de esasında sonlu bir döngüdür. Çünkü bir başlangıç değeri var önemli olan bu değil amma velakin artış miktarını uyguladığın operasyonun var elbetteki birgün buradaki değer türün değer aralığını aşacak ve patlayacaktır. Bu durum döngünün sonu olacağı anlamına geliyor.
-
Eğer ki biz
for
döngüsüyle sonsuz döngüye gireceksek eğer başlangıç değeriyle artış azalış miktarını belirtmeyiz. -
for
yapılanmasında biz sonsuz döngüye girdiğimizde birgün çıkmakta isteyebiliriz. İşte bu çıkma operasyonu yani sonsuz bir döngüde denetleme yaparkenfor
da çıkmak istiyorsan ileri de inceleyeceğimiz manevratik keywordleri kullanabiliriz. Ya da bizim şartı bir şekilde kontrol edecek yapılanmaya ihtiyacımız olacaktır ve o yapılanmayı da bir şekilde inşa etmemiz gerekecektir. -
Sonsuz döngüye girdim ve sonsuza kadar bir aksiyonu sonsuz boyutta arıyorum ve birgün bulduğunuz anda sonsuz döngüden çıkmanız mı gerekiyor o zaman şart kısmına bağlayıcı bir değişken atamanız lazım. Eğer ki birgün döngü içinde aradığınızı bulursanız işte bu değişkenin tam tersini bu değişkene atarsın. İşte böyle bir durumda burada döngü değişir. Al sana döngü
bool
olduğundan dolayı ilgilifor
un şartını buradaki döngüye bağlarsın. Şimdi normalde senin aradığın aksiyon neyse sonsuzlukta aradığın herhangi bir operasyon olabilir her neyse onu bulana kadar otrue
olana kadar değişkenin değeri değişmeyeceğinden sonsuz döngüye sokacaktır. Bulduğun zamanda içeride değişkenin değeri değişeceğinden dolayı değişkenin tersini alarak döngüye atıyoruz. yanitrue
ikenfalse
oluyor yani burada bir sonraki turda değişkenin değeri değiştiği ve şartı karşılamadığı için sonsuz döngüden çıkmış oluyoruz. -
while
,do while
,for
döngüsü olsun bunlardaki sonsuz yapılanmalarda yapısal olarak fark vardır ama teknik olarak maliyet olsun kaynak tüketimi olsun bunlar gibi durumlara istinaden herhangi bir artısı ya da eksisi olduğu kanaatinde değiliz. Dolayısıyla istediğin herhangi bir döngüyü istediğin herhangi bir noktada kullanablirsin.
-
Sonsuz döngü diyince fıtrat olarak bu olaya en yakın olan
while
döngüsüdür. -
while
döngüsü yapısal olarak bir sonsuz döngüye girebilecek bunun için zaten öncelikli bir hazırlığa sahip olan döngü diyebiliriz. Nihayetinde direkt şarttrue
olduğu sürece sonsuz döngüye girmiş olacaktır. -
for
döngüsündeki gibi ekstralar olmadığı için ekstradan parametre kısımları vs oladığı için direkt şartıtrue
yaptığınızda sonsuz döngüye girebilirsiniz. Herhangi bir patlama durumu yok bişey yok nihayetinde içerideki algoritmada herhangi bir çalışma zamanı hatası almadığınız sürecewhile
döngüsüyle sonsuz döngüye zaten direkt giriş yapabiliyoruz. Burada önemli olan sonsuza girdiğimiz zamanwhile
döngüsünde bunu nasıl kontrol edebildiğimiz. -
Diyelim ki biz sonsuz bir işlem yapıyoruz ve bir ara bu işlemi sona erdirmek istersek işte burada
while
döngüsünden çıkarmamız gerekecektir. işte böyle bir durumda dışarıda bir durum/state tanımlarız. İşte buwhile
sonsuzluğunun şartını bu değişkene bağlarız. Bu değişkenin değerini içeride değiştirirsem eğer sonsuzu kontrol edebiliyorum. Sonsuz döngüyü. Birgün aradığınız her neyse bulduğunuzu varsayarsak ya da ilgili algoritma bir şekilde gerektiği noktaya vardığını düşünürsek buradaki değişkenin tersini tekrardan değişkene atarak döngüden çıkmasını sağlıyoruz. -
while
döngüsü ekstradan bir işlem gerektirmeden direkt zaten sonsuz döngüye girme fıtratına sahip. Önemli olan sonsuzu kullanırken iradeli kullanabilmek ve daha da önemlisi olan sonsuzluk esnasında bunu yönetebilmek ve yeri geldi mi bu sonsuz döngüden çıkabilmek.
#Sonsuz Döngü - While
bool durum = false;
while (!durum)
{
if (true)
{
durum = !durum;
}
}
-
do while
döngüsü bütün operasyonlardawhile
la birebir aynı mantıkta aynı kurallarda çalışmaktadır.do while
ın yapılanması da/altyapısı da/fıtratı da gene sonsuz döngüye çok yatkındır. -
Önemli olan sonsuz döngünü nasıl kontrol edildiğidir. Hepsinde aynı mantık. Dışarıda bir tane değişken tanımlıyorsun. bu değişkeni şarta bağlıyorsun eğer ki sonsuzlukta aradığın şart geçerli olduysa değişkenin değerinin tersini alıp değişkene atıyarak değiştiriyoruz. böyle bir durum söz konusu olduğunda ilgili sonsuz döngü sona ermiş olacak ve compielr yoluna devam edecektir.
#Sonsuz Döngü - Do While
bool durum = true;
do
{
if (true)
{
durum = !durum;
}
} while (durum);
-
Döngüler içerisinde istediğiniz herhangi bir başka döngüyü ya da kendisinden kendi türünden olan bir döngüyü de başlatabiliyorsunuz ve bunun bir derinliği yok yani bir döngü içerisinde başka bir döngü onun içerisinde de bir başka döngü ve bu şekilde derinlikleri arttıracak şekilde döngüler tanımlayabiliyoruz.
-
Normal bir döngü zaten maliyetlidir. İç içe döngüler daha çok maliyetlidir.
-
Döngü yapılanmalarının içerisinde farklı döngüleri biz programatik olarak yeri geldimi kullanıyoruz algoritmalarıza bazen çok sık yer ederler. Döngüler farklı döngüleri de içlerinde barındırabilmektedirler.
-
Durduk yere iç içe döngü kullanmayız. Belirli bir amaca hizmet etmesi için yapıyoruz. O anda çalıştığın algoritma her neyse onun için yaparsın vs. Yani gerektiğinden iç içe döngü kullanırsın.
#İç İçe Döngüler
for (int i = 0; i < 10; i++)
{
for (int i = 0; i < 5; i++)
{
while (true)
{
}
}
}
-
İç içe
for
döngüsü yapılanmasında dikkat edilmesi gereken nokta çok bariz belli değişken isimleri. İçteki ve dıştaki döngülerde tanımlanacak olan başlangıç değerleri olarak kullanacağımız değişkenleri tanımlarken biz bunları farklı isimlerde tanımlamaya dikkat etmeliyiz. Mesela diyelim i değişkenifor
scope'undan her yerden erişilebileceği için bu scope'un içerisinde bir başka i isminde değişken tanımlayamayız. Temel değişken kuralları burada geçerlidir. -
İç içe
for
döngülerinde değişken isimleri farklı olmalıdır.
-
Döngü yapılanmasında illa
for
içerisindefor
do while
içerisindedo while
kullanacaksınız diye bir kaide yok. İstediğiniz herhangi bir döngünü içerisinde başka bir döngü kullanabilirsiniz. -
İç içe döngülerde maliyet hesaplarken döngüleri tur sayısını hesaplarız ve birbirleriyle çarparız.
-
İç içe döngülerde maliyet tüm döngülerin maliyetinin/tur sayısının/periyodik çalışmasının çarpımına eşittir. Bu çarpım totaldeki maliyeti verecektir.
-
Maliyet hesabı türden bağımsızdır.
-
Zaten sen bir algoritma yazıyorsan buradaki maliyet sayısal olarak bir anlam ifade etmeyecek senin algoritmik düşüncen de yapacağın operasyonda hani olayın ne kadar seyredebileceğini görmeni sağlayacak.
-
Diyelim ki elimde bir raf var ve bu rafa kitap dizecem şimdi 3 raf var ve 3 tane de dikey raf var. Dikey raflar ile yatay raflar arasında döngüsel çalışma yaparken ilk döngü 1 tur attığında içerideki döngü tam tur atacaktır.
-
Dıştaki döngünün her bir turuna karşılık içteki döngü tam tur atacaktır haliyle burada çarpma vardır. Ve mantığı vardır. Dıştaki bir kere tur atacak içteki tam tur atacak. Kısaca bu maliyet dıştakiyle içtekinin çarpımıdır.
#İç İçe Döngüler - For
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 5; j++)
{
for (int o = 0; o < 3; o++)
{
int p = 0;
while (p < 4)
{
p++;
}
}
}
}
-
Döngülerin aralarındaki farklar aslında mantıksal değil yapısaldır.
-
foreach
bir döngü değil bir iterasyondur. -
Döngü dediğimiz yapılanma bir kombinasyona bağlı bir şekilde çalışıp bir koşulun doğrulanması sürecinde periyodik işlemler yapan yapılanmalardır. Halbuki iterasyon böyle bişey değildir ne kombinasyona bağlıdır ne de şarta bağlıdır. İterasyon dediğiniz itere edebileceği bir sonraki veriyi getirebileceği bir yapılanmadır. Onun için iterasyonlar döngü değildir itere eden yapılanmalardır.
-
Döngü : Belirli bir kombinasyon eşliğinde çalışan ve belirli bir şarta bağlı olan periyodik işlemler gerçekleştiren yapılanmalardır.
-
Döngü dediğin yapılanma şart ve kombinasyondan ibarettir.
-
İterasyon : İterasyon mantığında ne kombinasyon ne de şart vardır. İterasyonda; sonraki veri, öteki veri anlamına gelen itere etme fiili vardır. Bir veri kümesi üzerinde işlem yapmamızı/verileri elde etmemizi sağlayan yapılanmadır.
-
İterasyon felsefesini/kavramını/stratejisini/mantığını benimsemiş yapılanmalarda ne kombinasyon (bir matematiğe göre çalışırsınız) vardır ne de şart vardır. Orada tek olan şey bir veri bütünüdür. Verilerin itere edilebilir yani itere sonrakine geçiş yapabileceği bir kavram vardır orada.
-
Kombinasyon falan yok iterasyon bir veri kümesinde verileri tek tek sana elde etmeni sağlıyor.
-
Bir kombinasyon bir şart yok onun için döngülerdeki esneklik iterasyonlarda olmayacaktır.
-
Döngülerde herhangi bir veri kümesi üzerinde döngüyle dönerken istediğimi noktadan başlayabiliriz ama iterasyonda başlayamazsınız iterasyon baştan başlar ve sona kadar gidecektir.
-
foreach
her ne kadar iterasyon olsa da döngü gibi kullanıldığını da farkedeceksiniz. -
Her döngü işlemi yapan sistem döngü değildir.
- Nedir Bu Döngüler?
- Ders8.2‘Hangi Döngü Nerede Kullanılır?’ Yanlış Bir Sorudur! Doğru Soru ‘Hangi Döngü Nereye Yakışır?’
- For Döngüsü
- İnceleme 1
- İnceleme 2
- İnceleme 3
- Örnek 1
- Örnek 2
- Örnek 3
- Varyasyonları
- Varyasyon
- Varyasyon
- Varyasyon
- Varyasyon
- Varyasyon
- Varyasyon
- Varyasyon
- Varyasyon
- While Döngüsü
- For İle Kıyaslama
- İnceleme 1
- İnceleme 2
- İnceleme 3
- İnceleme 4
- İnceleme 5
- Do While Döngüsü
- While İle Kıyaslama
- Scopesuz Döngüler
- Sonsuz Döngüler
- For
- While
- Do While
- İç İçe Döngüler
- For
- Foreach Bir Döngü mü?
- Özet