c dizi sıralama / C Sharp Programlama Dili/Diziler - Vikikitap: Özgür kütüphane

C Dizi Sıralama

c dizi sıralama

C Sharp Programlama Dili/Diziler

Ders 9. Diziler


Şimdiye kadar birçok değişken tanımladık ve programlarımızın içinde kullandık. Bir program içinde tanımladığımız değişken sayısı şimdiye kadar bir elin parmaklarını geçmedi. Ancak her zaman bu böyle olmayabilir. Bazı programlarda değişkene ihtiyaç duyabiliriz. Bunların hepsinin teker teker tanımlanması oldukça zahmetlidir. İşte bu yüzden programlama dillerinde dizi diye bir kavram vardır. Aslında bir dizi, birbiriyle ilişkili değişkenlerin oluşturduğu bir gruptan başka bir şey değildir. Diyelim ki ve adlı iki değişken tanımladık. Bunların adları birbirine benzemesine rağmen birbiriyle hiçbir ilişkisi yoktur. Yani bir döngü içinde yazarak bu değişkenlere erişemeyiz. Halbuki dizilerde bu mümkündür.

Dizilerin tanımlanması ve elemanlarının kullanılması[değiştir]

veya

int[]dizi;dizi=newint[25];

Yukarıdaki iki kodda da int türünden 25 elemanlı adında bir dizi tanımlandı ve dizinin her bir elemanına int türünün varsayılan değeri atandı. Varsayılan değerler, sayısal türler için 0, object türü için NULL (yokluk), string türü için "", char için ' ' (boşluk) ve bool için false değerleridir.

  • Bütün dizilerin birinci elemanı 0. indeksidir. dizisinin birinci elemanına , elemanına yazarak erişebilir ve bu dizi elemanlarını bir değişkenmiş gibi kullanabiliriz. Örnek:
usingSystem;classDiziler{staticvoidMain(){int[]dizi=newint[20];dizi[5]=30;funduszeue.info(dizi[5]);}}

Bu program ekrana 30 yazacaktır.

  • C ve C++ programlama dillerinde olduğu gibi dizilerin elemanlarına aşağıdaki gibi de değer atayabiliriz:
string[]dizi1={"Bir","İki","Üç"};int[]dizi2={2,-4,6};float[]dizi3={2f,f,7f};

Ancak bu şekilde dizi belirtimini sadece dizi tanımlamalarında kullanabiliriz. Örneğin bir sonraki derste göreceğimiz metotlara parametre olarak bir int dizisi vermemiz gerekiyorsa parametre olarak sadece ifadesini veremeyiz. ifadesini bir değişkene atayıp bu değişkeni metoda parametre olarak vermeliyiz. Ayrıca aşağıdaki kullanım da hatalıdır:

int[]dizi;dizi={1,2,3};

Çünkü daha önce de bahsettiğimiz gibi direkt dizi belirtimi sadece dizi tanımlamalarında geçerlidir.

Başka bir dizi tanımlama yöntemi de şöyledir:

int[]dizi=newint[]{1,2,3};

Üstelik bu şekilde dizi belirtimini dizi kullanmamız gereken her yerde yapabiliriz. Örneğin bir metoda parametre olarak bir int dizisi vermemiz gerekiyorsa metot çağrısında parametre yerine direkt yazabiliriz.

Diziler yukarıdaki şekilde tanımlandığında söz konusu dizilerin eleman sayısı yazılan eleman sayısı olur. Örneğin yukarıdaki örneklerde bütün dizilerin eleman sayısı üçtür ve dördüncü elemana ulaşmak istersek programımız çalışma zamanında hata verir. Bu şekilde dizi elemanlarına değişken ve ifadeler de atanabilir.

  • satırında 20'nin illaki sabit olmasına gerek yoktur. Değişken ya da ifade de olabilir. Örnek:
usingSystem;classDiziler{staticvoidMain(){inta=funduszeue.info32(funduszeue.infone());int[]dizi=newint[a+5];dizi[5]=30;funduszeue.info(dizi[5]);}}
  • Eleman sayısı belirlenen bir dizinin eleman sayısı daha sonra değiştirilemez.
  • Birden fazla dizi aşağıdaki gibi tanımlanabilir:
int[]dizi1=newint[10],dizi2=newint[20];

veya

İkincisinde tanımlanan dizinin elemanlarına henüz erişilemez.

foreach[değiştir]

foreach yalnızca dizilere uygulanabilen bir döngü yapısıdır. Kullanımı şu şekildedir:

int[]dizi={3,2,6,7};foreach(intelemanindizi)funduszeue.infoine(eleman);

Burada dizisinin bütün elemanları teker teker ekrana yazdırılıyor.

  • foreach döngüsüyle dizi elemanlarının değerini değiştiremeyiz, sadece ekrana yazdırmak gibi "read-only" işler yapabiliriz.

Çok boyutlu diziler[değiştir]

Çok boyutlu diziler kısaca her bir elemanı bir dizi şeklinde olan dizilerdir, matris dizileri (düzenli diziler) ve düzensiz diziler olmak üzere ikiye ayrılır.

Matris diziler[değiştir]

Her bir dizi elemanının eşit sayıda dizi içerdiği dizilerdir.

İki boyutlu diziler(matrisler)[değiştir]

3X2 boyutunda iki boyutlu bir matris dizi aşağıdaki gibi tanımlanabilir:

int[,]dizi=newint[3,2];

veya

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

İkinci dizinin elemanları indekslerine göre aşağıdaki gibidir.
dizi[0,0] → 1
dizi[0,1] → 2
dizi[1,0] → 3
dizi[1,1] → 4
dizi[2,0] → 5
dizi[2,1] → 6
Bu diziyi matris olarak aşağıdaki gibi gösterebiliriz:

dizi[0,0]dizi[0,1]
dizi[1,0]dizi[1,1]
dizi[2,0]dizi[2,1]

&#;&#;&#;1&#;&#;&#;&#;&#;&#;2&#;&#;&#;
&#;&#;&#;3&#;&#;&#;&#;&#;&#;4&#;&#;&#;
&#;&#;&#;5&#;&#;&#;&#;&#;&#;6&#;&#;&#;

İkiden fazla boyutlu matris diziler[değiştir]

Üç boyutlu bir dizi:

int[,,]dizi=newint[3,2,2];

veya

int[,,]dizi={{{1,2},{3,4}},{{5,6},{7,8}},{{9,10},{11,12}}};

Bu dizinin indekslerine göre elemanlarıysa;
dizi[0,0,0] → 1
dizi[0,0,1] → 2
dizi[0,1,0] → 3
dizi[0,1,1] → 4
dizi[1,0,0] → 5
dizi[1,0,1] → 6
dizi[1,1,0] → 7
dizi[1,1,1] → 8
dizi[2,0,0] → 9
dizi[2,0,1] → 10
dizi[2,1,0] → 11
dizi[2,1,1] → 12

  • foreach döngüsüyle iç içe döngü kurmaya gerek kalmadan her çeşit boyutlu matris dizinin elemanlarına ulaşılabilir.
  • Eğer dizilerin elemanlarını değiştirmemiz gerekiyorsa iç içe for döngüsü kurmamız gerekir. Örnek:
int[,,]dizi={{{1,2},{3,4}},{{5,6},{7,8}},{{9,10},{11,12}}};for(inti=0;i<3;i++)for(intj=0;j<2;j++)for(intk=0;k<2;k++)dizi[i,j,k]=20;

Bu programda dizinin bütün elemanlarının değerini 20 ile değiştirdik.

Düzensiz diziler[değiştir]

Her bir dizi elemanının farklı sayıda eleman içerebileceği çok boyutlu dizilerdir.

int[][]dizi=newint[3][];dizi[0]=newint[3];dizi[1]=newint[4];dizi[2]=newint[2];

Birinci satırda 3 satırı olan ancak sütun sayısı belli olmayan iki boyutlu bir dizi tanımlanıyor. İkinci, üçüncü ve dördüncü satırda da bu iki boyutlu dizinin her bir satırının kaç sütun içerdiği ayrı ayrı belirtiliyor.

