You are on page 1of 66

T.C.

MLL ETM BAKANLII

BLM TEKNOLOJLER

KONTROL DEYMLER
482BK0124

Ankara, 2011

Bu modl, mesleki ve teknik eitim okul/kurumlarnda uygulanan ereve retim Programlarnda yer alan yeterlikleri kazandrmaya ynelik olarak rencilere rehberlik etmek amacyla hazrlanm bireysel renme materyalidir. Mill Eitim Bakanlnca cretsiz olarak verilmitir. PARA LE SATILMAZ.

NDEKLER
AIKLAMALAR ...........................................................................................................................ii GR ..............................................................................................................................................1 RENME FAALYET1 ...........................................................................................................3 1. KARAR KONTROL DEYMLER............................................................................................3 1.1. If-Else Deyimi .....................................................................................................................3 1.2. -e If fadesi ....................................................................................................................7 1.3. Switch-Case Deyimi ..........................................................................................................12 UYGULAMA FAALYET .....................................................................................................19 LME VE DEERLENDRME ...........................................................................................20 RENME FAALYET2 .........................................................................................................21 2. DNG DEYMLER .............................................................................................................21 2.1. Dng eitleri..................................................................................................................21 2.1.1. For Dngs...............................................................................................................21 2.1.2. While Dngs...........................................................................................................26 2.1.3. DoWhile Dngs..................................................................................................28 2.1.4. Foreach Dngs .......................................................................................................29 2.2. Jump (Dallanma Atlama) Komutlar ..............................................................................30 2.2.1. Break Anahtar Szc..............................................................................................30 2.2.2. Continue Anahtar Szc.........................................................................................32 2.2.3. Goto Anahtar Szc ...............................................................................................33 2.2.4. Return Anahtar Szc ............................................................................................33 UYGULAMA FAALYET .....................................................................................................34 LME VE DEERLENDRME ...........................................................................................35 RENME FAALYET3 .........................................................................................................36 3. DZLER ...................................................................................................................................36 3.1. Dizi Oluturma...................................................................................................................36 3.2. Diziye Deer Girme...........................................................................................................38 3.3. Diziyi Yazdrma.................................................................................................................43 3.4. Baz Dizi zellikleri ve Metotlar .....................................................................................44 3.4.1. Length ........................................................................................................................44 3.4.2. Clear(dizi,baslangic,adet)...........................................................................................45 3.4.3. Reverse(Dizi) .............................................................................................................47 3.4.4. Sort(Dizi) ...................................................................................................................48 3.4.5. IndexOf(Dizi,arananDeger)........................................................................................49 3.5. Dinamik Diziler .................................................................................................................51 3.5.1. Capacity zellii:.......................................................................................................52 3.5.2. Count zellii: ...........................................................................................................52 3.5.3. Add Metodu: ..............................................................................................................52 3.5.4. Insert Metodu: ............................................................................................................53 3.5.5. Remove Metodu:........................................................................................................55 3.5.6. RemoveAt Metodu:....................................................................................................56 3.5.7. Sort Metodu:...............................................................................................................57 UYGULAMA FAALYET .....................................................................................................58 LME VE DEERLENDRME ...........................................................................................59 MODL DEERLENDRME .....................................................................................................60 CEVAP ANAHTARLARI............................................................................................................61 KAYNAKA................................................................................................................................62

AIKLAMALAR
KOD ALAN DAL/MESLEK MODLN ADI MODLN TANIMI SRE N KOUL YETERLK 482BK0124 Biliim Teknolojileri Alan Ortak Kontrol Deyimleri Bu modl programlama altyapsn oluturan kontrol deyimleri kavramlarnn renildii bir renme materyalidir. 40/32 Bu modln n koulu yoktur. Kontrol deyimlerini kullanmak. Genel Ama Bu modl ile gerekli ortam salandnda; temel programlama ilemlerinde kontrol deyimlerini kullanabilecektir. Amalar 1. Karar kontrol deyimlerini kullanabileceksiniz. 2. Dng kontrollerini kullanabileceksiniz. 3. Dizilerle alabileceksiniz. Ortam: Bilgisayar laboratuar Donanm: Bilgisayar, Programlama Yazlm Modl iinde yer alan her renme faaliyetinden sonra verilen lme aralar ile kendinizi deerlendireceksiniz. retmen modl sonunda lme arac (oktan semeli test, doru-yanl testi, boluk doldurma vb.) kullanarak modl uygulamalar ile kazandnz bilgi ve becerileri lerek sizi deerlendirecektir.

MODLN AMACI

ETM RETM ORTAMLARI VE DONANIMLARI

LME VE DEERLENDRME

ii

GR
Sevgili renci, Programlama Temelleri dersinin bu modlnde sizler, programlamann temel yap talarndan Ak Kontrol Deyimleri ile reneceksiniz. Programcla ilk admlarnz bu kontrol deyimleriyle gerekletireceksiniz. Kontrol deyimleri programlarmzn ileyiinde eitli kontrol ve ak ilemlerini gerekletirmenizi salar. Bu modl ile if, switch, for, while, do-while, foreach ve dizi yaplarn renip, her konu sonunda bolca rneklerle konular pekitirmeniz salanacaktr.

RENME FAALYET1 RENME FAALYET1


AMA
Bu modl ile karar kontrol deyimlerini kullanabilecek ve programlarnzda uygulayabileceksiniz.

ARATIRMA
Bu faaliyet ncesinde hazrlk amal aada belirtilen aratrma faaliyetlerini yapmalsnz Gnlk hayatta bir olayn gereklemesi iin nceden istenilen/beklenilen koullara verilebilecek rnekleri dnnz. Evden dar kmadan nce havann durumuna gre zerimize alacamz kyafetlere nasl karar veririz? Aratrnz. Bir kiinin askere gidebilmesi iin gerekli artlar nelerdir? Aratrnz.

1. KARAR KONTROL DEYMLER


Program yazarken baz noktalarda belirli koullar altnda gereklemesini istenilen durumlar olabilir. Bu blmde anlatlan if-else ve switch deyimleri ile bu tr kapsaml programlar gelitirilebilir. Genel anlamda programlama dilinde kullanlan koul yaplar iki eittir. Bunlar; if-else deyimi switch deyimi dir.

1.1. If-Else Deyimi


If deyimi bir programn akn kontrol etmek iin kullanlr. Belirli bir arta gre yaplmas istenilen ilemler, If-Else deyimi kullanlarak gerekletirilir. If-Else deyiminin kullanm ve ak diyagramlar ile gsterimi ise u ekildedir. Kullanm:
if(koul) { Koul doruysa yaplacak ilemler; } else { Koul yanlsa yaplacak ilemler; }

ekil 0.1: If-Else Deyimi Ak Diyagram

Yukardaki diyagramdan da grlecei zere, programn ak If deyiminin olduu satra geldiinde parantezler ierisindeki KOUL ifadesi altrlr. Bu koul ifadesi true (Doru) yada false (Yanl) olmak zere bir deer retmektedir. ayet koulumuz doruysa (true) programmzn ak mavi renkle gsterilen doruysa ksmndan devam edecek ve krmzyla gsterilen yanlsa ksmna uramayacaktr. Eer koulumuz yanlsa (false) bu sefer programmz yanlsa ksmndan krmzyla belirtilen yoldan devam edecektir. Not 1: Eer programmzn aknda sadece koulun doru olmasna bal ilem yaplmas isteniyor, koulun yanl olduu durumlarda ilem yaplmas istenmiyorsa Else blou program ierisinde hi kullanlmaz.

Kullanm:
if(koul) { Koul doruysa yaplacak ilemler; }

Not 2: Eer If veya Elseden sonra sadece bir komut yazlacak ise kme parantezleri ({}) kullanlmayabilir.

Kullanm:
if(koul) Koul doruysa yaplacak ilemler; else Koul yanlsa yaplacak ilemler;

rnek 1-1: Klavyeden ya girilen kiinin ehliyet alp alamayacan belirten program yaznz. Bu rneimizde saylarn karlatrlmasn inceleyelim.
Console.Write("Yanz giriniz: "); int yas = Convert.ToInt32(Console.ReadLine()); if (yas < 18) Console.WriteLine("Yanz 18den kk olduu iin ehliyet alamazsnz"); else Console.WriteLine("Ehliyet alabilecek yatasnz.");

Yukardaki uygulamay aada verilen deerler iin tek tek deneyiniz ve ekran ktlarn yanlarndaki bo ksma yaznz. Girilecek Deerler 16 25 18 17 Ekran kts

Eitlik bakmndan deikenleri karlatrmak iin = = operatrn kullandna, zellikle dikkat edin. Bu ama iin = operatrn kullanmaynz. Tek bir = operatr, deikenleri atamak iin kullanlr. rnek 1-2: nl airimiz Mehmet Akifin soyad nedir? sorusunu kullancya soran cevabn isteyen program yaznz. Bu rneimizde metinsel ifadelerin karlatrlmasn inceleyelim.
Console.Write("nl airimiz Mehmet Akif'in soyad nedir?\nCevabnz :"); string cevap = Console.ReadLine(); if(cevap=="Ersoy") { Console.Write("Tebrikler bu sorumuza doru cevap verdiniz..."); } else { Console.WriteLine("Malesef yanl cevap"); } Console.ReadLine();

Not 3: Baz programlama dilleri byk/kk harf duyarl bir dil olduu iin Ersoy, ersoy veya ERSOY cevaplarndan yalnzca Ersoy cevabn kabul edecektir.

If koul deyimlerde zaman zaman birden fazla koula bal bir takm ilemler yapmamz gerekebilir.

Kullanm:
VE ( && ) balac ile
if((koul1) && (koul2)) { koul1 ve koul2 doruysa yaplacak ilemler; } else { koullardan en az birisi veya her ikisi de yanl ise yaplacak ilemler; }

VEYA ( || ) balac ile


if((koul1) || (koul2)) { koul1 veya koul2den en az birisi veya her ikisi de doruysa yaplacak ilemler; } else { koullardan her ikisi de yanl ise yaplacak ilemler; }

rnek 1-3: Klavyeden girilen saynn hem 3e hem de 5e kalansz blnp blnemediini ekrana yazan program yaznz.
Console.Write("Bir say giriniz:"); int sayi = Convert.ToInt32(Console.ReadLine()); if((sayi % 3 == 0) && (sayi % 5 ==0)) Console.WriteLine("{0} says hem 3'e hem de 5'e kalansz blnebilir",sayi); else Console.WriteLine("{0} says hem 3'e hem de 5'e kalansz blnemez", sayi);

Yukardaki uygulamay aada verilen deerler iin tek tek deneyiniz ve ekran ktlarn yanlarndaki bo ksma yaznz. Girilecek Deerler 150 38 64 90 Ekran kts

rnek 1-4: Klavyeden girilen cinsiyet ve ya bilgilerine gre, kiinin askere gidip gidemeyeceini yazan program yaznz.
char cinsiyet; int yas; Console.Write("Ltfen cinsiyetinizi giriniz (E/K):"); cinsiyet=Convert.ToChar(Console.ReadLine()); Console.Write("Ltfen yanz giriniz:"); yas =Console.Read(); if (((cinsiyet == 'E') || (cinsiyet=='e')) && (yas >= 20)) { Console.WriteLine("Askere Gidebilir"); } else { Console.WriteLine("Askere Gidemez"); }

Yukardaki uygulamay aada verilen deerler iin tek tek deneyiniz ve ekran ktlarn yanlarndaki bo ksma yaznz. Girilecek Deerler Cinsiyet Ya E 18 K 21 E 23 K 19 Ekran kts

