Umut D.

Umut D.

Powered by Jekyll & Github

  • Coding-Challenges

  • Soru

    Programcıya İkili/Binary kodundan oluşan ondalık bir sayı (sayi)veriliyor. Programcıdan ise; kendisine verilen sayıyı Ondalık/Decimal hale dönüştüren bir kod yazması isteniyor.

    Örnek

    Girdi Çıktı
    sayi: 100.011 Sonuç: 4.125
    sayi: 100.1 Sonuç: 4.5

    Çözüm - C#

    using System;
    using System.Linq;
     
    internal class Program
    {
        private static void Main(string[] args)
        {
            string binarySayi = "100.1";
     
            // Gerekli değişkenleri oluştur
            double noktaninSoluToplam = 0, noktaninSagiToplam = 0, sayi;
     
            // Binary (İkilik) düzendeki sayıyı noktaya göre ikiye ayır
            string[] noktaliSayi = binarySayi.Split('.');
     
            // Parçalanmış sayıları ilgili değişkenlere aktar
            string noktaninSolu = noktaliSayi[0];
            string noktaninSagi = noktaliSayi[1];
     
            // 1. Aşama - Eşitliğin solunu hallet
            // Noktanın solunda kalan sayıları ters çevirerek işe başla
            char[] tersCevir = noktaninSolu.ToCharArray().Reverse().ToArray();
     
            // Tek tek aktarım yap ve üs hesaplamasını genel toplama ekle
            for (int i = 0; i < noktaninSolu.Length; i++)
            {
                // Tek tek aktarım yap ve üs hesaplamasını toplama ekle
                sayi = Convert.ToInt32(tersCevir[i].ToString());
                noktaninSoluToplam += (sayi * (Math.Pow(2, i)));
            }
     
            // 2. Aşama - Eşitliğin sağını hallet
            for (int i = 0; i < noktaninSagi.Length; i++)
            {
                // Tek tek aktarım yap ve üs hesaplamasını ondalık toplamına ekle
                sayi = Convert.ToInt32(noktaninSagi[i].ToString());
                noktaninSagiToplam += (sayi * (Math.Pow(2, -i - 1)));
            }
     
            Console.WriteLine(noktaninSoluToplam + noktaninSagiToplam);
     
            Console.Read();
        }
    }
    

    Çözüm - Java

    public class Main {
     
        public static void main(String[] args) {
     
            String binarySayi = "100.1";
     
            // Binary (İkilik) düzendeki sayıyı noktaya göre ikiye ayır
            String[] noktaliSayi = binarySayi.split("\\.");
     
            // Parçalanmış sayıları ilgili değişkenlere aktar
            String noktaninSolu = noktaliSayi[0];
            String noktaninSagi = noktaliSayi[1];
     
            // Gerekli değişkenleri oluştur
            double noktaninSoluToplam = 0, noktaninSagiToplam = 0, sayi;
     
            // 1. Aşama - Eşitliğin solunu hallet
            // Noktanın solunda kalan sayıları ters çevirerek işe başla
            char[] tersCevir = new StringBuilder(noktaninSolu).reverse().toString().toCharArray();
     
            // Tek tek aktarım yap ve üs hesaplamasını genel toplama ekle
            for (int i = 0; i < noktaninSolu.length(); i++)
            {
                // Tek tek aktarım yap ve üs hesaplamasını toplama ekle
                sayi = Double.parseDouble(String.valueOf(tersCevir[i]));
                noktaninSoluToplam += (sayi * (Math.pow(2, i)));
            }
     
            // 2. Aşama - Eşitliğin sağını hallet
            for (int i = 0; i < noktaninSagi.length(); i++)
            {
                // Tek tek aktarım yap ve üs hesaplamasını ondalık toplamına ekle
                sayi = Double.parseDouble(String.valueOf(noktaninSagi.indexOf(i)));
                noktaninSagiToplam += (sayi * (Math.pow(2, -i - 1)));
            }
     
            System.out.println(noktaninSoluToplam + (-noktaninSagiToplam));
        }
    }