Anasayfa / Yazılım / C# / İki Boyutlu Dizi Uygulaması

İki Boyutlu Dizi Uygulaması

Bu uygulamam da aşağıdaki linkte bahsettiğim uygulamaya benzer bir uygulama gerçekleştireceğim.

Tek Boyutlu Dizi Uygulaması

Fark olarak burada tek boyutlu bir dizi yerine iki boyutlu bir rectangular dizi kullanacağım. Burada yine 10 öğrencime ilişkin notlarımı tutacağım bir dizi oluşturacağım ama bu sefer her öğrencinin 3 notu olacak. Yani dizimdeki her bir satır herhangi bir öğrencinin 3 notunu içerecek. Dizimdeki her bir sütunda her bir sınava ilişkin olarak 10 öğrencinin notunu içermiş olacak. Yani aşağıdaki tablodaki gibi bir yapı:

2014040501

Programı çalıştırdığımda ekrana notları yazdıracağım. Daha sonra bu notların ortalamasını yazacağım, en düşük notu yazacağım. En yüksek notu yazacağım. Daha sonra birde 10 lu aralıklar ile her not aralığından kaç tane var onu bulacağım. Yani diyelim ki 51-60 arası kaç not var, onu bulacağım. Bu işlemlerin hepsini ayrı bir sınıf içinde ve farklı metotlarda yapacağım. Yani aslında ben bu örneğimde bir çok csharp yapısını bir arada kullanacağım. Hemen visual studio da yeni bir proje açıyorum. Console uygulaması açıyorum. Daha sonra Visual Studio Solution Explorer alanında proje adımda sağ tıklayıp yeni bir Class ekliyorum adını da NotDefteri verdim. Daha sonra NotDefteri sınıfım açıkken aşağıdaki kodları yazıyorum. Açıklamaları kod bloğumda veriyorum.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication22
{
    public class NotDefteri
    {
        //notları tutacağım int tipinde rectangular bir dizi oluşturuyorum.
        private int[ , ] notlar;

        //auto-implemented property DersAdi oluşturuyorum.
        public string DersAdi { get; set; }

        //iki parametreli constructor oluşturuyorum.
        //auto-implemented property DersAdi ve NotlarDizisi
        public NotDefteri(string ad, int[ , ] NotlarDizisi)
        {
            //DersAdi'ni ad'a set ediyorum
            DersAdi = ad;
            //NotlarDizisi çalıştırılır.
            notlar = NotlarDizisi;
        } //iki parametreli NotDefteri constructor burada sonlanıyor

        //Programda Hoşgeldin mesajımı buradaki MesajGoster metodum ile oluşturuyorum
        public void MesajGoster()
        {
            Console.WriteLine( "Not Defteri Programına Hoşgeldiniz \n{0}!\n", DersAdi);
        } // MesajGoster metodu sonu

        //Notlar üzerinde diğer işlemleri yapacğaım kodlarımı NotlariIsle metodumda yazıyorum
        //bu metot çalıştığında kendi içindeki metotları çağıracak ve işlemler gerçekleşecek
        public void NotlariIsle()
        {
            //Dizi halindeki notları listeleyeceğim metodum, sonra oluşturucam
            NotlariListele();

            //Notların minimum değerini ve maksimum değerini bulacağım metotları çağırıyorum
            Console.WriteLine( "En düşük not {0}\nEn yüksek not {1}\n", 
                MinimumNot(), MaksimumNot());

            //Not aralıklarındaki hangi aralıktan kaç not var göstereceğim metotu çağırıyorum
            NotAraliklari();
        }//NotlariIsle metodunun sonu

        //En düşük notu bulacak metodumu yazıyorum
        public int MinimumNot()
        {
            //notlar dizisinin 0. indeksindeki elemanı en düşük kabul edip DusukNot değişkenime
            //aktarıyorum
            int DusukNot = notlar[ 0, 0 ];

            //Notlar dizisinde döngümü oluştuyorum
            foreach (int not in notlar)
            {
                //döngünün her adımındaki değeri DusukNot ile karşılaştırıyorum, 
                //eğer o adımdaki değer DusukNot değerinden küçük ise bu sefer o adımdaki değeri
                //DusukNot değerine aktarıyorum
                if (not < DusukNot)
                    DusukNot = not; // yeni DusukNot değerim
            } // foreach döngüsü sonu

            return DusukNot; // en düşük not değerini metot sonucu geri döndürüyorum
        } //MinimumNot metodu sonu

        //En Yüksek notu bulacak metodumu yazıyorum
        public int MaksimumNot()
        {
            //notlar dizisinin 0. indeksindeki elemanı en yüksek kabul edip YuksekNot değişkenime
            //aktarıyorum
            int YuksekNot = notlar[ 0, 0 ];

            //Notlar dizisinde döngümü oluştuyorum
            foreach (int not in notlar)
            {
                //döngünün her adımındaki değeri YuksekNot ile karşılaştırıyorum, 
                //eğer o adımdaki değer YuksekNot değerinden büyük ise bu sefer o adımdaki değeri
                //YuksekNot değerine aktarıyorum
                if (not > YuksekNot)
                    YuksekNot = not; // yeni YuksekNot değerim
            } // foreach döngüsü sonu

            return YuksekNot; // en yüksek not değerini metot sonucu geri döndürüyorum
        } //MaksimumNot metodu sonu

        //Her bir öğrencini ortalamasını alacak metodumu yazıyorum
        public double OrtalamaAl(int ogrenci)
        {
            //Her bir öğrenci için notların sayısını tutacağım değişkenimi oluşturuyorum
            int miktar = notlar.GetLength(1);
            //Dizideki değişkenlerin toplam değerini burada tutacağım
            int toplam=0;

            //Her öğrenci için notlarının toplamını buradaki döngü ile elde edeceğim
            for (int sinav = 0; sinav < miktar; sinav++ )
            {
                toplam += notlar[ogrenci, sinav];
            }
            //Geriye notların ortalamasını döndürüyorum
            return (double)toplam / miktar;
        } //OrtalamaAl metodunun sonu

        //NotAraliklari metodumu burada oluşturuyorum
        public void NotAraliklari()
        {
            Console.WriteLine("Not Dağılımı:");

            //YildizSayisi değişkenimde dizim içindeki notları inceleyerek hangi aralıkta 
            //kaç tane not var, onu sayacağım. Daha sonra bu sayı kadar yıldız ile gösterim 
            //yapacağım. Burada dikkat edilecek husus YildizSayisi adında int tipinde bir dizi
            //oluşturdum. Bu dizimin ilgili indeksinde ilgili not aralıklarını saklayacağım.
            int[] YildizSayisi = new int[11];

            //her bir not aralığı için ilgili YildizSayisi dizisindeki elemanlardan ilgili 
            //indeksin eleman sayısını arttırıyorum
            foreach (int not in notlar)
            {
                ++YildizSayisi[not / 10];
            }

            //Not aralıklarına göre Yıldız sayısını göstereceğim döngümü oluşturuyorum
            for (int sayac = 0; sayac < YildizSayisi.Length; sayac++)
            {
                if (sayac == 10)
                {
                    Console.Write(" 100: ");
                }
                else
                {
                    Console.Write("{0:D2}-{1:D2}: ", sayac * 10, sayac * 10 + 9);
                }

                for (int yildizlar = 0; yildizlar < YildizSayisi[sayac]; yildizlar++)
                {
                    Console.Write("*");
                }

                Console.WriteLine();

            }
        } //NotAraliklari metodumun sonu.

        //NotlariListele metodumu oluşturuyorum, 
        //tüm notları öğrenci öğrenci alt alta listeleyeceğim
        public void NotlariListele()
        {
            Console.WriteLine("Notlar:\n");
            Console.Write("              "); // Sütun başlıklarını ayarlamak için kullanıyorum

            //Her bir test için sütun başlığını oluşturuyorum
            for (int test = 0; test < notlar.GetLength(1); test++)
            {
                Console.Write("Test {0} ", test + 1);
            }

            //En sonda da öğrencinin not ortalamasını göreceğim sütun yer alacak
            Console.WriteLine("Ortalama");

            //Tüm notlarımı yazdırmak için döngüm
            for (int ogrenci = 0; ogrenci < notlar.GetLength(0); ogrenci++)
            {
                Console.Write("Öğrenci {0,2}", ogrenci + 1);

                for (int not = 0; not < notlar.GetLength(1); not++)
                {
                    Console.Write("{0,8}", notlar[ogrenci, not]);
                }

                //Öğrencinin not ortalamasını yazdırıyorum, 
                //bunun için OrtalamaAl metodumu kullanıyorum
                Console.WriteLine("{0,9:F}", OrtalamaAl(ogrenci));
            }

        } //NotlariListele metodumun sonu

    } //NotDefteri sınıfımın sonu
}

Sınıfı yani classı oluşturduktan sonra program.cs dosyama geri dönüyorum. NotDefteri classını kullanarak işlem yapacağım. Kodlarım aşağıdaki şekilde, açıklamalarımı da kod satırına ekliyorum.

program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication22
{
    class Program
    {
        static void Main(string[] args)
        {
            //Notları sakladığım tek boyutlu dizimi oluşturuyorum.
            int[,] NotlarDizisi = { { 93, 83, 67 },
                                    { 94, 49, 40 },
                                    { 40, 50, 87 },
                                    { 04, 05, 98 },
                                    { 96, 98, 85 },
                                    { 82, 59, 60 },
                                    { 78, 69, 70 },
                                    { 12, 34, 52 },
                                    { 22, 96, 90 },
                                    { 21, 23, 40 },
                                    };

            NotDefteri BizimNotlar = new NotDefteri("Notları listeleme programı", NotlarDizisi);

            BizimNotlar.MesajGoster();
            BizimNotlar.NotlariIsle();

            Console.ReadLine();
        }
    }
}

Burada NotDefteri sınıfımızdan BizimNotlar adında bir nesne oluşturuyoruz. Referans olarak tabi NotDefteri sınıdı içinde kullanmış olduğum NotlarDizisi referans alınıyor. Daha sonra türettiğim nesne ile birlikte NotDefteri sınıfım üzerinden ilgili constructorları (MesajGoster, NotlariIsle) kullanabiliyorum.

Ekran görüntümüz aşağıdaki gibi olur.

2014040502

Aşağıdaki linkten uygulamayı indirebilirsiniz.

Bir Cevap Yazın

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