1.2. -e If fadesi
Birden fazla koula ihtiya duyulan durumlarda i-ie If ifadeleri kullanlrlar. Bir if kouluna ka tane else if ekleyebileceiniz konusunda hibir snr yoktur. -ie If ifadelerinin kullanm ise u ekildedir.

Kullanm:
if(koul1) { koul1 doruysa yaplacak ilemler; } else if(koul2) { koul1 yanlsa ve koul2 doruysa yaplacak ilemler; } else { her iki koul da yanlsa yaplacak ilemler; }

Dilerseniz i-ie If ifadelerini birka rnekle aklamaya alalm. rnek 1-5: Klavyeden girilen iki sayy karlatran program yaznz.
int sayi1, sayi2; Console.Write("1. sayy giriniz: "); sayi1 = Convert.ToInt32(Console.ReadLine()); Console.Write("2. sayy giriniz: "); sayi2 = Convert.ToInt32(Console.ReadLine()); if(sayi1>sayi2) Console.Write("{0} says {1} saysndan byktr.",sayi1,sayi2); else if(sayi1<sayi2) Console.Write("{0} says {1} saysndan byktr.", sayi2, sayi1); else Console.Write("{0} says ile {1} says birbirine eittir.", sayi1, sayi2);

Yukardaki uygulamay aada verilen deerler iin tek tek deneyiniz ve ekran ktlarn yanlarndaki bo ksma yaznz. Girilecek Deerler sayi1 sayi2 12 17 43 43 98 21 -106 106 -66 -16 Ekran kts

rnek 1-6: Klavyeden girilen puann 5lik sistemdeki not karln yazan program yaznz.
Console.Write("Puannz giriniz (0-100):"); int puan = Convert.ToInt32(Console.ReadLine()); if (puan >= 0 && puan < 25) Console.WriteLine("Puannzn 5'lik sistemdeki 0'dr"); else if (puan >= 25 && puan < 45) Console.WriteLine("Puannzn 5'lik sistemdeki 1'dir"); else if (puan >= 45 && puan < 55) Console.WriteLine("Puannzn 5'lik sistemdeki 2'dir"); else if (puan >= 55 && puan < 70) Console.WriteLine("Puannzn 5'lik sistemdeki 3'tr"); else if (puan >= 70 && puan < 85)

karl

karl

karl

karl

Console.WriteLine("Puannzn 5'lik sistemdeki karl 4'tr"); else if (puan >= 85 && puan <= 100) Console.WriteLine("Puannzn 5'lik sistemdeki karl 5'tir"); else Console.WriteLine("Hatal puan girdiniz. Puannz 0 ile 100 arasnda olmaldr.");

Yukardaki uygulamay aada verilen deerler iin tek tek deneyiniz ve ekran ktlarn yanlarndaki bo ksma yaznz. Girilecek Deerler 86 69 43 77 14 52 Ekran kts

-ie If ifadelerinin bir baka kullanm da u ekildedir. rnein bir koulun salanmas durumunda baka koullara gre ilem yaplmas istenilen durumlarda yine i-ie If ifadeleri kullanlrlar. Bu durumdaki i-ie If ifadelerinin kullanmlar ve ak diyagramlaryla gsterimi u ekildedir;

Kullanm:
if(koul1) { if(koul2) { koul2 doruysa yaplacak ilemler; } else { koul2 yanlsa yaplacak ilemler; } } else { koul1 yanlsa yaplacak ilemler; }

ekil 0-2. -ie If fadesi

rnek 1-7: Daha nceden belirlenen kullanc ad ve ifreyi kontrol eden program yaznz.
string kullaniciAdi, sifre; Console.Write("Ltfen kullanc adnz giriniz:"); kullaniciAdi = Console.ReadLine(); if (kullaniciAdi == "Admin" || kullaniciAdi=="ADMN" || kullaniciAdi=="admin") { Console.Write("Ltfen ifrenizi giriniz:"); sifre = Console.ReadLine(); if (sifre == "123rty") Console.WriteLine("Tebrikler Kullanc ve ifreniz Doru"); else Console.WriteLine("ifrenizi Hatal Girdiniz"); } else Console.WriteLine("Kullanc Adnz Hatal Girdiniz");

10

Yukardaki uygulamay aada verilen deerler iin tek tek deneyiniz ve ekran ktlarn yanlarndaki bo ksma yaznz. Girilecek Deerler Kullanc Ad ifre Admin 123RTY Ynetici 123rty Admin 123rty admin 123rty ADMN 123rty Ekran kts

!!! Uyar: Yukardaki rnekte ifre 123rty eklinde verilmitir. rnek 1-8: Basit bir hesap makinesi yapm.
byte secim; double sayi1,sayi2,sonuc; Console.WriteLine("1.TOPLAMA"); Console.WriteLine("2.IKARMA"); Console.WriteLine("3.ARPMA"); Console.WriteLine("4.BLME"); Console.WriteLine("-------"); Console.Write("lem tipinizi seiniz (1-4):"); secim = Convert.ToByte(Console.ReadLine()); if (secim == 1) { Console.Clear(); Console.WriteLine("********************************"); Console.WriteLine("* Seilen ilem TOPLAMA ilemi *"); Console.WriteLine("********************************"); Console.Write("1.Sayy giriniz:"); sayi1 = Convert.ToDouble(Console.ReadLine()); Console.Write("2.Sayy giriniz:"); sayi2 = Convert.ToDouble(Console.ReadLine()); sonuc = sayi1 + sayi2; Console.Write("Sonu={0}", sonuc); } else if (secim == 2) { Console.Clear(); Console.WriteLine("********************************"); Console.WriteLine("* Seilen ilem IKARMA ilemi *"); Console.WriteLine("********************************"); Console.Write("1.Sayy giriniz:"); sayi1 = Convert.ToDouble(Console.ReadLine()); Console.Write("2.Sayy giriniz:"); sayi2 = Convert.ToDouble(Console.ReadLine()); sonuc = sayi1 - sayi2; Console.Write("Sonu={0}", sonuc);

11

} else if (secim == 3) { Console.Clear(); Console.WriteLine("********************************"); Console.WriteLine("* Seilen ilem ARPMA ilemi *"); Console.WriteLine("********************************"); Console.Write("1.Sayy giriniz:"); sayi1 = Convert.ToDouble(Console.ReadLine()); Console.Write("2.Sayy giriniz:"); sayi2 = Convert.ToDouble(Console.ReadLine()); sonuc = sayi1 * sayi2; Console.Write("Sonu={0}", sonuc); } else if (secim == 4) { Console.Clear(); Console.WriteLine("********************************"); Console.WriteLine("* Seilen ilem IKARMA ilemi *"); Console.WriteLine("********************************"); Console.Write("1.Sayy giriniz:"); sayi1 = Convert.ToDouble(Console.ReadLine()); Console.Write("2.Sayy giriniz:"); sayi2 = Convert.ToDouble(Console.ReadLine()); if (sayi2 != 0) { sonuc = sayi1 / sayi2; Console.Write("Sonu={0}", sonuc); } else Console.WriteLine("!!! SIFIRA BLME HATASI !!!"); }

1.3. Switch-Case Deyimi


Switch-Case deyimi de If-Else deyimleri gibi karar kontrol mekanizmalarnda kullanlmaktadr. Switch-Case deyimi genellikle karmak if-else bloklarnn yerine, daha okunabilir olduklar iin tercih edilmektedir. Switch-Case ile yapabileceimiz karlatrmalar if-else ile de yapabiliriz. Switch-Case yaps u ekilde alr; bir deyimin deeri, sabitlerden oluan bir listede pe pee test edilir. Deyimin deeri sabitlerden birisiyle eleince, bu elemeyle ilgili ilemler gerekletirilir. Switch-Case ifadesinin genel formu u ekildedir;

12

Kullanm:
switch(ifade) { case sabit1: Yaplacak break; case sabit2: Yaplacak break; case sabit3: Yaplacak break; . . . default: Yaplacak break; }

ilemler;

ilemler;

ilemler;

ilemler;

Switch-Case yapsnn almasna bir gz atalm; nce switch parantezleri ierisindeki ifade hesaplanr. Programn ak, hesaplanan ifade ile ayn case sabitinin bulunduu satra gelir. Eer hesaplanan ifade, mevcut case sabitlerinden herhangi birisi ile elemiyorsa default anahtar szcnn bulunduu yere gelir ve program buradan devam eder.

Her case satr ierisindeki ilemlerimiz tamamlandktan sonra, ilgili case satrnn sonuna geldiimizi belirtmek iin break komutu kullanlr. Eer aadaki rnekteki gibi break komutu kullanlmazsa, Control cannot fall through from one case label (case 1:) to another yani Bir case etiketinden (case1:) baka bir case etiketine geilemez hatasn alrz.
switch(ifade) { case 1: Yaplacak case 2: Yaplacak break; case 3: Yaplacak break; default: Yaplacak break; }

ilemler; ilemler;

ilemler;

ilemler;

13

Switch-case yapsnda case durumlarn srasnn sorun olmamaktadr. default durumunu bile ilk sraya koyabilirsiniz. Sonu olarak, iki durum ayn olamayaca iin ilgili case yapsna gelindiinde o satrn almas salanacaktr.
switch(ifade) { default: Yaplacak break; case 3: Yaplacak break; case 1: Yaplacak break; case 2: Yaplacak break; }

ilemler;

ilemler;

ilemler;

ilemler;

Switch-Case Yaps le lgili nemli Kurallar: Case anahtar szcnn yanndaki ifadeler sabit olmak zorundadrlar. Bu ifadeler ierisinde deiken bulunamaz. Case ifadeleri herhangi bir tam say sabiti, karakter veya string sabiti olabilir. Default durumunu istediimiz yere yazabiliriz. Ayn ekilde case ifadelerini de istediimiz srada yazabiliriz. Bir switch blounda iki veya daha fazla sayda ayn deere sahip case ifadesi bulunamaz. Bir switch blounda default case olmak zorunda deildir. Ak herhangi bir case ifadesine geldiinde, ak farkl bir case ifadesine ynlendirilmek istenirse goto anahtar szc kullanlr.

