Çok boyutlu dizi - gaziantep Üniversitesiozcan/ders/nesne1/dn_nes1_8_cokboyutludizi1.pdf8.21) c#...

37
Çok Boyutlu Dizi UNITE 8 2016 Hazırlayan M. Emin ÖZCAN Nesne Tabanlı Programlama 1 [Şirket] Tel [Telefon] Faks [Faks] [Adres] [Şehir, İl Posta Kodu] [Web Sitesi] [E-posta]

Upload: others

Post on 29-May-2020

15 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Çok Boyutlu Dizi - Gaziantep Üniversitesiozcan/ders/nesne1/dn_nes1_8_cokBoyutluDizi1.pdf8.21) C# da, aynı türdeki verileri bir araya getiren System.Array türünden nesnelere diz;

Çok Boyutlu Dizi UNITE 8 2016

Hazırlayan M. Emin ÖZCAN

Nesne Tabanlı Programlama 1

[Şirket] Tel [Telefon] Faks [Faks]

[Adres] [Şehir, İl Posta Kodu]

[Web Sitesi] [E-posta]

Page 2: Çok Boyutlu Dizi - Gaziantep Üniversitesiozcan/ders/nesne1/dn_nes1_8_cokBoyutluDizi1.pdf8.21) C# da, aynı türdeki verileri bir araya getiren System.Array türünden nesnelere diz;

İçindekiler Tablosu

İçindekiler Ta3blosu

Matris Dizi _______________________________________________________ 1

Çentikli Dizi (Jagged Array) _________________________________________ 3

Koleksiyonlar ______________________________________________________ 5

Grafik ___________________________________________________________ 11

EV ÖDEVİ _______________________________________________________ 27

Uygulama 8 _______________________________________________________ 1

Page 3: Çok Boyutlu Dizi - Gaziantep Üniversitesiozcan/ders/nesne1/dn_nes1_8_cokBoyutluDizi1.pdf8.21) C# da, aynı türdeki verileri bir araya getiren System.Array türünden nesnelere diz;

Sf.01

Matris Dizi

Matris Dizi 8.1) Matris dizi: elemanları matris şeklinde sıralanmış; boyutlar tek köseli parantez

içinde aralarında virgül ayracı kullanılmıştır.

int[,,] dizi;

8.2) new anahtar kelimesiyle yeni dizi elemanlar oluşturulur.

new int[4,2];

8.3) Çok boyutlu dizi oluşturmak için: tür[,,…] dizi=new tür [adet, adet,…]; kullanılır.

int[,] dizi = new int[4,2]; // 8 elemanı var 2 boyutlu

char[,,,] dizi4B=new int[2,5,4,2]; // 80 elemanı var 4 boyutlu

8.4) Çok boyutlu dizi elemanını dizi[0BoyutSayısı, 1BoyutSayısı,…] şeklinde kullanılır, int[,] x = new int[4, 2];

x[0, 0] = 1; x[0, 1] = 2;

x[1, 0] = 3; x[1, 1] = 4;

x[2, 0] = 5; x[2, 1] = 6;

x[3, 0] = 7; x[3, 1] = 8;

8.5) Çok boyutlu diziye ilk değer atamak için aşağıdakilerden biri kullanılır. Ber boyut

elemanı ayrı ayrı blok { } içine yazılır. int[,] x0 = new int[4, 2] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };

int[,] x1 = new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };

int[,] x = { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };

for (int i = 0; i < 4; i++)

{

for (int j = 0; j < 2; j++) // 1 2

Console.Write(" " + x[i, j]); // 3 4

Console.WriteLine(); // 5 6

}} // 7 8

8.6) Length toplam eleman sayısını verir. Boyut eleman adetlerinin çarpımına eşittir. int[, , ,] dizi=new int[2,5,4,2]; Console.Write(dizi.Length); // 80 // =2*5*4*2 dir

8.7) Rank boyut sayısını verir. (düzensiz diziler için geçerli değildir)

1 2

3 4

5 6

7 8

Page 4: Çok Boyutlu Dizi - Gaziantep Üniversitesiozcan/ders/nesne1/dn_nes1_8_cokBoyutluDizi1.pdf8.21) C# da, aynı türdeki verileri bir araya getiren System.Array türünden nesnelere diz;

Sf.02

Matris Dizi

Console.Write(dizi.Rank); // 4

8.8) GetLength(boyut) boyut’daki eleman sayısını verir. int[, , ,] dizi=new int[2,5,4,6];

Console.Write( dizi.GetLenght(0) ); // 2

Console.Write( dizi.GetLenght(1) ); // 3

Console.Write( dizi.GetLenght(2) ); // 4

Console.Write( dizi.GetLenght(3) ); // 6

8.9) foreach(eleman in dizi) dizinin tüm elemanına erişim için kullanılır. int[, , ,] dizi = new int[2, 5, 4, 2];

foreach(int eleman in dizi) Console.Write( eleman ); //Cevap: 00000000000000000000000000000000000000000000000000000000000000000000000000000000

8.10) Dizinin ekrana yazmak için : int[,,] dizi = new int[3,2,1]{{{1},{2}}, {{3},{4}}, {{5},{6}}};

for (int i = 0; i < dizi.GetLength(0); i++)

{

for (int j = 0; j < dizi.GetLength(1); j++)

for (int k = 0; k < dizi.GetLength(2); k++)

Console.Write(dizi[i, j, k]);

Console.WriteLine();

}

2.Yol:

int[,,] dizi = new int[3,2,1]{{{1},{2}}, {{3},{4}}, {{5},{6}}};

var e = dizi.GetEnumerator();

e.Reset();

while (e.MoveNext())Console.Write(e.Current.ToString()); //123456

3.Yol:

int[,,] dizi = new int[3,2,1]{{{1},{2}}, {{3},{4}}, {{5},{6}}};

bool yön=false;

foreach (var eleman in dizi)

{

if(yön=!yön) { Console.WriteLine(); }

Console.Write(" "+eleman);

}

8.11) Tür olarak var kullanılırsa dizi boyutu girilmeyebilir. var dizi = new int[3,2,1]{{{1},{2}}, {{3},{4}}, {{5},{6}}};

8.12) Linq metodları çok boyutlu dizidede geçerlidir. int[,] x = { { 1, 2 }, { 3, 4 } }; // i in x.Cast<int>() da olabilir var y = from int i in x where i % 2 == 0 select i; // 2 4

1 2

3 4

5 6

Page 5: Çok Boyutlu Dizi - Gaziantep Üniversitesiozcan/ders/nesne1/dn_nes1_8_cokBoyutluDizi1.pdf8.21) C# da, aynı türdeki verileri bir araya getiren System.Array türünden nesnelere diz;

Sf.03

Çentikli Dizi (Jagged Array)

Çentikli Dizi (Jagged Array) 8.13) Dizinin dizi, çentikli dizi, düzensiz dizi de denir: elemanları düzensiz şeklinde

sıralanmış; boyutlar her biri ayrı köseli parantez içine yazılmıştır. Her boyut için

new operatörü gereklidir.

8.14) dizi olan diziye çentikli dizi (jugged array) denir. tür[][]…dizi=new tür

[sayı0][]…; ilk boyut, sonrada tür[1][]…dizi=new tür [sayı0][]…;

oluşturulur. Dizi elemana ulaşmak için dizi[0][0][0]=sayı; veya

sayı=dizi[0][0][0]; şeklindedir. İlk veri ataması da düzgün çok boyutlu

diziye ben zer,

int[][][][] x;

x = new int[2][][][];

x[0] = new int[2][][];

x[1] = new int[2][][];

x[0][0] = new int[2][];

x[0][1] = new int[2][];

x[0][0][0] = new int[2];

x[0][0][0][0] = 5;

8.15) Elemanın değerini değiştirmek için dizi[x][y]=değer; şeklinde kullanılır. int[][] x = new int[4][]; x[0] = new int[2]; x[0][0] = 1; x[0][1] = 2;

x[1] = new int[2]; x[1][0] = 3; x[1][1] = 4;

x[2] = new int[2]; x[2][0] = 5; x[2][1] = 6;

x[3] = new int[2]; x[3][0] = 7; x[3][1] = 8;

for (int i = 0; i < 4; i++){

for (int j=0; j<2; j++)Console.Write(" " + x[i][j]);

Console.WriteLine();

}

8.16) Başka dizileri çentikli diziye aşağıdaki gibi eklenir. int[] a = new int[2] { 1, 2 };

int[] b = new int[2] { 3, 4 };

int[] c = new int[2] { 5, 6 };

int[] d = new int[2] { 7, 8 };

int[][] x = new int[4][];

x[0] = a;

x[1] = b;

x[2] = c;

x[3] = d;

Console.WriteLine(""+x[0][0]+" "+x[0][1]);

Console.WriteLine(""+x[1][0]+" "+x[1][1]);

Console.WriteLine(""+x[2][0]+" "+x[2][1]);

Console.WriteLine(""+x[3][0]+" "+x[3][1]);

x X[0] X[0] X[0] X[0]

1 3 5 7

2 4 6 8

1 2

3 4

5 6

7 8

Page 6: Çok Boyutlu Dizi - Gaziantep Üniversitesiozcan/ders/nesne1/dn_nes1_8_cokBoyutluDizi1.pdf8.21) C# da, aynı türdeki verileri bir araya getiren System.Array türünden nesnelere diz;

Sf.04

Çentikli Dizi (Jagged Array)

8.17) Çentikli dizi elemanlarına ilk veri atama aşağıdaki gibidir. int[][] x={new int[]{1,2},new int[]{3,4},new int[]{5,6},new int[] {7,8}};

for (int i = 0; i < 4; i++)

{

for (int j = 0; j < 2; j++) // 1 2

Console.Write(" " + x[i][j]); // 3 4

Console.WriteLine(); // 5 6

} // 7 8

8.18) Çentikli dizinin şematik görünümü matris şeklinde değildir, düzensizdir. int[][] x ={ new int[]{1},

new int[]{2,3,4,5},

new int[]{6},

new int[]{7,8}

};

foreach (var item in x)

{ // 1

foreach (var i in item) Console.Write(" " + i); // 2 3 4 5

Console.WriteLine(); // 6

} // 7 8

8.19) // ------ Örnek3: düzenli dizi ile çentikli iç içe olabilir. int[][][][][][]x;

int[][,,][,]y;

8.20) Düzensiz dizi for foreach,… dongu kullanılarak yazılablir.

int[][] dizi = new int[2][] { new int[3] {1, 2, 3}, new int[3] {4, 5, 6} };

foreach (int[] altdizi in dizi) {

foreach (int eleman in altdizi) {

Console.Write(eleman);

}

}

int[][] dizi = new int[2][] { new int[3] {1, 2, 3}, new int[3] {4, 5, 6} };

for (int j = 0; j < dizi.Length; j += 1) {

for (int k = 0; k < dizi [j].Length; k += 1) {

Console.Write(dizi [j][k]);

}

}

Page 7: Çok Boyutlu Dizi - Gaziantep Üniversitesiozcan/ders/nesne1/dn_nes1_8_cokBoyutluDizi1.pdf8.21) C# da, aynı türdeki verileri bir araya getiren System.Array türünden nesnelere diz;

Sf.05

Koleksiyonlar

Koleksiyonlar

8.21) C# da, aynı türdeki verileri bir araya getiren System.Array türünden nesnelere diz;

farklı türdeki verileri bir araya getiren, istendiğinde hazır çözümler sunan ve

System.Collections ad uzayı altında türlerden türeyen nesnelere de koleksiyon denir.

8.22) using System.Collections.Generic; zaten programa ekli gelmektedir. Koleksiyon

kullanmak için programa using System.Collections; da eklenmek gerekir. Generic’lerde

tür; <T> şeklindedir, tür sonradan belirlenebilir. İlişki tablosu aşağıdadır.

8.23) Dizi sadece tektip nesne tutar, her türden nesne tutar.

int[] dizi=new int[2]; dizi[0]=3;dizi[1]=5; // 5 yerine “ali” yazarsak hata verir.

ArrayList dizi2=new ArrayList();dizi2.Add(3); dizi2.Add(“Ali”);

8.24) Dizinin boyutu sabittir, Koleksiyon boyutu dinamiktir.

int[] dizi1=new int[2]; // Tek boyut 2 elemanlı

ArrayList dizi2=new ArrayList(); // Boyut ve eleman sayısı otomatiktir.

8.25) Tüm Koleksiyonlar foreach i destekler.

ArrayList dizi=new ArrayList(); dizi2.Add(3); dizi2.Add(“Ali”);

foreach(var e in dizi) Console.Write(e); // 3 Ali

8.26) ICollection en temel arayüzdür. Tüm Koleksiyonlara ICollection dan türemiştir.

ICollection arayüzü IEnumerable arayüzünden türemiştir.

8.27) IComparer, Compare() metodunu ile iki nesnenin karşılaştırılabilmesini sağlar.

8.28) IDictionary, anahtar-kilit ilişkisini uygulayan koleksiyon arayüzüdür.

8.29) IDictionaryEnumerator IDictionary arayüzünün özelleşmiş bir şeklidir.

8.30) IEnumerable, koleksiyon için foreach döngüsüyle uygulanabilir kılan arayüzdür.

8.31) IEnumerator, foreach i asıl uygulanabilir kılandır. Enumerable aracıdır.

8.32) IList, ICollection dan türemiş, koleksiyona indeks numarasıyla erişilebilmesini sağlar.

8.33) IHashProvider, Hashtable koleksiyon sınıfıyla ilgili arayüzdür.

Generik Koleksiyon Tablosu System.Collections System.Collections.Generic

Array List<T>

ArrayList LinkedList<T>

BitArray

HashTable Dictionary<TKey, TValue>

SortedList SortedList<TKey, TValue>

SortedDictionary<TKey, TValue>

Queue Queue<T>

Stack Stack<T>

IEnumerable IEnumerable<T>

ICollection ICollection<T>

IList IList<T>

IDictionary IDictionary<TKey, TValue>

CollectionBase Collection<T>

ReadOnlyCollectionBase ReadOnlyCollection<T>

DictionaryBase

Page 8: Çok Boyutlu Dizi - Gaziantep Üniversitesiozcan/ders/nesne1/dn_nes1_8_cokBoyutluDizi1.pdf8.21) C# da, aynı türdeki verileri bir araya getiren System.Array türünden nesnelere diz;

Sf.06

Koleksiyonlar

ArrayList Sınıfı

8.34) ArrayList, dinamik dizi oluşturan sınıftır. Eleman sayısı ve türü otomatiktir.

Nesneleri object türünde tutar. ICollection, IEnumerable, IList ve ICloneable

arayüzlerini uygular.

8.35) ArrayList dizi=new ArrayList(); // dizi isimli ArrayList dizisi oluşturur.

8.36) ArrayList dizi=new ArrayList(50); // 50 elemanlı ArrayList dizisi oluşturur.

8.37) ArrayList dizi=new ArrayList(ICollection ic); // parametre kullanılabilir.

8.38) Add(değer) ile dizinin sonuna yeni eleman eklenir.

dizi.Add(2); // dizinin sonuna 2 ekler

dizi.Add(“Ali”);// dizinin sonuna Ali ekler

dizi.Add(true);

dizi.Add(new int[3]{4,3,9});// dizinin sonuna 4,3,9 dizisini ekler

8.39) Remove(değer), değere eşit ilk elemanı diziden çıkarır. Değer yoksa hata olmaz.

dizi.Add(2); // dizinin sonuna 2 ekler

dizi.Add(Ali);// dizinin sonuna Ali ekler

8.40) Capacity, dizinin kapasitesiini verir. using System;using System.Collections;class program{ static void Main() {

ArrayList dizi = new ArrayList();

Console.WriteLine(dizi.Capacity); // 0

dizi.Add("Jale"); Console.WriteLine(dizi.Capacity); // 4

dizi.Add(3);

dizi.Add('a');

dizi.Add(3); Console.WriteLine(dizi.Capacity); // 4

dizi.Add(true); Console.WriteLine( dizi.Capacity); // 8

dizi.Remove(3);

foreach (object i in dizi) Console.Write(i.ToString() + " "); // Jale a 3 true

}}

8.41) insert(index,değer), araya yeni eleman ekler.

8.42) FixedSize ile Sabit kapasiteli dizi oluşturulur.

ArrayList dizi=ArrayList.FixedSize( mevcutArrayListDizisi);

8.43) [] indexleyici; dizi elemanına erişimi sağlar.

8.44) FixedSize ile Sabit kapasiteli dizi oluşturulur.

8.45) Count; dizinin eleman sayısını verir.

8.46) IsFixedSize dizinin sabit kapasiteli olup (true) olmadığını(false) verir.

8.47) IsReadOnly, dizinin salt okunur olup (true) olmadığını(false) verir.

8.48) ReadOnly() diziyi salt okunur yapar.

8.49) AddRange(ICollection ic) Bu metot ile parametredeki koleksiyonun tüm

8.50) Sort() diziyi küçükten büyüğe sıralar. Compare() metodunu kullanılmıştır.

void Sort(IComparer ic) Compare() IComparer

void Sort(int sıraNo,int adet,IComparer ic) sıraNo dan itibaren adet kadar ı sıralar.

Page 9: Çok Boyutlu Dizi - Gaziantep Üniversitesiozcan/ders/nesne1/dn_nes1_8_cokBoyutluDizi1.pdf8.21) C# da, aynı türdeki verileri bir araya getiren System.Array türünden nesnelere diz;

Sf.07

Koleksiyonlar

ÖRNEKLER

using System;

using System.Collections;

class Test{ static void Main()

{

ArrayList sayılar=new ArrayList();

foreach(int sayı in new int[10]{3,5,7,0,1,9,2,8,4,6}) {sayılar.Add(sayı);} //

sayılara dizisi elemanlarına 3,5,7,0,1,9,2,8,4,6 tam sayılarını ata

sayılar.Remove(5); // değeri 5 olan ilk elemanı kendisini kaldır (sil) (ikinci elenan,

dizin 0)

sayılar.RemoveAt(6); // dizin numarası 6 olan elemanı sil (yedinci sıradaki değeri 8 )

for(int i=0; i != sayılar.Count;i++){ int sayı=(int) sayılar[i]; Console.WriteLine(sayı);}

foreach( int sayı in sayılar) Console.WriteLine(sayı);

}}

Soru 1) A isimli bir dizinin elemanlarına ;”Ali”, “Veli”, 60, 12.5 değerlerini atayan; “Veli”

değerine sahip elemanını kendisini silen ve Dizinin kalan elemanlarını ekrana yazan

programı yazın.

using System; using System.Collections; class Test { static void Main()

{ ArrayList A=new ArrayList();

A.Add(" “Ali”); A.Add(“Veli”); A.Add(60); A.Add(12.5);

A.Remove(“Veli”);

for(int i=0; i != A.Count; i++) Console.WriteLine(A[i]);

}}

Soru 2) A isimli bir dizinin elemanlarına 3,5,7,0,1,9,2,8,4,6 değerlerini atayan; 5 değerine

sahip elemanını kendisini sildikten sonra Dizinin kalan elemanlarını ekrana yazan programı

yazın.

using System; using System.Collections; class Test { static void Main()

{ ArrayList A=new ArrayList();

foreach(int sayı in new int[10]{3,5,7,0,1,9,2,8,4,6}) {A.Add(sayı);}

A.Remove(5); foreach( int sayı in A) Console.Write(“{0} “,sayı);

}}

Soru 3) A isimli bir dizinin elemanlarına 3,5,7,0,1,9,2,8,4,6 değerlerini atayan; dizi numarası 6

olan (,yedinci sırasında bulunan) dizi elemanını sildikten sonra Dizinin kalan elemanlarını

ekrana yazan programı yazın.

using System; using System.Collections; class Test { static void Main()

{ ArrayList A=new ArrayList();

foreach(int sayı in new int[10]{3,5,7,0,1,9,2,8,4,6}) {A.Add(sayı);}

A.RemoveAt(6); foreach( int sayı in A) Console.Write(“{0} “,sayı);

}}

Soru 4) A isimli bir dinamik dizinin elemanlarına 3,5,7,0,1,9,2,8,4,6 değerlerini atayan; dizi

numarası 6 olan dizi elemanını değerini 99 yaptıktan sonra Dizinin eleman değerlerini

ekrana yazan programı yazın.

using System; using System.Collections; class Test { static void Main()

{ ArrayList A=new ArrayList();

foreach(int sayı in new int[10]{3,5,7,0,1,9,2,8,4,6}) {A.Add(sayı);}

A[6]=99; foreach( int sayı in A) Console.Write(“{0} “,sayı); }}

Page 10: Çok Boyutlu Dizi - Gaziantep Üniversitesiozcan/ders/nesne1/dn_nes1_8_cokBoyutluDizi1.pdf8.21) C# da, aynı türdeki verileri bir araya getiren System.Array türünden nesnelere diz;

Sf.08

Koleksiyonlar

Soru 5) A isimli bir dinamik dizinin elemanlarına 3,5,7,0,1,9,2,8,4,6 değerlerini atayan;

değerleri küçükten büyüğe sıraya dızdıkten sonra Dizinin eleman değerlerini ekrana yazan

programı yazın.

using System; using System.Collections; class Test { static void Main()

{ ArrayList A=new ArrayList();

foreach(int sayı in new int[10]{3,5,7,0,1,9,2,8,4,6}) {A.Add(sayı);}

A.Sort(); foreach( int sayı in A) Console.Write(“{0} “,sayı);

}}

Soru 6) A isimli bir dinamik dizinin elemanlarına 3,5,7,0,1,9,2,8,4,6 değerlerini atayan;

değerleri büyükden küçüke sıraya dızdıkten sonra Dizinin eleman değerlerini ekrana yazan

programı yazın.

using System; using System.Collections; class Test { static void Main()

{ ArrayList A=new ArrayList();

foreach(int sayı in new int[10]{3,5,7,0,1,9,2,8,4,6}) {A.Add(sayı);}

A.Sort();A.Reverse() foreach( int sayı in A) Console.Write(“{0} “,sayı);

}}

int başlamaAnı = Environment.TickCount;

for (int i = 0; i < 10000000; i++) ;

int bitişAnı = Environment.TickCount;

Console.Write("süre:{0} sanise", (bitişAnı - başlamaAnı) / 1000.0); // süre: 0.031 saniye

Dizi türüne göre Normal dizi ve Koleksiyon olmak üzere ikiye ayrılır.

List<string> isimler = new List<string> { "Adem", "İdris", "Nuh" };

foreach (string isim in isimler) { Console.Write(isim+" "); } // Adem İdris Nuh

string ad = "Ali";

string soyad = "Can";

string adSoyad = string.Format("{0} {1}", ad, soyad);

Console.WriteLine(adSoyad); // Ali Can

Tür metot zincirlemesi (Extension Method) için; statik sınıfın statik metodunun ilk

parametresi this ile başlamalı. Parametre türü ile nesne türü aynı olmalı.

static class{ … static … metod(this tür…){} }

… tür nesne; … nesne.metod().metod();

Örnek: Sitring nesnesine fonksiyon ekleme

using System; class Program{ static void Main(string[] args)

{

double P= "3.1415926535".metod();

} }

public static class StringConversions{

public static double metod(this string s) { return Double.Parse(s); }}

Örnek: Sitring nesnesine fonksiyon ekleme using System;

Page 11: Çok Boyutlu Dizi - Gaziantep Üniversitesiozcan/ders/nesne1/dn_nes1_8_cokBoyutluDizi1.pdf8.21) C# da, aynı türdeki verileri bir araya getiren System.Array türünden nesnelere diz;

Sf.09

Koleksiyonlar

public static class yazı

{

public static int[] oku(this int[] s) {

for (int i = 0; i < s.Length; i++) {Console.Write("[{0}] :> ",i); s[i] =

int.Parse(Console.ReadLine()); } return s;

}

public static int[] karesiniAl(this int[] s) { for (int i = 0; i < s.Length; i++)

s[i] *= s[i]; return s; }

public static void yaz(this int[] s) {Console.WriteLine("---sonuc---");

foreach (var i in s)Console.WriteLine(i); }

}

class Program { static void Main()

{

int[] x=new int[2];

x.oku().karesiniAl().yaz();

}

}

Bölünmüş Metot; Bölünmüş sınıf içinde partial anahtar kelimeli aynı isimli iki metottan

meydana gelir. Birine metot diğerine prototip i denir. Prototip inin blok bölümü yoktur.

Metodun geri dönen değeri void, erişimi private dir. Metot var, Prototip yoksa hata verir.

Prototip var metot yoksa metodu çağıran satır göz ardı eder (yok sayar).

using System;

public partial class bölünmüşSınıf

{

partial void askıdaMetot(int sayı) { } // metot = blok mevcut

partial void askıdaMetot(int sayı); // prototip= blok mevcut değil

public bölünmüşSınıf(){

int sayı = 1; askıdaMetot(++sayı); Console.Write("sayı= " + sayı); }

}

class Program { static void Main() { new bölünmüşSınıf(); } }} }

foreach GetEnumerator and MoveNext. Gibi davranır.

using System;

using System.Collections.Generic; // IEnumerable için

using System.Linq;

class Program

{

static void Main()

{

string[] isimler = { "adem", "idris", "Nuh", "Hud", "Zekeriya" };

IEnumerable<string> seçim1 = isimler.Where(n => n.Length < 4).Select(n => n);

IEnumerable<string> seçim2 = from n in isimler where n.Length < 4 select n;

foreach (string eleman in seçim1) { Console.Write(" "+eleman); } // Nuh Hud

Console.WriteLine();

foreach (string eleman in seçim2) { Console.Write(" "+eleman); } // Nuh Hud

} }

Page 12: Çok Boyutlu Dizi - Gaziantep Üniversitesiozcan/ders/nesne1/dn_nes1_8_cokBoyutluDizi1.pdf8.21) C# da, aynı türdeki verileri bir araya getiren System.Array türünden nesnelere diz;

Sf.10

Koleksiyonlar

Where, Select, SelectMany, Join, GroupJoin, GroupBy, OrderBy, ThenBy,

OrderByDescending, and ThenByDescending

using System;

using System.Collections.Generic; // List için

//using System.Collections;

using System.Linq;

class ogrenci{

public string ad;

public int v1,v2,f;

public ogrenci(string s, int x1, int x2, int x3) { ad = s; v1 = x1; v2 = x2; f= x3; }

}

class Program {static void Main()

{

List<ogrenci> list = new List<ogrenci>();

list.Add(new ogrenci("ali",20,30,40));

list.Add(new ogrenci("veli", 50, 60, 70));

list.Add(new ogrenci("ayşe", 10, 50, 90));

list.Add(new ogrenci("yahya", 80, 10, 30));

foreach (var item in list.OrderBy(x => x.ad).ToList())

{

// Console.WriteLine("{0}\t{1}\t{2}\t{3}",item.ad,item.v1,item.v2,item.f);

}

ogrenci[] dizi = new ogrenci[4];

dizi[0]=new ogrenci("ali",20,30,40);

dizi[1]=new ogrenci("veli", 50, 60, 70);

dizi[2]=new ogrenci("ayşe", 10, 50, 90);

dizi[3] = new ogrenci("yahya", 80, 10, 30);

foreach (var item in dizi.OrderBy(x => x.ad))

{

Console.WriteLine("{0}\t{1}\t{2}\t{3}",item.ad,item.v1,item.v2,item.f);

}

}}

Page 13: Çok Boyutlu Dizi - Gaziantep Üniversitesiozcan/ders/nesne1/dn_nes1_8_cokBoyutluDizi1.pdf8.21) C# da, aynı türdeki verileri bir araya getiren System.Array türünden nesnelere diz;

Grafik

1) Çizim, resim , animasyonun… için, Çizim yapacak bir alana ihtiyaç vardır. Bu alan genelde Form penceresidir.

Form Penceresi oluşturmak için aşağıdaki adımlar kullanılır.

Visual Studio C# File New Project

Visual C# Windows Form ApplicationOK

2) Form1 üzerine çizim yapmak için olay penceresindeki herhangi bir olayın

metoduna çizim kodunun yazılması gerekir.

Bunun için resimde gösterilen adımlar uygulayın.

Form1PropertiesPenceresiEventsPaint olayını fare sol tuşu ile çift tıklayın.

Otomatik olarak yazılmış Form1_Paint metodu C# editöründe görünür hale gelecektir. Yandaki resimde de görülecegi gibi metotta süslü parantez ile ayrılmış bölümüne çizim kodların yazılır.

3) Çizim için genelde Form1_Paint olayı kullanılır.

Yandaki resimde görüldüğü gibi Form1EventsPaint olayını fare ile çift tıklanarak Form1_Paint kod satırı açılır. Grafik kodları buraya yazılır. Form1 un ölçüsü değiştiğinde veya Form1 önüne başka bir başka uygulama geldiğinde, öndeki uygulama arkadaki

uygulamanın görünmeyen bölümleri siler. Öndeki uygulama çekildiğinde silinen bölümlerin uygulamaları silinen

kısımları tekrar çizer. Bizim çizimler Paint olayına içine yazılmamıssa uygulama çekildiğinde silinen bölüm tekrar

çizilmez. Çizim komutunu, button1_Click ine yazdığımızda, uygulamanın arkasında kalan çizgilerin silinmiş

Page 14: Çok Boyutlu Dizi - Gaziantep Üniversitesiozcan/ders/nesne1/dn_nes1_8_cokBoyutluDizi1.pdf8.21) C# da, aynı türdeki verileri bir araya getiren System.Array türünden nesnelere diz;

olduğunu görürüz. Aşağıdaki button1_Click olayı kodları ve ekran çıktısı görünmektedir. İlk resimde çizim var,

yanındakinde çizim üzerine başka bir uygulama gelmiş. Üçüncü resimde uygulama kalkmış ama uygulamanın

altında kalan kısımlar silinmiş. Üçüncü resimde çizgilerin silinmiş olduğu dikkat edelim.

private void button1_Click(object sender, EventArgs e) {

Graphics g = this.CreateGraphics(); g.DrawLine(Pens.Black,1, 1, 50, 50); g.DrawLine(Pens.Black,50, 50, 100, 1); g.DrawLine(Pens.Black,100, 1, 150, 50); g.DrawLine(Pens.Black,150, 50,200, 1); }

Çizim komutunu, Form1_Paint olayına yazdığımızda uygulamanın arkasında kalan çizgilerin silinmemiş olduğunu

görürüz. Aşağıdaki Form1_Paint in kodları ve ekran çıktısı görünmektedir. Son resimde çizgilerin silinmemiş

olduğu dikkat edelim.

private void Form1_Paint(object sender, PaintEventArgs e) { Graphics g = this.CreateGraphics(); g.DrawLine(Pens.Black,1, 1, 50, 50); g.DrawLine(Pens.Black,50, 50, 100, 1); g.DrawLine(Pens.Black,100, 1, 150, 50); g.DrawLine(Pens.Black,150, 50,200, 1); }

4) Çizim komutları grafik nesnesi içindedir. Graphics grafikNesnesi = this.CreateGraphics(); . Graphics g = this.CreateGraphics(); g.DrawLine(Pens.Black,1, 1, 5, 5); // tüm olaylarda e.Graphics..DrawLine(Pens.Black,1, 1, 5, 5); // paint olayında

5) Graphics grafikNesnesi = this.CreateGraphics(); komutu ile Form1 in görüntü özellikleri g nesnesine atanır. Form1 in asıl sahibi MicrosoftWindows dur. Form1 i üzerine çizgi çizmek, yani verilerini değiştirmek istiyoruz. İşaretçi (=pointer) konusunu hatırlayalım. unsafe{int a; int* p = &a; *p = 3; }. İşaretçiler başkasının verisini değiştirmeye yarar. Tüm nesneler birer işaretçi dir. Öyle ise Graphics g; ile g isimli bir işaretçi oluşturduk. g = this.CreateGraphics(); ile Form1 için oluşturulmuş bilgilerinin olduğu adresi g işaretçisine atanır. Artık g üzerinde yapacağımız değişiklik Form1 üzerine yapılmış değişiklik demektir. this Form1 anlamına gelmektedir (this için Nesne dökümanına bakın). Form1.CreateGraphics()Form1 un grafik bilgilerini içeren metoddur..

6) Nesneye yüklenen grafikle ilgili her bilginin işi bitince Dispose() metodu ile serbest bırakılmalıdır. Graphics grafikNesnesi = this.CreateGraphics(); . . . grafikNesnesi.Dispose();

Pen kalem=Pen(Pens.Red); . . . kalem.Dispose(); Not: Pen kalem; veya Pen kalem =Pen(Pens.Red); gibi kullanımlarda Dispose() metodunu kullanmayınız.

Page 15: Çok Boyutlu Dizi - Gaziantep Üniversitesiozcan/ders/nesne1/dn_nes1_8_cokBoyutluDizi1.pdf8.21) C# da, aynı türdeki verileri bir araya getiren System.Array türünden nesnelere diz;

7) Kordinat Sistemi soldan sağa ve yukarıdan aşağıya doğrudur. Matematikteki kullanılanın aksine (0,0) noktası sol üst köşedir. Sol üsr köşe (0, 0) dir. Sağ alt köşe (Form1.width,Form1.height) dir.

8) Renkler;

8.1) TemelRenkler (=baseColor) Color nesnesinin özeliklerindendir. Color.Renkİngilizceİsmi şeklinde kullanılır. Color.Red, C olor.Blue, Color.White, Color.Black, Color.Yellow, Color.Pink, Color.Green . . . temel reklerdir.

Örnek: Color kırmızı= Color.Red;

8.2) FromArgb: 8 bitlik ( yani 0..255 arası tamsayı olan) alfa(Alpha), kırmızı(Red), yeşil(Green) ve mavi(Blue) parametrelerden oluşmuş toplam 32 bitlik ARGB modu olarak adlandırılan bir Renk nesnesi metodudur. AlphaRedGreenBlue deki Alpha renk’in transparant oranını verir. Alpha sayısı azaldıkça ilgili renk de transparantlaşır, resim cam gibi şeffaflasır. Alpha artarsa resim katı kale gelit arkasındaki resmi örter görünmez kılar. _

public static Color FromArgb(int argb); public static Color FromArgb(int Alpha, int Red, int Green, int Blue) Örnek: Color kırmızıRenk = Color.FromArgb(255,255,0,0); public static Color FromArgb(int alpha, Color baseColor);

Örnek: Color.FromArgb(255,Color.Red); public static Color FromArgb(int red, int green, int blue); Örnek: Color pembe = Color.FromArgb(255, 175, 175); public static Color FromArgb(int Color); Örnek: Color.FromArgb(2147483647);

8.3) FromName : ismi kullanarak renk nesnesi oluşturma: Örnek: Color maviRenk = Color.FromName("Blue");

8.4) FromKnownColor: bilinen renklerden renk nesnesi oluşturma: Örnek: Color siyah=Color.FromKnownColor(KnownColor.Black);

8.5) Renksiz renk nesnesi oluşturma: Örnek: Color renksizRenk = Color.Empty;

9) Kalemler Renkli çizgi çizer. Pens nesnesi özeliklerindendir.

9.1) Temel Kalemler: Kalınlıkları 1 pikseldir. Pens.Red, Pens.Blue, Pens.White . . . şeklinde kullanılırlar; Örnek: Pen kalem= Pens.Red; // Temel kalemleri iş bittince .Dispose() ile serbest bırakılmaz. Pen kalem=new Pen(renk,kalınlık); Örnek:Pen kırmızıKalem=new Pen(Pens.Red,5); . . . .

kırmızıKalem.Dispose();

Page 16: Çok Boyutlu Dizi - Gaziantep Üniversitesiozcan/ders/nesne1/dn_nes1_8_cokBoyutluDizi1.pdf8.21) C# da, aynı türdeki verileri bir araya getiren System.Array türünden nesnelere diz;

10) Fırçalar Renkle boşlukları boyar.. Temel Fırçalar: Brushes.Red, Brushes.Blue,… gibi özellikler birer fırçadır.

Brush fırça= Brushes.Red;

Brush b=new SolidBrush(Color.Red),new Point(20, 20));

11) Çizim Metotları: grafik nesnesi ile grafik metotlarına erişilerek çizim, resim veya animasyon yapılabir. Grafik Çizim Metotları

DrawArc, DrawBezier, DrawBeziers, DrawClosedCurve, DrawCurve, DrawEllipse, DrawIcon, DrawIconUnstretched, DrawImage, DrawImageUnscaled, DrawLine, DrawLines, DrawPath, DrawPie, DrawPolygon, DrawRectangle, DrawRectangles, DrawString

Grafik Çizim Doldurma Metotları FillClosedCurve FillEllipse FillPath FillPie FillPolygon FillRectangle FillRectangles FillRegion

Grafik Yazı Yazma Metodu : DrawString

Kalem için: Pen k=Pens.Blue; Pen k=new Pen(Pens.Blue,kalınlık);

Fırça için: Brush b=new SolidBrush(Color.Red);

Font için: Font f= new Font("Arial", 16); Resim Üzerinde Bir Noktanın Rengini Öğrenme Medodu: Bitmap.SetPixel Resim Üzere Bir Noktanın Rengini Değiştirme Metodu: myBitmap.GetPixel

İkon yükleme : Icon i= new Icon("c:\\ie.ico");

Resim yükleme : Image rsm= Image.FromFile("c:\\cs1.gif");

Paint olayını tetıkleyen metod: Invalidate();

11.1) g. DrawLine(kalem,x1,y1,x2,y2); örnek: Graphics g = this.CreateGraphics();

g.DrawLine(Pens.Red, 0,

0, 100, 100);

11.2) g. DrawEllipse(kalem,

Graphics g = x,y,w,h); örnek:

this.CreateGraphics();

g.DrawEllipse(Pens.Blue, 50,30,150,90);

11.3) g. FillEllipse(Brushes.Red, x,y,w,h); örnek: Graphics g

= this.CreateGraphics();

Page 17: Çok Boyutlu Dizi - Gaziantep Üniversitesiozcan/ders/nesne1/dn_nes1_8_cokBoyutluDizi1.pdf8.21) C# da, aynı türdeki verileri bir araya getiren System.Array türünden nesnelere diz;

g.FillEllipse(Brushes.Blue, 30,20,150,90);

11.4) g.DrawRectangle (kalem,x,y,w,h); örnek: Graphics g = this.CreateGraphics();

g.DrawRectangle(Pens.Blue, 50,30,150,90);

11.5) g. FillRectangle (Brushes.Red, x,y,w,h); örnek: Graphics g = this.CreateGraphics();

g.FillRectangle(Brushes.Blue, 30,20,150,90);

11.6) g.DrawString ("Emin",font,fırça,x,y); örnek: Graphics g = this.CreateGraphics();

g.DrawString("Emin", new Font("Arial", 16), Brushes.Red, 30, 20) ;

11.7) g.DrawImage(rsm,x,y); örnek: Graphics g =

this.CreateGraphics();

Page 18: Çok Boyutlu Dizi - Gaziantep Üniversitesiozcan/ders/nesne1/dn_nes1_8_cokBoyutluDizi1.pdf8.21) C# da, aynı türdeki verileri bir araya getiren System.Array türünden nesnelere diz;

Image adam = Image.FromFile(@"C:\data\adam.jpg");

g.DrawImage(adam, 30,20);

11.8) frfg.DrawArc (k,x,y,w,h,t1,t2);

11.9) g.DrawBezier(k,p1,p2,p3,p4);

11.10) g.DrawBezires(k,pDizisi);

11.11) g. DrawClosedCurve(k, p4Dizisi);

11.12) g.DrawCurve(k, p4Dizisi);

11.13) g.DrawIcon(i,x,y);

11.14) g.DrawIconUnstretched(i, r);

11.15) g.DrawImageUnscaled(rsm,x,y,w,h);

11.16) g.DrawLines(k,pDizisi);

11.17) g.DrawPath(k,path);

GraphicsPath path = new GraphicsPath(); path.AddLine(p1,p2); path.AddEllipse(r); g.DrawPath(k, path);

11.18) g.DrawPie (k,x,y,w,h,t1,t2);

11.19) g.DrawPolygon(k,pDizisi);

11.20) g.DrawRectangles(k, rDizi);

11.21) g. FillClosedCurve(b, p4Dizisi);

11.22) g. FillRectangles(b, rDizi);

Page 19: Çok Boyutlu Dizi - Gaziantep Üniversitesiozcan/ders/nesne1/dn_nes1_8_cokBoyutluDizi1.pdf8.21) C# da, aynı türdeki verileri bir araya getiren System.Array türünden nesnelere diz;

11.23) g. FillPie (b,x,y,w,h,t1,t2);

11.24) g. FillPath(b,p4Dizisi);

11.25) g. FillPolygon(b,pDizisi);

11.26) g. FillRegion (b, rgn1); Region rgn1 = new Region(r); Region rgn2 = new Region(r2); rgn1.Complement(rgn2); g.FillRegion(Brushes.Blue, rgn1);

ÖRNEKLER

12) 100 piksel uzunluğunda yatay bir çizgiyi ekrana çizen kod satırını yazın. Graphics g = this.CreateGraphics(); // 5 piksel kalınlığında mavi kalem Pen kalem = new Pen(Color.Blue, 5);

g.DrawLine(kalem, 0, 0, 100, 0); kalem.Dispose();kalemi serbest bırak g.Dispose(); //g dekileri serbest bırak

13) 100 piksel uzunluğunda dikey bir çizgiyi ekrana çizen kod satırını yazın. Graphics g = this.CreateGraphics(); Pen kalem = new Pen(Color.Blue, 5);

g.DrawLine(kalem, 0, 100, 0, 0); kalem.Dispose(); g.Dispose();

14) (0,0) dan(100,100) noktaları arasına çizgi çizen kod satırını yazın. Graphics g = this.CreateGraphics(); Pen kalem = new Pen(Color.Blue, 5);

g.DrawLine(kalem,0, 0, 100, 100); kalem.Dispose(); g.Dispose();

15) Uzunluğun 100 piksel, aralarındaki mesafe 10 piksel olan 5 adet yatay çizgiyi ekrana çizen kod satırını yazın. Graphics g = this.CreateGraphics(); Pen kalem = new Pen(Color.Blue, 5);

g.DrawLine(kalem,0, 0, 100, 0); g.DrawLine(kalem,0,10,100,10); g.DrawLine(kalem,0,20,100,20); g.DrawLine(kalem,0,30,100,30); g.DrawLine(kalem,0,40,100,40); kalem.Dispose();g.Dispose();

16) Uzunluğun 100 piksel, aralarındaki mesafe 10 piksel olan 5 adet dikey çizgiyi ekrana çizen kod satırını yazın. Graphics g = this.CreateGraphics(); // 5 piksel mavi k isimli kalem Pen k = new Pen(Color.Blue, 5);

for (int i=0; i < 5*10; i+=10) { g.DrawLine(k, i, 0, i, 100); } kalem.Dispose();g.Dispose();

17) Kenar uzunluğu 50 piksel olan bir kareyi DrawLine komut kullanarak ekrana çizen kod satırını yazın.

Page 20: Çok Boyutlu Dizi - Gaziantep Üniversitesiozcan/ders/nesne1/dn_nes1_8_cokBoyutluDizi1.pdf8.21) C# da, aynı türdeki verileri bir araya getiren System.Array türünden nesnelere diz;

