Feeds:
Posts
Comments

Farkettiğiniz üzere bir önceki postumda /* blablabla..*/ gibi bir kullanım vardı. Arkadaşlar, bu slash işareti ve asterix (küçük yıldız) ile başlayan, tam tersi ile biten satırların arasına ne yazarsanız yazın derleyici burada yazanları yorum olarak algılayacaktır ve program akışı içerisinde kaale almayacaktır.

Şu şekilde bir kullanımda hiç bir sıkıntı yaşamayacaksınız :

int = a;

/* aşağıda consolo sınıfının writeline metodunun kullanımını görüyoruz. */

Console.WriteLine(a);

Ya da sadece 2 adet slash işareti koyarakta yine yorum satırı oluşturabilirsiniz. Şöyle ki ;

// Console.WriteLine(a);

2 Slash’tan sonra yazılan kodlar yine derleyici tarafından kaale alınmayacaktır.

Peki bunu neden kullanalım? Yazdığımız kod hakkında belirtmek istediğimiz, ya da kendimize hatırlatmak istediğimiz durumlar olabilir.

Benim yaptığım gibi başkalarına öğretmeye çalışmak olabilir.

Advertisements

Bir örnekle for döngüsü ve if deyimi ile ilgili bildiklerimizi pekiştirelim.

1′ den 1000′e kadar olan sayılar içerisinde 5′e tam bölünen, aynı zamanda 7′ ye tam bölünemeyen sayıları sayan, toplamlarını hesaplayan ve bu sayıları listeleyen bir program yazalım.

Vay arkadaş ne çok şey istiyor program 🙂 Ama dert etmeyin kolay..

/* Önce 2 adet değişken belirleyelim. Birinde koşulu sağlayan sayıların adedini tutalım. Diğerinde ise toplamlarını tutalım. Bizden bu argümanlar isteniyorsa onları bir yerde tutmak zorundayız. */

int adet = 0, toplam = 0;

/* Bir for Döngüsü başlatalım ve tıpkı problemin bize söylediği gibi 1-1000 arası sayıları döngümüze saydıralım. Küme parantezi açarak for döngüsünün hemen ardından if koşulumuzla ilgili koşulları belirleyebilir ve koşulları sağlayan sayıları diğerlerinden ayıklayabiliriz. İf parantezine dikkat edin, büyük bir parantez var ve içerisinde iki küçük parantez daha var. Bu şekilde 2 ayrı koşul belirleyebiliriz. Tabi bu küçük veya alt parantezlerin arasına “ve” operatörümüzü kullanarak. */

for (int i = 1; i <= 1000; i++)
{
if ((i % 5 == 0) && (i % 7 != 0))
{
Console.WriteLine(i);
toplam += i;
adet++;
}
}

Console.WriteLine("Sayıların Toplamı : " + toplam);
Console.WriteLine("Sayıların Adedi : " + adet);

Şimdi Console.WriteLine (i); diyerek döngüden geçen sayıları tek tek ekrana alt alta yazdıracağız, yapmak zorunda değiliz, istersek bu deyimi program akışından çıkarabiliriz, varsın kalsın size kodu çıkararakta çalıştırmayı deneyin.

toplam += i;

Buradaki "+=" operatörünü daha önce görmediniz. Operatörlerden bahsederken operatörlerin tamamını değil, bazılarından bahsettiğimi, yeri geldikçe diğerlerinden de bahsedeceğimi söylemiştim. Bu operatörün yaptığı iş aslında şunu kısaltmak : "toplam = toplam + i;" böyle yazmak yerine : "toplam +=i;" diye daha kısa yazılıyor. Hiç birşey farketmez ikisini de yazabilirsiniz.

Peki bu kodun programdaki anlamı ne? Şöyle ki ; for döngüsünden ve if koşulumuzdan geçen, bu koşullara uyan her sayı toplam değişkenine atanıyor ve + i denerek hepsi toplanıyor. Tüm toplam ise toplam değişkeninde saklanıyor.

adet++;

Bu kodda aslında benzer işi yapıyor ama burada koşullara uyan her sayı geldiğinde sadece adet bir arttırılıyor. Burada koşullara uyan sayılar toplanmıyor, bu sayıların adedi toplanıyor.

Lütfen for döngüsü ve if koşulunun iç içe nasıl kullanıldığına dikkat edin. Küme parantezleri bize bu konuda yardımcı oluyor.

En temel haliyle bir for döngüsü aşağıdaki gibi yazılır ;

for (ifade1; ifade2; ifade3)
{
deyim1;
deyim2;
}

Tıpkı dünya üzerinde konuşulan diller gibi veya güzel Türkçemiz gibi programlama dillerininde kendi gramer kuralları var. Zaten blogumuzun başından beri bunu sizlerle paylaşıyorum.

For döngüsününde bir takım kuralları var. Mesela yukarıda yazdığımız ifadelerin hepsi illa bir şekilde doldurulmak zorunda değil. Yani şu şekilde bir kullanım söz konusu olabilir :

for (int = a; ; a ++)

