Konuyu Oyla:
  • Toplam: 1 Oy - Ortalama: 5
  • 1
  • 2
  • 3
  • 4
  • 5
   
Konu: C# - Döngülerle Dizi İşlemleri {34}
Hera
*
avatar
Yüzbaşı
Durum: Çevrimdışı
Seviye Puanı: 10
Yaşam Puanı: 239 / 239
Deneyim: 58 / 100
Rep Sayısı: 44
Mesaj Sayısı: 133
Üyelik Tarihi: 13.04.2019
     
Yorum: #1
C# - Döngülerle Dizi İşlemleri {34}
19.06.2019 16:52
Bu konuda tanımladığımız dizilerin elemanlarına çeşitli döngüler ile nasıl erişebileceğimizi, dizi elemanlarına rastgele değerleri nasıl atayacağımızı göstereceğim.

Bir dizinin elemanlarına ulaşmak için tipik olarak dizinin boyutu kadar dönene dön
güler kurulur. Diziler elemanları içinde genellikle for döngüleri foreach döngüleri ile dolaşılır.

Dizilerin içinde dolaşmadan önce, tanımladığımız dizilere tek tek değerler atamak yerine dizi elemanlarına rastgele değerler verebilmek için rastgele sayı üretme ile ilgili mekanizmayı inceleyeceğiz.

Rastgele sayı üretmek bilgisayar bilimlerinde en önemli araştırma konularından biri olmuştur. Ben burada rastgele sayı üretme algoritmalarını anlatmayacağım. Sadece rastgele sayı üretmek için .NET Framework sınıf kütüphanesindeki System.Random sınıfını kullanacağız.

Rastgele Sayı üretmek için öncelikle Random sınıf türünden bir nesne tanımlamamız gerekir. Bunu aşağıdaki şekilde yapabiliriz;
Random rnd = new Random();
Alıntı:Random sınıfını kullanabilmemiz için using anahtar sözcüğü ile System isim alanını eklememiz yeterlidir.


rnd nesnesini new anahtar sözcüğü ile oluşturduktan sonra, rnd nesnesinin metotlarına erişebiliriz. rnd nesnesi üzerinden rastgele sayı üretmek için aşağıdaki kullanımlardan biri kullanılabilir;
  1. int RastgeleSayi = rnd.Nex(10,20);
  2. int RastgeleSayi = rnd.Next(50);
  3. int RastgeleSayi = rnd.Next();
  4. float RastgeleSayi = rnd.NextDouble();
1. örnekte 10 ile 20 arasında int türünden rastgele bir sayı üretilir. 2. örnekte 0 ile 50 arasında int türünden rastgele bir sayı üretilir. 3. örnekte int türünden pozitif herhangi bir sayı üretilir. 4. Örnekte ise double türünden 0.0 ile 1 arasında rastgele bir sayı üretilir. Ben bu konuda sadece 2. örneği kullanacağım. Ancak diğer maddeleri siz kendiniz kullanabilirsiniz.

Şimdi for döngüsü yardımıyla 100 elemanlı bir dizinin bütün elemanlarına 0 ile 10 arasında rastgele değerler verecek ve daha sonra verilen bu rastgele sayılardan her birinin kaç adet üretildiğini grafiksel olarak ekrana yazacak bir program yazalım.
( Biraz ağır bir örnek :P )
Kod:
using System;
namespace CyberzimDiziler
{
    class Program
    {
        static void Main(string[] args)
        {
            Random rnd = new Random();
            int[] RastGeleDizi = new int[100];

            for (int i = 0; i < 100; ++i)
                RastGeleDizi[i] = rnd.Next(1, 11);

            int[] adet = new int[10];

            for (int i = 0; i < 100; ++i)
                adet[RastGeleDizi[i] - 1]++;

            for (int i = 0; i < 10; ++i)
            {
                Console.Write("{0, 2} Adet {1, 2} -->", adet[i], i + 1);
                for (int j = 0; j < adet[i]; ++j)
                    Console.Write("*");
                Console.WriteLine();
            }
        }
    }
}

Programı yazıp derlediğnizde üstteki ekran görüntüsünü elde edeceksiniz. Programı her çalıştırdığımızda görüntüsünü değişeceğini unutmayın! Sizce bu neden Exciting?