Graphics g = this.CreateGraphics(); // 5 piksel mavi k isimli kalem Pen k = new Pen(Color.Blue, 5);

g.DrawLine(k, 0,0, 100,0); g.DrawLine(k, 100,0, 100,100); g.DrawLine(k, 100,100, 0,100); g.DrawLine(k, 0,100, 0,0); kalem.Dispose();g.Dispose();

18) Uzunluğun 100 piksel, aralarındaki mesafe 10 piksel olan, çizgi kalın 1 er piksel artan 10 adet yatay çizgiyi ekrana çizen kod satırını yazın.

Graphics g = this.CreateGraphics(); Pen k;

for (int i = 1; i <= 10; i++){ k= new Pen(Color.Blue, i); g.DrawLine(k,0,i*10,100,i*10); k.Dispose(); } g.Dispose();

19) Uzunluğu 100, kalınlığı 10 çizgiler arası mesafe 15 olan 5 çizgiyi ekrana siyah, kırmızı, mav, sarı, yeşil renklerle çizen kod satırını yazın.

Graphics g = this.CreateGraphics(); Pen kalem;

Color[] renk={Color.Black,Color.Green, Color.Blue,Color.Red,Color.Yellow};

for (int i = 0; i < 5; i++) { k = new Pen(renk[i], 10); g.DrawLine(k,0,i* 15+5,100,i*15+5); k.Dispose(); } g.Dispose();

20) Tuş genişliği 10 piksel olan dama tahtasını ekrana DrawLine ile çizen kod satırını yazın. Graphics g = this.CreateGraphics(); Pen kalem = Pens.Black; for (int i = 0; i <= 8; i++) { g.DrawLine(kalem,1,i*10,80,i*10); g.DrawLine(kalem,i*10,1,i*10,80);

} g.Dispose(); kalem.Dispose();

21) Tuş genişliği 15piksel olan santranç tahtasını ekrana DrawLine ile çizen kod satırını yazın. Graphics g = this.CreateGraphics(); Pen k; bool bayrak = false;

for (int j=0;j<8*15;j+=15) for (int i=0;i<8*15;i+= 15){ if (i == 0) bayrak = !bayrak; if ((bayrak=!bayrak)) k = new Pen(Color.Black, 15); else k = new Pen(Color.White, 15); g.DrawLine(k, i, j+7, i +15 , j+7); }

22) Tuş genişliği 15piksel olan santranç tahtasını DrawLine ile ekrana çizen kod satırını yazın. Graphics g = this.CreateGraphics(); Pen k; bool bayrak = false;

for (int j=0;j<8*15;j+=15) for (int i=0;i<8*15;i+= 15){ if (i == 0) bayrak = !bayrak; if ((bayrak=!bayrak)) k = new Pen(Color.Black, 15); else k = new Pen(Color.White, 15); g.DrawLine(k, i, j+7, i +15 , j+7); k.Dispose();} g.Dispose();

Page 21: Çok Boyutlu Dizi - Gaziantep Üniversitesiozcan/ders/nesne1/dn_nes1_8_cokBoyutluDizi1.pdf8.21) C# da, aynı türdeki verileri bir araya getiren System.Array türünden nesnelere diz;

23) Uzunluğun 100, genişliği ve aralarındaki mesafe 15 piksel olan çizgilerden 4 tanesi yatay sarı rekde ve 4 taneside dikey %50 transparant kırmızı renkde çizgileri ekrana çizen kod satırını yazın.

Pen k = new Pen(Color.FromArgb(127,Color.Red), 15); // yukarıdaki transparant 127 rakamının 255 in %50 sıdır.

Pen s = new Pen(Color.Yellow, 15); Graphics g = this.CreateGraphics(); for (int i = 8; i < 4*30; i +=30) {

g.DrawLine(s, 0, i, 120, i); g.DrawLine(k, i, 0, i, 120 ); } g.Dispose();s.Dispose();k.Dispose();

24) Uzunluğun 100, genişliği ve aralarındaki mesafe 15 piksel olan çizgilerden 4 tanesi yatay sarı rekde çizen sonra 4 taneside dikey %50 transparan kırmızı renkde çizgileri ekrana çizen kod satırını yazın.

Pen k = new Pen(Color.FromArgb(127,Color.Red), 15); Pen s = new Pen(Color.Yellow, 15); Graphics g = this.CreateGraphics(); for (int i = 8; i < 4*30; i +=30) g.DrawLine(s, 0, i, 120, i ); for (int i = 8; i < 4*30; i +=30) g.DrawLine(k, i, 0, i, 120 ); g.Dispose();s.Dispose();k.Dispose();

25) Uzunluğun 100, genişliği ve aralarındaki mesafe 15 piksel olan çizgilerden 4 tanesini dikey %50 transparan kırmızı renkde çizen sonra 4 tanesi yatay sarı rekde çizen kod satırını yazın.

Pen k=new Pen(Color.FromArgb(127,Color.Red),15); Pen s=new Pen(Color.Yellow,15); Graphics g=this.CreateGraphics(); for (int i=8;i<4*30;i+=30) g.DrawLine(k,i,0,i,120); for (int i=8;i<4*30;i+=30) g.DrawLine(s,0,i,120,i); g.Dispose();s.Dispose();k.Dispose();

26) Form üzerine bir adet numericUpDown bileşeni ekleyin. Bileşenin degeri her değiştiğinde, uzunluğun 100, genişliği ve aralarındaki mesafe 15 piksel olan çizgiler çizsin.Bu çizgilerden 4 tanesi yatay sarı rekde ve 4 taneside dikey numericUpDown degerinr göre değişen transparant kırmızı renkde çizgileden oluşşun kod satırını yazın.

private void numericUpDown1_ValueChanged( object sender, EventArgs e){

int t=(int)numericUpDown1.Value; Pen k=new Pen(Color.FromArgb(t,Color.Red),15);

Pen s = new Pen(Color.Yellow, 15); Graphics g = this.CreateGraphics(); g.Clear(this.BackColor); // ekranı şil for (int i = 8; i < 4 * 30; i += 30) g.DrawLine(s, 0, i, 120, i); for (int i = 8; i < 4 * 30; i += 30) g.DrawLine(k, i, 0, i, 120);

g.Dispose(); s.Dispose(); k.Dispose();}

Page 22: Çok Boyutlu Dizi - Gaziantep Üniversitesiozcan/ders/nesne1/dn_nes1_8_cokBoyutluDizi1.pdf8.21) C# da, aynı türdeki verileri bir araya getiren System.Array türünden nesnelere diz;

27) Form1 in (10,10) noktasında 100 piksellik yatay bir çizgi olsun. Form1 in boyutunu değiştirdiğimizde veya form1 in üzerinden başka bir pencere geçtiginde yani her OnPaint olayında bu çizgiyi 5 piksel aşağya çizen kod u yazın.

int y = 10; private void Form1_Paint(object sender, PaintEventArgs e)

{ y += 5; Graphics g = this.CreateGraphics(); g.DrawLine(Pens.Blue, 0, y, 100, y); g.Dispose(); }

28) Form1 in (10,10) noktasında 100 piksellik yatay bir çizgi olsun. Form1 in üzerine bir adet button yerleştirin ve bu button1 tıklandığında çizgiyi 10 piksel aşağya çizen kod u yazın.

public int y = 10; private void button1_Click(object sender, EventArgs e) { y += 10; Invalidate(); } private void Form1_Paint(object sender, PaintEventArgs e) { Graphics g = this.CreateGraphics(); g.DrawLine(Pens.Blue,0, y, 100, y); }

29) Form1 in üzerinede başka bir pencere gezdirirsek Form1_Paint tetiklenir. Tetiklenme esnasında 2 piksel aşağı kayan 100 piksellik yatay bir çizginin çizildiği kod yazın. Kod satırı içinde g=this.CreateGraphics bulunsun.

int y = 10;

private void Form1_Paint(object sender, PaintEventArgs e) { y+=2; Graphics g=this.CreateGraphics(); g.DrawLine(Pens.Blue,0,y,200,y); g.Dispose();

}

30) Form1 in üzerinede başka bir pencere gesdirildiğinde Form1_Paint tetiklenir. g=e.CreateGraphics kullanılırsa ekranın yalnız değişen kısmı yebilenir. Bu yapıyı görmek için gerekli kod u yazın. int y = 10; private void Form1_Paint(object sender, PaintEventArgs e) { y+=1;

Graphics g= e.Graphics; g.DrawLine(Pens.Blue,0,y,200,y);

g.Dispose(); }

Page 23: Çok Boyutlu Dizi - Gaziantep Üniversitesiozcan/ders/nesne1/dn_nes1_8_cokBoyutluDizi1.pdf8.21) C# da, aynı türdeki verileri bir araya getiren System.Array türünden nesnelere diz;

31) Fare her hareket ettiğinde (0,0) noktasından farenin dolaştığı yer arasına çizgi çizen kod satırını yazın. private void Form1_MouseMove( object sender, MouseEventArgs e) { Graphics g=this.CreateGraphics(); g.DrawLine(Pens.Black,0,0,e.X,e.Y); g.Dispose(); }

32) Farenin dolaştığı yere çizgi çizen kod satırını yazın. int x0=0, y0=0; private void Form1_MouseMove(object sender, MouseEventArgs e) { Graphics g = this.CreateGraphics(); g.DrawLine(Pens.Black,x0,y0,e.X,e.Y); x0 = e.X; y0 = e.Y; g.Dispose(); }

33) Fare tusu tıklandığı ile bırakıldığı mesafe arasına çizgi çizen kod satırını yazın. Point p0=new Point(); private void Form1_MouseUp(object sender, MouseEventArgs e) { Graphics g = this.CreateGraphics(); g.DrawLine(Pens.Black,p0,e.Location); g.Dispose(); } private void Form1_MouseDown(object sender, MouseEventArgs e) { p0 = e.Location; }

34) Fare tusu tıklandığı ile bırakıldığı mesafe arasına çizgi çizen kod satırını yazın. Point p0=new Point(); private void Form1_MouseUp(object sender, MouseEventArgs e) { Graphics g = this.CreateGraphics(); g.DrawLine(Pens.Black,p0,e.Location); g.Dispose(); } private void Form1_MouseDown(object sender, MouseEventArgs e) { p0 = e.Location; }

FormAplication oluşturun. Paint ve MouseMouve olaylarını aşağıdaki gibi değiştirip çalıştırın.

int x,y; private void Form1_Paint(object sender, PaintEventArgs e) { e.Graphics.DrawLine(Pens.Black, 0,0,x,y); } private void Form1_MouseMove(object sender, MouseEventArgs e) { x = e.X; y = e.Y; Invalidate();}

FormAplication oluşturun. Paint ve MouseMouve olaylarını aşağıdaki gibi değiştirip çalıştırın.

private void Form1_MouseMove(object sender, MouseEventArgs e) { Graphics g = this.CreateGraphics(); g.Graphics.DrawLine(Pens.Black, 0,0, e.X, e.Y); }

Page 24: Çok Boyutlu Dizi - Gaziantep Üniversitesiozcan/ders/nesne1/dn_nes1_8_cokBoyutluDizi1.pdf8.21) C# da, aynı türdeki verileri bir araya getiren System.Array türünden nesnelere diz;

FormAplication oluşturun. Paint ve MouseMouve olaylarını aşağıdaki gibi değiştirip çalıştırın.

int x1,x2,y1,y2; // çizgiler siliniyor. Hafıza yok private void Form1_Paint(object sender, PaintEventArgs e) { e.Graphics.DrawLine(Pens.Black, x1,y1,x2,y2); 2=x1; 2=y1; } private void Form1_MouseMove(object sender, MouseEventArgs e) { x1 = e.X; y1 = e.Y; Invalidate();}

FormAplication oluşturun. MouseMouve olaylarını aşağıdaki gibi değiştirip çalıştırın.

int x,y; Bitmap bmp = new Bitmap(200,200); Graphics resim; private void Form1_MouseMove(object sender, MouseEventArgs e) { Graphics g = this.CreateGraphics(); resim= Graphics.FromImage(bmp); resim.DrawLine(Pens.Red, e.X, e.Y, x, y); g.DrawImage(bmp,0,0); x=e.X; y=e.Y; }

#if android2.1 then end;

FormAplication oluşturun. Form1_KeyDown olaylarını aşağıdaki gibi değiştirip çalıştırın.

int x = 0, y = 0; Image adam = Image.FromFile(@"C:\data\adam.jpg"); private void Form1_KeyDown(object sender, KeyEventArgs e) { Graphics g = this.CreateGraphics(); g.DrawImage(adam, x++, y++); }

^

FormAplication oluşturun. Form1_KeyDown olaylarını aşağıdaki gibi değiştirip çalıştırın.

int x = 0, y = 0; Image adam = Image.FromFile(@"C:\data\adam.jpg"); private void Form1_Paint(object sender, PaintEventArgs e) { e.Graphics.DrawImage(adam, x++, y++);} private void Form1_KeyDown(object sender, KeyEventArgs e) { Invalidate(); }

FormAplication oluşturun. Form1_KeyDown olaylarını aşağıdaki gibi değiştirip çalıştırın.

private void Form1_KeyDown(object sender, KeyEventArgs e)

Page 25: Çok Boyutlu Dizi - Gaziantep Üniversitesiozcan/ders/nesne1/dn_nes1_8_cokBoyutluDizi1.pdf8.21) C# da, aynı türdeki verileri bir araya getiren System.Array türünden nesnelere diz;

{ if(e.KeyValue==38) Text = "38"; // yukarı if(e.KeyValue==40) Text = "40"; // aşağı if(e.KeyValue==37) Text = "37"; // sola if(e.KeyValue==39) Text = "39"; // sağa

}

int x = 0, y = 0; Image adam = Image.FromFile(@"C:\data\adam.jpg"); private void Form1_Paint(object sender, PaintEventArgs e) { e.Graphics.DrawImage(adam, x, y);} private void Form1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyValue == 38) y -= 64; // yukarı if (e.KeyValue == 40) y += 64; // aşağı if (e.KeyValue == 37) x -= 64; // sola if (e.KeyValue == 39) x += 64; // sağa Invalidate(); }

FormAplication oluşturun. Form1_KeyDown ve Form1_Paint olaylarını aşağıdaki gibi değiştirip çalıştırın.

int x = 130, y = 98; Image adam = Image.FromFile(@"C:\data\adam.jpg"); Image zemin= Image.FromFile(@"C:\data\zemin.bmp"); private void Form1_Paint(object sender, PaintEventArgs e) { e.Graphics.DrawImage(zemin, 0, 0); e.Graphics.DrawImage(adam, x, y); } private void Form1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyValue == 38) y -= 64; // yukarı if (e.KeyValue == 40) y += 64; // aşağı if (e.KeyValue == 37) x -= 64; // sola if (e.KeyValue == 39) x += 64; // sağa Invalidate(); // Form1_Paint ı tetikle }

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Drawing.Drawing2D;using System.Linq;using System.Text;using System.Windows.Forms; namespace priceofpersia{ public partial class Form1 : Form{ public Form1() { InitializeComponent(); } int x=0,i=0,w=41,a=0; int[][,] h = { new int[,]{{15,23},{48,25},{82,27},{119,31},{157,40},{202,45},{257,38},{300,33},{344,30}, { 414, 62 }, { 479, 59 }, { 540, 67 }, { 610, 60 }, { 674, 73 }, { 754, 74 }, { 827, 70 }, { 894, 57 }, { 951, 60 } }

Page 26: Çok Boyutlu Dizi - Gaziantep Üniversitesiozcan/ders/nesne1/dn_nes1_8_cokBoyutluDizi1.pdf8.21) C# da, aynı türdeki verileri bir araya getiren System.Array türünden nesnelere diz;

,new int[,]{{ 5, 63 }, { 86, 42 }, { 133, 78 }, { 222, 60 }, { 295, 46 }, { 350, 39 }, { 403, 31 }, { 447, 27 }, {522,33},{573,36},{624,42},{674,51},{726,52},{784,51},{845,62},{910,65},{980,49},{1032,53},{1095,63},{1168,60},{1233,45}} ,new int[,]{{7,24},{50,25},{91,25},{132,30},{172,38},{212,45},{260,50},{316,45},{368,35},{410,35},{453,44},{507,36},{554,34},{602,34},{645,34},{694,25}}}; Image prens = Image.FromFile(@"C:\data\princesprites.gif"); GraphicsUnit units = GraphicsUnit.Pixel; private void Form1_Paint(object sender, PaintEventArgs e) { e.Graphics.DrawImage(prens, new Rectangle(0, 0, 4*w, 4*105),new Rectangle(x, 2*100, w, 105),units); e.Graphics.DrawImage(prens, new Rectangle(340, 100, w, 105),new Rectangle(x, 2*100, w, 105),units); e.Graphics.DrawImage(prens, new Rectangle(340, 220, h[a][i, 1], 105), new Rectangle(h[a][i,0], 2*100, h[a][i,1], 105), units); e.Graphics.DrawImage(prens, new Rectangle(615, 100, h[a][t, 1], 105), new Rectangle(h[a][t, 0], 2*100, h[a][t, 1], 105), units); } private void timer1_Tick(object sender, EventArgs e) { i++; if (i >= h[a].GetLength(0)) i = 0; Invalidate(); } private void Form1_Load(object sender, EventArgs e) { textBox1.Text=i.ToString();textBox2.Text=w.ToString(); SetStyle(ControlStyles.UserPaint, true); SetStyle(ControlStyles.AllPaintingInWmPaint, true); SetStyle(ControlStyles.DoubleBuffer, true); } private void button1_Click(object sender, EventArgs e) { textBox3.Text += ",{" + textBox1.Text+","+textBox2.Text+"}"; } private void pictureBox1_MouseMove(object sender, MouseEventArgs e) { Text = e.Location.X.ToString(); } private void pictureBox1_MouseDown(object sender, MouseEventArgs e) { textBox1.Text=(x=e.Location.X).ToString(); w = int.Parse(textBox2.Text); Invalidate(); } private void button2_Click(object sender, EventArgs e) {textBox1.Text = (int.Parse(textBox1.Text) - 1).ToString(); button6_Click(null,null);} private void button3_Click(object sender, EventArgs e) {textBox1.Text = (int.Parse(textBox1.Text)+1).ToString();button6_Click(null,null);} private void button4_Click(object sender, EventArgs e) { textBox2.Text = (int.Parse(textBox2.Text)-1).ToString();button6_Click(null,null);} private void button5_Click(object sender, EventArgs e) { textBox2.Text = (int.Parse(textBox2.Text)+1).ToString();button6_Click(null,null);} private void button6_Click(object sender, EventArgs e) { x = int.Parse(textBox1.Text);w = int.Parse(textBox2.Text);Invalidate();} private void button7_Click(object sender, EventArgs e)

Page 27: Çok Boyutlu Dizi - Gaziantep Üniversitesiozcan/ders/nesne1/dn_nes1_8_cokBoyutluDizi1.pdf8.21) C# da, aynı türdeki verileri bir araya getiren System.Array türünden nesnelere diz;

{ timer1.Enabled = !timer1.Enabled; } int t = 0; private void button9_Click(object sender, EventArgs e) { t--; if (t < 0 ) t = h[a].GetLength(0)-1; textBox4.Text = "h["+a+"]["+t+",0]="+h[a][t,0]+" h["+a+"]["+t+",1]="+h[a][t,1]; } private void button8_Click(object sender, EventArgs e) { t++;if (t >= h[a].GetLength(0)) t = 0; textBox4.Text = "h[" + a + "][" + t + ",0]=" + h[a][t, 0] + " h[" + a + "][" + t + ",1]=" + h[a][t, 1]; } } } // Matrix X = new Matrix(); // X.Rotate(30); // e.Graphics.Transform = X; // e.Graphics.DrawImage(prens, new Rectangle(205, 0, 200, 200), 0, 0, prens.Width, prens.Height, GraphicsUnit.Pixel); // curBitmap.Dispose(); // g.Dispose(); // e.Gr

private void Form1_Paint(object sender, PaintEventArgs e)

{

Graphics g = this.CreateGraphics(); //veya Form1_Paint için

=e.Graphics;

g.RotateTransform(-90); //ve g.TranslateTransform(0, 50);

g.DrawString("Emin", new Font("Arial", 16), Brushes.Red, -50, 0)

} //veya this.Font kullanıla bilinir

//---------------veya

StringFormat strF = new StringFormat();

strF.FormatFlags = StringFormatFlags.DirectionVertical;

Graphics g = e.Graphics;

g.DrawString("Emin", new Font("Arial", 16), Brushes.Red,50,0, strF);

public Bitmap MirrorImage(Bitmap source)

{

Bitmap mirrored = new Bitmap(source.Width, source.Height);

for(int i = 0; i < source.Height; i++)

for(int j = 0; j > source.Width; j++)

mirrored.SetPixel(i, j, source.GetPixel(source.Width - j - 1, i);

return mirrored;

} Mirror

Page 28: Çok Boyutlu Dizi - Gaziantep Üniversitesiozcan/ders/nesne1/dn_nes1_8_cokBoyutluDizi1.pdf8.21) C# da, aynı türdeki verileri bir araya getiren System.Array türünden nesnelere diz;

bmpPicture.RotateFlip(RotateFlipType.RotateNoneFlipY);

draw da son un verilerin eksili verin g.ScaleTransform(0, -1);

g.ScaleTransform(1, -1);

Note that now your image will be drawn behind the upper screen edge. To fix it, you need to

callg.TranslateTransform before g.ScaleTransform:

g.TranslateTransform(0, YourImageHeightHere);

g.ScaleTransform(1, -1);

System.Media.SoundPlayer player = new System.Media.SoundPlayer();

player.SoundLocation = "My Wav File.wav";

