Beispiel #1
0
 /// <summary>
 /// данная функция создает новый блок псевдослучайных элементов последовательности из предыдущих.
 /// в двумерном массиве ключа в первой строке хранится коефициент
 /// во второй значение
 /// коэфициент*значание=новый элемент
 /// </summary>
 /// <param name="coefficients"></param>
 /// <param name="key"></param>
 public static void sequence(int[,] coefficients, LimitedSizeStack <int> key)
 {
     key.Restore();
     for (int i = 0; i < coefficients.GetLength(1); i++)
     {
         int newElementSequence = 0;
         for (var j = 0; j <= coefficients.GetLength(0); j++)
         {
             var multiplier = key.PopLast();
             newElementSequence += coefficients[0, j] * multiplier;
         }
         key.Restore();
         key.Push(newElementSequence % Languege.z);
     }
 }
Beispiel #2
0
        public string Decode(WordAndKey <int[, ]> element)
        {
            var numberLitera = Converter.ConvertWordToCode(element.Word);//TODO: может стоит объединить это в отдельный статический класс?
            var keyLitera    = new LimitedSizeStack <int>(element.Key.GetLength(1));

            for (var i = 0; i < element.Key.GetLength(1); i++)
            {
                keyLitera.Push(element.Key[1, i]);
            }
            foreach (var nL in numberLitera)
            {
                element.Encoded = Convert.ToString(FindValue.Findvalue((nL - keyLitera.PopFirst()) % Languege.z));
                if (keyLitera.Count == 0)
                {
                    Generate.sequence(element.Key, keyLitera);
                }
            }
            return(element.Encoded);
        }
Beispiel #3
0
        public string Code(WordAndKey <int[, ]> element)//TODO: понять, как реализовать в других системах исчисления
        {
            var numberLitera = Converter.ConvertWordToCode(element.Word);
            var keyLitera    = new LimitedSizeStack <int>(element.Key.GetLength(1));

            for (var i = 0; i < element.Key.GetLength(1); i++)
            {
                keyLitera.Push(element.Key[1, i]);
            }
            foreach (var nL in numberLitera)
            {
                element.Encoded = Convert.ToString(FindValue.Findvalue((nL + keyLitera.PopFirst()) % Languege.z));
                if (keyLitera.Count == 0)
                {
                    Generate.sequence(element.Key, keyLitera);
                }
            }
            return(element.Encoded);
        }
Beispiel #4
0
        public static List <int> PseudorandomSequence(int[,] basisOfSequence)
        {
            var result    = new List <int>();
            var generator = new LimitedSizeStack <int>(basisOfSequence.GetLength(1));

            for (var i = 0; i < basisOfSequence.GetLength(1); i++)
            {
                generator.Push(basisOfSequence[1, i]);
            }
            for (var i = 0; i < 100; i++)
            {
                result.Add(generator.PopFirst() % Languege.z);
                if (checkRepetition(result, basisOfSequence, i))
                {
                    result.RemoveRange(result.Count - basisOfSequence.GetLength(1), basisOfSequence.GetLength(1));
                    return(result);
                }
                if (generator.Count == 0)
                {
                    sequence(basisOfSequence, generator);
                }
            }
            return(result);
        }