예제 #1
0
        // Aritmetički kodiraj poruku
        void Execute(object sender, RoutedEventArgs e)
        {
            // Kodiraj poruku jednoznačno
            double result = ArithmeticCode.Encode(
                Message.Text,
                Params.Children.OfType <Dial>().Select(i => (int)i.RawValue).ToList(),
                out double left, out double right
                );

            // Bitova potrebno za jednoznačno dekodiranje poruke
            int unambig = ArithmeticCode.BitsForUnambiguity(left, right);

            // Prikaz rezultata
            Result.Text   = $"Enkodirana poruka: {result}";
            Interval.Text = $"Interval: [{left}, {right}⟩";
            Bits.Text     = $"Broj bitova za jednoznačnost: {unambig}";
        }
예제 #2
0
        // Brisanje nekog simbola
        void Removed(object sender, RoutedEventArgs e)
        {
            if (Params.Children.Count <= 2)
            {
                return;                              // Aritmetički kod nema smisla za samo jedan simbol
            }
            Dial removing = (Dial)((ContextMenu)FindResource("Remove")).PlacementTarget;

            removing.Changed -= Changed;
            Last.RawValue    += removing.RawValue;

            // Namjesti nazive simbola
            for (int i = Params.Children.IndexOf(removing) + 1; i < Params.Children.Count; i++)
            {
                ((Dial)Params.Children[i]).Title = ArithmeticCode.PName(i - 1).ToString();
            }

            Params.Children.Remove(removing);

            CanExecute();
        }
예제 #3
0
        // Dodavanje novog simbola
        void Added()
        {
            if (Last.RawValue < 2 || Params.Children.Count >= 26)
            {
                return;                                                    // Do 26 slova, moguće proširiti uz bolje imenovanje
            }
            Dial param = new Dial();

            param.RawValue = Last.RawValue / 2;
            Last.RawValue -= param.RawValue;

            param.Changed    += Changed;
            param.ContextMenu = (ContextMenu)FindResource("Remove");

            int i = Params.Children.Count - 1;

            param.Title = ArithmeticCode.PName(i).ToString();     // Nazivi simbola
            Last.Title  = ArithmeticCode.PName(i + 1).ToString();

            Params.Children.Insert(i, param);

            CanExecute();
        }