Professional Documents
Culture Documents
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
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.
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.
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; }
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; }
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 !!!"); }
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; }
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
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
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
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.
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.
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.
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); }
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.
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.
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
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("----------------"); }
26
rnek 2-8: 0dan 20ye kadar olan ift saylar ekrana yazdrnz.
int i=0; while (i <= 20) { Console.WriteLine(i); i = i + 2; }
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.
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
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); }
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.
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.
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 + " "); }
31
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.
32
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.
33
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.
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
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
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.
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};
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
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
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++; }
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.
42
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
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.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;
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;
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;
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
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] + " ");
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;
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
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;
50
Uyar: Random() komutu sayesinde program her altrldnda farkl saylar reteceinden Resim 3-13teki saylarn sizin programnzda da kma olasl olduka dktr.
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
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."); } }
52
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);
Yukardaki kod paras altrld zaman aadaki gibi bir ekran kts alrz.
54
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.
55
Yukardaki kod parasn incelersek ve Resim 3.17den de grld gibi liste dizisinden Tevfik,123 ve 3.14d nesnelerinin silindiini grebiliriz.
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.
56
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);
57
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
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
( ) 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
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