Umut D.

Umut D.

Powered by Jekyll & Github

  • Coding-Challenges

  • Soru

    Programcıya karışık halde ve harfler, sayılar, hesaplama operatöründen oluşan bir girdi (girdi) veriliyor. Bu noktadan sonra, girdideki operatör öncesi ve operatör sonrası sayıları ayrı ve tek parça olarak alması isteniyor. Sonuç işlemini gerçekleştirmek içinse eldeki iki ayrı sayıyı mevcut operatöre göre hesaplaması isteniyor.

    Not: İşlem sonucunda küsüratlı sayı olursa -kültürden bağımsız olarak- yuvarlama yapılmasını gerekli olduğu belirtiliyor.

    Örnek

    Girdi Çıktı
    girdi: gdf1dg1gf*4aP0 –> 11x40 Sonuç: 440
    girdi: a9b9cas9/sai11vjck1 –> 999/111 Sonuç: 9

    Çözüm - C#

    using System;
    using System.Globalization;
    using System.Text.RegularExpressions;
    
    class Program
    {
        static void Main()
        {
            string girdi = "gdf1dg1gf*4aP0";
    
            // Operatör öncesi ve sonrasını iki parçaya ayır
            char[] operatorler = {'+', '-', '*', '/'};
            string[] parcalar = girdi.Split(operatorler);
    
            // I. Regex'le birinci kısımdaki sayıları al
            MatchCollection birinciKisim = Regex.Matches(parcalar[0], @"[0-9\.]+");
    
            string ilkSayi = "";
            foreach (Match match in birinciKisim)
            {
                ilkSayi += match.Value;
            }
    
            // II. Regex'le ikinci kısımdaki sayıları al
            MatchCollection ikinciKisim = Regex.Matches(parcalar[1], @"[0-9\.]+");
    
            string digerSayi = "";
            foreach (Match match in ikinciKisim)
            {
                digerSayi += match.Value;
            }
    
            // Değer dönüşümlerini yap
            double birinciDeger = Convert.ToDouble(ilkSayi);
            double ikinciDeger = Convert.ToDouble(digerSayi);
    
            // Girdi'den hesaplama operatörünü al
            int operatorYeri = girdi.IndexOfAny(operatorler);
            char islemOperatoru = girdi[operatorYeri];
    
            // İşlem operatörüne göre işlemleri gerçekleştir
            double sonuc = 0;
            switch (islemOperatoru)
            {
                case '+':
                    sonuc = birinciDeger + ikinciDeger;
                    break;
                case '-':
                    sonuc = birinciDeger - ikinciDeger;
                    break;
                case '*':
                    sonuc = birinciDeger * ikinciDeger;
                    break;
                case '/':
                    sonuc = birinciDeger / ikinciDeger;
                    break;
            }
    
            // Sonucu yuvarla ve kültürden bağımsız olarak biçimlendir
            sonuc = Math.Round(sonuc);
            Console.WriteLine("Sonuç: {0}", sonuc.ToString(CultureInfo.InvariantCulture));
    
            Console.Read();
        }
    }