Press "Enter" to skip to content

Jak Jasio z dowcipów liczby w c# konwertował

Jak napisałam na FB, pokażę kawałek kodu, który może się przydać początkującym, ale tak zupełnie początkującym, jak uczniowie w szkole średniej, którzy pierwszy raz mają programowanie w szkole. Załóżmy, że dana szkoła poszła z duchem czasu i nie uczy już pascala, ale na przykład takiego c#a. I dzieci dostały zaraz po kalkulatorze w textmode standardowo napisać konwerter liczb dziesiętnych do bin, hex i oct. Dzieci googlują i przeklejają ładnie kod generujący stringi przy użyciu dzielenia przez podstawę, odejmowania, obliczania reszty z dzielenia wiecie tam, zgarniają po piątce i zaczynają naparzać w Counter Strike’a, jak mają w zwyczaju. Tylko znany z kawałów Jasio się wyłamuje. Używa funkcji Convert.ToString. Pani od informatyki (która po poprzedniej lekcji reinstalowała pracownię zainfekowaną groźnym wirusem nazywającym się printscreen+ustaw_jako_tło_pulpitu+ukryj_ikony_pulpitu / =wlasnie_shakowales_windowsa_xp.vir ) skarciła Jasia, że to trzeba było użyć dzielenie całkowite i resztę z dzielenia!!!. Na co Jasiu dumny z siebie dopisał linijkę z użyciem funkcji Math.DivRem, bo program miał to liczyć. Jasiu znowu zrobił coś nie tak, wykazując sie szczególnym zuchwalstwem. Jutro rodzice byli w szkole, bo pani chciała się na niego poskarżyć. Tak czy owak, jako że nasz Jasiu umie lepiej c# od pani z informatyki, na programowanie już chodzić nie musiał. Poniżej przeklejam kod „Jasia”;)

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

namespace numerki
{
    class Program
    {

        static void Main(string[] args)
        {

            int i = Int32.MinValue + Int32.MaxValue; // można to pobrać od usera, wziąć z argsów, jak się chce. Ja podałam na sztywno:)
            //Zadanie dla dzieci. Napisać "podaj liczbę" i użyć funkcji i = Int32.Parse(Console.ReadLine()); do pobrania jej od usera:p
            Console.WriteLine("dec: " + i);
            //tak, wywołanie Convert.ToString załatwia nam całe konwertowanie liczb w celu ich wypisania:)
            Console.WriteLine("hex z formatowania: " + i.ToString("X"));
            Console.WriteLine("hex przy podaniu bazy: " + Convert.ToString(i, 16) );
            Console.WriteLine("oct: " + Convert.ToString(i, 8));
            Console.WriteLine("bin: "+ Convert.ToString(i, 2));
            //w 2 stronę Convert.ToInt32( "1010112", 2 ); gdzie 1 to string z liczbą, 2 cyfra to podstawa systemu (base)
            Console.Write("Rozkład bitów: ");
            //int[] bittable = Decimal.GetBits(i * 2048); <działa, wypełnia inne:)
            int[] bittable = Decimal.GetBits(i);
            const string dataFmt = "{0,10:X8}{1,10:X8}{2,10:X8}{3,10:X8}";
            Console.WriteLine( dataFmt, bittable[ 3 ], bittable[ 2 ], bittable[ 1 ], bittable[ 0 ] );
            //jeszcze dla smaczku dzielenie z resztą:
            int a, b, c, d;
            a = 5; b = 2;
            c = Math.DivRem(a, b, out d); //out używamy, aby funkcja zwróciła więcej niż jedną wartość;)
            Console.WriteLine("{0} dzielone przez {1} to {2} reszty {3}", a, b, c, d);
            Console.ReadKey();
        }
    }
}