Bu kullanımda yanlış olan hiç bir şey yok. Ayrıca dikkat ettiniz mi bilmiyorum ama ifade 3’ün sonuna noktalı virgül koyulmuyor. Evet for parantezinin içerisinde ancak 2 adet noktalı virgül kullanımı söz konusudur.

Şöyle bir kullanımda da herhangi bir sıkıntı olmaz :

int a = 6;
for (; a =< 12 ; a ++)

Peki o zaman for döngüsünün çalışma mantığından biraz bahsedelim. Böylece bu anlattıklarım biraz daha belirgin hale gelecek.

Program akışı icabı for döngü parantezine geldiği anda ilk ifade çalıştırılır. Az önce yazdığım gibi ilk ifade boş olabilir farketmez. Daha sonra ifade 2 'ye geçilir. ifade2 döngünün karar kısmıdır aslında. Döngünün neye göre döneceği, neye bakılacağı burada alınan karara bağlıdır. Söz gelimi yukarıdaki gibi "a =< 12;" ifadesi yazarsak döngü "a değişkeni 12 ye küçük veya eşit olana kadar dönsün" anlamı taşır.

Program ifade2'den sonra for döngüsünün akışına devam eder, ifade2 hala true değer üretiyorsa, yani ifade2'nin istediği değer doğru olarak sağlanabiliyorsa o zaman ifade 3'e gelinir. Burada genelde döngünün arttırılması ya da azaltılması yapılır. Tıpkı yukarıda yazdığım "a ++" gibi veya "a –" gibi.

Üzerinden gittiğim örneğe göre anlatacak olursam ifade2, 12'ye eşit olduğunda yine döngüye devam edilecektir. Ancak ifade3'e gelindiğinde ve döngü bir kez daha dönmek istediğinde görecektir ki ifade2 kontrolü 13' e izin vermiyor. O halde programın akışı for döngüsünden çıkar ve sonraki ilk satırdan devam eder. Eğer başka kod yoksa program sonlanır.

For döngüsü üzerinde biraz durmaya çalışacağım çünkü önemli bir konu. Konuyu daha iyi örneklerle güçlendirmeye çalışacağım. 4 Adet döngümüz hakkında da bilgiler verdikten sonra diziler konusuna geçeceğiz. Özellikle diziler ve döngüler, bir de if yapısı çokça kullanacağımız yapılar olacak ileride. Daha sonra ise database işlemleri yapmak istiyorum. Database kullanan progrmalar yazacağız, mesela ajanda ya da telefon defteri gibi.

Neyse devam edelim. Çok basit bir for döngüsü yapalım, anlattıklarımızı bir toparlamış olalım. Programımız ekrana 2'den 10' a kadar rakamları yazdırıyor.

int a;

for (a = 2; a <= 10; a++)
{
Console.WriteLine(a);
}

Sadece C Sharp için değil, neredeyse tüm programlama dillerinin temel yapılarından olan döngüler ile devam ediyoruz. Akış kontrol mekanizamalarına bağlı olan döngü yapıları C Sharp’ta 4 adettir.

For, While, Do While ve foreach.

Bunlar içerisinden en çok kullanılanı for döngü yapısıdır.

Döngüler sayesinde program akışını sonsuz kere veya istediğimiz kriterlere göre tekrar tekrar çalıştırabiliriz. Böylece istediğimiz sonucu daha kolay elde etme şansı buluruz.

Hadi gelin bir sonraki postta for döngüsüne bir bakalım.

C Sharp – Switch (2)

Okumaktan sıkılmayın diye switch postumu fazla uzatmadım. Buradan devam edelim.

Eğer kodu denediyseniz anlatmak istediğim şeyi sanırım anladınız. Fakat kodda yapacağımız küçük bir değişiklik alacağımız hatayı önleyecek. Şöyle ki ;

int a = 1;

switch (a)
{
case 1:
Console.WriteLine(“Case 1”);

goto case 2;

case 2:
Console.WriteLine(“Case 2”);
break;

default:
break;
}

goto anahtar sözcüğü ile akışı istersek başka bir case’e gönderebiliriz.

Switch deyimi ile ilgili bazı hatırlatmalar yapayım. bir de örnek yazıp bu konuyu kapatayım.

* Aynı isimde case ifadeleri kullanamazsınız. Programın akışında 2 ya da daha fazla “case 1” olamaz.
* Case anahtar sözcüğünün yanındaki ifadeler her zaman sabit ifadeler olmak zorundadır. Bu ifadeler içinde değişkenleri kullanamazsınız.
* Caseler istediğimiz sırada olabilir. Case 1, case 2, case 3 diye sırayla alt alta yazmak zorunda değiliz. Tabi ki okunabilirlik açısından öyle yazmak daha doğru olur ancak bu switch deyiminin çalışma mekanizması açısından bir gereklilik değildir.

Switch deyiminin kullanımıyla ilgili pek çok konuyu tabi ki tecrübe edinerek daha iyi öğreneceksiniz. Switch kullanımı ile ilgili yazdıklarımı ezberlemek zorunda değilsiniz. Yaza yaza zaten otomatik olarak kendisi yerleşiyor.

