Бесконечный цикл - 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);
}
}
}