Exemple #1
0
 public static void Delete(Scalenum sc)//Уничтожение списков:
 {//sc - Освобождаемый класс
     //sc.digits.Clear();
     //sc.degrees.Clear();
     sc.degrees = null;
     sc.digits = null;
 }
Exemple #2
0
 public static void Delete(Scalenum sc) //Уничтожение списков:
 {                                      //sc - Освобождаемый класс
     //sc.digits.Clear();
     //sc.degrees.Clear();
     sc.degrees = null;
     sc.digits  = null;
 }
        public void Insert(Scalenum s) //Вставка одного числа в центральную часть другого числа:
        {                              //s - число, которое вставляем
            if (s.q != q)
            {
                Console.WriteLine("Числа должны иметь одинаковое основание системы счисления.");
            }
            List digits1  = new List();                                   //Список ненулевых цифр результата
            List degrees1 = new List();                                   //Список соответствующих степеней результата

            for (int i = 0; i < digits.Length; i++)                       //Перебираем все цифры исходного числа
            {
                if (degrees[i] <= degrees[digits.Length - 1] / 2)         // Если цифра в первой половине
                {
                    digits1.Push(digits[i]);                              //Добавляем ее
                    degrees1.Push(degrees[i]);
                    if (degrees[i + 1] > degrees[degrees.Length - 1] / 2) //Если это последняя цифра в первой половине
                    {
                        for (int j = 0; j < s.degrees.Length; j++)        //Вставляем число s
                        {
                            digits1.Push(s.digits[j]);
                            degrees1.Push(s.degrees[j] + degrees[degrees.Length - 1] / 2 + 1);//Так как степень увеличивается на degrees[degrees.Count - 1] / 2 + 1
                        }
                    }
                }
                else//Если цифра во второй половине
                {
                    digits1.Push(digits[i]);//Добавляем ее
                    degrees1.Push(degrees[i] + s.degrees[s.degrees.Length - 1] + 1);//Так как смещено на s.degrees[s.degrees.Count - 1] + 1
                }
            }
            //digits.Clear();
            digits = digits1;   //Сохранение в исходный
            //degrees.Clear();
            degrees = degrees1; //Сохранение в исходный
        }
Exemple #4
0
 public static void QMult(Scalenum sc) //Умножение числа на q:
 {                                     //sc - число которое умножаем
     for (int i = 0; i < sc.degrees.Length; i++)
     {
         sc.degrees[i]++;
     }
 }
Exemple #5
0
        static void Main(string[] args)
        {
            StreamReader rd   = new StreamReader("numbers.txt"); //Файл для считывания данных
            StreamWriter wr   = new StreamWriter("result.txt");  //Файл для записи результатов
            int          q    = Visualisation.Initialize();      //Выбираем систему счисления с которой работаем
            Scalenum     scl  = new Scalenum(q);
            Scalenum     scl1 = new Scalenum(q);
            int          n    = 0;

            while (n != 5)
            {
                n = Visualisation.Choice(); //Выбираем выполняемое действие
                if (n != 5)                 //Если не выбрали выход
                {
                    Visualisation.Read(ref scl, rd);
                    Visualisation.Read(ref scl1, rd);
                    wr.WriteLine("Первое число:");
                    Visualisation.Write(scl, wr);
                    wr.WriteLine("Второе число:");
                    Visualisation.Write(scl1, wr);
                    switch (n)//Выполняем требуемое действие
                    {
                    case 1:
                    {
                        Scalenum s = scl + scl1;
                        wr.WriteLine("Результат:");
                        Visualisation.Write(s, wr);
                    }
                    break;

                    case 2:
                    {
                        Scalenum s = scl * scl1;
                        wr.WriteLine("Результат:");
                        Visualisation.Write(s, wr);
                    }
                    break;

                    case 3:
                    {
                        Scalenum s = scl % scl1;
                        wr.WriteLine("Результат:");
                        Visualisation.Write(s, wr);
                    }
                    break;

                    case 4:
                    {
                        scl.Insert(scl1);
                        wr.WriteLine("Результат:");
                        Visualisation.Write(scl, wr);
                    }
                    break;
                    }
                }
            }
            wr.Close();
        }
