7 Nisan 2013 Pazar

12 - For Döngüsü... Pozitif ve Negatif Sayılar...

Ayrıntılı bir örnek oldu... Bazı açıklamalar yapalım...

Enabled: Form üzerinde bir elemanı kullanılabilir veya pasif duruma getirmek için kullanılıyor... Enabled değeri true olan eleman form üzerinde kullanılabilirken, false olan sadece ekranda gözüküyor...

Clear: Listboxın içeriğini temizlemek için kullanılıyor...

foreach: bir dizini son elemanına kadar bütün elemanlarını göstermek için kullanılıyor... Unutmayalım ki Listbox ve Comboboxlar da birer dizidir ve sıralı ifadeleri içlerinde tutarak işlem yaparlar...

Object: foreach kısmında listboxın içeriğindeki değerleri almak için object kullandık... Bu geleneksel bir tür tanımlamasıdır...  Bir alt satırda kullanacağımız tür in olduğu için obje olarak tanımladığımız değişken türünü değiştirdik ve kendimize uygun hale getirdik... Çünkü  

        foreach(int sayilar in listBox1.Items) 

şeklinde bir tanımlama yapsaydık hata ile karşılaşacaktır... Sebep ise listboxın içindeki verilerin int türünde olmamasıdır...Bu sebeple object olarak tanımlayıp, int türüne bir sonraki satırda dönüştürdük...

Global değişken: Bütün form elemanlarında ve olaylarda değerini koruyan ve değiştirilebilen değişken türüdür... Bir değişkeni sadece button_click olayında tanımlıyorsanız sadece o click olayında kullanabilirsiniz... Ama bir değişkeni aşağıda olduğu konumda yani Form classı içinde tanımlarsanız onu her yerde çağırabilir ve istediğiniz gibi kullanabilirsiniz... 


Form tasarımını aşağıdaki gibi yapınız...

İlk açılış sırasında 10 adet sayı girdirmek için  sadece gir butonu aktif olacaktır... 10 adet sayı girdirildikten sonra gir butonu pasif duruma düşüp, sonuç butonu aktif hale gelecektir... Gir butonu ile birlikte textboxa da sayı girişi yapılamayacaktır... Aynı zamanda sayı girişlerinde textbox boş bırakılıp gir butonuna basılırsa hata ile karşılaşılacaktır...

sonuç butonuna basıldığında işleme ait olan sonuçları gösterecek ve programın başlangıçtaki haline geri döndürerek tekrar işlem yapılmasını sağlayacaktır...

Program kodları aşağıdaki gibi 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 _41_For__Pozitif_ve_Negatif_Sayılar
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        /* Girilecek olan 10 tane sayıdan
          * a) Negatif olanların sayısı
          * b) Pozitif olanların ortalaması
          * c) Sayıların toplamasını bulacak olan program?
          */
        int adet; // Burada tanımlanan değişkenler global değişkendir...

        private void Form1_Load(object sender, EventArgs e)
        {
            adet = 1; // sayacımızı 1 yapıyoruz... sayı girdikçe artacak... 
            button2.Enabled = false; // 10 sayı girmeden işlem yaptırmayacağız... 
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (adet <= 10 && textBox1.Text != "") // adet 10 dan küçük ve textboxa değer girildi ise girilen sayıyı alıyoruz...
            {
                listBox1.Items.Add(textBox1.Text);// girilen sayıyı listboxda tutuyoruz... 
                textBox1.Text = "";
                if (adet == 10)
                {
                // 10 sayı girişinden sonra sonuç butonunu açıp, sayı giriş butonunu kapatıyoruz... 
                button2.Enabled = true;
                button1.Enabled = false;
                textBox1.Enabled = false;
                }
                adet++; // 10 sayı girdireceğimiz için sayaç olarak adet değişkenini kullanıyoruz... 
                label1.Text = adet + ". Sayıyı Giriniz..:";  // 1.sayıyı gir, 2. sayıyı gir şeklinde mesaj verdiriyoruz... 
            }
            else if (textBox1.Text == "") // Bir şey girilmedi ise hata versin...
                MessageBox.Show("Lütfen Sayı Girdikten Sonra Gir Butonuna Basınız...");
        }

        private void button2_Click(object sender, EventArgs e)
        {
            int neg_adet = 0, poz_adet = 0, poz_toplam = 0, toplam = 0; // Kullanıcağımız değişkenleri tanımladık...

            foreach(object sayilar in listBox1.Items) //Listbox ın içindeki bütün elemanları sırası ile getiriyor...
            {
                int sayi = Convert.ToInt16(sayilar); // object türünden sayıya dönüştürerek işlemlerimizi yaptık...

                if (sayi < 0)       // Sayı sıfırdan küçükse negatif sayı demektir... Adetini bulduruyoruz...
                    neg_adet++;

                if (sayi > 0)  // Sayı sıfırdan büyükse pozitif sayı demektir... Ortalamasını bulduruyoruz...
                {
                    poz_adet++;
                    poz_toplam = poz_toplam + sayi;
                }

                toplam = toplam + sayi;  // Sayıların toplamanı bulacak... 
            }

            MessageBox.Show("Negatif Olanların Adedi =" + neg_adet);
            MessageBox.Show("Pozitif Olanların Ortalaması = " + (poz_toplam / poz_adet));
            MessageBox.Show("Girilen Sayıların Toplamı = " + toplam);

            // Yeniden işlem yapmak için herşeyi ilk haline getiriyoruz...
            button2.Enabled = false;
            button1.Enabled = true;
            textBox1.Enabled = true;
            adet = 1;
            listBox1.Items.Clear(); // listboxın içeriğini temizliyor..
        }

    }
}