C# – Algorithm Examples | 2

Detaylar

  • Kullanıcı tarafından belirlenen dersler ve haftalık saatlerine göre yine kullanıcı tarafından girilen öğrencinin ders notlarından ağırlıklı ortalamanın bulunması ve öğrencinin teşekkür, takdir belgesi alıp almadığının tespit edilmesi.

Kodumuz

  • Öncelikle Main metodunu açıklayalım. Main metodu burada 35. satırda başlıyor ve programımız çalışmaya başladığında ilk olarak çalışacak metoddur. Diğer motodlar, Main içerisinde çağrılır.
  • Koşul sağlandığı sürece (yani bu örnekte kullanıcının devam edip etmeme isteğine göre) bu işlemin yapılmasını istediğimiz için kodlarımızı do-while döngüsü içerisine yazıyoruz. while() parantezindeki kodun, koşulu sağlayıp sağlamamasına göre do içerisindeki kod tekrar çalışıp çalışmayabilir.
  • İsteyeceğimiz not ve ders saatleri de yine kullanıcıya bağlıdır. Kulanıcının gireceği değerlere göre değişiklik göstereceğinden öndelikle for döngüsü dışında kaç adet ders bilgilerinin girileceğini öğrenmek amacıyla ders sayısı kullanıcıdan alınır.
  • Alınan ders sayısı adedince yeni ders bilgileri girileceğinden ve biz bunu bilmediğimizden dolayı i değerli bir integer dizisi oluşturulur.
  • Burada i, her bir dersi temsil eder. Örneğin, 3 adet ders bilgisi girlecekse, dizi indexi 0 dan başladığı için i = 2 dir.
  • Oluşturulan bu dizi 2 boyutludur bunun sebebi ise her bir ders için yani her bir ders[i,] için, ilgili dersin dersin saat ve not bilgisi tutulur. ders[i,0] da, dersin saat bilgisi tutulurken, ders[i,1] de, dersin not bilgisi tutulmaktadır.
  • Girilen ders sayısında saat ve not bilgisi sırayla dizilere depolandıktan sonra buradaki not ve saat bilgisi ortHesapla isimli bizim yazdığımız fonksiyona gönderilir. (7. satırda)
  • ortHesapla fonsiyonunun parametresi int[,] dersler dir. Ayrıca değerler sonucunda bir ortalama hesaplayıp bunu döndüreceği için void değildir. double değer döndürür, return kullanılır.
  • ortHesapla içerisinde yine for döngüsü kullanılarak her i için (yani her ders için) olan saat ve not bilgileri toplanır. Sonuçta toplam bir saat değeri ve not değeri olmuş olur.
  • Buradaki for döngüsü dersler isimli integer dizinin ilk elamanının uzunluğu kadar yani i nin uzunluğu kadar döner.
  • Normalde uzunluğa erişmek için .Length kullanılırken dizilerin herhnagi bir elemanı sayısınca uzunluğa ulaşmak için .GetLength() kullanılır. GetLength parametre alır. Örneğin, burada dizi i (yani ders adedi) uzunluğunda dönmesi için int[i,] ders dizisini ilk elemanı olan i nin index i kullanılır. Bu da 0 dır. Bu nedenle bu programda .GetLength(0) şeklinde kullanılmıştır.
  • Not/saat return ile döndürülerek bir ortalama oluşturmuş olur.
  • Main içerisinde ortHesapla() fonksiyonu çağrılarak onun döndürdüğü değer ort değişkenine atanır.
  • Bir alt satırda ise bu ort değişkenini parametre olarak alan bir belgeYazdir() fonksiyonu çağrılmıştır.
  • belgeYazdir fonksiyonu (19. satırda) içerisinde Console.WriteLine() ile ekrana yazı yazdırır. Bu nedenle değer döndürmez, void dir. İçerisindeki if ve else ler ile, hesaplanan ortalam değerinin hangi belgeye eşdeğer olduğunu bulur ve bunu Main metodunda çağırıldığı zaman ekrana yazdırır.
  • Devam etmek istendiğinde aynı işlemler devam eder.

Kodun Çıktısı

Devam etmek istendiğinde bu şekilde devam ediyor.

Kaynak Kodu (Source Code)

using System;

namespace DenemeBirKi
{
    class Program
    {
        static double ortHesapla(int[,] dersler)
        {
            double toplamSaat=0, toplamNot=0;
            for(int i=0; i<dersler.GetLength(0); i++)
            {
                toplamSaat += dersler[i, 0];
                toplamNot += dersler[i, 0] * dersler[i, 1];
            }

            return toplamNot / toplamSaat;
        }

        static void belgeYazdir(double ort)
        {
            if(ort >= 85)
            {
                Console.WriteLine("{0} ortlamanız ile Taktir Belgesi aldınız.", ort);
            }
            else if(ort >= 75)
            {
                Console.WriteLine("{0} ortlamanız ile Teşekkür Belgesi aldınız.", ort);
            }
            else
            {
                Console.WriteLine("{0} ortlamanız belge almaya yetmedi.", ort);
            }

        }
        static void Main(string[] args)
        {
            int dersSayisi;
            char devam;
            double ort;

            do
            {
                Console.Write("Ders sayısı:");
                dersSayisi = Convert.ToInt32(Console.ReadLine());

                int[,] ders =  new int[dersSayisi, 2];

                for(int i = 0; i < dersSayisi; i++)
                {
                    Console.Write("{0}. dersin haftalık saati:", i + 1);
                    ders[i, 0] = Convert.ToInt32(Console.ReadLine());

                    Console.Write("{0}. dersin puanı:", i + 1);
                    ders[i, 1] = Convert.ToInt32(Console.ReadLine());
                }

                ort = ortHesapla(ders);
                belgeYazdir(ort);

                Console.Write("Devam etmek istiyor musunuz? (e/h)");
                devam = Convert.ToChar(Console.ReadLine());

            } while (devam == 'e' || devam == 'E');

        }
    }
}

Kaynaklar

  • Örneklerle Algoritma ve C# Programlama – Erhan Arı

Yorum bırakın