Форум: "Основная";
Текущий архив: 2004.01.29;
Скачать: [xml.tar.bz2];
ВнизАлгоритм перевода из УНАРНОЙ в ДВОИЧНУЮ систему? Найти похожие ветки
← →
Rradion (2004-01-15 18:51) [0]Если у кого есть, скиньте плиз алгоритм перевода чисел из унарной системы счислений ( пример ||| = 3 ) в двоичную ( 0011 = 3 ). В смысле не в делфи, а на словах.
Заранее Спасибо!
← →
Digitman (2004-01-15 18:56) [1]чтой-то вдруг 0011-репрезентация стала унарной ? всю жизнь двоичной была
← →
Digitman (2004-01-15 18:57) [2]
> В смысле не в делфи, а на словах.
замечательное определение)
← →
Юрий Зотов (2004-01-15 19:12) [3]То есть - как сосчитать количество палочек в строке, состоящей из этих самых палочек? Это имеется в виду?
← →
Agent13 (2004-01-15 19:14) [4]А что, серьёзно - набор палочек разывается унарной системой счисления? Во блин, названий напридумывали!
← →
Rradion (2004-01-15 19:52) [5]>>А что, серьёзно - набор палочек разывается унарной системой счисления? Во блин, названий напридумывали!
Ну да, унарная система это палочки ( или единицы ) - Т.е. три палочки "|||" или три единицы "111" в унарной системе это "3" в десятеричной.
А система где есть "0" и "1" это двоичная или бинарная. В ней, могу ошибиться, десятеричная "3" или унарная "111" это "0011".
Мне задали написать прогу для ( вынимание ! ) Машины Тюринга. Ну, точнее, ее виртуального эмитатора. Которая бы переводила эти палочки ( число в унарной системе ) в нолики и единицы ( в двоичную систему ).
К примеру "|||=0011"
Соответственно надо алгоритм, опять же на словах :) , как образуются эти нули и единицы в двоичной системе.
Хотя бы табличку, типа
( в десятеричной / в двоичной )
1 = 0001
2 = ...
3 = 0011
4 = ...
5 = ...
и т.д.
Ой, надеюсь понятно написал :)
Спасибо!
← →
Agent13 (2004-01-15 19:55) [6]Неужели двоичной системы не знаешь? Всё легко:
1=1
2=10
3=11
4=100
5=101
... Уловил?
← →
Dimman1 (2004-01-15 20:02) [7]аа, машина Тьюринга, это где головка по ленте ползает туда-обратно :)))
← →
DrPass (2004-01-15 20:03) [8]А слабо в унарной системе представить 2 в 64-й степени?
← →
Andy BitOff (2004-01-15 20:05) [9]Я чего-то не допонял. Десять палочек это 10 десятичное?
← →
Rradion (2004-01-15 20:06) [10]>>... Уловил?
Неа... а 6,7,8,9 как?
А и там, броди, все с четермя знаками было... типа если 1=0001 а 3=0011, то 13 = 00010011 ?
А то, если 1=1 и 2=10, то 21 = 101 ... и как перерь понять, это 21 или 5? Или это я уже совсем позапутался?
Спасибо!
← →
Юрий Зотов (2004-01-15 20:12) [11]> Rradion
Вот ответ на Ваш вопрос ТОЧНО так, как он поставлен: длина строки.
← →
Agent13 (2004-01-15 20:13) [12]Да нет, вот смотри: в десятичной системе десять цифр 0..9, после 9 идёт 10. В двоичной только две: 0 и 1. После 1 больше цифр нет и идёт 10. После 11 идёт 100 (как в десятичной после 99) и т.д. А то что спереди нули, например 0011, так их можно писать сколько угодно, ведь 0058 и 58 это то же самое, направда ли?
← →
Andy BitOff (2004-01-15 20:15) [13]1=1
2=10
3=11
Вот это запомни, после ставь следующий разряд.
4=100
и повторяй
5=101
6=110
7=111
Ставь след. разряд и повторяй
8=1000
9=1001
10=1010
11=1011
12=1100
13=1101
и т.д.
← →
Dimman1 (2004-01-15 20:16) [14]А я в свое время писал прогу (на дельфи конечно) тоже эмулирующую машину тьюринга, задание было таким:
Даны два массива по 6 пятиразрядных двоичных чисел со знаком (в двоичной системе).
Получить массив M3=M2-M1 - из элементов второго массива вычесть соответствующие элементы первого массива. Найти сумму элементов массива M3 и представить ее в восьмеричной системе счисления.
Если надо, пиши, замылю.
← →
Andy BitOff (2004-01-15 20:32) [15]//А и там, броди, все с четермя знаками было... типа если 1=0001 а 3=0011, то 13 = 00010011 ?
Дополни каждое нулями слева и все.
← →
Германн (2004-01-16 01:09) [16]А может автору нужен перевод в двоично-десятичную систему? Тогда точно - 13 = 00010011 .
← →
ALEIIIKA (2004-01-16 06:54) [17]Грамотеи [10],[16] число 13 в двоичной системе - 1101 :(
Перевод из одной системы счисления в другую осуществляеться таким образом:
13 (10-ная) -> необходимо в 2-ную:
13 / 2 = 6 (1)
6 / 2 = 3 (0)
3 / 2 = 1 (1)
1 = (1)
Искомое число (снизу вверх): 1101
Теперь объясняю (этот алгоритм для любого перевода из одной системы счисления в другую):
1. Число 13 делишь на 2 (искомая система двоичная поэтому 2)
2. Остаток запоминаешь, а частное делишь еще раз.
3. Опять запоминаешь остаток, а частное делишь.
4. Повторяешь до тех пор пока частное не станет меньше искомой системы счисления.
5. Затем в обратном порядке записываешь:
- последнее частное;
- предпоследний остаток;
...
- первый остаток.
Ля ву пле!
← →
Dimman1 (2004-01-16 08:20) [18]ALEIIIKA, в [16] как раз все правильно написано, 13 = 00010011 в двоично-десятичной. А ты вообще тему ветки читал?
← →
Alexander666 (2004-01-16 09:09) [19]Гмм, а нельзя ли унарные палочки в десятеричную, а потом в двоичную системы? Или прям сразу надо?
← →
Alexander666 (2004-01-16 09:16) [20]А, впрочем, зная количество палочек... тогда правда, нужно из десятичной в двоичную переводить.
← →
Fay (2004-01-16 09:38) [21]Бред какой-то...
← →
Юрий Зотов (2004-01-16 12:39) [22]> Продолжающим мучительно искать решение
ЧИСЛА не бывают НИ В КАКОЙ системе счисления. В системе счисления бывают только СТРОКИ, представляющие эти числа.
Поэтому ТОЧНЫЙ ответ на вопрос дан в [11]. К нему лишь можно добавить, что если УЖЕ полученное значение (то есть, количество палочек) ДАЛЕЕ требуется преобразовать в СТРОКУ (например, чтобы показать ее человеку), то нужно написать (или взять готовую) функцию (аналог IntToHex). Но это уже совершенно ДРУГАЯ задача, не имеющая к сабжу абсолютно никакого отношения.
← →
nikkie (2004-01-16 16:17) [23]я так понял, что автор смутное представление имеет о двоичной системе. а ему задали программу для машину тьюринга написать. сочуйствую...
← →
AKul (2004-01-16 16:47) [24]Согласен с:
> Юрий Зотов © (16.01.04 12:39) [22]
>
> ЧИСЛА не бывают НИ В КАКОЙ системе счисления. В системе
> счисления бывают только СТРОКИ, представляющие эти числа.
Но насколько я понял, автору надо реализовать алгоритм на машине Тьюринга, т.е. что-то типа такого:
На входе у него СТРОКА (из 1), и на выходе надо получить СТРОКУ (из 0 и 1). Преобразовывать СТРОКА -> значение (ячейка памяти) здесь нельзя.
Алгоритм будет приблизительно такой:
Сначала надо организовать алгоритм увеличения числа (опять же представленного в виде СТРОКИ в двоичной системе счисления) на единицу, т.е.:
начальное значени "00000000"
при следующем вызове "00000001"
при следующем "00000010"
при следующем "00000011"
и т.д.
Более подробно я не описываю, думаю автор сможет сложить 0+1 или выполнить перенос при 1+1.
Теперь:
1. Начальное значение:
111111________________00000000
^ - головка здесь
2. Если под головкой 1, то записать пробел и идти на алгоритм увеличения выходного значения на 1.
11111_________________00000001
^ - головка здесь
3. Двигаться влево пока под головкой не пробел.
11111_________________00000001
^ - головка здесь
4. Двигаться влево пока под головкой пробел или не достигли крайнего левого положения, если достигли - СТОП.
11111_________________00000001
^ - головка здесь
4. Повторяем с пункта 2:
1111__________________00000010
111___________________00000011
11____________________00000100
1_____________________00000101
______________________00000101
P.S. Если что забыл, то извиняюсь...
← →
AKul (2004-01-16 16:53) [25]Sorry, При передаче сообщения головка (машины Тьюринга) во всех строках съехала влево за счет символов не одинаковой ширины (пробел очень узкий) - пусть автор скопирует в текстовый редактор и отформатирует текст с шрифтом с постоянной шириной символов (Courier).
← →
Тьюринг (2004-01-16 19:22) [26]Вы мою машину не трогайте, и так еле работает... программисты...
← →
Rradion (2004-01-17 13:59) [27]УРА! Сделал, работает ( см. картинку ) ! Огромное всем Шпасба!
Если кому надо, закачаю и програмку и саму машину!
http://www.elena-antimonova.com/BRT/mtu1r.gif
Удачи!
← →
Cosinus (2004-01-17 14:17) [28]Надо.
cosinus@bk.ru
← →
Rradion (2004-01-17 14:27) [29]Ок, сам эмитатор Алго2000
http://www.elena-antimonova.com/BRT/Algo2000.rar
И данная прога
http://www.elena-antimonova.com/BRT/kursovaya.tur
Удачи!
← →
Наиль (2004-01-17 23:39) [30]это функция на visual basic, если сооброзишь переделай её на delphi. она переводит десятичное число в двоичное.
вызов функции:
Private Sub Command2_Click()
Dim st As String
Dim t As Integer
st = Text3.Text
t = Int(st)
st = Str(mama(t))
Text4.Text = st
End Sub
---------------------------------------
Function mama(mam1 As Variant) As Long
Dim x, sex As Integer
Dim y As Variant
Dim sum, sumx, matrix As String
x = mam1
Do
sex = x
x = x \ 2
y = sex Mod 2
sum = sum + Str(y)
Loop Until x < 2
If x < 2 Then
sumx = sum + Str(x)
For i = Len(sumx) To 1 Step -1 "len()-длина строки
matrix = matrix + Mid(sumx, i, 1)
Next i
mama = Val(matrix)
End If
End Function
На счёт палочек!!! Лучше в одной процедуре напиши эту функцию и цикл for. Например:
если ввели пять т. е. ||||| то
sum:=0;
for i:=1 to length(edit1.text) do
sum:=sum+1;
Далее переменную sum со значением пять присвой переменной t
и вызови функцию.
← →
Наиль (2004-01-17 23:51) [31]это функция на visual basic, если сооброзишь переделай её на delphi. она переводит десятичное число в двоичное.
вызов функции:
Private Sub Command2_Click()
Dim st As String
Dim t As Integer
st = Text3.Text
t = Int(st)
st = Str(mama(t))
Text4.Text = st
End Sub
---------------------------------------
Function mama(mam1 As Variant) As Long
Dim x, sex As Integer
Dim y As Variant
Dim sum, sumx, matrix As String
x = mam1
Do
sex = x
x = x \ 2
y = sex Mod 2
sum = sum + Str(y)
Loop Until x < 2
If x < 2 Then
sumx = sum + Str(x)
For i = Len(sumx) To 1 Step -1 "len()-длина строки
matrix = matrix + Mid(sumx, i, 1)
Next i
mama = Val(matrix)
End If
End Function
На счёт палочек!!! Лучше в одной процедуре напиши эту функцию и цикл for. Например:
если ввели пять т. е. ||||| то
sum:=0;
for i:=1 to length(edit1.text) do
sum:=sum+1;
Далее переменную sum со значением пять присвой переменной t
и вызови функцию.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.01.29;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.008 c