rnek 1-9: Klavyeden girilen 1-12 arasndaki say deerine gre o sradaki ayn ismini veren program yaznz
byte ay; Console.Write("1-12 arasnda bir say giriniz:"); ay = Convert.ToByte(Console.ReadLine()); switch (ay) { case 1: Console.WriteLine("{0}.ay OCAK aydr.", ay); break; case 2: Console.WriteLine("{0}.ay UBAT aydr.", ay); break; case 3: Console.WriteLine("{0}.ay MART aydr.", ay); break; case 4:

14

Console.WriteLine("{0}.ay break; case 5: Console.WriteLine("{0}.ay break; case 6: Console.WriteLine("{0}.ay break; case 7: Console.WriteLine("{0}.ay break; case 8: Console.WriteLine("{0}.ay break; case 9: Console.WriteLine("{0}.ay break; case 10: Console.WriteLine("{0}.ay break; case 11: Console.WriteLine("{0}.ay break; case 12: Console.WriteLine("{0}.ay break; default: Console.WriteLine("Girmi deildir."); break; }

NSAN aydr.", ay);

MAYIS aydr.", ay);

HAZRAN aydr.", ay);

TEMMUZ aydr.", ay);

AUSTOS aydr.", ay);

EYLL aydr.", ay);

EKM aydr.", ay);

KASIM aydr.", ay);

ARALIK aydr.", ay);

olduunuz deer 1-12 arasnda

rnek 1-10: Klavyeden girilen deer ile seimi yaplan eklin alann veya evresini bulan program yaznz
string sekil,secim; int kenar1, kenar2; Console.WriteLine("1.KARE--------->(kare)"); Console.WriteLine("2.DKDRTGEN--->(dikdrtgen)"); Console.WriteLine("---------------"); Console.Write("Ltfen eklin ismini yaznz:"); sekil = Console.ReadLine(); switch (sekil) { case "kare": Console.WriteLine(" # ALAN--------->(alan)"); Console.WriteLine(" # EVRE-------->(evre)"); Console.WriteLine("------------------------"); Console.Write("Ltfen seiminizi yaznz:"); secim = Console.ReadLine(); switch (secim) { case "alan":

15

Console.Write("Karenin bir kenar uzunluunu giriniz:"); kenar1 =Convert.ToInt32(Console.ReadLine()); Console.Write("Karenin alan={0}",kenar1*kenar1); break; case "evre": Console.Write("Karenin bir kenar uzunluunu giriniz:"); kenar1 =Convert.ToInt32(Console.ReadLine()); Console.Write("Karenin evresi={0}", kenar1 * 4); break; default: Console.Write("Geerli bir seim yapmadnz..."); break; } break; case "dikdrtgen": Console.WriteLine(" # ALAN--------->(alan)"); Console.WriteLine(" # EVRE-------->(evre)"); Console.WriteLine("------------------------"); Console.Write("Ltfen seiminizi yaznz:"); secim = Console.ReadLine(); switch (secim) { case "alan": Console.Write("Dikdrtgenin bir kenar uzunluunu giriniz:"); kenar1 = Convert.ToInt32(Console.ReadLine()); Console.Write("Dikdrtgenin dier kenar uzunluunu giriniz:"); kenar2 = Convert.ToInt32(Console.ReadLine()); Console.Write("Dikdrtgenin alan={0}", kenar1 * kenar2); break; case "evre": Console.Write("Dikdrtgenin bir kenar uzunluunu giriniz:"); kenar1 = Convert.ToInt32(Console.ReadLine()); Console.Write("Dikdrtgenin dier kenar uzunluunu giriniz:"); kenar2 = Convert.ToInt32(Console.ReadLine()); Console.Write("Karenin evresi={0}", (kenar1+kenar2) * 2); break; default: Console.Write("Geerli bir seim yapmadnz..."); break; } break; default: Console.WriteLine("Geerli bir seim yapmadnz..."); break; }

16

rnek 1-11: Bir nceki konuda rnek-1-8de IF-ELSE ile yaptmz basit hesap makinesi programn Switch-Case ile biraz deitirerek tekrar yapalm.
char secim; double sonuc; int sayi1, sayi2; Console.WriteLine("1.TOPLAMA--->T"); Console.WriteLine("2.IKARMA--->C"); Console.WriteLine("3.ARPMA --->R"); Console.WriteLine("4.BLME --->B "); Console.WriteLine("---------------"); Console.Write("lem tipinizi seiniz (T-C-R-B):"); secim = Convert.ToChar(Console.ReadLine()); switch(secim){ case T: Console.Clear(); Console.WriteLine("********************************"); Console.WriteLine("* Seilen ilem TOPLAMA ilemi *"); Console.WriteLine("********************************"); Console.Write("1.Sayy giriniz:"); sayi1 = Convert.ToInt32(Console.ReadLine()); Console.Write("2.Sayy giriniz:"); sayi2 = Convert.ToInt32(Console.ReadLine()); sonuc = sayi1 + sayi2; Console.Write("Sonu={0}", sonuc); break; case C: Console.Clear(); Console.WriteLine("********************************"); Console.WriteLine("* Seilen ilem IKARMA ilemi *"); Console.WriteLine("********************************"); Console.Write("1.Sayy giriniz:"); sayi1 = Convert.ToInt32(Console.ReadLine()); Console.Write("2.Sayy giriniz:"); sayi2 = Convert.ToInt32(Console.ReadLine()); sonuc = sayi1 - sayi2; Console.Write("Sonu={0}", sonuc); break; case R: Console.Clear(); Console.WriteLine("********************************"); Console.WriteLine("* Seilen ilem ARPMA ilemi *"); Console.WriteLine("********************************"); Console.Write("1.Sayy giriniz:"); sayi1 = Convert.ToInt32(Console.ReadLine()); Console.Write("2.Sayy giriniz:"); sayi2 = Convert.ToInt32(Console.ReadLine()); sonuc = sayi1 * sayi2; Console.Write("Sonu={0}", sonuc); break; case B:

17

Console.Clear(); Console.WriteLine("********************************"); Console.WriteLine("* Seilen ilem IKARMA ilemi *"); Console.WriteLine("********************************"); Console.Write("1.Sayy giriniz:"); sayi1 = Convert.ToInt32(Console.ReadLine()); Console.Write("2.Sayy giriniz:"); sayi2 = Convert.ToInt32(Console.ReadLine()); switch (sayi2) { default: sonuc = sayi1 / sayi2; Console.Write("Sonu={0}", sonuc); break; case 0: Console.WriteLine("!!! SIFIRA BLME HATASI !!!"); break; } break; default: Console.WriteLine("T-C-R-B den farkl bir deer girdiniz..."); break; }

Not: Yukardaki baz satrlar alta kaymtr, program yazarken kayan satrlarn tek satrda olmasna dikkat ediniz.

18

UYGULAMA FAALYET UYGULAMA FAALYET


lem Basamaklar
Klavyeden girilen saylarn tek mi ift mi olduunu bulan program yaznz. Klavyeden girilen iki metinden uzun olann ekrana yazdran program yaznz. Havann Gneli, Yamurlu ve Kar Yal olmas durumlarna gre, kiinin Gmlek, Hrka veya Kazak giymesi hususunda uyar mesajn Switch-Case kullanarak ekrana yazdrnz. Klavyeden girilen 3 saynn karlatrmasn yapp, en byk ve en kk saylar ekrana yazdran program yaznz. Klavyeden girilen rakam yazyla ekrana yazdran program Switch-Case kullanarak yaznz. Bir iyerinde alan iilerin maalarna uygulanan kesinti miktarlar karldktan sonra ellerine geecek olan net maalarn hesaplayan program yaznz. Kesinti miktarlar u ekilde olacaktr. Kiinin maa; 1.000-2.500 TL arasndaysa 384 TL kesinti 2.501-4.000 TL arasndaysa 567 TL kesinti 4.000 TL ve zeri ise 863 TL kesinti yaplacaktr.

neriler
Bir saynn 2ye blmnden kalan sfr(0) ise say ifttir. Mod alma (%) ilemi kullannz. Metinsel ifadelerin uzunluklar .length zelliiyle bulunur. Girilen metinlerin tek tek uzunluklarn bulup karlatrnz. rnek: Hava yamurluysa; Bugn hava yamurlu, hrka giymelisin. Havann her durumu iin bir case yaps oluturup, kontrol salaynz. rnek 1-5ten faydalanabilirsiniz.

Her bir rakam iin tek tek case yaps oluturup, kontrol salaynz. rnek 1-6da ki gibi birden fazla koullu durumlara dikkat ediniz.

19

LME VE DEERLENDRME LME VE DEERLENDRME


Bu faaliyet kapsamnda kazandnz bilgileri, aadaki sorular cevaplayarak belirleyiniz. 1. Aadakilerden hangisi byktr ya da eittir manasna gelen karlatrma operatrleridir? A) <= B) != C) => D) >= Aada verilen bilgilerden hangisi yanltr? A) break komutu ierisinde bulunduu case satrn sonlandrmak iin kullanlr. B) default blou bir Switch-Case yapsnda bulunmasa da olur. C) Bir Switch -Case yapsnda birden fazka ayn deere sahip Case ifadesi olabilir. D) Ak farkl bir case ifadesine ynlendirilmek istenirse goto anahtar szc kullanlr. if(sayi1>0) || (sayi1<5) ifadesindeki koul aadakilerden hangisidir? A) sayi1 byktr sfrdan ve sayi1 byktr 5ten. B) sayi1 byktr sfrdan ve sayi1 kktr 5ten. C) sayi1 byktr sfrdan veya sayi1 byktr 5ten. D) sayi1 byktr sfrdan veya sayi1 kktr 5ten. Case blounu sonlandrmak iin kullanlan anahtar kelime aadakilerden hangisidir? A) break B) default C) goto D) return Aada verilen for dngs tanmlamalarndan hangisinde dng sonsuz bir dngye girer? A) for(int i=0;i<100;i++) B) for(int i=0;i<100;i--) C) for(int i=100;i>0;i--) D) for(int i=0;i<=100;i=i+5)

2.

3.

4.

5.

DEERLENDRME
Cevaplarnz cevap anahtaryla karlatrnz. Yanl cevap verdiiniz ya da cevap verirken tereddt ettiiniz sorularla ilgili konular faaliyete geri dnerek tekrarlaynz. Cevaplarnzn tm doru ise bir sonraki renme faaliyetine geiniz.

20

RENME FAALYET2 RENME FAALYET2


AMA
Bu modl ile uygulayabileceksiniz. dng kontrollerini kullanabilecek ve programlarnzda

ARATIRMA
Bu faaliyet ncesinde hazrlk amal aada belirtilen aratrma faaliyetlerini yapmalsnz Gnmzde kullandmz saya eitlerini ve alma prensiplerini aratrnz. Bir bilgisayar program vastasyla ayn ilemi defalarca tekrar etmek yerine tek bir seferde nasl gerekletiririz? Aratrnz.

2. DNG DEYMLER
Dngler bir program ierisinde belirli ilerin defalarca yaplmasn salayan komut bloklardr. Sonsuz dngler yaplabildii gibi belirli kriterler salanana kadar devam eden dngler de yaplabilir. 4 tip dng vardr. Bunlar: for dngleri while dngleri do while dngleri foreach dngleri dir.

2.1. Dng eitleri


2.1.1. For Dngs
Belirlenen balang deerinden itibaren belirtilen koul salanana kadar iine yazld kod parasn ard ardna altran bir dng eididir. For dngsnn kullanm u ekildedir;

Kullanm:
for(balang;koul;artm) { yaplacak iler; }

21

Balang, dng kontrol deikeni olarak da ifade edilebilir. Dng ierisinde bir

saya grevini grr. Koul, dngnn ne kadar alacan denetleyen mekanizmadr. Koul salanyorken dng almaya devam eder. Koul salanmadnda ise dng durur. Koulda genellikle balang deerinin durumu denetlenir. Artm, balang deerinin dngnn her admda artma ya da azaltma miktarn belirler. Eer balang deeri hi deimez ise sonsuz dng oluur. Ak diyagramlaryla for dngsnn gsterimi de u ekildedir.

Resim 0-1. For Dngs Ak Diyagram

imdi basit bir rnekle for dngsnn almasn inceleyelim. rnek 2-1: 1den 10a kadar olan saylar ekrana yazdrnz.
byte i; for(i=1;i<=10;i++) { Console.WriteLine(i); }

Yukardaki kodu incelediimizde; Dng kontrol deikenimiz olan iye 1 deerini atayarak balang deerimizi, Dngmzn ne zamana kadar dneceini belirlediimiz koulumuzu i<=10 ifadesini, i++ ile de i deerimizi dngmzn her dnnde 1 arttracamz belirliyoruz.

22

Dng her seferinde koul ksmn kontrol eder ve buradaki koul false(yanl) olana kadar kme parantezleri ( { } ) ile snrlandrlan kod blounu altrmaya devam edecektir. Kod paramz altrdmzda aadaki gibi bir ekran kts alabiliriz.

Resim 0-2. rnek 2-1'in Ekran kts

For terimiyle dng kurarken balang deerimiz herhangi bir tam say olabilecei gibi char trnde bir deikende olabilir. rnek 2-2: dden rye kadar olan harfleri ekrana yazdrnz.
char i; for (i ='d'; i <= 'r'; i++) { Console.WriteLine(i); }

