lamont Posted October 4, 2014 Share Posted October 4, 2014 Arkadaşlar C# dizi mantıgını bir türlü çözemedim mesala aşagıda lisbox içindeki sayıları küçükten büyüğe dogru sıralama yapan kod var bu kodun ne iş yaptıgı mantıgını çözemedim dizilerde sıralma teknigini mantıgı nedir açıklayabilirmsiniz arkadaşlar mantık bir türlü oturmuyor ezber olsun istemiyorum private void button1_Click(object sender, EventArgs e) { int[] Sayilar = { 10, 21, 9, 7, 5, 2, 12, 16, 25 }; int temp = 0; for (int i=0; i < Sayilar.Count(); i++) { for (int j = i; j < Sayilar.Count(); j++) { if (Sayilar[i] > Sayilar[j]) { temp = Sayilar[i]; Sayilar[i] = Sayilar[j]; Sayilar[j] = temp; } } } for (int i = 0; i < Sayilar.Count(); i++) listBox1.Items.Add(Sayilar[i]); } } } Quote Link to comment Share on other sites More sharing options...
Editor pairs Posted October 4, 2014 Editor Share Posted October 4, 2014 (edited) Bunun için linq yapısını kullanabilirsin. ArrayList q = new ArrayList(); foreach (object o in listBox1.Items) q.Add(o); q.Sort(); listBox1.Items.Add(q.ToString()); Yukarıdaki örnektede Sayilar dizesini ikidefa okuyor çark gibi düşünün iç içe olan iki çark. ilk for 1 sıra gittiğinde içerideki sayiların adedi kadar gidiyor. ve ilk for her çalıştıgında sıradaki değeri kendi içinde karşılaştırıyor eğer büyük ise temp adlı değişkene aktarıyor daha sonrada listbox a aktarıyor ama yukarıda verdiğim örnek daha basiti. Edited October 4, 2014 by pairs Quote Link to comment Share on other sites More sharing options...
lamont Posted October 4, 2014 Author Share Posted October 4, 2014 paris vaktin varsa video ahzırlayabilirmisin müsait bir zamanda açıkçası yine bir şey anlamadım dizi sıralama mantıgı bana karışık geliyor Quote Link to comment Share on other sites More sharing options...
Editor pairs Posted October 4, 2014 Editor Share Posted October 4, 2014 ArrayList q = new ArrayList(); --- bir dizi listesi oluşturuyoruz. foreach (object o in listBox1.Items) -- foreach komutuyla listboxdaki itemlerin tamamını sırasıyla okuyarak o değişkenine aktarıyoruz. q.Add(o); --- oluşturduğumuz dizi listesine bu listboxdaki itemleri ekliyoruz. q.Sort(); --- arraylist in sort methoduylada bunları büyükten küçüğe listeliyoruz. listBox1.Items.Add(q.ToString()); -- ve daha sonrada arraylist i listbox a ekliyoruz. Quote Link to comment Share on other sites More sharing options...
lamont Posted October 4, 2014 Author Share Posted October 4, 2014 benim verdigim kodlar peki pairs mantıgını anlayamadım kod eksikmi tek hata veriyor Error 1 The type or namespace name 'ArrayList' could not be found (are you missing a using directive or an assembly reference?) C:\Users\ASUS\örnek projeler\karenin kenarı çevresini hesaplama\WindowsFormsApplication43\WindowsFormsApplication43\Form1.cs 23 13 WindowsFormsApplication43 Quote Link to comment Share on other sites More sharing options...
lamont Posted October 4, 2014 Author Share Posted October 4, 2014 arkadaşlar aşagıdaki kodların nasıl çalıştıgını adım adım bana anlatabilecek kimse varmı kafam çok karıştı bu kısımda detaylı bir şekilde anlatabilirmisiniz if (Sayilar[i] > Sayilar[j]) { temp = Sayilar[i]; Sayilar[i] = Sayilar[j]; Sayilar[j] = temp; } Quote Link to comment Share on other sites More sharing options...
MostWanted Posted October 4, 2014 Share Posted October 4, 2014 Sanırım bu bir algoritma analizi dersinden alınma bir kod. Bu algoritma "bubble sort"a benziyor ama değil. Algoritmanın detaylarını ; http://www.sorting-algorithms.com/bubble-sort burda görebilirsiniz. Ama elimden geldiğince Türkçe anlatmaya çalışırsam; Senin algoritmanın nasıl çalıştığının tüm adımlarını göstermek uzun sürecektir ama ilk 4 adımı gösterirsek 10, 21, 9, 7, 5, 2, 12, 16, 25 1- 9, 21, 10, 7, 5, 2, 12, 16, 25 2- 7, 21, 10, 9, 5, 2, 12, 16, 25 3- 5, 21, 10, 9, 7, 2, 12, 16, 25 4- 2, 21, 10, 9, 7, 5, 12, 16, 25 Kısaca her gördüğün büyük sayıyla küçük sayının yerini değiştiriyor. Biliyorum çok açıklayıcı olmamış olabilir ama algoritmanın tam adını ne yazık ki bulamadım ama dediğim gibi bubble sort mekanizmasına benziyor.Visual Studio'da breakpointler koyarak (mesala sayilar[j] = temp kısmına) algoritmanın işleyişini aşağıda görüldüğü gibi çok güzel takip edebilirsin. Quote Link to comment Share on other sites More sharing options...
lamont Posted October 5, 2014 Author Share Posted October 5, 2014 sayilar[j] = temp temp deger nasıl alıyor anlamadım ve ayrıca bu kod temp mi temp sayilar[j] içinemi atıyor gerçekten kafam akrışıyor bu kodda Quote Link to comment Share on other sites More sharing options...
Editor pairs Posted October 5, 2014 Editor Share Posted October 5, 2014 C# eğitimini tam almadan bu tür şeyler kafanızı çok yoracaktır. Öncelikle C# eğitimini tam olarak bitirin. Quote Link to comment Share on other sites More sharing options...
lamont Posted October 5, 2014 Author Share Posted October 5, 2014 pairs bu konuyu tam pekiştirmeden diger konulara geçmek mantıklımı bu eksik kalacak ? Quote Link to comment Share on other sites More sharing options...
destroychip Posted October 5, 2014 Share Posted October 5, 2014 Adım 1 (Değişken tanımlama bölümü) int[] Sayilar = { 10, 21, 9, 7, 5, 2, 12, 16, 25 } sayılar isimli elemanları tamsayı olan bir dizi oluşturuyorsun ve dizinin elemanlarını belirtiyorsun. Buradaki ayrıntı şu: dizi eleman indisleri sıfırdan başlar ve buna göre tanımlama gereği dizinin ilk elemanı sayılar[0] ve içeriği ise 10, benzer şekilde ikinci eleman sayılar[1] ve içeriği 21 bu şekilde devam ediyor.. int temp=0 tamsayı olacak şekilde bir temp değişkeni tanımlıyorsun ve değer olarak 0 ataması yapıyorsun. Gelelim döngüye for (int i=0; i < Sayilar.Count(); i++) dizinin ilk elemanını dizi eleman sayısına kadar saydırıyorsun ve 1 er arttırıyorsun. Başlangıç değeri 0 { for (int j = i; j < Sayilar.Count(); j++) dizinin ilk elemanını i den başlatıyorsun.i başlangıçta sıfır idi, dizi elaman sayısına kadar döndürüyorsun j 1 er artıyor. { if (Sayilar[i] > Sayilar[j]) Burada i=0 j=0 sayılar[0] sayılar[0] dan büyükse ki değil adım atlanıyor. tekrar çalıştıralım { i=0, j=1 oldu sayılar[0] yani 10 değeri sayılar[1] den yani 21 den ki değil atlıyorsun temp = Sayilar[i]; i=0, j=2 oldu sayılar[0] yani 10 değeri sayılar[2] den yani 9 dan büyükse işte o zaman Sayilar[i] = Sayilar[j]; temp değişkenine sayılar[0] yani 10 değerini atadın Sayilar[j] = temp; sayılar[0] yani 10 değerini silip yerine sayılar[2] deki 9 değerini atadın } sayılar[2] deki 9 değerini silip yerine 10 değerini atamış oldun. son duruma göre dizinin yeni durumu int[] sayilar ={9,21,10,7,5,2,12,16,25} oldu. } Bu döngü nxn kadar çalışır ve son durum int[] sayilar={2,5,7,9,10,12,16,21,25} olur } for (int i = 0; i < Sayilar.Count(); i++) listBox1.Items.Add(Sayilar[i]); burada elemanların yeri değişen dizinin son hali listbox a sıra ile yazdırılmakta } } } umarım açıklayıcı olmuştur Quote Link to comment Share on other sites More sharing options...
lamont Posted October 5, 2014 Author Share Posted October 5, 2014 kardeş aşagıdaki kısmı adım adım çalıştırdım döngü ilk kez başladıgında aşagıdaki kısımda 2 defa yerinde dönüyor ve j=2 oluyor ondna sonra aşagıdaki kodları icra ediyor if (Sayilar[i] > Sayilar[j]) Quote Link to comment Share on other sites More sharing options...
destroychip Posted October 5, 2014 Share Posted October 5, 2014 kardeş aşagıdaki kısmı adım adım çalıştırdım döngü ilk kez başladıgında aşagıdaki kısımda 2 defa yerinde dönüyor ve j=2 oluyor ondna sonra aşagıdaki kodları icra ediyor if (Sayilar[i] > Sayilar[j]) tamam işte ilkinde dizinin birinci ve ikinci elemanları karşılaştırılıyor yani 10 ve 21.. 10 değeri 21 den büyük olmadığı için döngü tekrar çalışıyor ve bu defa dizinin birinci ve üçüncü elemanları yani 10 ile 9 karşılaştırılıyor. yani kısaca döngünün 1. adımında: i=0 j=0 sayilar[0] > sayilar[0] mi? hayır yani 10>10 mu hayır (10 ile 10 karşılaştırılıyor) 2. adımında i=0 j=1 sayılar[0] > sayilar[1] mi? hayır yani 10>21 değildir (10 ile 21 karşılaştırılıyor) 3. adımında i=0 j=2 sayilar[0] > sayilar[2] mi? evet !! o zaman yerlerini değiştir. (10 ile 9 karşılaştırılıyor) ilk iki adımda hayır cevabı aldığın için 2 defa yerinde döndü üçüncü adımda şart sağlandığı için if döngüsü altındaki işlemler uygulandı... Quote Link to comment Share on other sites More sharing options...
lamont Posted October 5, 2014 Author Share Posted October 5, 2014 for (int j = i; j < Sayilar.Count(); j++) dizinin ilk elemanını i den başlatıyorsun.i başlangıçta sıfır idi, dizi elaman sayısına kadar döndürüyorsun j 1 er artıyor. if (Sayilar[i] > Sayilar[j]) bu ilk döngüyü bitirip tekrar döndügünde yani 2 ci döngüde yularıdaki for gidiyor j=i; burda j 1 yapıp tekrar aşagı geçiyor çok saçma çalışıyor mantıgını kavrayamadım Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.