player.Play();

using System; using System.Runtime.InteropServices; class MainClass { [DllImport("User32.dll")] public static extern int MessageBox(int h, string m, string c, int type); static int Main() { string myString; Console.Write("Enter your message: "); myString = Console.ReadLine(); return MessageBox(0, myString, "My Message Box", 0); } }

Herhangi bir nesnenin üzerine çizim yapılabilir.

Graphics g = this.CreateGraphics();g.DrawLine(Pens.Red,0,0,100,100);

Graphics g = button1.CreateGraphics();g.DrawLine(Pens.Red,0,0,100,100); Graphics g = pictureBox1.CreateGraphics();g.DrawLine(Pens.Red,0,0,100,100);

NOT :

Sayfadaki titreşim olmaması içi aşağıdaki DoubleBuffer kullanılır. private void Form1_Load(object sender, EventArgs e) { // Text = "Mouse Events and Timers"; // Size = new Size(400, 175); // MaximizeBox = false; // FormBorderStyle = FormBorderStyle.FixedSingle; // CenterToScreen(); //enabling double-buffering to avoid flicker SetStyle(ControlStyles.UserPaint, true); SetStyle(ControlStyles.AllPaintingInWmPaint, true); SetStyle(ControlStyles.DoubleBuffer, true); }

Page 29: Çok Boyutlu Dizi - Gaziantep Üniversitesiozcan/ders/nesne1/dn_nes1_8_cokBoyutluDizi1.pdf8.21) C# da, aynı türdeki verileri bir araya getiren System.Array türünden nesnelere diz;

EV ÖDEVİ Yandaki edn_cizim_ekranı isimli sayfadaki Button1 tıklandığında çizilecek şekillerin

resimleri aşağıdaki sorularda görünmektedir. Sorularda görünen resimleri çizecek csharp

kodlarını yazınız.

1)

2)

3)

4)

5)

6)

7)

8)

9)

10)

Page 30: Çok Boyutlu Dizi - Gaziantep Üniversitesiozcan/ders/nesne1/dn_nes1_8_cokBoyutluDizi1.pdf8.21) C# da, aynı türdeki verileri bir araya getiren System.Array türünden nesnelere diz;

11) Graphics g = this.CreateGraphics();

g.DrawLine(Pens.Blue, 10, 20, 40, 0);

g.DrawLine(Pens.Blue, 40, 0, 70 , 20);

g.DrawLine(Pens.Blue, 70, 20, 70 ,50 );

g.DrawLine(Pens.Blue, 70, 50, 10, 50);

g.DrawLine(Pens.Blue, 10, 50, 10, 20);

g.DrawLine(Pens.Blue, 10, 20, 70, 20);

g.DrawLine(Pens.Blue, 20, 30, 30, 30);

g.DrawLine(Pens.Blue, 30, 30, 30, 40);

g.DrawLine(Pens.Blue, 30, 40, 20, 40);

g.DrawLine(Pens.Blue, 20, 40, 20, 30);

g.DrawLine(Pens.Blue, 50, 30, 60, 30);

g.DrawLine(Pens.Blue, 60, 30, 60, 40);

g.DrawLine(Pens.Blue, 60, 40, 50, 40);

g.DrawLine(Pens.Blue, 50, 40, 50, 30);

12)

13)

14)

15)

16)

17)

18)

19)

20)

Page 31: Çok Boyutlu Dizi - Gaziantep Üniversitesiozcan/ders/nesne1/dn_nes1_8_cokBoyutluDizi1.pdf8.21) C# da, aynı türdeki verileri bir araya getiren System.Array türünden nesnelere diz;

21)

22)

23)

24)

25)

26) Graphics g =

this.CreateGraphics(); g.FillEllipse(Brushes.Yellow, 30, 30, 70, 60); g.DrawEllipse(Pens.Red, 30, 30, 70, 60); g.FillRectangle(Brushes.Yellow,20,20,60,50); g.DrawRectangle(Pens.Red, 20, 20, 60, 50); g.FillEllipse(Brushes.Yellow, 10, 10, 50, 40); g.DrawEllipse(Pens.Red, 10, 10, 50, 40);

27)

28)

29)

30)

31)

32)

Page 32: Çok Boyutlu Dizi - Gaziantep Üniversitesiozcan/ders/nesne1/dn_nes1_8_cokBoyutluDizi1.pdf8.21) C# da, aynı türdeki verileri bir araya getiren System.Array türünden nesnelere diz;

33)

34)

35)

36)

Page 33: Çok Boyutlu Dizi - Gaziantep Üniversitesiozcan/ders/nesne1/dn_nes1_8_cokBoyutluDizi1.pdf8.21) C# da, aynı türdeki verileri bir araya getiren System.Array türünden nesnelere diz;

Uygulama 8

Uy 1. Skoban oyun programını yazıp çalıştırın

C:\data\ dizinini oluşturun.

http://www1.gantep.edu.tr/~ozcan/ders/data/ adresindeki kenar.jpg, taş.jpg,

nokta.jpg, duvar.jpg, boşluk.jpg, adam.jpg dosyalarını

fareSağtuşubağlantıyıFarklıKaydet den c:\data dizinine kaydedin

FormAplication oluşturun.

Form1_KeyDown ve Form1_Paint olaylarını oluşturun

Kod sayfasını aşağıdaki gibi değiştirin.

Image[] resim = { Image.FromFile(@"C:\data\kenar.jpg"), Image.FromFile(@"C:\data\duvar.jpg"), Image.FromFile(@"C:\data\taş.jpg"), Image.FromFile(@"C:\data\boşluk.jpg"), Image.FromFile(@"C:\data\nokta.jpg"), Image.FromFile(@"C:\data\adam.jpg")}; int x = 4, y = 4; int[,] h = { {0,0,0,0,0,0,0,0,0,0}, {0,0,1,1,1,1,1,1,1,0}, {0,0,1,3,3,3,3,3,1,0}, {0,0,1,4,3,2,3,3,1,0}, {0,0,1,4,3,3,3,3,1,0}, {0,0,1,1,2,3,1,3,1,0}, {0,0,1,1,3,3,3,3,1,0}, {0,0,1,1,1,1,1,1,1,0}, {0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0}}; private void Form1_Paint(object sender, PaintEventArgs e) { for (int i = 0; i < 10; i++)for (int j = 0; j < 10; j++) e.Graphics.DrawImage(resim[h[j,i]],i*64, j*64, 64, 64); e.Graphics.DrawImage(resim[5], x * 64, y * 64, 64, 64); } private void Form1_KeyDown(object sender, KeyEventArgs e) { // önündeTas ikiÖnüBoş TaşıKaydır AdamıKaydır ÖnüBoşsa if (e.KeyValue==38) { if (h[y-1,x]==2 && h[y-2,x]>2){ h[y-2,x]=2; h[y-1,x]=3;y--;} else if (h[y - 1, x] > 2)y--; } if (e.KeyValue==40) { if(h[y+1,x]==2 && h[y+2,x]>2){h[y+2,x]=2; h[y+1,x]=3; y++;} else if (h[y+1,x]>2)y++;} if (e.KeyValue==37) { if(h[y,x-1]==2 && h[y,x-2]>2) { h[y,x-2]=2; h[y,x-1]=3;x--;} else if (h[y, x - 1] > 2)x--;} if (e.KeyValue==39) { if(h[y,x+1]==2 && h[y,x+2]>2){ h[y,x+2]=2;h[y,x+1]=3;x++;} else if (h[y,x+1]>2)x++; } Invalidate();}

Page 34: Çok Boyutlu Dizi - Gaziantep Üniversitesiozcan/ders/nesne1/dn_nes1_8_cokBoyutluDizi1.pdf8.21) C# da, aynı türdeki verileri bir araya getiren System.Array türünden nesnelere diz;

Uy 2. (satırları silme işleminde) Kontrolsüz tetris programını yazıp çalıştırın.

C:\data\ dizinini oluşturun.

http://www1.gantep.edu.tr/~ozcan/ders/data/ adresinden

ilgili resim dosyalarını c:\data dizinine kaydedin

FormAplication oluşturun.

Forma bir adet timer ekleyin. Çalışır hale getirin

Form1_Load, Form1_KeyDown, Form1_Paint ve

timer1_Tick olaylarını oluşturun

Kod sayfasını aşağıdaki gibi değiştirin.

Image[] resim = { Image.FromFile(@"C:\data\kenar.jpg"),Image.FromFile(@"C:\data\taş.jpg")}; int x = 4, y = 0, w, h, a ; Random random = new Random();Boolean satırDolu; int[][] harita = new int[20][]; int[][,] s=new int[3][,]; private void Form1_Load(object sender, EventArgs e) { for (int i = 0; i < 20; i++) harita[i] =new int[9]{0,0,0,0,0,0,0,0,0}; Width = 9*30+20; Height = 21*30+10;a=random.Next(0, 3); s[0] = new int[,] { {1,1,1,1} }; s[1] = new int[,] { { 1, 0}, { 1, 0 }, { 1, 1} }; s[2] = new int[,] { {1,0 },{1,1}}; w = s[a].GetLength(0); h = s[a].GetLength(1); } private void Form1_Paint(object sender, PaintEventArgs e) { for (int j =19; j >=0 ; j--) { for (int i = 0; i <9 ; i++) e.Graphics.DrawImage(resim[0], i * 30, j * 30, 30, 30);} for (int i = 0; i < s[a].GetLength(0); i++) for (int j = 0; j < s[a].GetLength(1); j++) e.Graphics.DrawImage(resim[s[a][i,j]], (x + i) * 30, (y + j) * 30, 30, 30); } private void timer1_Tick(object sender, EventArgs e) { if (y + h < 20) y++; else { x = 4; y = 0; a = random.Next(0, 3); w = s[a].GetLength(0); h = s[a].GetLength(1); } Invalidate(); Text = " " + x + " " + y + " " + s[a].GetLength(0) + " " + s[a].GetLength(1); } private void Form1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyValue == 38) döndür(); if (e.KeyValue == 40) {if(y+h<20 ) y++;} // aşağı if (e.KeyValue == 37) { if(x>0 )x--; } // sol if (e.KeyValue == 39) {if(x+w<9 )x++; } // sağ Invalidate(); } private void döndür() { int[,] g = new int[h, w]; for (int i = 0; i < w; i++) for (int j = 0; j < h; j++) g[j, i] = s[a][i, j]; s[a] = g; int k = h; h = w; w = k; }

Page 35: Çok Boyutlu Dizi - Gaziantep Üniversitesiozcan/ders/nesne1/dn_nes1_8_cokBoyutluDizi1.pdf8.21) C# da, aynı türdeki verileri bir araya getiren System.Array türünden nesnelere diz;

Uy 2. (Tekrarıdır)Tetris programını yazıp çalıştırın.

C:\data\ dizinini oluşturun.

...tr/~ozcan/ders/data/ adresinden gerekli resim dosyalarını

c:\data dizinine indirin.

FormAplication oluşturun.