Yukardaki kodlar altrdmzda da aadaki gibi bir ekran ktsyla karlarz.

Resim 0-3. rnek 2-2'nin Ekran kts

For dngsyle sonsuz bir dng oluturulmak istenirse u ekilde kodlanmas gerekir;

23

for(;;) { //....... }

Uyar: Bu ekilde bir sonsuz dngy bilgisayarnzda altrdnz zaman uygulamanz sonsuza kadar devam eder.

For dngleri ileriye doru sayabildii gibi geriye dnk sayma ilemlerinde de kullanlrlar. rnek 2-3: 10dan 0a geriye doru sayan ve saylar ekrana yazdran program yazdrnz.
int i; for (i=10;i>=0;i--) Console.WriteLine(i);

Yukardaki kodlar altrdmz zaman aadaki gibi bir ekran ktsyla karlarz.

Resim 0-4. rnek 2-3'n Ekran kts

For dngs ierisinde birden fazla dng kontrol deiken kullanma ansna da sahibiz. rnek 2-4: i=0dan balayacak ve j=10dan balayacak olan iki deikendir. i ve j birbirine eit olana kadar iki deikenin durumlarn ekrana yazdran program yaznz.
int i,j; for (i = 0, j = 10; i <= j; i++, j-- ) Console.WriteLine("i'nin "+i+" deeri iin j="+j);

24

Yukardaki kodlar altrdmz zaman aadaki gibi bir ekran ktsyla karlarz.

Resim 0-5. rnek 2-4'n ekran kts

rnek 2-5: 0dan klavyeden girilen sayya kadar olan saylarn toplamn ekrana yazdran program yaznz.
int bitis,i,toplam; Console.Write("Bir say giriniz:"); bitis = Convert.ToInt32(Console.ReadLine()); toplam = 0; for (i = 0; i <= bitis; i++) { toplam = toplam + i; } Console.WriteLine("Toplam={0}", toplam );

Yukardaki uygulamay aada verilen deerler iin tek tek deneyiniz ve ekran ktlarn yanlarndaki bo ksma yaznz. Girilecek Deerler 15 50 Ekran kts

imdiye kadar grdmz rneklerde for dngsn hep tek bana kullandk. Ayn koul kontrol mekanizmalarnda olduu gibi dngler de i-ie kullanlabilirler. -ie kullanlacak dng saylarnda herhangi bir kstlama sz konusu deildir. stediimiz kadar sayda dngy i-ie kullanabiliriz Sradaki rneklerimizde de i ie for dngs nasl kullanlr buna gz atalm.

25

rnek 2-6: Aadaki ekran ktsn verecek programn kodunu yaznz.

Resim 0-6. rnek 2-6 Yldz Sorusu string yildiz = ""; for (int i = 1; i <= 5; i++) { for (int k = 0; k <= 5-i;k++ ) yildiz = yildiz + "*"; Console.WriteLine(yildiz); yildiz = ""; }

rnek 2-7: 1den 10a kadar olan saylar iin arpm tablosunu ekrana yazdran program yaznz.
int i,k; for (i = 1; i <=10; i++) { Console.WriteLine("-{0} ve Katlar-",i); Console.WriteLine("----------------"); for (k = 1; k <= 10; k++) { int carpim = i * k; Console.WriteLine("{0} x {1} = {2}", i, k, carpim); } Console.WriteLine("----------------"); }

2.1.2. While Dngs


While dngs bir koul salanyorken dnmeye devam eder. Koul yanl ( false ) sonucunu verdii zaman ise sonlandrlr. Genel yazm ekli yledir. Kullanm:
while(koul) { yaplacak iler; }

26

rnek 2-8: 0dan 20ye kadar olan ift saylar ekrana yazdrnz.
int i=0; while (i <= 20) { Console.WriteLine(i); i = i + 2; }

Kod paramz altrdmzda aadaki gibi bir ekran kts alabiliriz.

Resim 0-7. rnek 2-8'in Ekran kts

rnek 2-9: Bilgisayara rastgele rettirdiimiz bir sayy 5 hakta tahmin etmeye alan bir bilgisayar program yaznz.
int hak = 5; Random rnd = new Random(); int tutulan = rnd.Next(1, 50); int sayi=0; while (hak>0) { Console.Write("Bir say giriniz: "); sayi = Convert.ToInt32(Console.ReadLine()); hak = hak - 1; if (sayi == tutulan) { Console.WriteLine("Tebrikler sayy doru tahmin ettiniz"); break; } else { if (sayi > tutulan) Console.WriteLine("Aa"); else Console.WriteLine("Yukar"); } Console.WriteLine("Kalan tahmin hakknz:{0}", hak); } if(hak==0) Console.WriteLine("Tahmin hakknz bitti. Saymz:{0}",tutulan);

27

Yukardaki programda karmza kan Random komutu bize belirtilen bir aralkta rastgele say retmemizi salayan bir komuttur. Programmzda bizler 1-50 arasnda bir say retmesini saladk. Bir dier dikkat etmemiz gereken komutumuz da break komutudur. Ayn bir nceki renme faaliyetinde grdmz select-case yapsndaki gibi sonlandrma iine yarayan break komutunun While dngleriyle birlikte kullanm olduka yaygndr. Dnglerden istenilen koulun salanmasn beklemeden kmak iin kullanlr.

2.1.3. DoWhile Dngs


For ve while dnglerinde dng bloklarnn koul salanmad takdirde hi altrlmama ihtimali vardr. Ancak dngnn en az bir kere altrlmas istenilen durumlarda do-while dngleri kullanlrlar. Do-While dnglerinde koul dng ierisindeki ilemler bir kez gerekletirildikten sonra kontrol edilir. Koul doru olduu mddete de dng ierisindeki ilemler tekrarlanmay srdrr. Genel yazm ekli yledir.

Kullanm:
do { yaplacak iler; } while(koul);

rnek 2-10: 1den 20ye kadar olan tek saylar ekrana yazdrnz.
int i=1; do{ Console.WriteLine(i); i = i + 2; } while (i < 20);

Yukardaki rnek kod incelendiinde koulun do-while dngsnn en sonunda kontrol edildiini grebilirsiniz. Kod paramz altrdmzda aadaki gibi bir ekran kts alabiliriz.

28

Resim 0-8. rnek 2-10'un Ekran kts

2.1.4. Foreach Dngs


foreach, dizi (Array) ve koleksiyon ( collection ) tabanl nesnelerin elemanlar zerinden ilerleyen bir dngdr. Genel kullanm ekli yledir; Kullanm:
foreach(tip deiken in koleksiyon) { yaplacak iler; }

Tip: buradaki tip koleksiyonun veri tipi ile ayn veya uyumlu olmak

zorundadr. Deiken: foreach dngs ierisinde koleksiyonda bulunan sradaki eleman temsil eder. Koleksiyon: ArrayList ya da dizi gibi ayn tip verileri barndran koleksiyon.

Uyar: Bir sonraki renme faaliyeti olan Diziler konusunda foreach dngsnn kullanmna ynelik daha fazla rnek gsterilecektir. Sadece n bilgi amacyla aadaki rnei inceleyiniz. rnek 2-11: Gunler isimli dizi ierisindeki elemanlar ekrana yazdran program yaznz.
string[] gunler=new string[7]; gunler[0]="Pazartesi"; gunler[1]="Sal"; gunler[2]="aramba"; gunler[3]="Perembe"; gunler[4]="Cuma"; gunler[5]="Cumartesi"; gunler[6]="Pazar"; foreach (string gun in gunler) { Console.WriteLine(gun); }

Bu ksmda dizinin tanmlanmas ve ieriine deer atama ilemi gerekletirilmektedir.

29

Burada, foreach, dizi boyunca her seferinde bir eleman admlar. Dizinin her bir elemannn deerini gun adndaki string deikenine aktarr ve daha sonra dngy balatr. Foreach dngs ile ilgili dikkat edilmesi gereken bir nemli nokta ise, koleksiyondaki elemann (rnek 2-11deki gun) deerini deitirememenizdir, aksi takdirde kodunuz derlenmeyecektir:
foreach (string gun in gunler) { gun= gun+ gn; Console.WriteLine(gun); }

Yukardaki kullanm hatal bir kullanmdr ve program derlenmeyecektir. Eer bir koleksiyondaki elemanlar araclyla dngy balatmaya ihtiya duyulursa ve onlarn deerleri deitirilecekse, foreach dngs yerine bir for dngs kullanmna ihtiya duyulacaktr.

2.2. Jump (Dallanma Atlama) Komutlar


Programn ak esnasnda baka satrlara atlama ilemi gerekletiren bir takm anahtar szckler vardr. Bunlar; break, continue, goto, return anahtar szckleridir.

2.2.1. Break Anahtar Szc


Break anahtar szc dnglerden kmak iin kullanlr. Dnglerde, break anahtar szcne rastland anda dngden klr ve program dng bloundan sonraki ilk deyimle akna devam eder. Break anahtar szc dng bloklarnn ya da switch bloklarnn dnda kullanlamazlar. rnek 2-12: A harfinden balayp Zye kadar devam eden bir dng de K harfine gelindiinde dngden kan programn kodunu yaznz.
for (char i = 'A'; i <= 'Z'; i++) { if (i == 'K') break; Console.WriteLine(i); Console.WriteLine("Dngye devam ediliyor..."); } Console.WriteLine("Dngden kld...");

30

Yukardaki rnek incelendiinde dngmz A harfinden balayarak teker teker harfleri yazmaktayken K harfine geldikten sonra break komutuyla karlar. Bu komutu gren program o anda ierisinde bulunduu dngy sonlandrr ve programn akna kald yerden devam eder. Aadaki Resim 2-11den de grlecei zere programmzdaki dngde i deeri K ya eritiinde dng sonlandrlp, programn kald yerden devam etmesi salanyor.

Resim 0-9. rnek 2-12'nin Ekran kts

rnek 2-13: 0dan 100e kadar saylardan asal olanlar ekrana yazdran programn kodunu yaznz.
for(int i=1; i < 100; i++){ bool asalMi = true; //Saynn asal olup olmad kontrol ediliyor for(int j=2; j < i; j++) { if(i % j == 0){ asalMi = false; break; } } // asal olan saylar ekrana yazdrlyor if(asalMi) Console.Write(i + " "); }

Yukardaki rnekte de break komutu if bloundan kmak iin kullanlmtr.

31

Kodlar altrdmzda karmza aadaki gibi bir ekran kts gelir.

Resim 0-10 rnek 2-13'n Ekran kts

2.2.2. Continue Anahtar Szc


Continue ifadesi, break ifadesine benzerdir ve bir for, foreach, while ya da do...while dngs iinde de kullanlabilir. Ancak, dngnn dna kmak yerine mevcut dngden karak bir sonraki dngye geii salayacaktr. imdiki rneimizde continue anahtar szcnn kullanmn inceleyelim. rnek 2-14: Continue anahtar szcnn kullanm.
int i = 1; int k = 1; while (i < 10) { Console.WriteLine("i:{0} iken k:{1}",i,k); i++; continue; k++; }

Yukardaki kod parasn incelediimizde dngmzn koulu, inin 10dan kk olan deerleri salanmas durumunda TRUE deerini almasdr. i ve k deikenlerimizin deerleri dngmz ierisinde i++ ve k++ ifadeleriyle arttrlmaktadr. Lakin programmzn ekran ktsn (Resim 2-11) incelediimizde yalnzca i deikeninin deerinin arttrldn grmekteyiz. Sebebi ise k deikeninin deerinin continue anahtar szcnden sonra arttrlmasdr. Program continue anahtar szcn grnce o satrdan tekrar dngnn bana dner ve bylece k deikeninin deeri deitirilemez.

Resim 0-11. rnek 2-14'n Ekran kts

32

2.2.3. Goto Anahtar Szc


Goto anahtar szc, koulsuz atlama komutudur. Programn ak esnasnda goto anahtar szcyle karlald anda program goto ile belirlenen etiketin bulunduu satra atlama ilemi gerekletirir. Goto anahtar szcnn kullanm nesne ynelimli programlama tekniinde pek uygun grlmese de baz durumlarda (rnein switch deyiminde case ifadeleri arasnda dolama) gerekebilir.

Uyar: Goto anahtar szc ile bir dng ve koul blou ierisine dallanma ilemi gerekletirilemez.

Sradaki rneimizde goto anahtar szcnn kullanmn inceleyelim; rnek 2-15: Goto anahtar szcnn kullanm.
int sayi1 = 10; int sayi2 = 20; Console.WriteLine("{0} + {1} = {2} ", sayi1, sayi2, sayi1 + sayi2); goto son; Console.WriteLine("{0} x {1} = {2} ", sayi1, sayi2, sayi1 * sayi2); son: Console.ReadLine();

Yukardaki rnek incelendiinde program ilk goto satryla karlanca son isimli etiketin bulunduu satra dallanma ilemini gerekletirir ve arpma ileminin gerekletirdii satr (Console.WriteLine("{0} x {1} = {2} ", sayi1, sayi2, sayi1 * sayi2);) atlayarak dallanma ilemini gerekletirir.

2.2.4. Return Anahtar Szc


Return anahtar szc, metotlardan geriye bir deer dndrmek iin kullanlr. Metotlarla ilgili ayrntl bilgiyi ve return anahtar szcnn kullanmn bir sonraki Alt Programlar Modl ierisinde inceleyeceiz.

33

UYGULAMA FAALYET UYGULAMA FAALYET


lem Basamaklar
Yandaki ekildeki gibi yldzlar klavyeden girilen say kadar ekrana yazdran programn kodunu yaznz. Verilen bir mesaj istenilen sayda ekrana yazdran program yaznz.

neriler
Dngnn biti deerini klavyeden girilen say olacak ekilde ataynz. Koulunuzu belirlerken bunu gz nnde bulundurunuz. Girilen mesaj bilgisini bir deikene ataynz stenilen adede gre de dngnz kurunuz. rnein klavyeden 5 deeri girilmi olsun; 5!= 5 x 4 x 3 x 2 x 1 = 120 Dngnn biti deerini klavyeden girilen say olacak ekilde ataynz. Dngnz rnee gre yaznz. Bir saynn ssn hesaplamak iin; Math.Pow(sayi,us) fonksiyonunu kullannz. Say tahmin rneinden yapsal olarak faydalanabilirsiniz.

Klavyeden girilen saynn faktriyelini hesaplayan programn kodunu yaznz.

1den 50ye kadar olan saylardan tek saylarn karesini ift saylarn da kpn alp ekrana yazdran programn kodunu yaznz. Kullancdan klavyeden nceden belirlenmi bir PIN kodunu girmesini isteyiniz. 3 defa PIN numarasn hatal girerse Uygulamanz bloke olmutur mesaj, kullanc 3 deneme hakk iinde doru olarak PIN numarasn girerse Ho geldiniz mesaj veren programn kodunu while dngs ve yaznz. Klavyeden girilen 10 say ierisinden a) 100-200 arasndaki saylarn adedini b) 100den kk saylarn toplamn c) 200den byk saylardan da 4e kalansz blnebilenlerini ekrana yazdran program do-while dngs ve if komutlaryla yaznz. Klavyeden girilen saynn asal olup olmadn kontrol eden program yaznz.

Bir saya deikeni belirleyiniz ve girilen say miktarn tutunuz. Toplam,bolunenSayisi ve adet deikenlerinizi oluturunuz. Girilen saynn yandaki hangi duruma uyacan belirleyerek gerekli ilemleri gerekletiriniz. Yalnzca 1 ve kendisine blnebilen saylar asal saylardr.

34

LME VE DEERLENDRME LME VE DEERLENDRME


Bu faaliyet kapsamnda kazandnz bilgileri, aadaki sorular cevaplayarak belirleyiniz. 1. Aadakilerden hangisi bir dng deyimi deildir? A) IF..ELSE B) FOR C) FOREACH D) DOWHILE Aada for dngs ile ilgili verilen kullanmlardan hangisi yanltr? A) for(i=0;i<100;i=i+5) B) for(i=0, j=100; i<j;i++, j--) C) for(;;) D) for(i=A;i<Z;i++) -ie dngler ile ilgili aada verilenlerden hangisi dorudur? A) -ie en fazla 2 adet dng kullanabiliriz. B) Bir if koulu ierisinde do-while dngs kullanamayz. C) -ie kullanacamz dng saylarnda herhangi bir kstlama sz konusu deildir. D) Hem do-while hem de while dngsn i-ie kullanamayz. Aadaki anahtar szcklerden hangisi belirtilen bir komut satrna dallanma iin kullanlr? A) continue B) goto C) break D) return Dallanma komutlaryla ilgili aada verilenlerden hangisi dorudur? A) Dallanma ilemi bir programda yalnzca ileriye dnk yaplabilir. B) Dallanma ilemi bir programda yalnzca geriye dnk yaplabilir. C) Dallanma ilemi bir programda hem ileri hem de geriye dnk yaplabilir. D) Dallanma komutlaryla ile bir dngnn ierisine atlama ilemi yaplabilir.

2.

3.

4.

5.

DEERLENDRME Cevaplarnz cevap anahtaryla karlatrnz. Yanl cevap verdiiniz ya da cevap verirken tereddt ettiiniz sorularla ilgili konular faaliyete geri dnerek tekrarlaynz. Cevaplarnzn tm doru ise bir sonraki renme faaliyetine geiniz.

35

RENME FAALYET3 RENME FAALYET3


AMA
Bu modl ile dizilerle alabilecek ve programlarnzda uygulayabileceksiniz.

ARATIRMA
Bu faaliyet ncesinde hazrlk amal aada belirtilen aratrma faaliyetlerini yapmalsnz Ayn veri trne sahip birden fazla veriyi tek bir seferde nasl saklarz? Aratrnz. Farkl veri trlerine sahip birden fazla veriyi tek bir seferde nasl saklarz? Aratrnz.

3. DZLER
Deikenleri renirken grdk ki her deikene sadece bir deer atayabiliriz. Baz durumlarda ayn tipteki deikenleri bir arada tutma ihtiyac duyabiliriz. C# bize ayn tipteki deikenleri tek bir adla saklayabileceimiz dizileri (Array) sunmaktadr. Dizi (array), ortak isimle anlan ayn tipteki veriler topluluudur. Diziler bir programlama dilindeki en nemli veri yaplarndan biridir. Bu modl ierisinde dizi oluturma, diziye deer girme, diziyi yazdrma, dizilerde arama, dizilerde sralama, dinamik diziler yapmay reneceiz. Bir dizi, ayn tipe ait bir miktar eleman ieren bir veri yapsdr. Dizileri hep bir arada yer alan deikenler listesi gibi dnebiliriz. rnein 5 tane sebze ismini tek bir liste ierisinde tutmak istersek bir dizi kullanabiliriz.

3.1. Dizi Oluturma


Bir dizi, bo parantezler ve bir deiken ismi tarafndan takip edilen dizi iindeki elemanlarn tipini tanmlayarak bildirilir; Tanmlanmas:

1.Yol:
tip[] dizi-ismi=new tip[eleman-says];

36

Burada tip, dizinin temel veri trn belirlemek iin kullanlr. Temel veri tr, dizi ierisinde saklanacak olan verinin trn belirler. Tip ifadesinden hemen sonra keli parantezler ([ ]) geldiine dikkat edin. Keli parantezler, burada tek boyutlu bir dizinin tanmlandn belirtirler. Eleman-Says ile de dizinin ierisine ne kadar eleman tutulacan belirtilir. rnein, metinsel ifade (string) trde elemanlarn ieren bir dizi aadaki gibi bildirilir;
string[] sebzeler=new string[5];

Yukarda tanmlamas gerekletirilen sebzeler isimli dizi ierisinde 5 adet string trnde veri tutabiliriz. Oluturmu olduumuz dizi kavramsal olarak u ekilde grnr; Marul
sebzeler[0]

Ispanak
sebzeler[1]

Biber
sebzeler[2]

Domates
sebzeler[3]

Salatalk
sebzeler[4]

sebzeler
Resim 0-1. sebzeler Dizisinin Kavramsal Grn

Grm olduumuz ekilde dizi tanmlamas gerekletirilebilecei gibi, aadaki gibi de dizi tanmlama ilemi gerekletirebilir. 2.Yol:
int[] notlar; rakamlar=new int[10];

Eer tam say (integer) trnde eleman ieren bir dizi tanmlamak istiyorsak yukardaki yolu da izleyebiliriz. Yukardaki tanmlamada da rakamlar isimli dizi ierisinde 10 adet int trnde veri tutabiliriz. Dizi tanmlama ilemlerinde nc bir yol da dizinin ilk deerlerinin kme parantezleri ({}) ierisinde dizinin istenilen boyutu kadar balangta belirtilmesiyle tanmlanmasdr;

37

3.Yol:
int[] notlar={65,76,85};

Bu tanmlama yntemiyle tek boyutlu 3 elemandan oluan int trnde bir dizi tanmlam olduk. Dikkat ederseniz yukardaki dizinin tanmlanmas esnasnda herhangi bir boyut (eleman says) belirtilmedi. Bu durumlarda ilk anda ka adet eleman girii yapldysa dizinin boyutu da o kadar olur. stenirse aadaki gibi dizinin boyutu belirtilerek de tanmlama gerekletirilebilir;
int[] notlar=new int[3]{65,76,85};

3.2. Diziye Deer Girme


Bir dizi tanmlandktan sonra sra o diziye deer girmeye gelir. Bir diziye deer girileri tanmlama esnasnda yaplabildii gibi, programn ak esnasnda da gerekletirilebilir. Dizi tanmlandktan sonra, dizinin her bir eleman iin indeks deerleriyle elemana erierek deer atamas u ekildedir;
int[] notlar=new int[3]; notlar[0]=65; notlar[1]=76; notlar[2]=85;

Bir dier yntemde bir nceki konuda grdmz, dizi oluturulurken deer girmeyi tekrar hatrlarsak;
int[] notlar=new int[3]{65,76,85};

veya
int[] notlar= {65,76,85};

eklinde tanmlama esnasnda deer girii yapabiliriz. Yukarda her iki rnekte de verilen notlar dizisinin kavramsal gsterimi u ekildedir; notlar[0] 65 notlar[1] 76 notlar[2] 85

Resim 0-2. notlar Dizinin Kavramsal Grn

38

Char (karakter) trndeki bir dizinin ilk kullanmna hazrlanmas da u ekillerde gerekletirilir;
char[] harfler = new char[]{'r','T','h','Y'};

veya
char[] harfler=new char[4]; harfler[0] = 'r'; harfler[1] = 'T'; harfler[2] = 'h'; harfler[3] = 'Y';

String (metinsel) trdeki bir dizinin ilk kullanmna hazrlanmas da u ekillerde gerekletirilir;
string[] sebzeler = new string[] { "Marul", "Ispanak", "Biber", "Domates", "Salatalk" };

veya
string[] sebzeler=new string[5]; sebzeler[0] = "Marul"; sebzeler[1] = "Ispanak"; sebzeler[2] = "Biber"; sebzeler[3] = "Domates"; sebzeler[4] = "Salatalk";

Bir dizi ierisindeki elemanlara tek tek dizi indeksi yardmyla eriilebilir. Dizi indeksi (array index), bir elemann dizi ierisindeki konumunu ifade eder. Genellikle progrmalama dillerinde dizilerin ilk elemannn indeksi sfr (0)dr. rnein 10 elemanl bir dizi varsa, bu dizinin indeks numaralar 0-9 arasndadr. Dizinin tm elemanlarna deil de bir ksmna deer girii yapmamz isteniyorsa, ilgili deerin barndrlaca indeksine deer atama ilemi gerekletirilir.
int[] plakalar=new int[10]; plakalar[2] = 43; plakalar[5] = 16; plakalar[6] = 66; plakalar[9] = 6;

Yukarda tanmlanan plakalar isimli dizinin 2,5,6 ve 9 numaral indeks konumlarna deer atamas gerekletirilmi ve kavramsal grnts u ekilde olumutur.

39

plakalar[0] plakalar[1]

0 0

plakalar[2] 43 plakalar[3] plakalar[4] 0 0

plakalar[5] 16 plakalar[6] 66 plakalar[7] plakalar[8] plakalar[9] 0 0 6

Balangta eleman says belli fakat deerleri daha sonra girilecekse tanmlama u ekilde yaplabilir. rnein sebzeler dizisinin eleman says 5 deil de 8 olsun, balangta da 4 adet deer girilecek olsun;
string[] sebzeler = new string[] { "Marul", "Ispanak", "Biber", "Domates","" ,"","","","" };

veya
string[] sebzeler = new string[] { "Marul", "Ispanak", "Biber", "Domates",null, null, null, null, null };

Yukarda tanmlamas gerekletirilen sebzeler isimli dizinin kavramsal grnts de u ekildedir; sebzeler[0] sebzeler[1] sebzeler[2] sebzeler[4] sebzeler[5] sebzeler[6] sebzeler[7] Dikkat ederseniz int trndeki dizilerde bo kalan dizi hcrelerine sfr(0) deeri, string trndeki dizilerde de bo kalan hcrelere bo (null-) deer yklenmektedir. Marul Ispanak Biber

sebzeler[3] Domates

40

rnek 3-1: Rakamlar isimli dizi ierisine 0-9 aras rakamlar tersten bir dng yardmyla ykleyiniz.
int[] rakamlar = new int[10]; int i; for (i = 0; i <= 9; i++) rakamlar[i] = 9 - i;

Dizilerle alrken dikkat etmemiz gereken noktalardan en nemlisi dizi snrlarna sadk kalmaktr. Eer 10 elemanl bir dizi tanmlamsak ve bu dizi tanmlanrken belirlenen eleman saysndan fazla sayda eleman deeri atamaya alrsak hata alrz. rnek 3-2: 10 elemanl ciftSayilar isimli bir dizi tanmlaynz. erisine 0-25 arasndaki ift saylar ekleyen kodu yaznz.
int[] ciftSayilar = new int[10]; int i,j; j = 0; for (i = 0; i <= 25; i = i + 2) { ciftSayilar[j] = i; j++; }

Yukardaki kodu altrmak istediimizde aadaki gibi bir hata alrz.

Resim 0-3. rnek 3-2deki Dizi Snr Am Hatas

Resim 3-3te grlen hata mesaj dizi snrnn aldn belirten hata mesajdr.

41

rnek3-2de verilen kodlar incelendiinde ciftSayilar isimli dizinin balangta 10 elemanl bir dizi olarak tanmland grlmektedir. Ancak 0-25 arasndaki ift saylar bu diziye bir for dngs yardmyla (i deikenin deeri olarak) eklenirken, dizinin 10. eleman eklendikten sonra (j deikeninin deerinin 10 olmasndan sonra) dngnn devam etmesi sebebiyle 11. eleman eklemeye allnca Resim 3-3teki Dizi Snrlarnn D hata mesaj ile karlarz. Dizi eleman saysnn st limitini amak gibi alt snr deerinin altna girilmeye allmas da hata mesaj almamza sebebiyet verir. rnek 3-3: rnek 3-2deki kodlarda biraz deiiklik yapp programn dizinin alt snr deerinden daha dk indeksine erimeye alalm;
int[] ciftSayilar = new int[10]; int i,j; j = 5; for (i = 0; i <= 25; i = i + 2) { ciftSayilar[j] = i; j--; }

j deikenimizin balang deerini 5 yapp bu sefer dngmz vastasyla elemanlarmz yazdrmaya altmzda, j indeksimizin j-- ifadesiyle dng ierisinde her seferinde deerinin 1 azaltldn gryoruz. Ne zaman ki jnin deeri 0n altnda negatif bir sayya ulatnda, programmz Resim 3-4teki gibi bir hata mesajn bizlere verir.

Resim 0-4. Dizi Snr Deeri Am Hatas

42

3.3. Diziyi Yazdrma


Bir dizinin elemanlarna indeks numaralar vastasyla eriebileceimizi daha nce de bahsetmitik. Eriilen bu elemanlarla ilgili ilemlerden birisi de ekrana yazdrma ilemidir. Eriilen deerlerinin ekrana yazdrlmas ilemi u ekilde gerekletirilir;
int[] plakalar=new int[10]; plakalar[2] = 43; plakalar[5] = 16; plakalar[6] = 66; plakalar[9] = 6;

Aadaki ilemler yukarda tanmlanm olan diziye gre gerekletirilmektedir.


Console.WriteLine(plakalar[2]); Console.WriteLine(plakalar[3]); Console.WriteLine(plakalar[4]); Console.WriteLine(plakalar[5]);

Yukardaki kod paras altrldnda ekrana


43 0 0 16

deerleri yazlr. Bir dizi ierisindeki tm deerleri ekrana yazdrmak istiyorsak dng kullanmak gayet mantkl olacaktr. rnein 200 elemanl bir dizinin tm elemanlarn ekrana yazdrmak istersek alt alta 200 satr kod yazmamz mmkn deildir. rnek 3-4: Plakalar isimli dizi ierisinde bulunan btn elemanlar ekrana yazdran programn kodunu yaznz.
int[] plakalar = new int[10]; int sayac = 0; plakalar[2] = 43; plakalar[5] = 16; plakalar[6] = 66; plakalar[9] = 6; foreach (int note in plakalar) { Console.WriteLine("plakalar["+sayac+"] :"+note); sayac++; }

Yukardaki kodlar altrld zaman aadaki gibi bir ekran kts ile karlarz;

43

Resim 0-5. rnek3-4n Ekran kts

rnek 3-5: rnek3-4teki plakalar dizisini bir de for dngsyle ekrana yazalm.
int[] plakalar = new int[10]; int sayac = 0; plakalar[2] = 43; plakalar[5] = 16; plakalar[6] = 66; plakalar[9] = 6; for(sayac=0;sayac<10;sayac++) Console.WriteLine("plakalar["+sayac+"] :"+plakalar[sayac]);

Yukardaki kod paras altrld zaman karmza Resim 3-5te ekran grntsnn ayns karmza kar. Ancak, burada dikkat etmemiz gereken husus for dngsnn biti deerini dizimizin eleman saysn bildiimiz iin buna gre belirledik.

3.4. Baz Dizi zellikleri ve Metotlar


Diziler, .NET Framework iinde tanml Array snf temsil eder. Tm diziler Array snfnda tanml zellikleri ve metotlar kullanrlar. Bu metotlardan ve zelliklerden en sk kullanlanlar unlardr; Length, Clear, Reverse

3.4.1. Length
Dizinin saklayabilecei toplam eleman saysn veren ve int trnde bir deer veren zelliktir. Kullanm:
dizi-adi.Length;

rnek 3-6: ciftSayilar isimli dizinin ierisinde ka adet eleman olduunu ekrana yazan programn kodunu yaznz.
int[] ciftSayilar = new int[10]; elemanSayisi = ciftSayilar.Length; Console.WriteLine("ciftSayilar dizi ierisinde toplam {0} eleman bulunmaktadr.",elemanSayisi);

44

Yukardaki kodlar altrdmz zaman aadaki gibi bir ekran grnts alrz;

Resim 0-6. rnek 3- 6'nn Ekran kts

3.4.2. Clear(dizi,baslangic,adet)
Parametre olarak verilen dizinin, belirtilen indeks aralndaki tm deerlerini temizler. Temizleme ileminde atanan deer, dizi elemanlarnn tiplerine gre deiir. rnein int tipinde tanml bir dizinin elemanlar temizlenirse 0 deerini alacaktr. Buna karn String tipindeki elemanlar (bo yaz) deerini alr. Kullanm:
Array.Clear(diziAdi,baslangicIndeksi,Adet);

rnek 3-7: Yeni tanmladmz ve ieriini oluturduumuz bir dizinin elemanlarnn nasl silindiini inceleyelim;
int[] sayilar = new int[] { 43, 16, 66, 26 }; Console.WriteLine("Temizlenmeden nce dizinin elemanlar"); Console.WriteLine("-------------------------------------"); for (int i = 0; i < sayilar.Length; i++) Console.WriteLine("sayilar[{0}]: {1}", i,sayilar[i]); Array.Clear(sayilar, 1, 2); Console.WriteLine("\nTemizlendikten sonra dizinin elemanlar"); Console.WriteLine("-------------------------------------"); for (int i = 0; i < sayilar.Length; i++) Console.WriteLine("sayilar[{0}]: {1}", i, sayilar[i]);

Yukardaki kodlar altrdmz zaman aadaki gibi bir ekran grnts alrz;

Resim 0-7. rnek 3-7'in Ekran kts

45

Yukardaki rnek 3.7yi incelediimizde Array.Clear(sayilar,1,2); komut satr ile sayilar dizisinin 1 nolu indeksinden balayarak 2 adet dizi elemannn deerini temizlemi olduk. Yani dizi elemanlarnn deerlerinin yerine 0 deeri verilmi oldu. rnek 3-8: Clear metodunu bir de string bir dizi zerinde deneyip sonularn inceleyelim.
string[] metin = new string[] { "rtyucel", "moymul", "tavanl", "ktahya" }; Console.WriteLine("Temizlenmeden nce dizinin elemanlar"); Console.WriteLine("-------------------------------------"); for (int i = 0; i < metin.Length; i++) Console.WriteLine("metin[{0}]: {1}", i, metin[i]); Array.Clear(metin, 2, 2); Console.WriteLine("\nTemizlendikten sonra dizinin elemanlar"); Console.WriteLine("-------------------------------------"); for (int i = 0; i < metin.Length; i++) Console.WriteLine("metin[{0}]: {1}", i, metin[i]);

Yukardaki kodlar altrdmz zaman aadaki gibi bir ekran grnts alrz;

Resim 0-8. rnek 3-8'in Ekran kts

Yukardaki rnek 3.8i incelediimizde Array.Clear(metin,2,2) satryla metin isimli dizinin 2 numaral indeksinden balayarak 2 adet kaydn silinmesi ilemini gerekletirdik. Burada yeni deerlerin (bo metin) olduuna dikkat ediniz. Dizideki tm elemanlar silmek iin sradaki rneimizi inceleyelim.

46

rnek 3-9: Bir dizi ierisindeki tm elemanlar silen program yaznz.


string[] metin = new string[] { "rtyucel", "moymul", "tavanl", "ktahya" }; Console.WriteLine("Temizlenmeden nce dizinin elemanlar"); Console.WriteLine("-------------------------------------"); for (int i = 0; i < metin.Length; i++) Console.WriteLine("metin[{0}]: {1}", i, metin[i]); Array.Clear(metin, 0, metin.Length); Console.WriteLine("\nTemizlendikten sonra dizinin elemanlar"); Console.WriteLine("-------------------------------------"); for (int i = 0; i < metin.Length; i++) Console.WriteLine("metin[{0}]: {1}", i, metin[i]);

Yukardaki kodlar altrlnca aadaki ekran grnts karmza kar;

Resim 0-9. rnek 3-9'un Ekran kts

Yukardaki kodlardan Array.Clear(metin, 0, metin.Length); satr incelendiinde; Clear metodunda dizinin 0. elemanndan itibaren eleman says (metnin.Length) kadar verinin silineceini grebiliriz. Bu ekilde bir dizi ierisindeki tm elemanlar silme ilemi gerekletirilir.

3.4.3. Reverse(Dizi)
Parametre olarak verilen dizinin eleman srasn tersine evirir. Dizinin tm elemanlarnn veya belirli indeks aralndaki elemanlarnn sras tersine evrilebilir. Kullanm:
Array.Reverse(diziAdi);

rnek 3-10: Alfabe adl dizi ierisine girilen A-Zye harfleri tersten ekrana yazdran programn kodunu yaznz.

47

char[] alfabe = new char[26]; char harf; int i=0; Console.WriteLine("A'dan Z'ye ngiliz Alfabesi"); Console.WriteLine("---------------------------"); for (harf = 'A'; harf <= 'Z'; harf++) { alfabe[i] = harf; Console.Write(alfabe[i] + " "); i++; } Console.WriteLine("\n"); Array.Reverse(alfabe); Console.WriteLine("Z'den Z'ya ngiliz Alfabesi"); Console.WriteLine("---------------------------"); for (i = 0; i < 26; i++) Console.Write(alfabe[i] + " ");

Yukardaki kodlar altrlnca aadaki ekran grnts karmza kar;

Resim 0-10 rnek 3-10un Ekran kts

3.4.4. Sort(Dizi)
Parametre olarak verilen dizinin elemanlarn kkten bye sralar. Eer dizi numerik ise rakamlarn byklne gre, yaz tiplerinde ise ba harflerine gre sralanr. Reversen tersidir. Kullanm:
Array.Sort(diziAdi);

rnek 3-11: Klavyeden girilen 5 sayy kkten bye sralayan program yaznz.
int[] sayilar = new int[5]; int i=0; for (i = 0; i < 5; i++) { Console.Write(i + 1 + ". Sayy Giriniz :"); sayilar[i] = Convert.ToInt32(Console.ReadLine()); } Array.Sort(sayilar);

48

Console.WriteLine(""); Console.WriteLine("Sralanm Halleri: "); foreach (int sayi in sayilar) Console.Write(sayi + " ");

Bu rnekte ayn zamanda foreach dngsnn kullanmn da grm olduk. Bundan sonra dizilerle ilgili rneklerimizde foreach dngsn ska kullanacaz. Yukardaki kod paras altrld zaman aadaki gibi bir ekran ktsyla karlarz;

Resim 0-11. rnek 3-11in Ekran kts

3.4.5. IndexOf(Dizi,arananDeger)
lk parametrede verilen dizide, ikinci parametrede verilen deeri arar. Aranan deer dizide bulunursa bulunan elemann indeks deeri, bulunamazsa -1 dndrr. Kullanm:
Array.IndexOf(diziAdi,arananDeger);

rnek 3-12: Daha nceden deerleri girilmi olan bir dizi ierisinde istenilen deeri bulan programn kodunu yaznz.
string[] iller = new string[] { "Ankara", "stanbul", "Ktahya", "zmir", "Yozgat" }; string aranan = "Ktahya"; int i=0; foreach (string il in iller) { Console.WriteLine("iller[{0}]: {1}", i, il); i++; } int indeks = Array.IndexOf(iller, aranan); Console.WriteLine("lleri dizisi ierisinde Ktahya'nn indeksi: "+indeks);

Yukardaki kod paras altrld zaman aadaki gibi bir ekran ktsyla karlarz;

49

Resim 0-12. rnek 3-12'nin Ekran kts

Uyar: Eer aranan=KTAHYA veya aranan=ktahya yazarsanz Array.IndexOf(iller,aranan) ifadesi geriye -1 deerini dndrr. rnek 3-13: 1-49 arasnda 6 adet rastgele say reten bir Saysal Loto Program hazrlaynz.
// Boyutu 6 olan int array i tanmlayn. int[] sayilar = new int[6]; //Random tipinden bir deiken oluturun. Random r = new Random(); //int tipinden bir deiken oluturun ve ilk deerini 0 olarak atayn. int counter = 0; //Bir while dngs tanmlayn ve koul olarak counter<6 olarak belirtin. while (counter < 6) { //int tipinden bir deiken oluturun ve deerini Random deikenin 1 ile 49 aras rettii tamsayya eitleyin. int sayi = r.Next(1, 50); //Sayi adl deikenin deerinin sayilar adl dizide var olup olmadn Array.IndexOf metodu ile kontrol edin. if (Array.IndexOf(sayilar, sayi) == -1) { //Eer sayi adl deikenin deeri sayilar dizisinde yoksa dizinin counter numaral esine sayi deerini eitleyin. sayilar[counter] = sayi; //counter 1 arttrn. counter++; } } Array.Sort(sayilar); //Sayilar dizisini ekrana yazdrn Console.Write("Bu haftasn ansl saylar: "); foreach (int i in sayilar) Console.Write(i + " ");

Yukardaki kod paras altrld zaman aadaki gibi bir ekran ktsyla karlarz;

Resim 0-13. rnek 3-13'n Ekran kts

50

Uyar: Random() komutu sayesinde program her altrldnda farkl saylar reteceinden Resim 3-13teki saylarn sizin programnzda da kma olasl olduka dktr.

3.5. Dinamik Diziler


imdiye kadar grdmz klasik dizilerin programlama tekniklerine getirdikleri kolaylklarn dnda birtakm kstlamalar da vardr. Bu kstlamalarn en banda da dizilerin boyutlar gelmektedir. Bir dizinin boyutu, dizi tanmlanrken belirlenir ve programn ak esnasnda geniletilip-daraltlamazd. Bir dier kstlama da; rnein, programn balangcnda 250 elemanl bir dizi tanmladk ve bunun yalnzca 120sini kullandk, geriye kalan 130 elemanlk bellek alan ise bou bouna bellekte yer kaplam olur. te dizilerde ska karlalan bu kstlamalar ArrayList snf ile zmlenir. ArrayList, bykl, dinamik olarak artp azalabilen nesne referanslarndan oluan deiken uzunlukta biz dizidir. Bu veri yaps .NET snf ktphanesinin System.Collections isim alannda bulunur. ArrayList yapsnn, bu dinamik boyut dnda bizlere sunduu bir dier avantaj da bir dizi ierisinde saklanacak olan verilerin tr snrlamasn ortadan kaldrmasdr. rnein bir dizi ierisinde hem int trnden veriler, hem string trnden veriler, hem char trnden veriler hem de bool trnden veriler saklamak mmkndr. ArrayList ile dinamik bir dizi u ekilde tanmlanr; Tanmlanmas:
ArrayList diziAdi=new ArrayList();

ArrayListleri rneklerimizde kullanmadan nce sizlere ArrayListler ile ska kullandmz baz metotlardan ve zelliklerden bahsetmemizde fayda olacaktr. zellikler: Capacitiy: Count: ArrayListin kapasitesini int trnde verir. ArrayList ierisindeki eleman saysn int trnde verir.

Metotlar: Add: Bir nesneyi ArrayListin sonuna eklemeye yarar. Insert: Belirtilen indeks pozisyonuna nesneyi eklemeye yarar. Remove: Belirtilen nesne ArrayList ierisinde varsa siler. RemoveAt: ndeks deeriyle belirtilen pozisyondaki eleman siler. Sort: ArrayList ierisindeki elemanlar sralar.

51

3.5.1. Capacity zellii:


ArrayListin kapasitesini int trnde veren zelliktir. Kullanm:
int kapasite=liste.Capacity;

3.5.2. Count zellii:


ArrayList ierisinde bulunana eleman saysn int trnde veren zelliktir. Kullanm:
int elemanSayisi=liste.Count;

3.5.3. Add Metodu:


Bir nesneyi ArrayList'in sonuna eklemeye yarar. Kullanm:
ArrayList liste=new ArrayList(); liste.Add(123); //int trnde deer ekleme liste.Add("Tevfik"); //string trnde deer ekleme liste.Add('H'); //char trnde deer ekleme liste.Add(true); //bool trnde deer ekleme liste.Add(3.14d); //double trnde deer ekleme liste.Add(3.666f); //float trnde deer ekleme

rnek 3-14: 0-50 arasnda 3e kalansz blnebilen saylar ArrayList ierisine ekleyen programn kodunu yaznz.
ArrayList liste=new ArrayList(); for (int sayi = 0; sayi < 100; sayi++) { if (sayi % 3 == 0) { liste.Add(sayi); Console.WriteLine(sayi+" listeye eklendi."); } }

Yukardaki kodu altrdmzda aadaki gibi bir ekran kts alrz.

52

Resim 0-14. rnek 3-14'n Ekran kts

3.5.4. Insert Metodu:


Parametre olarak belirtilen indeks deerine yine parametre olarak verilen nesneyi ekler. Ekleme ileminden nce o indeksteki ve o indeksten sonraki tm deerler birer sonraki indekslere kaydrlr. Dikkat edilmesi gereken nokta; araya eklenmek istenilen indeks deerinden en az bir nceki konumda veri bulunmas gerekir. Aksi takdirde Resim3-15teki hata mesajn alrz.

Resim 0-15. ArrayList Indeks Snr D Hatas

Kullanm:
liste.Insert(5,123); //5 nolu indekse 123 deerini ekler

rnek 3-15: Oluturacanz bir ArrayListe 5 adet nesne ekleyiniz. Daha sonra insert metodunu kullanarak 10. indekse baka bir nesne eklemeye alnz. Aldnz ekran ktsn arkadalarnzla paylanz. rnek 3-16: 0dan 9a kadar rakamlar barndran bir ArrayListin aada verilen deerleri srasyla 5.indeksine ekleyen kodu yaznz.

53

- 123, - true,

- Tevfik, - 3.14d,

- H, - 3.666f

ArrayList liste = new ArrayList(); for (int i = 0; i < 10; i++) liste.Add(i); Console.WriteLine("Insert ileminden nce liste:"); foreach (object obj in liste) Console.WriteLine(obj); liste.Insert(5, liste.Insert(5, liste.Insert(5, liste.Insert(5, liste.Insert(5, liste.Insert(5, 123); "Tevfik"); 'H'); true); 3.14d); 3.666f);

Console.WriteLine("Insert ileminden sonra liste:"); foreach (object obj2 in liste) Console.WriteLine(obj2);

Yukardaki kod paras altrld zaman aadaki gibi bir ekran kts alrz.

Resim 0-16. rnek 3-16'nn Ekran kts

54

3.5.5. Remove Metodu:


Belirtilen nesne ArrayList ierisinde varsa siler. Kullanm:
liste.Remove(nesne);

rnek 3-17: Aada verilen deerleri srasyla bir ArrayListe ekledikten sonra Tevfik,123 ve 3.14 deerlerini silen kodu yaznz. - 123, - true, - Tevfik, - 3.14d, - H, - 3.666f

ArrayList liste = new ArrayList(); liste.Add(123); liste.Add("Tevfik"); liste.Add('H'); liste.Add(true); liste.Add(3.14d); liste.Add(3.666f); Console.WriteLine("Remove ileminden nce liste:"); foreach (object obj in liste) Console.WriteLine(obj); liste.Remove("Tevfik"); liste.Remove(123); liste.Remove(3.14d); Console.WriteLine("Remove ileminden sonra liste:"); foreach (object obj2 in liste) Console.WriteLine(obj2);

Yukardaki kod paras altrld zaman aadaki gibi bir ekran kts alrz.

Resim 0-17. rnek 3.17nin Ekran kts

55

Yukardaki kod parasn incelersek ve Resim 3.17den de grld gibi liste dizisinden Tevfik,123 ve 3.14d nesnelerinin silindiini grebiliriz.

3.5.6. RemoveAt Metodu:


Parametre olarak verilen indeks konumundaki eleman siler. Kullanm:
liste.RemoveAt(indeks); //indeks olarak verilen konumda bulunan eleman siler.

rnek 3-18: Aada verilen deerleri srasyla bir ArrayListe ekledikten sonra 2. ve 4. indeksteki elemanlar silen kodu yaznz. - 123, - true, - Tevfik, - 3.14d, - H, - 3.666f

ArrayList liste = new ArrayList(); liste.Add(123); liste.Add("Tevfik"); liste.Add('H'); liste.Add(true); liste.Add(3.14d); liste.Add(3.666f); Console.WriteLine("Remove ileminden nce liste:"); foreach (object obj in liste) Console.WriteLine(obj); liste.RemoveAt(2); Console.WriteLine("Remove ileminden sonra liste:"); foreach (object obj2 in liste) Console.WriteLine(obj2);

Yukardaki kod paras altrld zaman aadaki gibi bir ekran kts alrz.

Resim 0-18. rnek 3-18'in Ekran kts

56

3.5.7. Sort Metodu:


ArrayList ierisindeki elemanlar kkten bye sralar. Kullanm:
liste.Sort();

rnek 3-19: Klavyeden girilen 5 adet ismi bir ArrayList ierisine kaydedin ve bunlar Adan Zye sralayan kodu yaznz.
ArrayList liste = new ArrayList(); string isim; for (int i = 1; i <= 5; i++) { Console.Write(i+". ismi giriniz: "); isim = Console.ReadLine(); liste.Add(isim); } Console.WriteLine("Sralamadan nce liste:"); foreach (object obj in liste) Console.WriteLine(obj); liste.Sort(); Console.WriteLine("Sralanm sonra liste:"); foreach (object obj2 in liste) Console.WriteLine(obj2);

Resim 0-19. rnek 3-19un Ekran kts

57

UYGULAMA FAALYET UYGULAMA FAALYET


lem Basamaklar
0dan klavyeden girilen sayya kadar olan saylardan tek olanlar tekSayilar dizisinde, ift olanlar da ciftSayilar dizisinde saklayan daha sonra bu dizileri ayr ayr ekrana yazdran program yaznz. Bir renciye ait 3 yazl ve 2 szl notunu bir dizi ierisinde saklayan ve daha sonra bu notlarn ortalamasn hesaplayan Ortalama 45e eit ya da bykse ekrana Dersi Getin, Deilse Dersten Kaldn yazdran programn kodunu yaznz. Snftaki arkadalarnzn isim, telefon, e-posta adresi bilgilerini saklayacanz diziler oluturup bu bilgileri bir dng yardmyla bu dizilere kaydeden, Daha sonra klavyeden girilen isme ait bilgileri ekrana getiren, Eer klavyeden girilen isim kaytlarda bulunamazsa ekrana Kayt bulunamad mesaj veren programn kodunu yaznz Klavyeden bir dizi boyutu girin. Daha sonra dizi boyutu kadar ondalkl sayy bu dizi ierisine ekleyin. Diziye eklenen bu saylarn Toplamn, Aritmetik ortalamasn, En byk deerini En kk deerini ekrana yazdran program yaznz.

neriler
Dngnn biti deerini klavyeden girilen say olarak belirleyiniz. Dng sayacn kontrol edip tek ise tekSayilar dizisine, ift ise ciftSayilar dizisine ekleyiniz. Herhangi bir dng yardmyla dizileri ayr ayr ekrana yazdrnz. Notlar bir dizi ierisinde saklaynz. Dizi ierisinden bir dng ile notlar okuyup ortalamasn bulunuz. Ortalamann 45e eit ya da byk olup olmadn kontrol ediniz. Ortalamann durumuna gre ekrana ilgili durumu yazdrnz. simler, telefon ve e-posta adresleri iin ayr ayr diziler oluturunuz. Bir kiiye ait bilgilerin indeks numaralarnn 3 dizide de ayn olmasna dikkat ediniz. Dizilerde arama metodu ile ilgili rnei inceleyin ve isim dizisinde klavyeden girilen isme gre arama yaptrnz. Dnen sonuca gre ilgili bilgileri/mesaj ekrana yazdrnz.

Klavyeden girilen sayy dizinin boyutu olarak belirleyiniz. Girilen sayya gre bir dng oluturunuz. Dng yardmyla kullancnn girmi olduu saylar diziye ekleyiniz. Dizi ierisindeki deerlerin toplamn bulunuz. Dizi ierisindeki deerlerin aritmetik ortalamasn bulunuz. Diziyi sralaynz. En byk ve en kk elemanlar bulunuz.

58

LME VE DEERLENDRME LME VE DEERLENDRME


Bu faaliyet kapsamnda kazandnz bilgileri, aadaki sorular cevaplayarak belirleyiniz.
1. Tek boyutlu dizilerle ilgili aada verilenlerden hangisi yanltr? A) Diziler, ayn tipteki deikenleri tek bir adla saklayabildiimiz veri yaplardr. B) Diziler tanmlanrken kapasiteleri belirlenmelidir. C) Programn ak esnasnda dizilerin kapasiteleri deitirilebilir. D) Programn ak esnasnda dizilerin trleri deitirilemez. Dizilerin kapasiteleri tanmlanrken kullanlan karakterler aadaki hangi kta doru olarak verilmitir? A) {} B) [] C) () D) <> int[] dizi=new int[10] eklinde tanmlanan bir dizi iin aada verilenlerden hangisi kesinlikle yanltr? A) Dizinin son eleman 10.indekse sahiptir. B) Dizinin ilk eleman 0.indekse sahiptir. C) Dizinin son eleman 9.indekse sahiptir. D) Dizi maksimum 10 eleman barndrabilir. Aada verilen dizilerle ilgili metotlardan hangisi dizi ierisindeki elemanlar silmeye yarar? A) IndexOf B) Reverse C) Sort D) Clear Dinamik diziler (ArrayList) ile ilgili verilenlerden hangisi yanltr? A) Dinamik dizilerin kapasiteleri programn ak esnasnda deitirilebilirler. B) Count zellii dinamik dizilerin ierisindeki eleman saysn verir. C) Capacity zellii dinamik dizilerin ierisindeki eleman saysn verir. D) Dinamik diziler ierisinde farkl trlerde veri depolayabiliriz.

2.

3.

4.

5.

DEERLENDRME
Cevaplarnz cevap anahtaryla karlatrnz. Yanl cevap verdiiniz ya da cevap verirken tereddt ettiiniz sorularla ilgili konular faaliyete geri dnerek tekrarlaynz. Cevaplarnzn tm doru Modl Deerlendirmeye geiniz.

59

MODL DEERLENDRME MODL DEERLENDRME


Aadaki cmlelerin banda bo braklan parantezlere, cmlelerde verilen bilgiler doru ise D, yanl ise Y yaznz. 1. 2. 3. 4. 5.
6.

7. 8. 9. 10. 11. 12. 13. 14. 15.


16.

17. 18. 19. 20. 21. 22. 23. 24. 25.

( ) Bir switch blounda ayn sabite sahip birden fazla case ifadesi yer alabilir. ( ) Float veri tipi bir case sabiti olarak kullanlabilir. ( ) default blou bir Switch-Case yapsnda bulunmasa da olur. ( ) -ie birden fazla if ifadesi kullanlamaz. ( ) Eer koulun salanmamas durumunda ilem yaplmas isteniyorsa, else ifadesine gerek duyulur. ( ) Eer If veya Else ifadelerinden sonra sadece bir komut yazlacak ise kme parantezleri ({}) kullanlmayabilir. ( ) Bir case blou ierisinde break komutu kullanlmazsa, hata mesaj alrz. default anahtar kelimesi switch-case yaps ierisinde her zaman case ifadelerinden nce yer almaldr. ( ) For dngsnde saya char trnde de olabilir. ( ) For dngsnde koul salanmad mddete dng altrlmaz. ( ) Dngler yalnzca ileri dnk sayma ilemi gerekletirir, geriye doru sayma ilemi gerekletiremezler. ( ) While dngs koul yanl (false) iken kme parantezleri ({}) ile belirlenen alandaki ilemleri tekrarlar. ( ) Foreach, dizi (Array) ve koleksiyon ( collection ) tabanl nesnelerin elemanlar zerinden ilerleyen bir dngdr. ( ) Foreach dngsnde belirtilen deiken tipinin koleksiyon ile ayn veya uyumlu bir veri tipi olmas gerekir. ( ) Goto anahtar szc ile bir dng ve koul blou ierisine dallanma ilemi gerekletirilebilir. ( ) Dallanma ilemi bir programda yalnzca ileriye dnk yaplabilir. ( ) Tek boyutlu diziler yalnzca tanmlanrken belirlenen trde veri depolayabilirler. ( ) Diziler balangta belirlenen kapasitelerinden fazla veri depolayabilirler. ( ) Bir dizinin indeks deeri negatif (-) bir tam say olabilir. ( ) Length zellii dizinin kapasitesini verir. ( ) Sort metodu, dizi ierisindeki elemanlar bykten ke sralamak iin kullanlr. ( ) Reverse metodu, parametre olarak verilen dizinin eleman srasn tersine evirir. ( ) Dinamik dizilerin kapasiteleri, programn ak esnasnda deitirilebilir. ( ) Dinamik dizilerde yalnzca ayn trdeki verileri depolayabiliriz. ( ) Insert metoduyla bir dinamik diziye veri eklendiinde, o indekste bulunan elemann zerine yazlr.

DEERLENDRME
Cevaplarnz cevap anahtaryla karlatrnz. Yanl cevap verdiiniz ya da cevap verirken tereddt ettiiniz sorularla ilgili konular faaliyete geri dnerek tekrarlaynz. Cevaplarnzn tm doru ise bir sonraki modle gemek iin retmeninize bavurunuz.

60

CEVAP ANAHTARLARI CEVAP ANAHTARLARI


RENME FAALYET-1N CEVAP ANAHTARI 1 2 3 4 5 D C D A B

RENME FAALYET-2NN CEVAP ANAHTARI 1 2 3 4 5 A D C B C

RENME FAALYET-3N CEVAP ANAHTARI 1 2 3 4 5 C B A D C

MODL DEERLENDRME SORULARI CEVAP ANAHTARI 1 2 3 4 5 6 7 8 9 10 11 12 13 Y Y D Y D D D Y D D Y Y D 14 15 16 17 18 19 20 21 22 23 24 25 D Y Y D Y Y D Y D D Y Y

61

KAYNAKA KAYNAKA
ALGAN Sefer, Her Ynyle C#, Pusula Yaynclk, 1.Bask, stanbul, Trkiye, (2003) SCHILDT Herbert, Herkes in C#, Alfa Yaynevi, 1.Bask, stanbul, Trkiye, (2002) ASLAN KAAN, Adan Zye C Klavuzu, Pusula Yaynclk, 8.Bask, stanbul, Trkiye, (2002) Butow, E., Ryan, T.: Your Visual Blueprint For Building .NET Application MSDN : Introduction to C# Programming for the Microsoft .NET Platform (Prerelease)Workbook Hejlsberg, A., Wiltamuth, S.: C# Language Referance Turtschi, A., Werry J., Hack, G., Albahari, J., Nandu S.: C#.NET Web Developers Guide, Syngress Publishing, Inc., Rockaland, USA (2002) Microsoft: C# Language Specification MSDN Yardm Dokmanlar

62

You might also like