Exemple #6
0
 public static int Decoding(Scalenum sc)//Построение числа в 10-ичной системе счисления по заданному числу в q -ичной системе:
 {//sc - преобразуемое число
     int n = 0;//Переменная для результата
     for (int i = 0, j = 0, q = 1; i < sc.degrees.Length; i++)
     {
         for (; j < sc.degrees[i]; j++, q *= sc.q) ;
         n += sc.digits[i] * q;
     }
     return n;
 }
        public static Scalenum operator %(Scalenum s1, Scalenum s2) //Остаток двух чисел в q-ичной системе счисления:
        {                                                           //s1, s2 - числа в q-ичной системе счисления
            if (s1.q != s2.q)
            {
                Console.WriteLine("Числа должны иметь одинаковое основание системы счисления.");
                return(null);
            }
            Scalenum s = Functions.Coding(Functions.Decoding(s1) % Functions.Decoding(s2), s1.q);//Переменная для результата

            return(s);
        }
Exemple #8
0
 static void Main(string[] args)
 {
     StreamReader rd = new StreamReader("numbers.txt");//Файл для считывания данных
     StreamWriter wr = new StreamWriter("result.txt");//Файл для записи результатов
     int q = Visualisation.Initialize();//Выбираем систему счисления с которой работаем
     Scalenum scl = new Scalenum(q);
     Scalenum scl1 = new Scalenum(q);
     int n = 0;
     while (n != 5)
     {
         n = Visualisation.Choice();//Выбираем выполняемое действие
         if (n != 5)//Если не выбрали выход
         {
             Visualisation.Read(ref scl, rd);
             Visualisation.Read(ref scl1, rd);
             wr.WriteLine("Первое число:");
             Visualisation.Write(scl, wr);
             wr.WriteLine("Второе число:");
             Visualisation.Write(scl1, wr);
             switch(n)//Выполняем требуемое действие
             {
                 case 1:
                 {
                     Scalenum s = scl + scl1;
                     wr.WriteLine("Результат:");
                     Visualisation.Write(s, wr);
                 }
                 break;
                 case 2:
                 {
                     Scalenum s = scl * scl1;
                     wr.WriteLine("Результат:");
                     Visualisation.Write(s, wr);
                 }
                 break;
                 case 3:
                 {
                     Scalenum s = scl % scl1;
                     wr.WriteLine("Результат:");
                     Visualisation.Write(s, wr);
                 }
                 break;
                 case 4:
                 {
                     scl.Insert(scl1);
                     wr.WriteLine("Результат:");
                     Visualisation.Write(scl, wr);
                 }
                 break;
             }
         }
     }
     wr.Close();
 }
        public static Scalenum operator +(Scalenum s1, Scalenum s2) //Сумма двух чисел в q-ичной системе счисления:
        {                                                           //s1, s2 - числа в q-ичной системе счисления
            if (s1.q != s2.q)
            {
                Console.WriteLine("Числа должны иметь одинаковое основание системы счисления.");
                return(null);
            }
            Scalenum s = new Scalenum(s1.q);//Переменная для результата

            Functions.SumConst(ref s, Functions.Decoding(s1));
            Functions.SumConst(ref s, Functions.Decoding(s2));
            return(s);
        }
Exemple #10
0
 public static Scalenum Coding(int n, int q = 10)//Построение числа в q-ичной системе счисления по заданному числу в 10-тичной системе:
 {//n - преобразуемое число;q - основание системы счисления
     Scalenum s = new Scalenum(q);//Переменная для результата
     for (int i = 0; n != 0; i++, n /= q)
     {
         if (n % q != 0)
         {
             s.digits.Push(n % q);
             s.degrees.Push(i);
         }
     }
     return s;
 }
Exemple #11
0
        public static Scalenum Coding(int n, int q = 10) //Построение числа в q-ичной системе счисления по заданному числу в 10-тичной системе:
        {                                                //n - преобразуемое число;q - основание системы счисления
            Scalenum s = new Scalenum(q);                //Переменная для результата

            for (int i = 0; n != 0; i++, n /= q)
            {
                if (n % q != 0)
                {
                    s.digits.Push(n % q);
                    s.degrees.Push(i);
                }
            }
            return(s);
        }
Exemple #12
0
        public static int Decoding(Scalenum sc) //Построение числа в 10-ичной системе счисления по заданному числу в q -ичной системе:
        {                                       //sc - преобразуемое число
            int n = 0;                          //Переменная для результата

            for (int i = 0, j = 0, q = 1; i < sc.degrees.Length; i++)
            {
                for (; j < sc.degrees[i]; j++, q *= sc.q)
                {
                    ;
                }
                n += sc.digits[i] * q;
            }
            return(n);
        }
Exemple #13
0
 public static int MED(Scalenum sc)//Нахождение цифры, которая встречается в представлении числа максимальное число раз:
 {//sc - число
     int[] a = new int[sc.q];//Количество нахождений цифр в числе
     for (int i = 0; i < sc.digits.Length; i++)
         a[sc.digits[i]]++;
     a[0] = sc.degrees[sc.degrees.Length - 1];
     for(int i = 1;i < sc.q;i++)
         a[0]-= a[i];
     int max = -1, imax = -1;
     for(int i = 0;i < sc.q;i++)
         if (a[i] > max)
         {
             max = a[i];
             imax = i;
         }
     return imax;
 }
        public static Scalenum operator *(Scalenum s1, Scalenum s2) //Произведение двух чисел в q-ичной системе счисления:
        {                                                           //s1, s2 - числа в q-ичной системе счисления
            if (s1.q != s2.q)
            {
                Console.WriteLine("Числа должны иметь одинаковое основание системы счисления.");
                return(null);
            }
            Scalenum s = new Scalenum(s1.q); //Переменная для результата
            Scalenum q = new Scalenum(s1.q); //Переменная для степени q

            Functions.SumConst(ref q, Functions.Decoding(s1));
            for (int i = 0, j = 0; i < s2.degrees.Length; i++)//Перебираем все значащие цифры во втором числе
            {
                for (; j < s2.degrees[i]; j++, Functions.QMult(q))
                {
                    ;                                                            //Доходим до нужной степени
                }
                Functions.SumConst(ref s, Functions.Decoding(q) * s2.digits[i]); //Прибавление к результату s1 * q^s2.degrees[i] * s2.digits[i]
            }
            return(s);
        }
Exemple #15
0
        public static int MED(Scalenum sc) //Нахождение цифры, которая встречается в представлении числа максимальное число раз:
        {                                  //sc - число
            int[] a = new int[sc.q];       //Количество нахождений цифр в числе
            for (int i = 0; i < sc.digits.Length; i++)
            {
                a[sc.digits[i]]++;
            }
            a[0] = sc.degrees[sc.degrees.Length - 1];
            for (int i = 1; i < sc.q; i++)
            {
                a[0] -= a[i];
            }
            int max = -1, imax = -1;

            for (int i = 0; i < sc.q; i++)
            {
                if (a[i] > max)
                {
                    max  = a[i];
                    imax = i;
                }
            }
            return(imax);
        }
Exemple #16
0
        public static void SumConst(ref Scalenum sc, int n) //Увеличения числа на на константу
        {                                                   //sc - число;n - константа
            int m = Decoding(sc) + n;

            sc = Coding(m, sc.q);
        }
Exemple #17
0
 public static void QMult(Scalenum sc)//Умножение числа на q:
 {//sc - число которое умножаем
     for (int i = 0; i < sc.degrees.Length; i++)
         sc.degrees[i]++;
 }
Exemple #18
0
 public void Insert(Scalenum s)//Вставка одного числа в центральную часть другого числа:
 {//s - число, которое вставляем
     if (s.q != q)
         Console.WriteLine("Числа должны иметь одинаковое основание системы счисления.");
     List digits1 = new List();//Список ненулевых цифр результата
     List degrees1 = new List();//Список соответствующих степеней результата
     for (int i = 0; i < digits.Length; i++)//Перебираем все цифры исходного числа
     {
         if (degrees[i] <= degrees[digits.Length - 1] / 2)// Если цифра в первой половине
         {
             digits1.Push(digits[i]);//Добавляем ее
             degrees1.Push(degrees[i]);
             if (degrees[i + 1] > degrees[degrees.Length - 1] / 2)//Если это последняя цифра в первой половине
             {
                 for (int j = 0; j < s.degrees.Length; j++)//Вставляем число s
                 {
                     digits1.Push(s.digits[j]);
                     degrees1.Push(s.degrees[j] + degrees[degrees.Length - 1] / 2 + 1);//Так как степень увеличивается на degrees[degrees.Count - 1] / 2 + 1
                 }
             }
         }
         else//Если цифра во второй половине
         {
             digits1.Push(digits[i]);//Добавляем ее
             degrees1.Push(degrees[i] + s.degrees[s.degrees.Length - 1] + 1);//Так как смещено на s.degrees[s.degrees.Count - 1] + 1
         }
     }
     //digits.Clear();
     digits = digits1;//Сохранение в исходный
     //degrees.Clear();
     degrees = degrees1;//Сохранение в исходный
 }
Exemple #19
0
 public static Scalenum operator *(Scalenum s1, Scalenum s2)//Произведение двух чисел в q-ичной системе счисления:
 {//s1, s2 - числа в q-ичной системе счисления
     if (s1.q != s2.q)
     {
         Console.WriteLine("Числа должны иметь одинаковое основание системы счисления.");
         return null;
     }
     Scalenum s = new Scalenum(s1.q);//Переменная для результата
     Scalenum q = new Scalenum(s1.q);//Переменная для степени q
     Functions.SumConst(ref q, Functions.Decoding(s1));
     for (int i = 0, j = 0; i < s2.degrees.Length; i++)//Перебираем все значащие цифры во втором числе
     {
         for (; j < s2.degrees[i]; j++, Functions.QMult(q)) ;//Доходим до нужной степени
         Functions.SumConst(ref s, Functions.Decoding(q) * s2.digits[i]);//Прибавление к результату s1 * q^s2.degrees[i] * s2.digits[i]
     }
     return s;
 }
Exemple #20
0
 public static Scalenum operator +(Scalenum s1, Scalenum s2)//Сумма двух чисел в q-ичной системе счисления:
 {//s1, s2 - числа в q-ичной системе счисления
     if (s1.q != s2.q)
     {
         Console.WriteLine("Числа должны иметь одинаковое основание системы счисления.");
         return null;
     }
     Scalenum s = new Scalenum(s1.q);//Переменная для результата
     Functions.SumConst(ref s, Functions.Decoding(s1));
     Functions.SumConst(ref s, Functions.Decoding(s2));
     return s;
 }
Exemple #21
0
 public static void SumConst(ref Scalenum sc, int n)//Увеличения числа на на константу 
 {//sc - число;n - константа
     int m = Decoding(sc) + n;
     sc = Coding(m, sc.q);
 }
Exemple #22
0
 public static void Write(Scalenum sc, StreamWriter wr)                                    //Вывод данных о числе
 {                                                                                         //sc - число;wr - файловый поток в который записываем
     wr.WriteLine("Представление числа в десятичной системе:" + Functions.Decoding(sc));   //10-ичная система счисления
     wr.WriteLine("Представление числа в q-ичной системе счисления:\r\n" + sc.ToString()); //q-ичная система счисления
 }
Exemple #23
0
 public static void Write(Scalenum sc, StreamWriter wr)//Вывод данных о числе 
 {//sc - число;wr - файловый поток в который записываем
     wr.WriteLine("Представление числа в десятичной системе:" + Functions.Decoding(sc));//10-ичная система счисления
     wr.WriteLine("Представление числа в q-ичной системе счисления:\r\n" + sc.ToString());//q-ичная система счисления
 }
Exemple #24
0
 public static void Read(ref Scalenum sc, StreamReader rd) //Считывание числа из файла:
 {                                                         //sc - число в которое считываем;rd - файловый поток откуда считываем
     sc = Functions.Coding(int.Parse(rd.ReadLine()), sc.q);
 }
Exemple #25
0
 public static void Read(ref Scalenum sc, StreamReader rd)//Считывание числа из файла:
 {//sc - число в которое считываем;rd - файловый поток откуда считываем
     sc = Functions.Coding(int.Parse(rd.ReadLine()), sc.q);
 }