Yazacağımız program bizden rakam istesin. Yazacağımız rakama göre bize hangi futbolcunun o numaralı formayı giydiğini söylesin.

* Not : Bundan sonra kodlarımız daha fazla uzayacak. Siz kopyala – yapıştır yapmayın diye yazdığım kodları resim şeklinde veriyordum ama o metodla yazdığım kodların tamamını göstermek zor olacak. O yüzden başka bir formül bulana kadar kodları buraya yazıyorum.

int forma ;

Console.WriteLine(“Tek (09 gibi) veya çift haneli bir sayı giriniz : “);
forma = Convert.ToInt32(Console.ReadLine());

switch (forma)
{
case 10:
Console.WriteLine(“Sergen, Alex,Hagi”);
break;
case 09:
Console.WriteLine(“Pascal Nouma, Gianluca Vialli”);
break;
case 11:
Console.WriteLine(“Fabrizio Ravanelli”);
break;
default:
break;
}

Bu kodu Main bloğunuzun içine aynı şekilde yapıştırınız. Yakında görüşmek üzere.

Arkadaşlar, C Sharp dilinde akış kontrol mekanizmaları koşul ifadelerinden If deyimini anlatmaya çalıştım. Lütfen siz de kendiniz örnekler yaparak bu konuda kendinizi geliştirin. Çünkü şimdi diğer koşul ifadesi olan Switch ifadesinden bahsedeceğim.

Aslında Switch ile yapacaklarımızın aynısını If deyimi ile de yapabiliriz. Switch deyimi daha çok kopmleks if ifadelerinin yerine kullanılıyor. Çünkü birazdan göreceğiniz gibi Switch deyimi özellikle okunabilirlik açısından, özellikle iç içe geçmiş if’ten daha temiz görünüyor.

Yani, yazacağınız programlarda if deyimi yerine switch deyimini de kullanabilirsiniz. Bu size kalmış.

Peki bakalım neymiş bu switch deyimi görelim.

Hatırlayacağınız gibi if deyiminde “if” ve “else” anahtar sözcüklerini kullanıyorduk. Ya da akış durumuna göre “else if” şeklinde bir kullanım da söz konusu.

Switch deyiminde ise 4 adet anahtar sözcüğümüz var. Bunlar : “Switch, Case, Break, go to” şeklindedir. Tıpkı if bloğunda olduğu gibi bu anahtar sözcükler ve ifadeler programın akışına göre switch bloğunu şekillendiriyor.

İskelet bir switch bloğu şu şekildedir :

switch (ifade)
{
case sabit1;
deyim1;
break;
case sabit2;
deyim2;
break;
default:
deyim4;
break;
}

Karışık mı geldi? Hayır hiç karışık değil. Çünkü if bloklarımızın sadece farklı bir versiyonu o kadar. Switch bloğunun nasıl çalıştığından bahsedeyim, daha iyi anlayacaksınız.

* switch parantezindeki ifade hesaplanıyor.
* programın akışı, parantezde hesaplanan duruma uygun olan case sabitine geliyor.
* eğe herhangi bir case sağlanamazsa akış, default anahtar sözcüğünün olduğu kısıma geliyor ve eğer başka kodlar varsa programın akışı oradan devam ediyor. Eğer yoksa program default kısmında sonlanıyor.

Peki bu break anahtar sözcüğü ne işe yarıyor madem? Şöyle ki ; eğer akışın geldiği case ifadesi “true” olarak sağlanıyorsa programın akışının oradan çıkmasını ve diğer caselere bakmamasını sağlıyor. Kullanmazsak ne olur? Eğer kullanmazsak bir case’den diğerine bu şekilde bir geçiş yapamayacağımıza dair bir hata alırız ve programımız çalışmaz.

Mesela aşağıdaki kodu alın ve Main bloğunuzun içine aynen kopyalayın. Hatayı göreceksiniz.

int a = 1;

switch (a)
{
case 1:
Console.WriteLine(“Case 1”);

case 2:
Console.WriteLine(“Case 2”);
break;

default:
break;
}

Bazen kontrol etmek istediğimiz çoklu durumlar da olabilir. O zaman iç içe if deyimleri kullanabiliriz.

Buradan o örneklerden birini görebilirsiniz.

Buradaki iç içe if deyimlerinin kullanımı aslında iyi bir örnek değil. Daha doğrusu güzel bir kullanım değil. Ancak sizde araştırıp internet üzerinden başka örneklere bakarsanız, iç içe if kullanımı hakkında daha detaylı bilgi sahibi olabilirsiniz.

Ha bu arada unutmadan. Yukarıda sizinle paylaştığım programcık harcadığınız KW’a göre elektrik faturanızın ne kadar geleceğini hesaplıyor. Kodları biraz karıştırın, içindeki argümanları anlayacaksınız.

Bir sonraki post : Yeni bir akış kontrol mekanizması, yeni bir heyecan 🙂