Forma bir adet timer ekleyin. Çalışır hale getirin

Form1_KeyDown, Form1_Load Form1_Paint ve timer1_Tick olaylarını

oluşturun

Form1_KeyDown ve Form1_Paint olaylarını oluşturun

Kod sayfasını aşağıdaki gibi değiştirin.

int[,] harita=new int[9, 13]; int[][,] s=new int[3][,] { new int[,] { {1,1,1,1} }, new int[,] { { 1, 0}, { 1, 0 }, { 1, 1} },new int[,] { {1,0 },{1,1}}} ;Image[] resim = { Image.FromFile(@"C:\data\kenar.jpg"),Image.FromFile(@"C:\data\taş.jpg")}; int x = 4, y = 0,w, h, a, puan=0 ; Random random = new Random(); Boolean satırDolu; private void Form1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyValue == 38 ) döndür(); if (e.KeyValue == 40 && !ÇakışmaVarmı(0,1)) y++; if (e.KeyValue == 37 && !ÇakışmaVarmı(-1,0))x--; // sol if (e.KeyValue == 39 && !ÇakışmaVarmı(1,0)) x++; Invalidate();} private void timer1_Tick(object sender, EventArgs e) { if (y + h < harita.GetLength(1)) { if (ÇakışmaVarmı(0, 1)) { bırakTaş(); yeniTaş(); } else y++; } else { bırakTaş(); yeniTaş(); } Invalidate();} private Boolean ÇakışmaVarmı(int k, int m) { if (y + h + m > harita.GetLength(1) || x + k < 0 || x + w + k > harita.GetLength(0)) return true; for (int i = 0; i < w; i++) for (int j = 0; j < h; j++) if (harita[i + x + k, j + y + m] == 1 && s[a][i, j] == 1) return true; return false ; } private void yeniTaş() {x = 4; y = 0; a = random.Next(0, s.Length); w = s[a].GetLength(0); h = s[a].GetLength(1); puan++; Text ="Tetris : "+puan; } private void bırakTaş(){for (int i = 0; i < w; i++) for (int j = 0; j < h; j++) if (s[a][i, j] == 1) harita[i + x, j + y] = s[a][i, j]; } private void Form1_Load(object sender, EventArgs e) { for (int i = 0; i < harita.GetLength(0); i++) for (int j = 0; j < harita.GetLength(0); j++) harita[i, j] = 0; yeniTaş(); SetStyle(ControlStyles.UserPaint, true); SetStyle(ControlStyles.AllPaintingInWmPaint, true);SetStyle(ControlStyles.DoubleBuffer, true); } private void Form1_Paint(object sender, PaintEventArgs e) { for (int j = harita.GetLength(1) - 1; j >= 0; j--)// fazla satır varsa sil { satırDolu=true; for (int i = 0; i < harita.GetLength(0); i++)if (harita[i, j] == 0) { satırDolu = false; break; } if (satırDolu) { puan += 10; for (int jj = j; jj > 0; jj--)for (int i = 0; i < harita.GetLength(0); i++) harita[i, jj] = harita[i, jj-1]; } // satır sil for (int i = 0; i < harita.GetLength(0); i++) e.Graphics.DrawImage(resim[harita[i, j]], i * 30, j * 30, 30, 30); } for (int i = 0; i < s[a].GetLength(0); i++) for (int j = 0; j < s[a].GetLength(1); j++) if (s[a][i, j]==1) e.Graphics.DrawImage(resim[s[a][i, j]], (x + i) * 30, (y + j) * 30, 30, 30); } private void döndür() { int[,] g = new int[h, w]; for (int i = 0; i < h; i++) for (int j = 0; j < w; j++)g[i, j] = s[a][j, h - i-1]; s[a] = g; int k = h; h = w; w = k; }

Page 36: Çok Boyutlu Dizi - Gaziantep Üniversitesiozcan/ders/nesne1/dn_nes1_8_cokBoyutluDizi1.pdf8.21) C# da, aynı türdeki verileri bir araya getiren System.Array türünden nesnelere diz;

Uy 3. riverRaid programını yazıp çalıştırın.

C:\data\ yı oluşturun.

...tr/~ozcan/ders/data/ adresinden gerekli resim

dosyalarını c:\data dizinine indirin.

FormAplication oluşturun.

Forma bir adet timer ekleyin. Çalışır hale getirin

Form1_MouseMove, Form1_MouseDown, Form1_Load

Form1_Paint ve timer1_Tick olaylarını oluşturun

Kod sayfasını aşağıdaki gibi değiştirin.

Image ucak = Image.FromFile(@"C:\data\rr_ucak.png"); Image deniz = Image.FromFile(@"C:\data\rr_deniz.png"); Image gemi = Image.FromFile(@"C:\data\rr_gemi.png"); Image heli = Image.FromFile(@"C:\data\rr_heli.png"); int a=0,W,H=600,ux,uy, bomx,bomy,y=0, yc=5; int[,] dusman = {{150,100,1,0,3},{350,300,1,0,3},{120,600,2,0,3},{300,800,1,0,3},{200,900,1,0,3},{250,999,2,0,3}}; private void Form1_Paint(object sender, PaintEventArgs e) { GraphicsUnit units = GraphicsUnit.Pixel; if (y >= 0 ) e.Graphics.DrawImage(deniz, new Rectangle(0, 0, W, H),new Rectangle(0, y, W, H),units); else{ e.Graphics.DrawImage(deniz, new Rectangle(0, -y, W, (H+y)),new Rectangle(0,0,W,H+y),units); e.Graphics.DrawImage(deniz, new Rectangle(0, 0, W,- y),new Rectangle(0, deniz.Height + y, W,- y), units); } e.Graphics.DrawImage(ucak, ux, Height - 100, ucak.Width, ucak.Height);// Uçak çiz if (bomy > 0) { e.Graphics.DrawLine(new Pen(Color.White, 4), bomx, bomy, bomx, bomy - 10); bomy = bomy - 40;} for (int i = 0; i < dusman.GetLength(0); i++) if (dusman[i, 3] == 1) e.Graphics.DrawImage(dusman[i, 2] == 1 ? gemi : heli, dusman[i, 0], dusman[i, 1], gemi.Width, gemi.Height); } private void timer1_Tick(object sender, EventArgs e) { y -= yc; if (y <= -H) y = deniz.Height - H; for (int i = 0; i < dusman.GetLength(0); i++){ dusman[i, 1] += yc;dusman[i, 1] %= deniz.Height; if (dusman[i, 1] <90) dusman[i, 3] =1; if (dusman[i, 3] == 1) { if (dusman[i, 0] > 360) dusman[i, 4] = -3 ; if (dusman[i, 0] < 142) dusman[i, 4] = 3; dusman[i, 0] += dusman[i, 4] ; int ww=gemi.Width, hh=gemi.Height,xx=dusman[i, 1],yy=dusman[i, 1]; if (bomx > xx && bomx > xx + ww && bomy > yy && bomy < yy+hh) dusman[i, 3] = 0; }} Invalidate();} private void Form1_MouseMove(object sender, MouseEventArgs e) { yc =uy > e.Location.Y ? 10:1;ux=uy=e.Location.X;Invalidate(); if(ux<142 || ux>402) timer1.Enabled = false; } private void Form1_MouseDown(object sender, MouseEventArgs e) { bomx=e.Location.X +15; bomy=Height-100;} private void Form1_Load(object sender, EventArgs e) { Width=W =deniz.Width;y = deniz.Height - H; SetStyle(ControlStyles.UserPaint, true); SetStyle(ControlStyles.AllPaintingInWmPaint, true); SetStyle(ControlStyles.DoubleBuffer, true); }

Page 37: Çok Boyutlu Dizi - Gaziantep Üniversitesiozcan/ders/nesne1/dn_nes1_8_cokBoyutluDizi1.pdf8.21) C# da, aynı türdeki verileri bir araya getiren System.Array türünden nesnelere diz;

Uy 4. Fatiha süresine okuyan programını yazıp çalıştırın.

C:\data\ yı oluşturun.

...tr/~ozcan/ders/data/ den c:\data dosya indirin

FormAplication oluşturun. timer1, button1 ekleyin.

Timer1 in interval ı 1, enable ı true yapın.

timer1_Tick, button1_Click, Form1_Paint

Form1_Load olaylarını oluşturun

Windows Medya Player ı referansa ekleyin.

Using bölümüne using System.Runtime.InteropServices; ı ekleyin

Kod sayfasını aşağıdaki gibi değiştirin.

[DllImport("winmm.dll")] private static extern long mciSendString(string strCommand, StringBuilder strReturn, int iReturnLength, IntPtr hwndCallback); public string Pcommand; Image fatiha = Image.FromFile(@"C:\data\fatiha.jpg");int x=420, y=283,t=0,a=0; // t1 x1 y1 t2 x2 y2 int[,] dur = { {381,420,0,580,236,0}, // bis {680,420,1,900,300,1}, // elham {1000,240,1,1049,236,1}, // errah {1010,420,2,1210,400,2}, // rehim {1300,340,2,1460,236,3}, // maliki {1560,420,3,1807,236,4}, // iyyake {1930,420,4,2110,304,4}, // ihdines {2280,254,4,2376,236,11}, // sira {2377,420,5,2680,236,11}, // lezi {2660,420,6,2959,236,11}, // lmeg }; private void timer1_Tick(object sender, EventArgs e) { t++; a = 0; for (int i = 0; i < dur.GetLength(0); i++) { if (t == dur[i, 0]) { x = dur[i, 1]; y = dur[i, 2] * 44 + 283; } if (t > dur[i, 0] && t < dur[i, 3]) if (x > dur[i, 4]) { x--; if (x < 235) { x = 420; y += 44; } } } Invalidate(); } private void button1_Click(object sender, EventArgs e) { if (timer1.Enabled) Pcommand = "pause MediaFile"; else Pcommand = "play MediaFile"; timer1.Enabled = !timer1.Enabled; mciSendString(Pcommand, null, 0, IntPtr.Zero); } private void Form1_Paint(object sender, PaintEventArgs e) {e.Graphics.DrawImage(fatiha, 0,0); SolidBrush myBrush = new SolidBrush(Color.FromArgb(127, Color.Tomato)); e.Graphics.FillRectangle(myBrush, x, y, 50, 40); } private void Form1_Load(object sender, EventArgs e) { WMPLib.WindowsMediaPlayer wplayer = new WMPLib.WindowsMediaPlayer();wplayer.URL = @"c:\data\001Fatiha.mp3"; wplayer.controls.play();Pcommand = "open \"" + @"C:\data\001Fatiha.MP3" + "\" type mpegvideo alias MediaFile"; mciSendString(Pcommand, null, 0, IntPtr.Zero); Pcommand = "play MediaFile"; Pcommand += " REPEAT"; mciSendString(Pcommand, null, 0, IntPtr.Zero); SetStyle(ControlStyles.UserPaint, true); SetStyle(ControlStyles.AllPaintingInWmPaint, true); SetStyle(ControlStyles.DoubleBuffer, true); }