Foreach Döngüsü

Foreach döngüsü de sık kullanılan döngülerdendir. 4 tane parametresi vardır. İlk parametre, değişken türünü gösterir. İkinci parametre Değişkenin adıdır. Üçüncü parametresi “in” parametresidir. Son prametresi ise dizi adıdır. Şöyle bir syntaxı vardır:

Foreach (int sayi in rakamlar);

Burada sayi diye int tipinde tanımlanan değişken aslında rakamlar dizisinde yer alan tüm öğeleri tutan bir değişken oluyor. Yani dizinin herhangi bir indeksini değil direkt doğrudan tamamını tutan bir değişken olmuş oluyor. Bir örnekle pekiştirelim. Formuma bir adet buton bir adette listbox ekliyorum. Butona bastığımda dizimdeki tüm öğelerin listboxa aktarılmasını sağlayan kodları yazalım.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace KararYapilariOrnekler
{
    public partial class Form13 : Form
    {
        public Form13()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //dizimizi oluşturdum.
            string[] sinif = { "İsmail", "Filiz", "Emir", "Hasan", "Halime", "Gülhan", "Tuncay" };
            //sinif dizisinin içindeki her bir öğre isimler değişkenine sıra ile atanıyor, dizinin uzunluğu boyunca atama işlemi sürdüğü için otomatik olarak dizi uzunluğu vs belirtmeme gerek kalmıyor.
            foreach (string isimler in sinif)
            {
                listBox1.Items.Add(isimler);

            }
        }
    }
}

Bir tane de int dizi tanımlayarak bi örnek yapalım. Yine formumda bir adet listbox, bir adette butonum mevcut.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace KararYapilariOrnekler
{
    public partial class Form13 : Form
    {
        public Form13()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //dizimizi oluşturdum.
            int[] fiyatlar = { 5, 12, 3, 4, 7, 9, 12 };
            //fiyatlar dizisinin içindeki her bir öğe fiyat değişkenine sıra ile atanıyor, dizinin uzunluğu boyunca atama işlemi sürdüğü için otomatik olarak dizi uzunluğu vs belirtmeme gerek kalmıyor.
            foreach (int fiyat in fiyatlar)
            {
                listBox1.Items.Add(fiyat);

            }
        }
    }
}

Şimdi bu son yaptığımız fiyatlar dizisi için şöyle yapalım. Girilen fiyatların toplamını bir labela yazdıralım. Ortalamasını başka bir labela yazdıralım. İki tane label ekliyorum dolayısı ile formuma. Ortalama bulacağım için bu sefer dizimi double tipinde oluşturacağım. Değişkenlerimin hepsi double olacak.

Kodlayalım;

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace KararYapilariOrnekler
{
    public partial class Form13 : Form
    {
        public Form13()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //dizimizi oluşturdum.
            double[] fiyatlar = { 5, 12, 3, 4, 7, 9, 12 };
            double toplam = 0;
            double ortalama;
            //fiyatlar dizisinin içindeki her bir öğe fiyat değişkenine sıra ile atanıyor, dizinin uzunluğu boyunca atama işlemi sürdüğü için otomatik olarak dizi uzunluğu vs belirtmeme gerek kalmıyor. Her bir öğeyi de topluyorumç
            foreach (double fiyat in fiyatlar)
            {
                listBox1.Items.Add(fiyat);
                toplam = toplam + fiyat;

            }
            lblToplam.Text = toplam.ToString();

            //Dizinin uzunluğunu bilmediğimi varsayararak uzunluk bulmak için length metodunu kullanıyorum. Toplamı / dizinin uzunluğuna bölüyor ve sonucu yazdırıyorum.
            ortalama = toplam / fiyatlar.Length;
            lblOrtalama.Text = ortalama.ToString("0.00");
        }
    }
}


Son bir örnekle yazımızı bitirelim. İçerisinde 20 adet rakam barındıran bir double dizi içerisindeki 10’dan büyük 2’ye bölünebilen sayıları;

  • Listboxa yazdıralım,
  • Bu şartı sağlayan sayıların kaç tane olduğunu bir labele yazalım,
  • Bu şartı sağlayan toplamını bir labele yazalım,
  • Bu şartı sağlayan sayıların ortalamasını bir labele yazalım.

Bunu yapabilmek için fomuma bir adet listbox, bir adet butpn 3 adette label ekliyorum. Önce dizimi oluşturacağım dizi içerisine rastgele 20 tana rakam girdim manuel olarak. Daha sonra toplam, ortalama ve adet şeklinde değişken tanımladım. Ortalama alacağım için hem dizimi hemde değişkenlerimi double olarak tanımladım. Önce dizim içinde foreach döngüsü ile döneceğim, daha sonra her bir gelen elemanı if karar yapısında && operatörü ile iki şarta tabi tutacağım, her iki şartta sağlanırsa, sağlayan elemanı listboxa alacağım. Ayrıca toplam değişkenime ekleme yapacağım. Daha sonra adet değişkenimi arttıracağım. En sonda da ortalama değişkenimi hesaplayabilmek için toplam / adet yapacağım. Farklı yöntemler yapılabilir, listbox adedi sayılır, listbox tekrar toplanır vs vs. Ama zaten ben toplam ve adedi elde ettiğim için ortalamayı bu değişkenleri kullanarak bulmam en basiti olacaktır.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace KararYapilariOrnekler
{
    public partial class Form14 : Form
    {
        public Form14()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //dizi tanımlamamı yaptım.
            double[] rakamlar = {5, 8, 56, 54, 97, 72, 36, 51, 50, 43, 21, 59, 37, 93, 22, 34, 52, 7, 3, 98 };
            //değişkenlerimi tanımladım
            double ortalama;
            double toplam = 0;
            double adet = 0;
            //dizimin içinde döngüm.
            foreach (double rakam in rakamlar)
            {
                if (rakam >= 10 && rakam % 2 == 0)
                {
                    listBox1.Items.Add(rakam);
                    adet++;
                    toplam = toplam + rakam;                    
                }
                
            }
            //yazdırma ve hesaplama işlemlerim
            ortalama = toplam / adet;
            lblOrtalama.Text = ortalama.ToString();
            lblAdet.Text = adet.ToString();
            lblToplam.Text = toplam.ToString("0.00");
        }
    }
}



Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir