// 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}"; }
// 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(); }
// 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(); }