Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 [2] 3  Все   Вниз
  Печать  
Автор Тема: Построение конечного автомата  (Прочитано 80926 раз)
0 Пользователей и 7 Гостей смотрят эту тему.
Dr.Yevhenius
Опытный

ua
Offline Offline
Пол: Мужской

« Ответ #30 : 21-11-2008 19:32 » 

Для S0 не предусмотрены состояния "," и ".".
Для состояния S3 будет забрано только одну цифру, а все остальные проигнорируются.

И вообще не понятно, что будет делать данный автомат - как будут изменятся переменные: куда считываешь число до запятой и когда прекращаешь это делать и т. д. ... Это всё нужно показывать, мы на СР вообще так делали.

Кстати, должен быть ещё один тип сигнала - "Other" - все остальные символы.
« Последнее редактирование: 15-12-2008 18:06 от Алексей1153++ » Записан
Ludmila
Участник

ru
Offline Offline
Пол: Женский

« Ответ #31 : 21-11-2008 19:41 » 

да до всех символов дойти надо мне хотяб так пока
Записан
Dr.Yevhenius
Опытный

ua
Offline Offline
Пол: Мужской

« Ответ #32 : 21-11-2008 19:46 » 

да до всех символов дойти надо мне хотяб так пока
Все символы как раз обрабатывать и не надо, а игнорировать, это просто надо предусмотреть для каждого состояния и не более.
Записан
Ludmila
Участник

ru
Offline Offline
Пол: Женский

« Ответ #33 : 21-11-2008 19:59 » 

как вообще тогда перевести  дробное двоичное число в десятичное? Обычным способом? Но чего получится?
Записан
Dr.Yevhenius
Опытный

ua
Offline Offline
Пол: Мужской

« Ответ #34 : 21-11-2008 20:05 » 

Возьмём для начала состояние S0 (начальное). Если сигнал "." - прекратить работу автомата (перейти, например, к состоянию 1); если "0" - отсекаем ноль; если "1" - то в соответствии - число перед запятой или после - переходим к состоянию 2 или 3; если "Other" (остальные символы) - нечего не делать; если "," - перейти, например, к состоянию 3... И так для каждого состояния описываешь все варианты. А при выходе обработать данные.

Кстати, как добавить рисунок в сообщение? А, всё, нашёл.
« Последнее редактирование: 21-11-2008 20:10 от Inkognito » Записан
Ludmila
Участник

ru
Offline Offline
Пол: Женский

« Ответ #35 : 21-11-2008 20:09 » 

а как тогда на выходе обработать данные?
Записан
Dr.Yevhenius
Опытный

ua
Offline Offline
Пол: Мужской

« Ответ #36 : 21-11-2008 20:13 » 

Я сделал бы функцию превращения двоичного числа в десятичное - 1111 в 15.
Записан
Ludmila
Участник

ru
Offline Offline
Пол: Женский

« Ответ #37 : 21-11-2008 20:22 » 

?а если число 10,1 то как по обычному 10,1=1*2^1+0*2^0+1*2^(-1) так?
Записан
Ludmila
Участник

ru
Offline Offline
Пол: Женский

« Ответ #38 : 21-11-2008 20:25 » 

как? какая функция?
Записан
Dr.Yevhenius
Опытный

ua
Offline Offline
Пол: Мужской

« Ответ #39 : 21-11-2008 20:26 » 

Хотя 10,1 вероятней всего неверный способ, но я сделал бы так: 10 = 2, 1 = 1, а тогда результат равен 2,1.
Записан
Ludmila
Участник

ru
Offline Offline
Пол: Женский

« Ответ #40 : 21-11-2008 20:28 » 

это как так? на по всем правилам перевода 10,1=2,5?
Записан
Dr.Yevhenius
Опытный

ua
Offline Offline
Пол: Мужской

« Ответ #41 : 21-11-2008 20:35 » 

как? какая функция?
Такой пример: пользователь вводит свою строку, она же - строка сигналов. В цикле ты поочереди считываешь сигнал. Когда доходишь до сигнала "." - ты должна прервать цикл (остановить автомат). Но перед тем как закончить работу цикла, ты преобразовываешь двоичное число в десятичное с помощью функции, которую описываешь в коде программы отдельно.

Я не понимаю вопроса... Не понял
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #42 : 21-11-2008 20:35 » 

1*21+0*20+1*2-1 = 2 + 0 + 0.5 = 2.5  , всё верно девушка говорит
Записан

Ludmila
Участник

ru
Offline Offline
Пол: Женский

« Ответ #43 : 21-11-2008 20:38 » 

Хотя 10,1 вероятней всего неверный способ, но я сделал бы так: 10 = 2, 1 = 1, а тогда результат равен 2,1.
да да Алексей1153 правильно говорит как у тебя 2,1 получилась?
Записан
Dr.Yevhenius
Опытный

ua
Offline Offline
Пол: Мужской

« Ответ #44 : 21-11-2008 20:39 » 

1*21+0*20+1*2-1 = 2 + 0 + 0.5 = 2.5  , всё верно девушка говорит
Вообще-то да, согласен, не понял, извините...
Записан
Ludmila
Участник

ru
Offline Offline
Пол: Женский

« Ответ #45 : 21-11-2008 20:42 » 

ну так  кто знает как на выходе обработать данные?Не понял
Записан
Dr.Yevhenius
Опытный

ua
Offline Offline
Пол: Мужской

« Ответ #46 : 21-11-2008 20:45 » 

Хотя с другой стороны вот сравнения:
1) моим способом:
10,1 - 2,1
10,10 - 2,2
10,11 - 2,3
2) вашим способом:
10,1 - 2,5
10,10 - 2,5
10,11 - 2,75.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #47 : 21-11-2008 20:46 » 

наверное, надо накапливать результат в переменной
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #48 : 21-11-2008 20:47 » 

Хотя с другой стороны вот сравнения:
1) моим способом:
10,1 - 2,1
10,10 - 2,2
10,11 - 2,3
2) вашим способом:
10,1 - 2,5
10,10 - 2,5
10,11 - 2,75.

2 - верно )
Записан

Ludmila
Участник

ru
Offline Offline
Пол: Женский

« Ответ #49 : 21-11-2008 20:48 » 

( я тоже за (2)
Записан
Dr.Yevhenius
Опытный

ua
Offline Offline
Пол: Мужской

« Ответ #50 : 21-11-2008 20:54 » 

Я в Инете нашёл вот такое представление числа с запятой:
aaaabbbb,
и тогда получаем число через экспоненту и мантиссу в виде:
aaaa*2^bbbb.
« Последнее редактирование: 21-11-2008 21:05 от Inkognito » Записан
Ludmila
Участник

ru
Offline Offline
Пол: Женский

« Ответ #51 : 21-11-2008 20:55 » 

вот предыдущий мой пример:
                   1001
w=1;<-------| | | |
w*2=2;<-----| | |
w*2=4;<-------| |
w*2+1=9.<------|
Это ж вроде верно
« Последнее редактирование: 21-11-2008 21:00 от Ludmila » Записан
Dr.Yevhenius
Опытный

ua
Offline Offline
Пол: Мужской

« Ответ #52 : 21-11-2008 20:59 » 

10012 = 910 это верно
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #53 : 21-11-2008 20:59 » 

Inkognito, это вообще то не метод, а правило
Записан

Ludmila
Участник

ru
Offline Offline
Пол: Женский

« Ответ #54 : 21-11-2008 21:01 » 

а вот дробную часть далше как превратить
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #55 : 21-11-2008 21:02 » 

первое число после запятой умножается на основание в -1 степени, второе - в -2 степени и так далее
Записан

Ludmila
Участник

ru
Offline Offline
Пол: Женский

« Ответ #56 : 21-11-2008 21:11 » 

стоп стоп стоп вот выходы:
b1=левые нули "выбывают" до тех пор пока входной символ небует равен x=1
b2=если x0 = 1, то w: = 1
b3=если х1 = 0, то w*2
b4=если x1 = 1, то w*2+1
b5=если  "," Не понялНе понялНе понял?
b6=если x2 = 0 Не понялНе понялНе понялНе понялНе понялНе понялНе понял?
b7= если х2= 1 Не понялНе понялНе понялНе понялНе понялНе понялНе понял?
Записан
Dr.Yevhenius
Опытный

ua
Offline Offline
Пол: Мужской

« Ответ #57 : 21-11-2008 21:14 » 

Вот мой вариант графа:

* Avtomat2.jpg (59.31 Кб - загружено 1839 раз.)
« Последнее редактирование: 15-12-2008 18:10 от Алексей1153++ » Записан
Ludmila
Участник

ru
Offline Offline
Пол: Женский

« Ответ #58 : 21-11-2008 21:19 » 

0 1 2 3 - это состояния значит?
Записан
Dr.Yevhenius
Опытный

ua
Offline Offline
Пол: Мужской

« Ответ #59 : 21-11-2008 21:21 » 

Да, состояния
Записан
Страниц: 1 [2] 3  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines