Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.007 c
1-93582
Airat Musin
2004-01-16 19:49
2004.01.29
RichEdit


6-93599
jinx
2003-11-25 13:14
2004.01.29
создание протокола


1-93424
Varg
2004-01-16 16:42
2004.01.29
обработка передаваемого приложению параметра


1-93446
qwerty2
2004-01-16 13:02
2004.01.29
Как захлопнуть DBLookupComboBox?


8-93584
Aleks_ua
2003-09-26 11:04
2004.01.29
PNG-формат под Делфи





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский