Uzaktan Eğitim Vize
-Uzaktan Eğitim Nedir?
-Dünya’da Uzaktan Eğitim
-UZAKTAN EĞİTİMİN TARİHÇESİ
-Türkiye’de Uzaktan Eğitim
-Uzaktan Eğitim ile İlgili Teoriler
-Kendi Kendine Öğrenme Öz Düzenlemeli Öğrenme
-UZAKTAN EĞİTİM HAKKINDA ARAŞTIRMALAR
-UZAKTAN EĞİTİMDE ÖĞRETİM TASARIMI
-c# Class Alan Çevre Hesaplaması
-c# Dizide kaç tane var
-c# Dizide küçük olan
-c# Dizi küçükten büyüğe sıralama
-c# Dosyaya yazma
-c# Dosyaya yaz oku ekle
-c# Aranan değer dizide var mı yok mu?
-c# toplama, çıkarma, çarpma, bölme
-c# gün için rastgele çorba seçimi
-c# diziden çıkar
-c# random
-c# dizilerde tek çift sayılar
-c# Dizide girilen sayıları küçükten büyüğe sıralama
-c# Dosyaya while döngüsünde ad soyad no yazan sonsuz döngüde program
-c# klavyeden girilen 5 sayıyı ortalama
-c# Sınıf yapısı ile toplama işlemi
Uzaktan Eğitim Vize
-Uzaktan Eğitim Nedir?
-Dünya’da Uzaktan Eğitim
-UZAKTAN EĞİTİMİN TARİHÇESİ
-Türkiye’de Uzaktan Eğitim
-Uzaktan Eğitim ile İlgili Teoriler
-Kendi Kendine Öğrenme Öz Düzenlemeli Öğrenme
-UZAKTAN EĞİTİM HAKKINDA ARAŞTIRMALAR
-UZAKTAN EĞİTİMDE ÖĞRETİM TASARIMI
-c# Class Alan Çevre Hesaplaması
-c# Dizide kaç tane var
-c# Dizide küçük olan
-c# Dizi küçükten büyüğe sıralama
-c# Dosyaya yazma
-c# Dosyaya yaz oku ekle
-c# Aranan değer dizide var mı yok mu?
-c# toplama, çıkarma, çarpma, bölme
-c# gün için rastgele çorba seçimi
-c# diziden çıkar
-c# random
-c# dizilerde tek çift sayılar
-c# Dizide girilen sayıları küçükten büyüğe sıralama
-c# Dosyaya while döngüsünde ad soyad no yazan sonsuz döngüde program
-c# klavyeden girilen 5 sayıyı ortalama
-c# Sınıf yapısı ile toplama işlemi
1. nU
MARMARA ÜNİVERSİTESİ
ATATÜRK EĞİTİM FAKÜLTESİ
Nurdan SARIKAYA
200209019
Programlama Dilleri
Visual c# ‘ta Diziler ve
Visualc# Class Yapıları
2011, İstanbul
1
2. nU
İçindekiler
C#’TA DİZİLER .........................................................................................4
C#’ta Dizi Değişkenlerinin Tanımlanması ............................................. 4
Çok Boyutlu Dizileri Tanımlamak .......................................................... 9
Dinamik Diziler.................................................................................... 11
Jagged Diziler...................................................................................... 12
Jagged Dizisinin Tanımlanması........................................................ 13
Koleksiyonlar ................................................................................... 16
Dizilerle İlgili Diğer İşlemler ................................................................. 17
Arraylist Fonksiyonları ......................................................................... 17
Dizinin Yavru Değişkenine Eleman Ekleme ...................................... 18
Dizinin Eleman Sayısını Öğrenmek ................................................... 19
Dizinin Boyutunu Öğrenmek ............................................................. 19
Belirtilen Dizi Boyutunun Eleman Sayısını Öğrenmek ....................... 20
Dizide Belirtilen İndis Aralığındaki Değerleri Silme ........................... 21
Diziye Değerin Olup Olmadığını Kontrol Etme .................................. 21
Dizinin Eleman Sırasını Tersine Çevirme ........................................... 22
Dizi Elemanlarını Küçükten Büyüğe Sıralama.................................... 22
Dizi İçinde Aranan Değeri Bulma ...................................................... 23
Dizinin İçinde Aranan Değeri Sondan Başlayarak Bulma .................. 24
Dizide Belirtilen Boyutun Üst Sınırını Öğrenmek .............................. 24
Dizinin Eleman Sayısını Öğrenme ..................................................... 25
Dizi İçindeki Herhangi Bir Aralığa Eleman Ekleme ............................ 23
Dizi İçindeki Herhangi Bir Aralığa 1’den Fazla Eleman Ekleme ......... 26
Dizi İçindeki Elemanı Bulup Silme ..................................................... 26
Dizi İçindeki Elemanı İndis Numarasına Göre Silme .......................... 27
2
3. nU
Dizilerle İlgili Örnekler ......................................................................... 28
C#’ ta CLASS YAPISI ............................................................................... 73
C#’ta Class Yapısı ................................................................................. 73
Protected Obje Tanımlamak ................................................................ 82
Virtual ve Override Metods Tanımlamak ............................................ 84
Base Class Constructors ....................................................................... 85
BitArray Sınıfı....................................................................................... 90
Hashtable Sınıfı ................................................................................... 91
SortedList Sınıfı.................................................................................... 94
Stack Sınıfı ........................................................................................... 96
Queue Sınıfı ......................................................................................... 98
Class İçindeki Set ve Get Deyimleri .................................................... 100
Mevcut Class’ları Kullanma ................................................................... 106
Açıklamalar ............................................................................................ 119
3
4. nU
C#’TA DİZİLER
C#’ta Dizi Değişkenlerinin Tanımlanması
Diziler tüm dillerde olduğu gibi c# içinde oldukça önemli yer tutar. DeğiĢkenlerin dizi
olarak tanımlanabilmesi hem kod bloğunu kısalır, hem de programın çok daha hızlı
iĢlemesini sağlar.
Bellekte aynı türden sıralanmıĢ verilerin oluĢturduğu yapıya dizi denir. Tek bir tanımlama
yapılarak istenilen sayıda veri giriĢi sağlanabilir. Dizi elemanları bir indis numarasına
sahiptir. Ġndis numaraları varsayılan olarak sıfırdan baĢlar. Dizinin kaç elemanlı
olacağı dizinin tanımlandığı satırda veya daha sonra da belirtilebilir. Ayrıca dizi
tanımlaması yapıldığında dizinin eleman sayısı, kullanılacak eleman sayısından az ise dizi
yeniden boyutlandırılabilir.
Dizi değiĢkenin eleman sayısını belirtmek için new metodu kullanılır.
Örnek:
private void button1_Click(object sender, EventArgs e)
{
int[] dizidedegisken;
dizidedegisken = new int[10];
dizidedegisken[9] = 100;
label1.Text = dizidedegisken[9].ToString();
}
Dizilere tanımlandıkları anda değerler atayabilirsiniz.AĢağıdaki 5 elemanlı bir dizi tek
satırda tanımlanıyor arkasından oluĢturuluyor en sonunda da dizinin tğm elemanlarına
değer atanıyor. Ġkinci satırda ise dizinin 4. Elemanı (dizi[3]) text‟in içersinde yazdırılıyor.
Örnek:
private void button2_Click(object sender, EventArgs e)
{
int[] dizi = new int[5] { 0, 10, 20, 30, 40 };
textBox1.Text = dizi[3].ToString();
}
ya da
private void button3_Click(object sender, EventArgs e)
{
int[] dizi = { 0, 10, 20, 30, 40 };
textBox1.Text = dizi[3].ToString();
}
Yukardaki iki örnekte aynı Ģeyi yapar.
4
5. nU
Örnek:
Bu örnekte InputBox nesnesi kullanılacağından References /Sağ Click/Add References/
Microsoft. VisualBasic „i ekliyoruz.
private void button1_Click(object sender, EventArgs e)
{
byte i;
int[] dizi = new int[5];
for (i = 0; i < 5; i++)
{
dizi[i] = int.Parse(Microsoft.VisualBasic.Interaction.
InputBox("Dizinin" + (i + 1) + ".elemanını girin", "Bilgi Girişi", "", 20,
20));
}
for (i = 0; i < 5; i++)
{
listBox1.Items.Add(dizi[i]);
}
}
Ekran Çıktısı
“Ekle” butonuna basıldığında ekrana
InputBox() ekranı gelir ve dizinin
elemanları girilir. Sonrasında InputBox()‟a
girilen değerler ListBox‟a eklenir.
5
6. nU
Yukarıdaki örneğin geliştirilmişi
5 elemanlı bir int dizi tanımlanarak, dizi elemanları “Dizi elemanlarını gir” butonuna
tıklandığında InputBox() ile diziye diziden de liste kutusuna eklenmektedir. BaĢlangıçta
“EKLE” butonu pasif haldedir. Dizi elemanlarının giriĢinden sonra “Dizi elemanlarını gir”
Butonu pasif hale “Ekle” butonu aktif hale gelmektedir. Ekle butonuna tıklandığında
dizi yeniden boyutlandırılarak InputBox()‟tan diziye yeni eleman giriĢi yapılmakta ve aynı
zamanda liste kutusuna da eklenmektedir. ÇıkıĢ düğmesiyle de program
sonlandırılmaktadır.
int sayi;
private void button1_Click(object sender, EventArgs e)
{
byte i;
int[] dizi1 = new int[5];
for (i = 0; i < 5; i++)
{
dizi1[i] =
int.Parse(Microsoft.VisualBasic.Interaction.InputBox("Dizinin" + (i
+ 1) + ".elemanını girin", "Bilgi Girişi", "", 20, 20));
}
for (i = 0; i < 5; i++)
{
listBox1.Items.Add(dizi1[i]);
}
sayi = 5;
button1.Enabled = false;
button2.Enabled = true;
}
byte s = 5;
private void button2_Click(object sender, EventArgs e)
{
int[] dizi1 = new int[sayi + 1];
dizi1[sayi] =
int.Parse(Microsoft.VisualBasic.Interaction.InputBox("Dizinin" + (s
+ 1) + ".elemanını girin", "Bilgi Girişi", "", 20, 20));
listBox1.Items.Add(dizi1[sayi]);
}
private void button3_Click(object sender, EventArgs e)
{
Close();
}
private void Form1_Load(object sender, EventArgs e)
{
button2.Enabled = false;
}
6
7. nU
Ekle butonuna bastığımızda InputBox
ekranı gelir. Ġstediğimiz sayıyı girip
“Tamam” butonuna bastığımızda ListBox‟a
değer eklenir.
7
8. nU
Örnek:
4 elemanlı string bir dizi tanımlanıp ilk değerleri verilerek formun çalıĢtırılmasında bu
değerler comboBox() ta listelenmektedir.
public string[] mevsimler = new string[4] { "Ġlkbahar", "Yaz",
"Sonbahar", "Kış" };
private void Form4_Load(object sender, EventArgs e)
{
comboBox1.Items.Add(mevsimler[0]);
comboBox1.Items.Add(mevsimler[1]);
comboBox1.Items.Add(mevsimler[2]);
comboBox1.Items.Add(mevsimler[3]);
}
private void comboBox1_TextChanged(object sender, EventArgs e)
{
if(comboBox1.SelectedIndex==0)
textBox1.Text=mevsimler[0];
if(comboBox1.SelectedIndex==1)
textBox1.Text=mevsimler[1];
if(comboBox1.SelectedIndex==2)
textBox1.Text=mevsimler[2];
if(comboBox1.SelectedIndex==3)
textBox1.Text=mevsimler[3];
}
8
9. nU
Çok Boyutlu Dizileri Tanımlamak
Bazı durumlarda (özellikle büyük projelerde) çok boyutlu dizi tanımlamak zorunda
kalabilirsiniz. Bu genlikle satır ve sütundan iki boyutlu bir dizi olacaktır. (Özellikle matris
hesaplarıyla ilgilenen mühendisler için) Bazen daha büyük boyutlu da olabilir.
Çok boyutlu bir dizi tanımlamak, sizi tek boyutlu birçok dizi tanımlamak yerine bir tane
çok boyutlu dizi tanımlayarak problemi çözme imkânı verir. Bu hem kod karmaĢasından
hem de hız açısından faydalıdır. AĢağıda iki boyutlu bir dizi tanımlanmıĢ olup (2 satır, 3
sütunlu) ilk satır üçüncü sütunlu değere 200 değeri atanmıĢtır.
Örnek:
private void button3_Click(object sender, EventArgs e)
{
int[,] dizi = new int[2, 3];
dizi[0, 2] = 200;
textBox1.Text=dizi[0,2].ToString();
}
dizi [2, 3] ün sonuçta 6 elemanlı bir dizi olduğu aĢağıda anlatılmaya çalıĢıldı.
dizi [0, 0], dizi [0, 1], dizi [0, 2], dizi [1, 0], dizi [1, 1], dizi [1, 2] görüldüğü gibi 6
elemanlı iki boyutlu bir dizi oluĢturuldu.
Burada dizinin ilk ve ikinci elemanı yerine i,j değiĢkenleri kullanılarak bir çok iĢlem
kolaylıkla yapılabilir.
9
11. nU
Dinamik Diziler
C#‟ ta diziler önce tanımlanıp daha sonra eleman sayısı belirlendiği için bu diziler aynı
zamanda dinamik dizi olarak da kullanılabilirler. Burada [] içerisindeki değer bir
textBox‟tan veya bir inputBox‟tan rahatlıkla alınabilir. Bu sayede bu diziler aynı zamanda
bir dinamik dizi görevi görürler.
Dinamik diziler öğrenci sayısının bilinmediği sınıflar için veya oyuncu sayısının bilinmediği
bilhassa network oyunları için kullanılır. Mesela öğrenci sayısını dinamik dizi olarak
tanımlamak çok doğru bir karardır. Çünkü A sınıfı 40 kiĢi, B sınıfı 50 kiĢiden ibaret
olabilir. Bu durumda öğrenci sayısını bir textBox‟ a aldırarak [] içerisinde atayabilirsiniz.
Onu da for döngüsüyle iĢleme sokup tüm öğrencilerin, isimlerini, numaralarını tek satırlık
kodla aldırmanız mümkün olur aksi halde en büyük sınıfa göre bir dizi tanımlayacaktınız.
Diğer ufak sayılarda iĢlem yaparken artan değiĢkenler bellekte boĢu boĢuna yer iĢgal
edecekti. Bu iyi bir programcı için istenen bir Ģey değildir.
Bir diziyi arraylist sınıfından tanımlamak demek dizinin boyutunun ihtiyaç duyuldukça
arttırılması veya azaltılması demktir.10 elemanımız ve 10 elemanlı bir dizimiz varsa ve
listeye yeni eleman eklemek isteniyorsa dizinin elemanını ihtiyaç duyuldukça
arttırabilirsiniz. Üstelik dizinin eski hali korunacaktır. Aynı durum dizinin boyutunu
azaltmak içinde geçerlidir.
Arraylist sınıfı diziye her eleman eklendiğinde dizi boyutu arttırmaz Bunun yerine ilk
etapta 4 elemanlı bir dizi oluĢturur. Ġlk 4 elemanda dizinin boyutu sabit kalır.5. eleman
eklendiğinde dizi boyutu 2 katına çıkarılır.
Not: Arraylist sınıfını kullanabilmek için öncelikle;
using System.Collections; kütüphanesini çağırmalıyız.
ArrayList Fonksiyonları ileriki sayfalarda iĢlenecektir.
11
12. nU
Jagged Diziler
C# ile gelen güzel bir olay olan jagged dizilerdir. Bunu önceden benim gibi C kullanan
vatandaĢlar pointer kullanarak yapıyordu. Bu Ģekilde malloc()'la yer isteyip sonra onu
dinamik oluĢturup siliyorduk. Jagged (pürüzlü, düzensiz) dizilerde ise sizin istediğiniz
kadar temel eleman oluĢturup bu elemanların her birinin alt dizisi ihtiyaca göre
oluĢturulur. OluĢturacağımız dizilerde satırların eleman sayıları birbirinden farklıysa bu
durumlarda Jagged dizi tanımlanır.
Bir diziyi jagged olarak tanımlamak ona bir özellik kazandırmanız dizi ile ilgili tüm
iĢlemleri yine yapabilirsiniz.
Mesela diziyi tablo halinde ifade edecek olursak Ģöyle bir yapıda dizimiz olabilir.
Dizinin alt eleman sayısı farklılık gösterebiliyor. .net listview datagrid vs. gibi
bileĢenlerdeki ekleme mantığıyla hareket edeceğiz. Ġlk önce itemleri (dizinin [i][0])
kısmını ayarlayacağız. Sonra da o itemlere (dizi elemanlarına ait ) alt itemleri oluĢturup
ekleyeceğiz.
Listview'e rastgele oluĢturulmuĢ verileri rastgele boyutlu dizilere nasıl atılacağını
gösterelim.
ġimdi dizinin [i][0]. elemanları Listviewde item gibi olacak sonra listview e diğer kayıtlar
subitemler olarak gelecek. Bu Ģekilde iç içe for döngüsüyle yapacağız. Matrisler gibi
düĢünürsek daha kolay anlaĢılır.
12
13. nU
Jagged Dizisinin Tanımlanması
Örnek:
int[][] jdizi = new int[3][];
3 satırdan oluĢan bir dizi tanımladım. Fakat her satırın eleman sayısı birbirinden farklı
olacaktır. (Aynıda olabilir) Bu sayıları da programın herhangi bir yerinde bildireceğim.
Örnek:
private void button1_Click(object sender, EventArgs e)
{ //Dizinin 1.,2. ve 3. satırlarının kaç değerden oluşacağı
belirtilmiştir.
//Sonra da dizilere değer atanmıştır.
int[][] jdizi;
jdizi = new int[3][];
jdizi[0] = new int[4][];
jdizi[1] = new int[3][];
jdizi[2] = new int[2][];
jdizi[0][3] = 100;
jdizi[2][1] = 500;
Form1.ActiveForm.Text = jdizi[2][1].ToString();
}
Yukarıdaki kod aĢağıdaki gibi Ģematize edilebilir.
Jdizi[0][0] jdizi[0][1] jdizi[0][2] jdizi[0][3]
Jdizi[1][0] Jdizi[1][1] Jdizi[1][2]
Jdizi[2][0] Jdizi[0][1]
Görüldüğü gibi ilk satır 4 elemandan , 2. Satır 3 elemandan, 3. Satırda 2 elemandan
oluĢmaktadır. Artık her elemana rahatlıkla değer atayabilirsiniz. Burada dikkat edilmesi
gereken husus jdizi[2][3] yukarıdaki elemanlar dıĢında herhangi bir tanesi de olabilir)
elemanına değer atayamayacağınızdır. Eğer böyle bir atama yaparsanız, çalıĢma anında
programınız kırılacaktır.
Örnek:
string[][] aile = new aile[10][];
Alt dizileri ise tek tek tekrar dizi tanımlıyormuĢuz gibi tekrar tanımlayacağız. Mesela
dizinin 1. elemanı 2. elemanı ... hepsi ayrı ayrı birer dizi olacaktır.
Örnek:
aile[i] = new string[10];
ġeklinde tanımlarız. Fakat bunun düzensizliği nerde kaldı? AĢağıdaki örneğe bakalım.
13
14. nU
Örnek:
tut=r.Next(1,20);
aile[i] = new string[tut];
Rastgele değerlerde boyutlu bir dizi. Dizi Ģimdi jagged oldu. Sonra buna random olarak
rastgele değerler verip dolduralım.
Cascade: (char)65 dersek 'a' olur. Onun koyacağımız tip belirteçleri cascade oluyor.
Bununla o değeri bellekteki tutulma Ģekli belirlenir.
Rastgele değerler için;
Örnek:
public string veri_ekle()
{
string tut1 = "";
for (int i = 0; i< r.Next(1, 15); i++)
//Verinin boyu da random ayarlanır
{
tut1 += Convert.ToString((char)r.Next(65, 90));
//65 ve 90 alafabenin asci max min değerleridir
//a,z arasında rastgele harf ürettik'char’cascadedir.
}
return tut1;
}
Bunu da sırayla jagged diziye ekledikten sonra artık ispat için listviewde sergilemek
kalıyor. Ekleme iĢlemi tam olarak solutionda mevcuttur.
Listview'e eklemek artık daha kolay olacaktır.
Örneğin Devamı:
for (int a = 0; a < eb ; a++)
{
//eb en buyuk alt kolonun boyutu
listView1.Columns.Add(a.ToString());
}
for (int i = 0; i < Convert.ToInt32(textBox1.Text); i++)
{
listView1.Items.Add(aile[i][0]);
//Temel elemanlar item olacaktır
for (int j = 0; j < aile[i].Length; j++)
{
listView1.Items[i].SubItems.Add(aile[i][j].ToString());
//Alt elemanlar subitem olacaktır
}
}
14
15. nU
Sonuç:
Görüldüğü üzeri bazı alt diziler 2 bazısı 18 ... olmuĢ. Böylece bellek israfı önlenmiĢtir.
Örnek: Boyutu 3 olan diğer boyutu belli olmayan bir jagged dizi tanımlanarak 2.
boyutunun elemanlarını form yüklendiğinde diziye girilmektedir. Her bir sütun
elemanlarını ayrı ayrı liste kutusuna listeleyen ve bu dizinin rankını “Dizinin rankını
göster” düğmesine basıldığında mesaj kutusunda gösteren program.
string[][] aile = new string[3][];
private void Form5_Load(object sender, EventArgs e)
{
aile[0] = new string[] {"Nurdan","Nurşan","Hakan","Seçkin"};
aile[1] = new string[] {"Sen", "Ben", "O", "Biz", "Siz" };
aile[2] = new string[] {"Sevde", "Sercan", "Selçuk" };
for (int j = 0; j < 4; j++)
listBox1.Items.Add(aile[0][j]);
for (int j = 0; j < 5; j++)
listBox2.Items.Add(aile[1][j]);
for (int j = 0; j < 3; j++)
listBox3.Items.Add(aile[2][j]);
}
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("Aile Dizisi"+(aile.Rank).ToString()
+"boyutludur." ,"Rank");
}
15
16. nU
Koleksiyonlar
Dizi eleman sayısının esnek Ģekilde tanımlanması için kullanılan yapılardır. Eleman sayısı,
programda kullanılacak eleman sayısına göre artırılır ya da azaltılır. Koleksiyonlar,
System.Collections isim alanında (namespace) bulunur. Koleksiyonlarla çalıĢmaya
baĢlamadan önce System.Collection‟ı using deyimiyle projenin baĢına dâhil etmek
gerekir.
16
17. nU
Dizilerle İlgili Diğer İşlemler
Arraylist Fonksiyonları
ArrayList oluĢturabilmek için projemize using System.Collections; kodunu using
satırına eklemeliyiz. Bu kodla System.Collections kütüphanesini çağırmıĢ oluruz.
Klasik dizilerle çalıĢırken karĢılaĢabileceğimiz temel sorunlar Ģunlardır.
Dizilerin sınırları sabittir. int[] dizi = new int[60];
Dizilerin tüm elemanları aynı türden olmalıdır. Örneğin; Hepsi int
Kullanmadığımız dizi elemanlarından dolayı bellek alanları
gereksiz yere iĢgal edilmektedir.
Örneğin sayısını bilemediğimiz bir dizinin eleman sayısını 500 olarak belirlediğimizi
varsayalım. ÇalıĢma zamanında dizimizin sadece 10 elamanını kullandığımız durumda
diğer 490 elemanlık bellek alanı boĢ olarak kalır. Öte yandan dizimizde tutmak istediğimiz
değiĢkenlerin sayısı 501 bir olduğu bir durumda "IndexOutOfRangeException" istisnai
durumu ortaya çıkar ve program bu hatadan dolayı sonlanır.
17
18. nU
Dizinin Yavru Değişkenine Eleman Ekleme
ArrayList class‟indan oluĢturduğumuz yavru değiĢkene bir eleman eklemek için Add()
kullanılır.
Örnek:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
ArrayList diziListe = new ArrayList();
int[] dizi = new int[5] { 1, 2, 3, 4, 5 };
diziListe.Add(dizi[2]);// diziListe'nin ilk elemani 3
diziListe.Add(12); // diziListenin ikinci elemani 12
diziListe.Add("kelime");
// dizilistenin üçüncü elemani kelime stringi olur
this.Text = diziListe[0].ToString();
// Form'un basligina 3 yazar
this.Text = diziListe[1].ToString();
// Form'un basligina 12 yazar
this.Text = diziListe[2];
// Form'un basligina kelime yazar
}
}
Burada dikkat edilmesi gereken ilk nokta Add fonksiyonu ile ArrayList‟e ayni anda
sadece bir eleman ekleyebilmemiz. Ġkinci önemli nokta ise hem bir integer değeri ekledik
hem de bir string değeri ekledik. Buradan da anlaĢılacağı üzere oluĢturduğumuz
Arraylist‟e object türünde değerler atabiliyoruz. Mesela biz burada diziListe isimli yavru
değiĢkene bool, double, float, string, byte, hatta Button, listBox türünde nesneler de
ekleyebiliyoruz çünkü object türü değiĢken hepsini kapsayabiliyor.
18
19. nU
Dizinin Eleman Sayısını Öğrenmek
Bir dizinin kaç elemandan oluĢtuğunu öğrenmek için Length kullanılır.
Örnek:
private void button2_Click(object sender, EventArgs e)
{
int[] dizi = new int[5] { 0, 10, 20, 30, 40 };
textBox1.Text = dizi.Length.ToString(); // 5 yazdırır.
}
Eğer Jagged bir dizide aynı fonksiyonu kullanırsanız geriye satır sayınız döner. Çünkü
hangi satıra kaç eleman atayacağınız değiĢkenlik gösterecektir.
Örnek:
private void button3_Click(object sender, EventArgs e)
{
int[][] jdizi;
int[,]nurdan= new int[2,3];
jdizi = new int[5][];
jdizi[0] = new int[4];
jdizi[1] = new int[3];
jdizi[2] = new int[2];
jdizi[0][3] = 100;
Form1.ActiveForm.Text = jdizi.Length.ToString();}
Dizinin Boyutunu Öğrenmek
Bir dizinin boyutunu öğrenmek için Rank kullanılır.
Örnek:
private void button4_Click(object sender, EventArgs e)
{
int[,] dizi = new int[2, 3];
dizi[0, 2] = 200;
textBox1.Text = dizi.Rank.ToString();//2 yazdırır.
}
Aynı fonsiyonu Jagged diziler için kullanırsanız geriye 1 değeri döner.
Örnek:
private void button5_Click(object sender, EventArgs e)
{
int[][] jdizi;
jdizi = new int[10][];
jdizi[0] = new int[4];
jdizi[1] = new int[3];
jdizi[2] = new int[2];
19
20. nU
jdizi[0][3] = 100;
jdizi[2][1] = 500;
Form1.ActiveForm.Text = jdizi.Rank.ToString();// 1 yazar.
}
Belirtilen Dizi Boyutunun Eleman Sayısını Öğrenmek
Bir dizinin herhangi bir boyutunun kaç elemanlı olduğunu öğrenmek için GetLength()
kullanılır. AĢağıda dizi değiĢkeninin ilk boyutunu textBox‟un içine yazdırdık. Dizi çok
boyutlu da olabilirdi o zaman GetLength(1) veya daha büyük bir değer girilebilirdi.
Örnek:
private void button6_Click(object sender, EventArgs e)
{
int[] dizi = new int[5] { 0,5,10,15,20,25};
textBox1.Text = dizi.GetLength(0).ToString(); //6 yazdırır.
}
Aynı fonksiyonu Jagged diziler için kullanırsanız sadece ”0” için çalıĢır. Yani dizinin ilk
boyutunun kaç elemandan oluĢtuğunu öğrenebilirsiniz. Çünkü tanımlandığı anda diğer
boyutlar belli değildir.
Örnek:
private void button7_Click(object sender, EventArgs e)
{
int[][] jdizi;
jdizi = new int[10][];
jdizi[0] = new int[4];
jdizi[1] = new int[3];
jdizi[2] = new int[2];
jdizi[0][3] = 100;
jdizi[2][1] = 500;
Form1.ActiveForm.Text = jdizi.GetLength(0).ToString();
// 10 yazar.
//Burada GetLength(1) yazılmaz program hata verir.
}
Clear, Reverse, IndexOf metotları Array sınıfında Shared (paylaĢtırılmıĢ) olarak tanımlı
metotlardır. ĠĢlemin yapılacağı dizi parametre olarak verilmelidir.
20
21. nU
Dizide Belirtilen İndis Aralığındaki Değerleri Silme
Parametre olarak verilen dizinin, belirtilen indis aralığındaki tüm değerleri temizlemek için
Clear() kullanılır. Temizleme iĢleminde atanan değer, dizi elemanlarının tiplerine göre
değiĢir. Örneğin int tipinde tanımlı bir dizinin elemanları temizlenirse 0 değerini alacaktır.
Buna karĢın String tipindeki elemanlar “” (boĢ yazı) değerini alır.
Örnek:
int[] dizi = { 12, 13, 14, 15 };
// 1. indisten başlayarak, 3 elemanı temizle
Array.Clear(dizi, 1, 3);
MessageBox.Show(dizi[2].ToString());
//Sonuç = 0
// Dizinin tüm elemanlarını temizler
Array.Clear(dizi, 0, dizi.Length);
Örnek:
private void button1_Click(object sender, EventArgs e)
{
ArrayList diziListe = new ArrayList();
int[] dizi = new int[5] { 11, 21, 34, 56, 74 };
diziListe.AddRange(dizi);
diziliste.Clear();
// diziListe'nin içine tamamen temizler
textBox1.Text = diziListe[2].ToString();// hata verir.
}
Diziye Değerin Olup Olmadığını Kontrol Etme
Fonksiyona parametre olarak verilen değiĢkenin ArrayList içinde olup olmadığına
Contains() bakar. Eğer var ise true yok ise false döndürür.
Örnek:
private void button1_Click(object sender, EventArgs e)
{
ArrayList diziListe = new ArrayList();
int[] dizi = new int[5] { 1, 2, 3, 4, 5 };
diziListe.AddRange(dizi);
if (diziListe.Contains(Convert.ToInt32(textBox1.Text)) == true)
{
MessageBox.Show("girilen deger diziListe içinde mevcut");
}
else
{
MessageBox.Show("girilen deger diziListe içinde yok");
}
}
21
22. nU
Dizinin Eleman Sırasını Tersine Çevirme
Parametre olarak verilen dizinin eleman sırasını tersine çevirmek için Reverse()
kullanılır. Dizinin tüm elemanlarının veya belirli indis aralığındaki elemanlarının sırası
tersine çevrilebilir.
Örnek:
string[] harfler = { "A", "B", "C" };
Array.Reverse(harfler);
MessageBox.Show(harfler[2]);
// Sonuç = A
string[] harfler = { "A", "B", "C" };
Array.Reverse(harfler, 0, 1);
MessageBox.Show(harfler[2]);
// Sonuç = C
Örnek:
private void button1_Click(object sender, EventArgs e)
{
ArrayList diziListe = new ArrayList();
int[] dizi = new int[5] { 7, 8, 9, 10, 11 };
diziListe.AddRange(dizi);
diziListe.Reverse();
// dizi bundan sonra {11,10,9,8,7} halini alir.
textBox1.Text = diziListe[2].ToString();
// textBox1'in içine 9 yazar.
}
Dizi Elemanlarını Küçükten Büyüğe Sıralama
Arraylist‟in elamanlarını küçükten büyüğe doğru sıralamak için Sort() kullanılır. Eğer
elemanlar string tipinde ise alfabetik sıralama yapar.
Örnek:
private void button1_Click(object sender, EventArgs e)
{
ArrayList diziListe = new ArrayList();
string[] dizi = new string[4] { "Ankara", "Izmir",
"Istanbul", "Gaziantep" };
diziListe.AddRange(dizi);
diziListe.Sort();
//dizinin son hali {"Ankara","Gaziantep","Istanbul","Izmir"}
seklinde olur.
textBox1.Text = diziListe[3].ToString();
// textBox1'in içine Izmir yazar.
}
22
23. nU
Örnek:
private void button1_Click(object sender, EventArgs e)
{
ArrayList diziListe = new ArrayList();
int[] dizi = new int[5] { 11, 21, 34, 56, 74 };
diziListe.AddRange(dizi);
textBox1.Text = diziListe[2].ToString();
// textBox1’in içine 34 yazar
}
Dizi İçinde Aranan Değeri Bulma
Ġlk parametrede verilen dizide, ikinci parametrede verilen değeri aramak için IndexOf()
kullanılır. Aranan değer dizide bulunursa indisi, bulunamazsa -1 döndürür. IndexOf
fonksiyonu aramaya ArrayList‟in baĢından baslar.
Örnek:
float[] notlar = { 78.1, 99.9, 100, 12.2 };
float maxNot = 100;
MessageBox.Show(Array.IndexOf(notlar, maxNot).ToString());
// Aranan maxNot değerinin indisi = 2
Örnek:
private void button11_Click(object sender, EventArgs e)
{
ArrayList diziListe = new ArrayList();
string[] dizi = new string[5] {"aa","bb","cc","dd","ee" };
// fonksiyonun parametresi aradigimiz elemandir
diziListe.AddRange(dizi);
int sira;
sira = diziListe.IndexOf("cc", 0, diziListe.Count–1);
textBox1.Text = sira.ToString();
}
23
24. nU
Dizinin İçinde Aranan Değeri Sondan Başlayarak Bulma
IndexOf fonksiyonu gibi ArrayList içinde herhangi bir elemanı aramak için LastIndexOf()
kullanılır. IndexOf‟tan farkı aramaya sondan baĢlamasıdır. Elaman sayısı çok fazla olan
Arraylist‟lerde aradığımız eleman sonlara daha yakınsa bu fonksiyon bize hız kazandırır.
Eğer aranan eleman ArrayList içinde var ise elemanın indis numarasını, yok ise -1
döndürür.
Örnek:
private void button1_Click(object sender, EventArgs e)
{
ArrayList diziListe = new ArrayList();
string[] dizi = new string[5] {"aa","bb","cc","dd","ee" };
diziListe.AddRange(dizi);
int sira;
sira = diziListe.LastIndexOf("dd", 0, diziListe.Count – 1);
// Aramaya sondan basladigi için elemani 2. seferde bulur.
Eger IndexOf kullansaydik elemani üçüncü seferde bulacakti.
textBox1.Text = sira.ToString();
}
Dizide Belirtilen Boyutun Üst Sınırını Öğrenmek
Bir dizinin herhangi bir boyutunun en üst sınırını öğrenmek için GetUpperBound()
kullanılır.
Örnek:
private void button8_Click(object sender, EventArgs e)
{
int[] dizi = new int[5] { 0, 20, 10, 40, 30 };
textBox1.Text = dizi.GetUpperBound(0).ToString();
//4 yazdırır.
}
Aynı iĢlemi Jagged diziler için kullanırsanız. Sadece ilk boyut için değer döndürebilirsiniz.
BaĢka bir boyut girerseniz program çalıĢmayacaktır.
Örnek:
private void button9_Click(object sender, EventArgs e)
{
int[][] jdizi;
jdizi = new int[10][];
jdizi[0] = new int[4];
jdizi[1] = new int[3];
jdizi[2] = new int[2];
jdizi[0][3] = 100;
jdizi[2][1] = 500;
24
25. nU
Form1.ActiveForm.Text =
jdizi.GetUpperBound(0).ToString();
// 9 yazar.
//Burada GetUpperBound(1) yazılmaz program hata verir.
}
Diğer dizi fonksiyonları da Jagged dizilerde kullanılabilir fakat gireceğiniz değerlere
birazcık dikkaet etmeniz gerekecektir.
Dizinin Eleman Sayısını Öğrenme
ArrayList‟in eleman sayısını öğrenmek için Count() fonksiyonu kullanılır.
Örnek:
private void button7_Click(object sender, EventArgs e)
{
ArrayList diziListe = new ArrayList();
int[] dizi = new int[] { 1, 2, 3, 4, 5, 6 };
diziListe.AddRange(dizi);
textBox1.Text = diziListe.Count.ToString();
//textBox1'in içine 6 yazar
}
Dizi İçindeki Herhangi Bir Aralığa Eleman Ekleme
ArrayList içinde herhangi bir aralığa eleman eklemek için Insert() kullanılır. Araya
eleman eklediğimiz için ArrayList‟in eleman sayısı da artmıĢ olur (tıpkı otobüs beklerken
birinin araya girmesi gibi). Fonksiyonun ilk parametresine elemanı eklemek istediğimiz
indis numarasını, ikinci parametreye ise elamanı yazarız.
Örnek:
private void button10_Click(object sender, EventArgs e)
{
ArrayList diziListe = new ArrayList();
string[] dizi = new string[5] { "aa", "bb", "cc", "dd", "ee" };
// diziListe.AddRange(dizi);
diziListe.Insert(2, "ff");
// diziListenin 2 numarali indisine ff ekledik.
diziListenin eleman sayisi 6 oldu.
textBox1.Text = diziListe[2].ToString();
// textBox1'in içine ff yazar.
}
25
26. nU
Dizi İçindeki Herhangi Bir Aralığa 1’den Fazla Eleman Ekleme
ArrayList içinde herhangi bir aralığa birden fazla elemanı tek seferde eklemek için
InsertRange () kullanılır.
Örnek:
private void button12_Click(object sender, EventArgs e)
{
ArrayList diziListe = new ArrayList();
int[] dizi = new int[5] { 0, 1, 2, 3, 4 };
diziListe.AddRange(dizi);
int[] eklenecek=new int[3]{ 10, 11, 12 };
diziListe.InsertRange(2, eklenecek);
// diziListenin 2 numarali indisinden sonra {10,11,12}
dizisini ekledik. diziListenin eleman sayisi 8 oldu.
// diziListenin son hali{0,1,10,11,12,2,3,4,5} seklidedir.
textBox1.Text = diziListe[2].ToString();
// textBox1'in içine 10 yazar.
}
Dizi İçindeki Elemanı Bulup Silme
Fonksiyona parametre olarak girilen elemanı Arraylist‟in içinde bulup silmek için Remove
() kullanılır. Böylece ArrayList‟in eleman sayısı 1 azalmıĢ olur.
Örnek:
private void button13_Click(object sender, EventArgs e)
{
ArrayList diziListe = new ArrayList();
int[] dizi = new int[5] { 0, 1, 2, 3, 4 };
diziListe.AddRange(dizi);
diziListe.Remove(3)
textBox1.Text = diziListe[3].ToString();
// textBox1'in içine 4 yazar.
}
26
27. nU
Dizi İçindeki Elemanı İndis Numarasına Göre Silme
Fonksiyona parametre olarak girilen indis numarasını Arraylist‟in içinde bulup silmek için
RemoveAt () kullanılır. Remove fonksiyonundan tek farkı parametre olarak elemanı
değil elemanın indis numarasını almasıdır.
Örnek:
private void button15_Click(object sender, EventArgs e)
{
ArrayList diziListe = new ArrayList();
int[] dizi = new int[5] { 7, 8, 9, 10, 11 };
diziListe.AddRange(dizi);
diziListe.Remove(2);
textBox1.Text = diziListe[2].ToString();
// textBox1'in içine 10 yazar.
}
27
28. nU
Dizilerle İlgili Örnekler
Örnek 1: Girilen sayıyı yazıya çeviren program
Kodlar:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace YazıyaÇevir
{
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Label label1;
private System.ComponentModel.Container components = null;
public Form1()
{
InitializeComponent();
}
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
private void InitializeComponent()
{
this.textBox1 = new System.Windows.Forms.TextBox();
this.button1 = new System.Windows.Forms.Button();
this.label1 = new System.Windows.Forms.Label();
this.SuspendLayout();
this.textBox1.Location = new System.Drawing.Point(8, 24);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(200, 20);
this.textBox1.TabIndex = 0;
28
29. nU
this.button1.Location = new System.Drawing.Point(216, 24);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(75, 23);
this.button1.TabIndex = 1;
this.button1.Text = "Çevir";
this.button1.Click += new
System.EventHandler(this.button1_Click);
this.label1.BackColor =
System.Drawing.SystemColors.ActiveCaption;
this.label1.Location = new System.Drawing.Point(12, 56);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(48, 21);
this.label1.TabIndex = 2;
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(292, 94);
this.Controls.Add(this.label1);
this.Controls.Add(this.button1);
this.Controls.Add(this.textBox1);
this.Name = "Form1";
this.Text = "Form1";
this.Load += new System.EventHandler(this.Form1_Load);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
string çevir(string sayı)
{
int max_basamak_say = 18; //18 basamaklı-katrilyon
string[] birler = { "", "bir", "iki", "üç", "dört", "beş", "altı",
"yedi", "sekiz", "dokuz"};
string[] onlar = { "", "on", "yirmi", "otuz", "kırk", "elli",
"altmış",
"yetmiş", "seksen", "doksan"};
//Eğer 18 basamaktan daha fazla kullanacaksanız
//katrilyondan önce o basamakları da ekleyin
string[] binler = {"katrilyon", "trilyon", "milyar", "milyon",
"bin", ""};
int i, uz ;
int[] bas = new int[3];
string sonuç="", ara_sonuç="";
uz = sayı.Length;
//sayının kullanılmayan basamaklarını sıfırla doldur
sayı = sayı.PadLeft(max_basamak_say, '0');
//sayıyı üçerli basamaklar halinde ele al
for (i = 0 ; i <= max_basamak_say / 3 - 1 ; i++)
{
29
31. nU
Örnek 2: Dinamik Dizi Örneği
Kayıt‟a tıklandığında; TextBox lara girilen değerleri alır, personel sayısını (girilen kayıt
sayısı) , dizi boyutunu (textBox lara girilen bilgi sayısı) bulur.
Listele butonuna tıklandığında forma girilen bilgileri 2. Formdaki ListBox‟a ekler.
Kodlar:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;
namespace dinamikdizi
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
struct personel
{
public string ad, meslek, babaadi, dogumyeri, soyad;
public override string ToString()
{
return "ADI=" + ad + ", SOYADI= " + soyad + " ,
MESLEĞĠ= " + meslek + ",BABA ADI=" + babaadi + ",DOĞUM YERĠ=" +
dogumyeri;
}
}
ArrayList Pers = new ArrayList();
private void button1_Click(object sender, EventArgs e)
{
personel p;
p.ad = textBox1.Text;
p.soyad = textBox2.Text;
p.meslek = textBox3.Text;
p.babaadi = textBox4.Text;
p.dogumyeri = textBox5.Text;
Pers.Add(p);
label8.Text = Pers.Count.ToString();
label9.Text = Pers.Capacity.ToString();
}
private void button2_Click(object sender, EventArgs e)
{
int i;
Form2 frm = new Form2();
31
32. nU
for (i = 0; i <= Pers.Count - 1; i++)
frm.listBox1.Items.Add(Pers[i].ToString());
frm.Show();
}
}
}
Ekran Çıktısı:
32
33. nU
Örnek 3: x1,x2,x3 0 ya da değerlerini alabilen değiĢkenler olmak üzere
ax1+bx2+cx3=d denkleminin çözümünü sağlayan (x1,x2,x3) değerlerini sonuc1 label ına
yazan, çözümü yoksa denklemin çözümü yok diye sonuç1 label ına yazan program.
Bunun yanında d deki değerin asal olup olmadığını sonuc2 label ına yazan ve Temizle
butonuna bastığında textBox ların içini 0 yapıp label lerin içini temizleyen program.
Kodlar:
Formun Kodları
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace deniz_tanır_04078541
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
int a1,a2,a3,a4;
int[] sonuc = new int[3];
a1 = Convert.ToInt16(textBox1.Text);
a2= Convert.ToInt16(textBox2.Text);
a3 = Convert.ToInt16(textBox3.Text);
a4 = Convert.ToInt16(textBox4.Text);
sinav yeni = new sinav(a1, a2, a3, a4);
sonuc = yeni.hesapla();
label5.Text = sonuc[0].ToString() + "," +
sonuc[1].ToString()+","+sonuc[2].ToString();
if (sonuc[0] == 100)
label5.Text = "çözüm yok";
}
private void button2_Click(object sender, EventArgs e)
{
int a1, a2, a3, a4;
int[] sonuc = new int[3];
a1 = Convert.ToInt16(textBox1.Text);
a2 = Convert.ToInt16(textBox2.Text);
a3 = Convert.ToInt16(textBox3.Text);
33
34. nU
a4 = Convert.ToInt16(textBox4.Text);
sinav yeni = new sinav(a1, a2, a3, a4);
label6.Text= yeni.asalmi();
}
private void button3_Click(object sender, EventArgs e)
{
textBox1.Text = "0";
textBox2.Text = "0";
textBox3.Text = "0";
textBox4.Text = "0";
label5.Text = "";
label6.Text = "";
}
}
}
Class Kodları
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace egesinav
{
class sinav
{
int a, b, c, d;
int x1, x2, x3;
public sinav(int a3, int b3, int c3, int d3)
{
a = a3;
b = b3;
c = c3;
d = d3;
}
public int[] hesapla()
{
int[] k=new int[3];
k[0] = 100;
x1 = 0; x2 = 0; x3 = 0;
if (x1 * a + x2 * b + x3 * c == d)
{
k[0] = x1;
k[1] = x2;
k[2] = x3;
return k;
}
x1 = 0; x2 = 0; x3 = 1;
if (x1 * a + x2 * b + x3 * c == d)
{
k[0] = x1;
k[1] = x2;
k[2] = x3;
34
35. nU
return k;
}
x1 = 0; x2 = 1; x3 = 0;
if (x1 * a + x2 * b + x3 * c == d)
{
k[0] = x1;
k[1] = x2;
k[2] = x3;
return k;
}
x1 = 0; x2 = 1; x3 = 1;
if (x1 * a + x2 * b + x3 * c == d)
{
k[0] = x1;
k[1] = x2;
k[2] = x3;
return k;
}
x1 = 1; x2 = 0; x3 = 0;
if (x1 * a + x2 * b + x3 * c == d)
{
k[0] = x1;
k[1] = x2;
k[2] = x3;
return k;
}
x1 = 1; x2 = 0; x3 = 1;
if (x1 * a + x2 * b + x3 * c == d)
{
k[0] = x1;
k[1] = x2;
k[2] = x3;
return k;
}
x1 = 1; x2 = 1; x3 = 0;
if (x1 * a + x2 * b + x3 * c == d)
{
k[0] = x1;
k[1] = x2;
k[2] = x3;
return k;
}
x1 = 1; x2 = 1; x3 = 1;
if (x1 * a + x2 * b + x3 * c == d)
{
k[0] = x1;
k[1] = x2;
k[2] = x3;
return k;
}
return k;
}
public string asalmi()
{
string k2;
for (int i = 2; i < d; i++)
35
36. nU
if (d % i == 0)
return "d sayısı asaldır";
return "d sayısı asal değildir";
}
}
}
Ekran Çıktısı:
36
37. nU
Örnek 4: Ters Çevir butonuna basıldığında textBox‟daki girilen değeri ListBox‟a ters
çevirerek atar.
Ekle butonuna basıldığında textBox‟a girilen değeri aynen ListBox‟a yazar.
Maç Sonucu butonuna basıldığında textBox‟a girilen değere göre kazanan kazanamayanı
belirleyip MessagaBox‟ta uyarı verir.
Kodlar
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication6
{
public partial class Form1 : Form
{
string[] isimler = new string[100];
int [] sans=new int [3];
int sayac,sayac2;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
int i;
try
{
label2.Text = "";
for (i = textBox1.Text.Length - 1; i >= 0; i--)
{
label2.Text += textBox1.Text.Substring(i, 1);
}
listBox1.Items.Add(textBox1.Text.PadRight(15) +
label2.Text);
}
catch
{
;
}
}
private void Form1_Load(object sender, EventArgs e)
{
listBox1.Font = new Font("courier new", 10, FontStyle.Regular);
listBox2.Font = new Font("courier new", 10, FontStyle.Regular);
37
38. nU
listBox3.Font = new Font("courier new", 10, FontStyle.Regular);
listBox1.Items.Add("Kelime".PadRight(15) + "Tersi");
listBox2.Items.Add("Adı Soyadı".PadRight(15) + "Telefon No");
listBox3.Items.Add("Adı Soyadı");
}
private void button2_Click(object sender, EventArgs e)
{
try
{
isimler[sayac] = textBox2.Text;
sayac++;
listBox2.Items.Add(textBox2.Text.PadRight(15) +
textBox3.Text);
}
catch
{
;
}
}
private void button3_Click(object sender, EventArgs e)
{
int rsayi;
Random r = new Random();
try
{
if (int.Parse(textBox4.Text) > int.Parse
(textBox5.Text))
{
while (sayac2 < 3)
{
rsayi = r.Next(sayac);
if (Array.IndexOf(sans, rsayi) == -1)
{
sans[sayac2] = rsayi;
sayac2++;
}
}
for (int k = 0; k < sayac2; k++)
{
listBox3.Items.Add(isimler[sans[k]].PadRight(15));
}
sayac2 = 0;
}
else
{
MessageBox.Show("Takımınız kaybettiğinden dolayı
kontür kazanan olmamıştır");
}
}
catch
{
;
}
38
40. nU
Örnek 5: 6 tane sayı üretir ve bunları sıralar.
Kodlar
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace WindowsApplication10
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
string sayilar;
private void button1_Click(object sender, EventArgs e)
{
int sayi, i;
Random rastgele = new Random();
for (i = 0; i < 6; i++)
{
sayi = rastgele.Next(1, 50);
sayilar += sayi.ToString() + " ";
label1.Text = sayilar;
}
}
private void button2_Click(object sender, EventArgs e)
{
string[] sirala = new string[6];
int i;
sirala = sayilar.Split(' ');
Array.Sort(sirala);
label2.Text = " ";
for (i = 0; i < 6; i++)
{
label2.Text += sirala[i].ToString() + " ";
}}}}
Ekran Çıktısı
40
41. nU
Örnek 6: 0‟dan 100 e kadar rastgele sayılara oluĢturulmaktadır. Daha sonra bu sayıların
en büyüğü, en küçüğü ve ortalaması bulunmaktadır.
Kodlar
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace dizidenemeleri
{
public partial class Form3 : Form
{
public Form3()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
int max, min, ortalama, toplam;
Random rastgelesayi = new Random();
int[] dizi = new int[100];
for (int i = 0; i < 100; i++)
{
dizi[i] = rastgelesayi.Next(500);
}
max = dizi[0];
min = dizi[0];
toplam = 0;
ortalama = 0;
for (int i = 0; i < 100; i++)
{
if (max < dizi[i])
{
max = dizi[i];
}
if (min > dizi[i])
{
min = dizi[i];
}
toplam += dizi[i];
}
label4.Text = max.ToString();
label5.Text = min.ToString();
ortalama = toplam / 100;
label6.Text = ortalama.ToString();
int yedek;
for (int i = 0; i < 100; i++)
{
41
42. nU
for (int j = 0; j < 100; j++)
{
if (dizi[i] > dizi[j])
{
yedek = dizi[j];
dizi[j] = dizi[i];
dizi[i] = yedek;
}
}
}
listBox1.Items.Clear();
for (int i = 0; i < 100; i++)
{
listBox1.Items.Add(dizi[i]);
}
}
}
}
Ekran Çıktısı
42
43. nU
Örnek 7: Sayısal Loto Programı; 1 ve 49 arası 6 tane sayı üretilir. Üretilen bu sayıların
aynı olup olmadığına bakılır. Sayılar birbirinden farklı olduğunda üretilen sayıları sayac
numarasına göre elemanlara atılır. Dizi elemanları küçükten büyüğe sıralanır. Label a
aktarılır.
Kodlar
private void button1_Click(object sender, EventArgs e)
{
//sayısal lotoda 6 sayı üretildiği için 6 elemanlı dizi oluşturuldu.
Random r = new Random();
int rastgele;
int sayac=0;
int[] sayilar = new int[6];
while (sayac < 6)
{
rastgele = r.Next(1, 50); //1 ile 49 arasında rastgele sayı
üretilir
if (Array.IndexOf(sayilar, rastgele) == -1)
//dizinin içinde aynı sayı yoksa
{
sayilar[sayac] = rastgele;
//üretilen rastgele sayiyi dizinin sayac kaç ise o elemanına ata
sayac++;
}
}
Array.Sort(sayilar);//diziyi küçükten büyüğe sıralar
label1.Text = sayilar[0].ToString(); //label1 e sayilar
dizisinin 1.elemanını yaz
label2.Text = sayilar[1].ToString();
label3.Text = sayilar[2].ToString();
label4.Text = sayilar[3].ToString();
label5.Text = sayilar[4].ToString();
label6.Text = sayilar[5].ToString();
}
Ekran Çıktısı
43
44. nU
Örnek 8: TextBox‟a değer girilir. 2. textBox‟ a değiĢtirmek istediğiniz harfi,3. textBox‟a
yeni değer girilir. “DeğiĢtir” butonuna tıklandığında label da kelimenin değiĢtirilmiĢ hali
yazılır.
Kodlar
public string degistir(string cumle,char a,char b)
{
for (int i = 0; i < cumle.Length; i++)
{
if (cumle[i] == a)
label4.Text += b.ToString();
else
label4.Text += cumle[i].ToString();
}
return cumle;
}
private void button1_Click(object sender, EventArgs e)
{
string cumle1 = textBox1.Text;
char a = Convert.ToChar(textBox2.Text);
char b = Convert.ToChar(textBox3.Text);
degistir(cumle1, a, b);
}
Ekran Çıktısı
44
45. nU
Örnek 9: Su Doku Oyunu
Form Ekranının Kodları:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace Sudoku
{
public partial class sudoku_frm : Form
{
int[,] sudoku = new int[9, 9];
Sudoku_Kontrol kontrolet = new Sudoku_Kontrol();
Sudoku_Coz coz = new Sudoku_Coz();
public sudoku_frm()
{
InitializeComponent();
}
private void Sayi_Giris(object sender, EventArgs e)
{
if (((TextBox)(sender)).Text == "1" || ((TextBox)(sender)).Text
== "2" || ((TextBox)(sender)).Text == "3" || ((TextBox)(sender)).Text ==
"4" || ((TextBox)(sender)).Text == "5" || ((TextBox)(sender)).Text == "6"
|| ((TextBox)(sender)).Text == "7" || ((TextBox)(sender)).Text == "8" ||
((TextBox)(sender)).Text == "9")
{
if (kontrolet.Ekleme_Izın(sudoku,
Convert.ToInt32(((TextBox)(sender)).Name.Substring(0, 1)),
Convert.ToInt32(((TextBox)(sender)).Name.Substring(1, 1)),
Convert.ToInt32(((TextBox)(sender)).Text)))
{
sudoku[Convert.ToInt32(((TextBox)(sender)).Name.Substring(0,
1)),Convert.ToInt32(((TextBox)(sender)).Name.Substring(1,
1))]=Convert.ToInt32(((TextBox)(sender)).Text);
}
else
{
sudoku[Convert.ToInt32(((TextBox)(sender)).Name.Substring(0, 1)),
Convert.ToInt32(((TextBox)(sender)).Name.Substring(1, 1))] = 0;
((TextBox)(sender)).Text = null;
}
}
else
{
sudoku[Convert.ToInt32(((TextBox)(sender)).Name.Substring(0, 1)),
Convert.ToInt32(((TextBox)(sender)).Name.Substring(1, 1))] = 0;
((TextBox)(sender)).Text = null;
}
}
45
46. nU
private void sudoku_frm_Load(object sender, EventArgs e)
{
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9; j++)
{
string isim = j.ToString() + i.ToString();
TextBox hucre = new TextBox();
hucre.Font = new System.Drawing.Font("Microsoft Sans
Serif", 15F, System.Drawing.FontStyle.Regular,
System.Drawing.GraphicsUnit.Point, ((byte)(162)));
hucre.Location = new System.Drawing.Point(i*35+20,
j*35+20);
hucre.MaxLength = 1;
hucre.Multiline = true;
hucre.Name = isim;
hucre.Size = new System.Drawing.Size(30, 30);
hucre.TabIndex = 0;
hucre.TextAlign =
System.Windows.Forms.HorizontalAlignment.Center;
hucre.BackColor = Color.GhostWhite;
hucre.AllowDrop = true;
hucre.TextChanged+=new EventHandler(Sayi_Giris);
hucre.DragDrop+=new DragEventHandler(hucre_DragDrop);
hucre.DragOver+=new DragEventHandler(hucre_DragOver);
hucre.Click += new EventHandler(hucre_Click);
Controls.Add(hucre);
}
}
}
private void hucre_Click(object sender, EventArgs e)
{
for (int i = 0; i < 9; i++)
{
sayilarMenu.Items[i].Enabled=false;
}
for (int i = 1; i < 10; i++)
{
if (kontrolet.Ekleme_Izın(sudoku,
Convert.ToInt32(((TextBox)(sender)).Name.Substring(0, 1)),
Convert.ToInt32(((TextBox)(sender)).Name.Substring(1, 1)), i))
{
sayilarMenu.Items[i-1].Enabled=true;
}
}
sayilarMenu.Show(((TextBox)(sender)).Location.X +
this.Location.X+40, ((TextBox)(sender)).Location.Y + this.Location.Y+28);
}
private void sudoku_frm_Paint(object sender, PaintEventArgs e)
{
Pen kalem = new Pen(Brushes.Black, 3);
e.Graphics.DrawLine(Pens.Chocolate, 18, 17, 332, 17);
e.Graphics.DrawLine(kalem, 18, 122, 332, 122);
e.Graphics.DrawLine(kalem, 18, 227, 332, 227);
46
47. nU
e.Graphics.DrawLine(Pens.Chocolate, 18, 332, 332, 332);
e.Graphics.DrawLine(Pens.Chocolate, 17, 18, 17, 332);
e.Graphics.DrawLine(kalem, 122, 18, 122, 332);
e.Graphics.DrawLine(kalem, 227, 18, 227, 332);
e.Graphics.DrawLine(Pens.Chocolate, 332, 18, 332, 332);
e.Graphics.DrawLine(Pens.Black, 18, 52, 332, 52);
e.Graphics.DrawLine(Pens.Black, 18, 87, 332, 87);
e.Graphics.DrawLine(Pens.Black, 18, 157, 332, 157);
e.Graphics.DrawLine(Pens.Black, 18, 192, 332, 192);
e.Graphics.DrawLine(Pens.Black, 18, 262, 332, 262);
e.Graphics.DrawLine(Pens.Black, 18, 297, 332, 297);
e.Graphics.DrawLine(Pens.Black, 52, 18, 52, 332);
e.Graphics.DrawLine(Pens.Black, 87, 18, 87, 332);
e.Graphics.DrawLine(Pens.Black, 157, 18, 157, 332);
e.Graphics.DrawLine(Pens.Black, 192, 18, 192, 332);
e.Graphics.DrawLine(Pens.Black, 262, 18, 262, 332);
e.Graphics.DrawLine(Pens.Black, 297, 18, 297, 332);
}
private void yeni_btn_Click(object sender, EventArgs e)
{
Random rdn = new Random();
int oyun = rdn.Next(1, 6);
switch (mod_sec.Text)
{
case "Oyun Yarat":
TextBox hucre = new TextBox();
for (int i = 0; i <= Controls.Count - 1; i++)
{
if (Controls[i].GetType().Name == "TextBox")
{
hucre = (TextBox)this.Controls[i];
hucre.Text = null;
hucre.ReadOnly = false;
hucre.BackColor = Color.GhostWhite;
}
}
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9; j++)
{
sudoku[i, j] = 0;
}
}
break;
case "Kolay":
yukle("oyunlar/k" + oyun + ".sdk");
break;
case "Normal":
yukle("oyunlar/n" + oyun + ".sdk");
break;
case "Zor":
yukle("oyunlar/z" + oyun + ".sdk");
break;
47
48. nU
}
}
private void kaydet_btn_Click(object sender, EventArgs e)
{
if (kaydet())
{
MessageBox.Show("Başarı ile kaydedildi.", "Mesaj");
}
else
{
MessageBox.Show("Kayıt edilemedi.", "Mesaj");
}
}
private void yukle_btn_Click(object sender, EventArgs e)
{
if (yukle())
{
MessageBox.Show("Başarı ile yüklendi.","Mesaj");
}
else
{
MessageBox.Show("Yüklenemedi", "Mesaj");
}
}
bool kaydet()
{
SaveFileDialog kaydet = new SaveFileDialog();
kaydet.Title = "Sudoku Kaydet";
kaydet.Filter = "Sudoku Dosyası (*.sdk) |*.sdk";
if (kaydet.ShowDialog() != DialogResult.OK)
{
return false;
}
string veri = null;
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
veri += sudoku[i, j] + ",";
}
veri += sudoku[i, 8] + "rn";
}
for (int i = 0; i < 8; i++)
{
veri += sudoku[8, i] + ",";
}
veri += sudoku[8, 8];
System.IO.File.WriteAllText(kaydet.FileName, veri);
TextBox hucre = new TextBox();
for (int i = 0; i <= Controls.Count - 1; i++)
{
if (Controls[i].GetType().Name == "TextBox")
{
hucre = (TextBox)this.Controls[i];
hucre.Text = null;
48
49. nU
hucre.ReadOnly = false;
hucre.BackColor = Color.GhostWhite;
}
}
return true;
}
bool yukle()
{
int[,] gecici = new int[9, 9];
OpenFileDialog yukle = new OpenFileDialog();
yukle.Title = "Sudoku Yükle";
yukle.Filter = "Sudoku Dosyası (*.sdk) |*.sdk";
if (yukle.ShowDialog() != DialogResult.OK)
{
return false;
}
TextBox hucre = new TextBox();
for (int i = 0; i <= Controls.Count - 1; i++)
{
if (Controls[i].GetType().Name == "TextBox")
{
hucre = (TextBox)this.Controls[i];
hucre.Text = null;
hucre.ReadOnly = false;
hucre.BackColor = Color.GhostWhite;
}
}
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9; j++)
{
sudoku[i, j] = 0;
}
}
string veri = System.IO.File.ReadAllText(yukle.FileName);
string[] satirlar = veri.Split("r".ToCharArray());
for (int i = 0; i < 9; i++)
{
string LFsilme = satirlar[i];
if (i != 0)
{
LFsilme = satirlar[i].Substring(1, satirlar[i].Length -
1);
}
string[] hucreler = LFsilme.Split(Convert.ToChar(","));
for (int j = 0; j < 9; j++)
{
gecici[i, j] = Convert.ToInt32(hucreler[j]);
}
}
int h = 0;
int k = 0;
for (int i = 0; i <= Controls.Count - 1; i++)
{
if (Controls[i].GetType().Name == "TextBox")
49
50. nU
{
hucre = (TextBox)this.Controls[i];
while (h < 9)
{
while (k < 9)
{
hucre.Text = gecici[k, h].ToString();
if (gecici[k,h]!=0)
{
hucre.ReadOnly = true;
hucre.BackColor = Color.Goldenrod;
}
k++;
break;
}
if (k == 9)
{
h++;
k = 0;
}
break;
}
}
}
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9; j++)
{
sudoku[i, j] = gecici[i, j];
}
}
return true;
}
void yukle(string dosya)
{
int[,] gecici = new int[9, 9];
TextBox hucre = new TextBox();
for (int i = 0; i <= Controls.Count - 1; i++)
{
if (Controls[i].GetType().Name == "TextBox")
{
hucre = (TextBox)this.Controls[i];
hucre.Text = null;
hucre.ReadOnly = false;
hucre.BackColor = Color.GhostWhite;
}
}
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9; j++)
{
sudoku[i, j] = 0;
}
}
string veri = System.IO.File.ReadAllText(dosya);
string[] satirlar = veri.Split("r".ToCharArray());
50
51. nU
for (int i = 0; i < 9; i++)
{
string LFsilme = satirlar[i];
if (i != 0)
{
LFsilme = satirlar[i].Substring(1, satirlar[i].Length -
1);
}
string[] hucreler = LFsilme.Split(Convert.ToChar(","));
for (int j = 0; j < 9; j++)
{
gecici[i, j] = Convert.ToInt32(hucreler[j]);
}
}
int h = 0;
int k = 0;
for (int i = 0; i <= Controls.Count - 1; i++)
{
if (Controls[i].GetType().Name == "TextBox")
{
hucre = (TextBox)this.Controls[i];
while (h < 9)
{
while (k < 9)
{
hucre.Text = gecici[k, h].ToString();
if (gecici[k, h] != 0)
{
hucre.ReadOnly = true;
hucre.BackColor = Color.Goldenrod;
}
k++;
break;
}
if (k == 9)
{
h++;
k = 0;
}
break;
}
}
}
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9; j++)
{
sudoku[i, j] = gecici[i, j];
}
}
}
private void coz_btn_Click(object sender, EventArgs e)
{
if (coz.Coz(sudoku, 0, 0))
{
MessageBox.Show("Sudoku Çözüldü.","Mesaj");
51
52. nU
TextBox hucre = new TextBox();
int[,] gecici = new int[9, 9];
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9; j++)
{
gecici[i, j] = sudoku[i, j];
}
}
for (int i = 0; i <= Controls.Count - 1; i++)
{
if (Controls[i].GetType().Name == "TextBox")
{
hucre = (TextBox)this.Controls[i];
hucre.Text = null;
hucre.ReadOnly = true;
}
}
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9; j++)
{
sudoku[i, j] = 0;
}
}
int h = 0;
int k = 0;
for (int i = 0; i <= Controls.Count - 1; i++)
{
if (Controls[i].GetType().Name == "TextBox")
{
hucre = (TextBox)this.Controls[i];
while (h < 9)
{
while (k < 9)
{
hucre.Text = gecici[k, h].ToString();
k++;
break;
}
if (k == 9)
{
h++;
k = 0;
}
break;
}
}
}
}
else
{
MessageBox.Show("Sudoku Çözülemedi.","Mesaj");
52
55. nU
Class Ekranının Kodları
1. Sudoku_Kontrol Kodları
using System;
using System.Collections.Generic;
using System.Text;
namespace Sudoku
{
class Sudoku_Kontrol
{
private bool Satir_Kontrol(int[,] sudoku, int satir, int kontrol)
{
for (int j = 0; j < 9; j++)
{
if (sudoku[satir, j] == kontrol)
{
return false;
}
}
return true;
}
private bool Sutun_Kontrol(int[,] sudoku, int sutun, int kontrol)
{
for (int i = 0; i < 9; i++)
{
if (sudoku[i, sutun] == kontrol)
{
return false;
}
}
return true;
}
private bool Bolge_Kontrol(int[,] sudoku, int satir, int sutun, int
kontrol)
{
for (int i = satir - (satir % 3); i < (satir - (satir % 3)) +
3; i++)
{
for (int j = sutun - (sutun % 3); j < (sutun - (sutun % 3))
+ 3; j++)
{
if (sudoku[i, j] == kontrol)
{
return false;
}
}
}
return true;
}
55
56. nU
public bool Ekleme_Izın(int[,] sudoku, int satir, int sutun, int
kontrol)
{
if (Sutun_Kontrol(sudoku, sutun, kontrol) && Satir_Kontrol
(sudoku, satir, kontrol) && Bolge_Kontrol(sudoku, satir, sutun,
kontrol))
{
return true;
}
return false;
}
}
}
2. Sudoku_Coz Kodları
Ekran Çıktısı
Oyunun Kuralları
1. Sudoku 9*9 kareden oluĢan bir tablodan oluĢur.
2. Sudoku tablosu 3*3‟lük 9 kareye bölünür
3. Sudoku oyununda sütun ve satırlarda her rakam sadece 1 defa kullanılabilir.
4. Sudoku oyununda ayrıca 3*3‟lük kutucuklarda da 1‟den 9‟a kadar olan rakamlardan
sadece biri bulunabilir.
5. Sudoku oyununda amaç boĢ karelere en kısa sürede doğru rakamları koyarak tüm
tabloyu doldurmaktır.
Form Ekranının Anlatılması
Ġlk olarak ComboBox‟tan oyunun zorluk dereceleri seçilir.
1. Seçenek: Oyun Yarat
ComboBox‟tan “Oyun Yarat” ı seçip, “Yeni Oyun” butonuna tıkladığımızda
karĢımıza 9*9 luk karelerden oluĢan bildiğimiz sudoku form ekranı boĢ olarak
gelir. BoĢ olarak gelmesinin sebebi oyunu bizim yaratacak olmamızdandır.
56
57. nU
Bu boĢ kutucuklara tıkladığımızda 1-9 arası sayılar çıkar istediğimiz yerlere
yerleĢtirebiliriz.
Sayıları yerleĢtirirken kural gereği satır ve sütunlarda bunun yanında 3*3 lük
karelerde aynı rakam tekrarı yapılmayacaktır. Kod da bunun kontrolü sağlanmıĢtır
Sudoku_Kontrol.cs class dosyasıyla kontrol yapılmıĢtır.
57
58. nU
2. Seçenek: Kolay
ComboBox‟tan “Kolay” ı seçip, “Yeni Oyun” butonuna tıkladığımızda karĢımıza 9*9 luk
karelerden oluĢan bildiğimiz sudoku form ekranı doldurulmuĢ olarak kolay seviyede
gelir.
3. Seçenek: Normal
ComboBox‟tan “Normal” ı seçip, “Yeni Oyun” butonuna tıkladığımızda karĢımıza 9*9
luk karelerden oluĢan bildiğimiz sudoku form ekranı doldurulmuĢ olarak normal
seviyede gelir.
4. Seçenek: Zor
ComboBox‟tan “Zor” u seçip, “Yeni Oyun” butonuna tıkladığımızda karĢımıza 9*9 luk
karelerden oluĢan bildiğimiz sudoku form ekranı doldurulmuĢ olarak zor seviyede
gelir.
58
59. nU
Çöz Butonu
“Çöz” butonuna tıklandığında; Sudoku Çözüldü uyarısı gelir.
“Tamam”, butonuna tıkladığımızda; sudoku çözülür.
Sudokunun çözülmesi Sudoku_Coz .cs class dosyasıyla sağlanmıĢtır.
Yükle Butonu
Yükle butonuna tıkladığımızda herhangi bir yerdeki uzantısı .sdk olan dosyaları
yükleyebiliriz.
Nedeni sebebi filter özelliğinde sadece “ *.sdk|*.sdk “ uzantısının olmasıdır.
Dosya yükleyemediğimizde; aĢağıdaki uyarıyı verir.
59
60. nU
Kaydet Butonu
Kaydet butonuna tıkladığımızda dosyayı istediğimiz yere kaydeder. Kaydedilemezse;
aĢağıdaki uyarıyı verir.
break;
case "Kolay":
yukle("oyunlar/k" + oyun + ".sdk");
break;
case "Normal":
yukle("oyunlar/n" + oyun + ".sdk");
break;
case "Zor":
yukle("oyunlar/z" + oyun + ".sdk");
break;
Kodda yer alan oyunlar/k, oyunlar/n, oyunlar/z programın exe dosyasının bulunduğu
yerdeki oyunlar klasöründen alınmıĢtır. Bu dosyaların uzantısı “.sdk ” (uzantı “ .txt ” de
olabilirdi)diye kaydedilmiĢtir. Bu dosyaların içinde 9*9 Ģeklinde oyunun zorluk derecesine
göre matrisler bulunmaktadır.
60
61. nU
Örnek 10: TextBox‟a girilen değeri “Sırala” butonuna bastığımızda a-z sırasına göre
ListBox‟a listeler. Bunun yanında birden fazla değer varsa onları da sıraya sokar.
Kodlar
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace dizidenemeleri
{
public partial class Form7 : Form
{
public Form7()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string st="";
st = textBox1.Text.ToString();
char[] harfler = new char[st.Length];
for (int i = 0; i<st.Length ; i++)
{
harfler[i] = st[i];
}
Array.Sort(harfler );
foreach (char item in harfler)
{
listBox1.Items.Add(item);
}
}
}
}
61
62. nU
Ekran Çıktısı
Örnek 11: Textbox‟a girilen sayıya kadar olan sayıları ListBox‟a dik üçgen olarak ekler.
Kodlar
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace dizidenemeleri
{
public partial class Form6 : Form
{
public Form6()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
int i = 0;
int j = 0;
string gec = null;
gec = "";
listBox1.Items.Clear();
for(i=1;i<Convert.ToInt16(textBox1.Text);i++)
{
for(j=1;j<=i;j++)
{
62
64. nU
Örnek 12: Klavyeden girilen n elemanlı bir a dizisinin elemanlarının karelerini alarak b
dizisini; kareköklerini alarak c dizisini oluĢturup bu yeni 2 dizinin skaler çarpımını bulan
programdır.
Kodlar
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace DiziDenemeleri2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
int sayi1, a, b;
sayi1 = int.Parse(textBox1.Text);
int[] dizi1 = new int[sayi1];
double []dizi2= new double[sayi1];
double[] dizi3 = new double[sayi1];
double[] dizi4 = new double[sayi1];
Random rasgele = new Random();
for (a = 0; a < sayi1; a++)
{
dizi1[a] = rasgele.Next(1, 100);
}
for (a = 0; a < sayi1; a++)
listBox1.Items.Add(dizi1[a]);
for (b = 0; b < sayi1; b++)
{
dizi2[b] = dizi1[b] * dizi1[b];
listBox2.Items.Add(dizi2[b]);
dizi3[b] = Math.Sqrt(dizi1[b]);
listBox3.Items.Add(dizi3[b]);
dizi4[b] = dizi2[b] * dizi2[b];
listBox4.Items.Add(dizi4[b]);
}
}}}
64
68. nU
Örnek 13: Dinamik dizi örneği 2. Bu örnekte kullanıcıdan kaç boyutlu dizi oluĢturmak
istediği sorulmaktadır. Ardından kullanıcıdan bu dizinin elemanlarını girmelerini
istemektedir. Elemanları ListBox‟a eklemektedir.
Kodlar
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace DiziDenemeleri2
{
public partial class Form3 : Form
{
public Form3()
{
InitializeComponent();
}
string[] dizi = null;
private void button1_Click(object sender, EventArgs e)
{
int dBoyut;
if (!Int32.TryParse(textBox1.Text, out dBoyut))
{
MessageBox.Show("Girilen Değer Sayısal Olmalı.");
return;
}
dizi = new string[dBoyut];
MessageBox.Show(String.Format("{0} elemanlı bir dizi
oluşturuldu.", dBoyut));
}
int sIndex = 0;
private void button2_Click(object sender, EventArgs e)
{
if (dizi == null || sIndex == dizi.Length)
{
MessageBox.Show("Dizi Boyutu Aşıldı veya dizi
oluşturulmadı.");
return;
}
dizi[sIndex++] = textBox2.Text;
//dizinin tum elemanlarını listboxa sıfırdan atalım.
listBox1.Items.Clear();
foreach (string eleman in dizi)
{
string nEleman = eleman;
68
69. nU
if (eleman == null)
nEleman = "Değer Atanmamış";
listBox1.Items.Add(nEleman);
}
}
}
}
Ekran Çıktısı
Dizi boyutunu girip, “Dizi OluĢtur” butonuna tıklıyoruz. Böylece “5 elemanlı bir dizi
oluĢturuldu” iletisi geliyor.
“Tamam” butonuna tıkladıktan sonra;
Değer kısmına gelip, 5 boyutlu
oluĢturduğumuz dizinin elemanlarını giriyoruz.
Elemanları girdikten sonra “Diziye Değer At”
butonuna tıklıyoruz. Böylece girdiğimiz
elemanlar ListBox‟a ekleniyor.
69
70. nU
Örnek 14: TextBox‟a girilen sayıları 200, 100, 50, 20, 10, 5, 1‟lik banknotlara bölüp
listBox‟da gösteren uygulama
Kodlar
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace DiziDenemeleri2
{
public partial class Form4 : Form
{
public Form4()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
int[] banknot = {200, 100, 50, 20, 10, 5, 1 };
int para, adet, i;
listBox1.Items.Clear();
para = int.Parse(textBox1.Text);
for (i = 0; i <= 6; i++)
{
adet = para / banknot[i];
listBox1.Items.Add(adet.ToString() + "adet" +
Convert.ToString(banknot[i] + "YTL"));
para %= banknot[i];
}
}
}
}
Ekran Çıktısı
70
71. nU
Örnek 15: TextBox 1 ve TextBox2 „ye girilen elemanları Label‟lara ekliyip “KesiĢim”
butonuna basıldığında 2 kümenin ortak elemanlarını veren program.
Kodlar
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication2
{
public partial class Form12 : Form
{
int[] a = new int[5];
int[] b = new int[5];
int i = 0, j = 0;
public Form12()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
a[i] = Convert.ToInt16(textBox1.Text);
label1.Text = label1.Text + a[i].ToString()+" ";
i++;
textBox1.Text = "";
textBox1.Focus();
}
private void button2_Click(object sender, EventArgs e)
{
b[j] = Convert.ToInt16(textBox2.Text);
label2.Text = label2.Text + b[j].ToString()+ " ";
j++;
textBox2.Text = "";
textBox2.Focus();
}
private void button3_Click(object sender, EventArgs e)
{
for (int x = 0; x <= a.Length - 1; x++)
for (int y = 0; y < b.Length; y++)
if (a[x] == b[y])
{
label3.Text = label3.Text + a[x].ToString() + " " ;
71
73. nU
C#’ ta CLASS YAPISI
C#’ta Class Yapısı
Class‟ı bir aile gibi düĢünebilirsiniz. Ailenin bireylerin class değiĢkenleri olarak, aile
fertlerinin çalıĢma hayatlarında kazandıkları mal varlıklarını o class‟ın fonksiyonu olarak
gerçekleĢtirdikleri sosyal faaliyetleri de o class‟ın procedür‟ü olarak algılamak doğru
olacaktır. Örnek olarak:
BÜYÜKBABANIN ADI SOYADI: TAHĠR SARIKAYA
BABANIN ADI SOYADI: ĠSMAĠL SARIKAYA
ÇOCUĞUN ADI SOYADI: HAKAN SARIKAYA
Yukarıdaki fertlerden oluĢan class‟ın isminin SARIKAYA class‟ı olduğunu düĢünelim. BaĢka
bir soyadına sahip olan sülalenin (class‟ın) çocuğu tanıyabilmeleri için kullanacakları
mantık SARIKAYA‟ dan TAHĠR OĞLU, ĠSMAĠL OĞLU HAKAN olacaktır. ĠĢte c# bunu
SARIKAYA. TAHĠR. ĠSMAĠL. HAKAN olarak kullanır. (oğlu kelimesi (.) ile ifade edilmiĢtir.)
Programın içinde noktaya (.) basılınca açıklayıcı seçeneklerin gelmesi tamamen bu
yapının bir ürünüdür. C#‟ın içerisinde o kadar çok class tanımlanmıĢtır ki birçok
uygulamada class tanımlamaya gerek kalmamaktadır. Kodlamada kullandığımız bütün
fonksiyonların bir class‟ın üyesi olduğunu asla unutmayınız. Bir class‟ın içerisinde
değiĢken, fonksiyon, procedur veya baĢka bir class bulunabilir. Bu yapıların tanımlanma
Ģekilleri önem arz eder. Çünkü bu class‟taki bir değiĢkeni veya bir procedur‟ü baĢka bir
class kullanacak mı yoksa bu class‟ımı kullanacak veya miras hakları olacak mı olmayacak
mı bunlar iyice etüt edilmeli ona göre tanımlanmalıdır.
73