dizi[0][0] dizi[0][1] dizi[0][2]
dizi[1][0] dizi[1][1] dizi[1][2] dizi[1][3]
dizi[2][0] dizi[2][1]
  • Düzensiz dizilerin elemanlarına, örneğin 0,0 indeksine yazarak erişebiliriz.
  • Düzensiz dizilerde foreach döngüsü sadece dizi adını yazarak çalışmaz. Ana düzensiz dizinin her bir elemanı için farklı bir foreach döngüsü başlatılmalıdır.
  • Şimdiye kadar öğrendiğimiz şekilde düzensiz dizilerin elemanlarını iç içe for döngüsüyle değiştiremeyiz. Çünkü her satır farklı sayıda sütun içerebileceği için satırların sütun sayısı dinamik olarak elde edilmelidir. Bunun için C#'ın System isim alanındaki Array sınıfına ait metotları vardır ve her diziyle kullanılabilirler.

Dizilerle kullanılabilen metotlar[değiştir]

GetLength()[değiştir]

şeklinde kullanılır. Herhangi bir dizinin eleman sayısını int olarak tutar. x diziyi, y o dizinin hangi boyutunun eleman sayısının hesaplanacağını belirtir. Örnekler:

int[]dizi={1,4,7,9};funduszeue.info(funduszeue.infogth(0));

Bu program ekrana 4 yazar.

int[,]dizi={{2,4,2},{7,10,4},{7,12,6},{2,1,12}};bytea=funduszeue.infogth(1);funduszeue.infoine(a);

Bu program ekrana 3 yazar.

int[][]dizi=newint[3][];dizi[0]=newint[]{1,2,3};dizi[1]=newint[]{4,5,6,7};dizi[2]=newint[]{8,9};for(inti=0;i<funduszeue.infogth(0);i++)for(intj=0;j<dizi[i].GetLength(0);j++)funduszeue.infoine("dizi[{0}][{1}]={2}",i,j,dizi[i][j]);

Bu program dizinin bütün elemanlarını teker teker ekrana yazar.

CreateInstance metodu ile dizi tanımlama[değiştir]

Şimdiye kadar öğrendiğimiz dizi tanımlama yöntemlerinin yanında başka dizi tanımlama yöntemleri de vardır.

Arraydizi=funduszeue.infoInstance(typeof(int),5);

Burada int türünden 5 elemanlı adında bir dizi tanımlandı ve dizinin her bir elemanına int türünün varsayılan değeri atandı.

Arraydizi=funduszeue.infoInstance(typeof(int),3,2,5);

Burada 3X2X5 boyutunda int türünden 3 boyutlu bir dizi oluşturduk.

int[]dizi1=newint[5]{2,3,6,8,7};Arraydizi2=funduszeue.infoInstance(typeof(int),dizi1);

Burada 2X3X6X8X7 boyutunda beş boyutlu bir dizi oluşturduk.

  • CreateInstance yöntemiyle oluşturulan dizilere gibi bir yöntemle erişilemez. Şimdi bir örnek yapalım:
usingSystem;classDiziler{staticvoidMain(){Arraydizi=funduszeue.infoInstance(typeof(int),5,4,3);for(inti=0;i<=funduszeue.infoerBound(0);i++)for(intj=0;j<=funduszeue.infoerBound(1);j++)for(intk=0;k<=funduszeue.infoerBound(2);k++)funduszeue.infoue(i+j+k,i,j,k);for(inti=0;i<=funduszeue.infoerBound(0);i++)for(intj=0;j<=funduszeue.infoerBound(1);j++)for(intk=0;k<=funduszeue.infoerBound(2);k++)funduszeue.infoine(funduszeue.infoue(i,j,k));}}

Daha önce CreateInstance yöntemiyle oluşturulan dizilere gibi bir yöntemle erişilemeyeceğini söylemiştik. İşte bunun için çeşitli metotlar vardır.
GetUpperBound: Bir dizinin son indeks numarasını verir.
SetValue: Bir dizinin belirli bir indeksini belirli bir değerle değiştirir.
GetValue: Bir dizinin belirli bir indeksini tutar.

  • Bu metotların kullanımları yukarıdaki örnek programda verilmiştir.
  • Bu metotlar normal şekilde oluşturulan dizilerle de kullanılabilir.

Dizileri kopyalamak[değiştir]

int[]dizi1={1,2,3,4};int[]dizi2=newint[10];funduszeue.info(dizi2,3);

Burada dizi1'in tüm elemanları dizi2'ye 3. indeksten itibaren kopyalanıyor.

int[]dizi1={1,2,3,4};int[]dizi2=newint[10];funduszeue.info(dizi1,dizi2,3);

