Бесконечный цикл - C# (178145)

Узнай цену своей работы

Формулировка задачи:

Сделал класс с методами для конвертации из двенадцатеричной системы счисления в двоичную. Бесконечный цикл возникает после создания экземпляра класса. Программа заходит в класс, экземпляр которого мы создаём, "выполняет" конструктор и возвращается на первую строчку метода Main();
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace TPO_lab5
{
    class Program
    {
        static void Main(string[] args)
        {
            string ab = "123ab";
            TwelveToTwo ttt = new TwelveToTwo(ab);
            ttt.TwelveToTen();
            Console.WriteLine(ttt.number10);
            ttt.TenToTwo();
            foreach (int t in ttt.binar)
                Console.WriteLine(t);
            Console.ReadLine();
        }
    }
}
Сам класс в котором реализована конвертация:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace TPO_lab5
{
    public class TwelveToTwo
    {
        public int number12;
        public int number10;
        public int number2;
        public Queue<int> twelves = new Queue<int>();
        public Stack<int> binar = new Stack<int>();
        public string sn
        {
            get
            {
                return sn;
            }
            set
            {
                byte tmp2 = 0;
                if (value == null) sn = sn;
                for (int i = 0; i < value.Length; i++)
                {
                    if (value[i].Equals('0') || value[i].Equals('1') || value[i].Equals('2') || value[i].Equals('3') || value[i].Equals('4') || value[i].Equals('5') || value[i].Equals('6') || value[i].Equals('7') || value[i].Equals('8') || value[i].Equals('9') || value[i].Equals('A') || value[i].Equals('B') || value[i].Equals('a') || value[i].Equals('b'))
                        tmp2 = 0;
                    else tmp2 = 1;
                }
                if (tmp2 != 1) sn = value;
                if (tmp2 == 1) throw new ArgumentException("Недопустимые символы!");
            }
        }
        public TwelveToTwo(string num)
        {
            sn = num;
        }
        public Stack<int> TwelveToTwos()
        {
            TwelveToTen();
            TenToTwo();
            return binar;
        }
        //Перевод из двенадцатеричной СС в десятичную
        public void TwelveToTen()
        {
            for (int i = 0; i < sn.Length; i++)
            {
                if (sn[i].Equals('0') || sn[i].Equals('1') || sn[i].Equals('2') || sn[i].Equals('3') || sn[i].Equals('4') || sn[i].Equals('5') || sn[i].Equals('6') || sn[i].Equals('7') || sn[i].Equals('8') || sn[i].Equals('9')) twelves.Enqueue((int)Char.GetNumericValue(sn[i]));
                if (sn[i].Equals('A')) twelves.Enqueue(10);
                if (sn[i].Equals('B')) twelves.Enqueue(11);
                if (sn[i].Equals('a')) twelves.Enqueue(10);
                if (sn[i].Equals('b')) twelves.Enqueue(11);
            }
            int[] twelvesmas = new int[twelves.Count];
            twelves.CopyTo(twelvesmas, 0);
            int temp = twelvesmas.Length - 1;
            for (int i = 0; i < twelvesmas.Length; i++)
            {
                number10 += twelvesmas[i] * (int)Math.Pow(12, temp);
                temp--;
            }
        }
        //Перевод из десятичной СС в двоичную
        public void TenToTwo()
        {
            int temp;
            while (number10 != 1)
            {
                temp = number10 % 2;
                number10 = number10 / 2;
                binar.Push(temp);
            }
            binar.Push(1);
            string st = string.Join("", binar);
        }
    }
}

Решение задачи: «Бесконечный цикл»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
 
namespace TPO_lab5
{
    public class TwelveToTwo
    {
        public Int32 Number12;
        public Int32 Number10;
        public Int32 Number2;
        public Queue<Int32> Twelves = new Queue<Int32>();
        public Stack<Int32> Binar = new Stack<Int32>();
 
        private String _sn;
 
        public String Sn
        {
            get
            {
                return _sn;
            }
            set
            {
                if (value == null)
                    return;
                foreach (var ch in value)
                {
                    if (!Char.IsDigit(ch) && !new[] { 'A', 'B', 'a', 'b' }.Any(_ => ch.Equals(_)))
                    {
                        throw new ArgumentException("Недопустимые символы!");
                    }
                }
                _sn = value;
            }
        }
        public TwelveToTwo(String num)
        {
            Sn = num;
        }
        public Stack<Int32> TwelveToTwos()
        {
            TwelveToTen();
            TenToTwo();
            return Binar;
        }
        //Перевод из двенадцатеричной СС в десятичную
        public void TwelveToTen()
        {
            for (var i = 0; i < Sn.Length; i++)
            {
                if (Char.IsDigit(Sn[i])) Twelves.Enqueue((Int32)Char.GetNumericValue(Sn[i]));
                if (Sn[i].Equals('A')) Twelves.Enqueue(10);
                if (Sn[i].Equals('B')) Twelves.Enqueue(11);
                if (Sn[i].Equals('a')) Twelves.Enqueue(10);
                if (Sn[i].Equals('b')) Twelves.Enqueue(11);
            }
            var twelvesmas = new Int32[Twelves.Count];
            Twelves.CopyTo(twelvesmas, 0);
            var temp = twelvesmas.Length - 1;
            for (var i = 0; i < twelvesmas.Length; i++)
            {
                Number10 += twelvesmas[i] * (Int32)Math.Pow(12, temp);
                temp--;
            }
        }
        //Перевод из десятичной СС в двоичную
        public void TenToTwo()
        {
            Int32 temp;
            while (Number10 != 1)
            {
                temp = Number10 % 2;
                Number10 = Number10 / 2;
                Binar.Push(temp);
            }
            Binar.Push(1);
            var st = String.Join("", Binar);
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4 из 5