Şimdi programda kullandığımız yapıları kısaca inceleyelim. Birinci for döngüsünde 100 elemanlı dizi 1 ile 10 arasındaki sayılarla rastgele dolduruluyor (1 ve 10 dahil). İkinci for döngüsünde ise her bir sayının kaç adet üretildiğini tutan dizinin elemanlarını üretilen rastgele sayılara göre hesaplanıyor. Burada kullanılan yapı şu şekildedir; adet dizisinin 1. elemanı üretilan 1'lerin sayısını 2. Eleman üretilen 2'lerin sayısını gösterir. Üretilen 100 sayı for döngüsü ile taranarak
adet[RastGeleDizi[i] - 1]++;
deyimi ile her bulunan sayı bir arttırılıyor. Dizi indeksleri 0'dan bşladığı için adet dizisi üzerinde işlem yapmadan önce indeks 1 azaltılıyor.

son kısımda ise iç içe for döngüsü ile her bulunan sayı kadar ekrana yıldız karakteri yazdırıyor. Her bir satır yazıldıktan sonra da bir alt satıra geçiyoruz.

Gördüğünüz gibi dizileri ve rastgele sayı üretme mekanizmasını kullanarak gelişmiş programlar yazma imkanına kavuştuk. Hayal gücünüzü kullanıp çok daha ilginç ve güzel programlar yazmak ise tamamen sizin kafanızda Exciting

Şimdi de dizileri ilgilendiren bir döngü olan foreach döngüsünü inceleyelim. foreach döngüsü ile bir dizinni elemanlarına sadece okumak için erişebiliriz. foreach döngüsü içinde bir dizinin elemanını değiştirmeye çalışmak "Cannot assign to 'degisken' because it is read-only" hatasını verecektir. Bu hata ile sadece okunabilir (readonly) olan değişkenleri değiştiremeyeceğimizi söyleniyor. foreach döngüsüsün kullanımı int türünden bir dizi üzerinde görelim;

Kod:
using System;

namespace Cyberizm
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] dizi = { 1, 2, 3, 4, 5 };
            foreach (int eleman in dizi)
                Console.WriteLine(eleman);
        }
    }
}


Bu döngü dizinin eleman sayısı kadar döner ve her iterasyonda eleman değişkeni dizinin bir sonraki elemanının değerini verir. foreach döngüsündeki eleman değişkeni içsel tasarım olarak read-only tanımlandığı için aşağıdaki kullanım yanlıştır;
Kod:
using System;

namespace Cyberizm
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] dizi = { 1, 2, 3, 4, 5 };
            foreach (int eleman in dizi)
                eleman = 5;
        }
    }
}


Değişkenlerin nasıl readonly tanımlandıklarını ilerleyen konularımda göstereceğim.
ÖNEMLİ NOT Nickli Kullanıcıdan Alıntı:foreach döngüleri genellikle bir dizinin elemanlarını ekrana yazdırmak amacıyla ya da dizinin elemanlarını tek tek elde etmek amacıyla kullanılır.
(Bu konu en son: 19.06.2019 Tarihinde, Saat: 17:46 düzenlenmiştir. Düzenleyen: Hera.)
Alinti
Dessy
*
avatar
Yarbay
Durum: Çevrimdışı
Seviye Puanı: 23
Yaşam Puanı: 253 / 550
Deneyim: 0 / 100
Rep Sayısı: 120
Mesaj Sayısı: 634
Üyelik Tarihi: 20.11.2015
     
Yorum: #2
RE: C# - Döngülerle Dizi İşlemleri {34}
19.06.2019 16:56
Teşekkürler, Emeğine Sağlık Smile

Sosyal Medya: Youtube - İnstagram
Alinti
KingSkrupellos
*
avatar
Hacktivist
Durum: Çevrimdışı
Seviye Puanı: 56
Yaşam Puanı: 1,386 / 1,386
Deneyim: 47 / 100
Rep Sayısı: 2876
Mesaj Sayısı: 6513
Üyelik Tarihi: 21.08.2013
     
Yorum: #3
RE: C# - Döngülerle Dizi İşlemleri {34}
21.06.2019 03:03
Teşekkürler, Emeğine Sağlık Smile

# Cyberizm Digital Security Technological Turkish Moslem Army #
# İnsanda bir organ vardır. Eğer o sağlıklı ise bütün vücut sağlıklı olur;
eğer o bozulursa bütün vücut bozulur. Dikkat edin! O, kalptir.
[ Hz.Muhammed S.A.V ] #


Alinti



1 Ziyaretçi