Burada 3 tane eleman dizi1'den dizi2'ye kopyalanır. Kopyalama işlemi 0. indeksten başlar.

int[]dizi1={1,2,3,4,5,6,7};int[]dizi2=newint[10];funduszeue.info(dizi1,2,dizi2,7,3);

Burada dizi1'in 2. indeksinden itibaren 3 eleman, dizi2'ye 7. indeksten itibaren kopyalanıyor.

Dizileri sıralama[değiştir]

Örnek:

usingSystem;classDiziler{staticvoidMain(){Arraymetinsel=funduszeue.infoInstance(typeof(string),8);funduszeue.infoue("Bekir",0);funduszeue.infoue("Mehmet",1);funduszeue.infoue("Tahir",2);funduszeue.infoue("Yusuf",3);funduszeue.infoue("Yunus",4);funduszeue.infoue("Gökçen",5);funduszeue.infoue("Şüheda",6);funduszeue.infoue("Arzu",7);funduszeue.infoine("Sırasız dizi:");foreach(stringisiminmetinsel)funduszeue.info(isim+" ");funduszeue.infoine("\n\nSıralı dizi:");funduszeue.info(metinsel);foreach(stringisiminmetinsel)funduszeue.info(isim+" ");}}

Başka bir örnek:

usingSystem;classDiziler{staticvoidMain(){Arraysayisal=funduszeue.infoInstance(typeof(int),8);funduszeue.infoue(,0);funduszeue.infoue(10,1);funduszeue.infoue(6,2);funduszeue.infoue(3,3);funduszeue.infoue(1,4);funduszeue.infoue(0,5);funduszeue.infoue(-5,6);funduszeue.infoue(12,7);funduszeue.infoine("Sırasız dizi:");foreach(intsayiinsayisal)funduszeue.info(sayi+" ");funduszeue.infoine("\n\nSıralı dizi:");funduszeue.info(sayisal);foreach(intsayiinsayisal)funduszeue.info(sayi+" ");}}

Dizilerde arama[değiştir]

Örnek:

usingSystem;classDiziler{staticvoidMain(){string[]dizi={"ayşe","osman","ömer","yakup","meltem"};funduszeue.info(dizi);funduszeue.info(funduszeue.infoSearch(dizi,"osman"));}}

BinarySearch metodu, bir nesneyi bir dizi içinde arar, eğer bulursa bulduğu nesnenin indeksini tutar, bulamazsa negatif bir sayı tutar. BinarySearch'ü kullanabilmek için diziyi daha önce Sort ile sıralamalıyız. Başka bir örnek:

usingSystem;classDiziler{staticvoidMain(){string[]dizi={"ayşe","osman","ömer","yakup","meltem","rabia","mahmut","zafer","yılmaz","çağlayan"};funduszeue.info(dizi);funduszeue.info(funduszeue.infoSearch(dizi,3,4,"yakup"));}}

BinarySearch burada 3. indeksten itibaren 4 eleman içinde "yakup"u arar. Bulursa indeksini tutar. Bulamazsa negatif bir sayı tutar.
UYARI: Yalnızca tek boyutlu diziler Sort ile sıralanabilir, dolayısıyla da çok boyutlu dizilerde hem Sort ile sıralama hem de BinarySearch ile arama yapmak imkansızdır.

Diğer metotlar[değiştir]

Bu kod dizisinin 1. indeksinden itibaren 3 indeksini sıfırlar (varsayılan değere döndürür).

Bu kod dizisinin tamamını ters çevirir.

Bu kod dizisinin 1. indeksten itibaren 3 elemanını ters çevirir.

Bu kitabın diğer sayfaları

C Programlama dili ile dizideki sayıları küçükten büyüğe sıralama işlemini en basit şekilde nasıl yapılacağını anlattık. Bu kod ile kullanıcının girdiği sayıları küçükten büyüğe göre tekrardan diziye kaydedip ekrana yazdırabilirsiniz.

  1. Kullanıcıdan kaç adet sayı girileceğini sorulur.
  2. İlk önce kullanıcıdan sayılar alınır ve diziye kaydedilir.
  3. Girilen sayıları küçükten büyüğe sıralanarak diziye yeniden kaydedilir ve ekrana yazdırılır.

Kod:

#include <stdio.h> #include <stdlib.h> int main(){ int dizi[50], gecici, adet; printf("Kac adet sayi girilecek: "); scanf("%d", &adet); for(int i=0; i<adet; i++){ printf("%d)Sayi giriniz: ", i+1); scanf("%d", &dizi[i]); } for(int i=0; i<adet-1;i++){ for(int j=i+1; j<adet; j++){ if(dizi[i] > dizi[j]){ gecici = dizi[i]; dizi[i] = dizi[j]; dizi[j] = gecici; } } } for(int i=0; i<adet; i++) printf("%d ", dizi[i]); printf("n"); system("pause"); return 0; }

Aşağıdaki örnek de dizi tanımlama dizi içine eleman ekleme, dizi içindeki elemanların toplamını, en büyük, eb küçüğünü, ilk ve son elemanı bulup diziyi sıralama işlemini yapacağız.

dizisirala

int[] sayilar = new int[10]; for (int i = 0; i < funduszeue.info; i++) { sayilar[i] = i + 1; } sayilar[3] = 20; sayilar[5] = sayilar[2] + sayilar[7]; for (int i = 0; i < funduszeue.info; i++) { funduszeue.infoine("sayilar[{0}] = {1}", i, sayilar[i]); } funduszeue.infoine(); funduszeue.infoine("Toplam = " + funduszeue.info()); funduszeue.infoine("En Küçük = " + funduszeue.info()); funduszeue.infoine("En Büyük = " + funduszeue.info()); funduszeue.infoine("İlk Eleman = " + funduszeue.info()); funduszeue.infoine("Son Eleman = " + funduszeue.info()); funduszeue.infoine(); funduszeue.info(sayilar); for (int i = 0; i < funduszeue.info; i++) { funduszeue.infoine("sayilar[{0}] = {1}", i, sayilar[i]); } funduszeue.infoy();

Bu İçeriğe Tepkin Ne Oldu?

c# dersleric# dizi sıralamac# örnekleridizi toplamıen büyüken küçükİlkSon elemantoplam

nest...

çamaşır makinesi ses çıkarması topuz modelleri kapalı huawei hoparlör cızırtı hususi otomobil fiat doblo kurbağalıdere parkı ecele sitem melih gokcek jelibon 9 sınıf 2 dönem 2 yazılı almanca 150 rakı fiyatı 2020 parkour 2d en iyi uçlu kalem markası hangisi doğduğun gün ayın görüntüsü hey ram vasundhara das istanbul anadolu 20 icra dairesi iletişim silifke anamur otobüs grinin 50 tonu türkçe altyazılı bir peri masalı 6. bölüm izle sarayönü imsakiye hamile birinin ruyada bebek emzirdigini gormek eşkiya dünyaya hükümdar olmaz 29 bölüm atv emirgan sahili bordo bereli vs sat akbulut inşaat pendik satılık daire atlas park avm mağazalar bursa erenler hava durumu galleria avm kuaför bandırma edirne arası kaç km prof dr ali akyüz kimdir venom zehirli öfke türkçe dublaj izle 2018 indir a101 cafex kahve beyazlatıcı rize 3 asliye hukuk mahkemesi münazara hakkında bilgi 120 milyon doz diyanet mahrem açıklaması honda cr v modifiye aksesuarları ören örtur evleri iyi akşamlar elle abiye ayakkabı ekmek paparası nasıl yapılır tekirdağ çerkezköy 3 zırhlı tugay dört elle sarılmak anlamı sarayhan çiftehan otel bolu ocakbaşı iletişim kumaş ne ile yapışır başak kar maydonoz destesiyem mp3 indir eklips 3 in 1 fırça seti prof cüneyt özek istanbul kütahya yol güzergahı aski memnu soundtrack selçuk psikoloji taban puanları senfonilerle ilahiler adana mut otobüs gülben ergen hürrem rüyada sakız görmek diyanet pupui petek dinçöz mat ruj tenvin harfleri istanbul kocaeli haritası kolay starbucks kurabiyesi 10 sınıf polinom test pdf arçelik tezgah üstü su arıtma cihazı fiyatları şafi mezhebi cuma namazı nasıl kılınır ruhsal bozukluk için dua pvc iç kapı fiyatları işcep kartsız para çekme vga scart çevirici duyarsızlık sözleri samsung whatsapp konuşarak yazma palio şanzıman arızası