Jump to content

C# Diziler Sorunu


lamont
 Share

Recommended Posts

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]);

          

            }

        }

    }

 

Link to comment
Share on other sites

  • Editor

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 by pairs
Link to comment
Share on other sites

  • Editor
  1. ArrayList q = new ArrayList();      ---   bir dizi listesi oluşturuyoruz.
  2. foreach (object o in listBox1.Items)   --  foreach komutuyla listboxdaki itemlerin tamamını sırasıyla okuyarak o değişkenine aktarıyoruz.
  3. q.Add(o);     ---  oluşturduğumuz dizi listesine bu listboxdaki itemleri ekliyoruz.
  4. q.Sort();       ---  arraylist in sort methoduylada bunları büyükten küçüğe listeliyoruz.
  5. listBox1.Items.Add(q.ToString());   -- ve daha sonrada arraylist i listbox a ekliyoruz.
Link to comment
Share on other sites

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
Link to comment
Share on other sites

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;

                    }

Link to comment
Share on other sites

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.

 

Rlan56W.png

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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])

Link to comment
Share on other sites

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ı...

Link to comment
Share on other sites

 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 

Link to comment
Share on other sites

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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...