static Banknot DegerAl()
        {
            Console.WriteLine("banknot değerlerini ',' ile ayırarak yazınız");
            string[] girdiDeger = Console.ReadLine().Split(',');
            Banknot  banknot    = new Banknot(double.Parse(girdiDeger[0], System.Globalization.CultureInfo.InvariantCulture),
                                              double.Parse(girdiDeger[1], System.Globalization.CultureInfo.InvariantCulture),
                                              double.Parse(girdiDeger[2], System.Globalization.CultureInfo.InvariantCulture),
                                              double.Parse(girdiDeger[3], System.Globalization.CultureInfo.InvariantCulture), "");

            //Cultureinfo kullandık çünkü girilen değerdeki noktayı görnüyordu.
            return(banknot);
        }
        static string TurBelirle(List <Banknot> benzerKBanknot)
        { //banknotuzaklık (karsılastırdan gelen uzaklık ve banknot bılgı listemiz)
            int     gecerli  = 0;
            int     gecersiz = 0;
            Banknot b        = new Banknot();

            for (int i = 0; i < benzerKBanknot.Count; ++i)
            {
                b = (Banknot)benzerKBanknot[i];
                Console.WriteLine(b.degerYazdir());
                if (b.Tur == "1") //nesnenin tür değeri 1 e eşitse geçerli sayısını 1 arttırıyoruz, 0 da geçersiz arttırılıyor.
                {
                    gecerli++;
                }
                else
                {
                    gecersiz++;
                }
            }
            if (gecerli > gecersiz) //k değerine göre hangisi çoksa ona göre geçerli ve geçersiz diyoruz
            {
                Console.WriteLine("Gecerli");
                return("Gecerli");
            }
            else if (gecerli < gecersiz)
            {
                Console.WriteLine("Gecersiz");
                return("Gecersiz");
            }
            else
            {  //eşitlik oluşursa en yakın değeri şeçiyoruz ve onun türünü döndürüyoruz. En yakını ise şöyle belirliyoruz:
                //(karsılastır fonksiyonuna uzaklığa göre artan yolladığı için ilk terim en yakın olandır)
                b = (Banknot)benzerKBanknot[0];
                if (b.Tur == "1")
                {
                    return("Gecerli");
                }
                else
                {
                    return("Gecersiz");
                }
            }
        }
        static List <Banknot> Karsilastir(Banknot banknot, List <Banknot> anaDizi, int k)
        {
            // anadizideki banknotların verilen banknota uzaklıklarını tutmak için bir
            // BanknotUzaklık listesi tanımlanıyor.
            List <BanknotUzaklik> banknotUzakliklari = new List <BanknotUzaklik>();

            foreach (Banknot b in anaDizi)
            {  //uzaklığı hesaplıyoruz
                double uzaklik = Math.Sqrt(Math.Pow(b.VaryansDegeri - banknot.VaryansDegeri, 2) +
                                           Math.Pow(b.CarpiklikDegeri - banknot.CarpiklikDegeri, 2) +
                                           Math.Pow(b.BasiklikDegeri - banknot.BasiklikDegeri, 2) +
                                           Math.Pow(b.EntropiDegeri - banknot.EntropiDegeri, 2));

                banknotUzakliklari.Add(new BanknotUzaklik {
                    banknot = b, uzaklik = uzaklik
                });                                                                            //bankotuzaklığa ıtemlerı eklıyoruz
            }

            // BanknotUzaklın nesneleri uzaklıklarına göre artan sıralanıp
            // K tanesi seçiliyor ve Banknot nesneleri listesi döndürülüyor.
            return(banknotUzakliklari.OrderBy(x => x.uzaklik).Take(k).Select(x => x.banknot).ToList());
        }
        static void Main(string[] args)
        {
            List <Banknot> anaDizi = new List <Banknot>();

            try
            {
                using (StreamReader sr = new StreamReader("data_banknote_authentication.txt"))
                {
                    string satir;


                    while (sr.Peek() >= 0) //peek dosya sonuna gelinip gelinmediğini kontrol eden metot
                    {
                        string[] degerler = new string[5];
                        satir    = sr.ReadLine();
                        degerler = satir.Split(',');
                        Banknot banknot = new Banknot(
                            double.Parse(degerler[0], System.Globalization.CultureInfo.InvariantCulture),
                            double.Parse(degerler[1], System.Globalization.CultureInfo.InvariantCulture),
                            double.Parse(degerler[2], System.Globalization.CultureInfo.InvariantCulture),
                            double.Parse(degerler[3], System.Globalization.CultureInfo.InvariantCulture),
                            degerler[4]);
                        anaDizi.Add(banknot);
                        //Cultureinfo kullandık çünkü girilen değerdeki noktayı görnüyordu.
                    }
                    Console.WriteLine("Dosya okundu");
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("Dosya Bulunamadi");
                Console.WriteLine(e.Message);
            }

            string devam = "d";

            while (devam != "q")
            {
                Console.WriteLine("\t(1)Banknot sınıflandırma \n\t(2)Başarı ölçümü \n\t(3)Listeleme\n");
                string secim = Console.ReadLine();
                if (secim == "1")
                {
                    Banknot b = DegerAl();// metod çağırılarak kullanıcıdan banknotun değerleri alınıyor
                    Console.WriteLine("k değerini giriniz=");
                    int k = int.Parse(Console.ReadLine());
                    TurBelirle(Karsilastir(b, anaDizi, k));//b nesnesinin türü belirleniyor
                }
                else if (secim == "2")
                {
                    BasariOlcumu(anaDizi);
                }
                else if (secim == "3")
                {
                    Listeleme(anaDizi);
                }
                else if (secim == "q")
                {
                    break;
                }
                Console.WriteLine("Devam etmek istiyor musunuz? Devam icin herhangibir tusa bas cikmak icin q'a bas");
                devam = Console.ReadLine();
            }
        }