Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.11.2012, 14:21   #1
Sna1L
Форумчанин
 
Аватар для Sna1L
 
Регистрация: 15.03.2011
Сообщений: 272
По умолчанию Машина Тьюринга(реализация(корявенькая))

Всем привет! Давно не виделись)
Немного предыстории:
Недавно мне посчастливилось(хотя я так не считаю) побывать на занятиях в ДВФУ по теме "Машина Тьюринга и что-то-там-еще".
Впечатления так себе, но сама машина мне понравилась. Пожалуй, её можно было бы преподавать в школе на информатике (вообще-то, я считаю, что это тупо, но учить C#, J#, <и куча языков> по книге Угриновича(да-да, "куча языков" находится в одном учебнике) еще тупее).

Единственная проблема: машина-то абстрактная
На занятиях ребята стояли у доски и расписывали "код" и "пошаговую отладку" по минут 20. Это не круто(имхо).

Вспомнил я про нее сегодня, т.к. наткнулся на статью на хабре, что в июне было столетие Тьюринга.
И вот, в порыве вечерней скуки я набросал реализацию машины(как МТ работает, я нашел в своей тетрадке).
Текущие проблемы:
1) Алфавит состоит из нуля и единицы, но я сделал класс достаточно гибким, так что это скорее недостаток класса самой программы, а не машины, реализовать поддержку другого алфавита будет не так сложно.
2) Ввод происходит с клавиатуры. Опять же недостаток main'а
3) Ввод происходит практически "на честном слове". Т.е. проверок входных данных там почти нет.
4) Программировал её я)))) Поэтому что-то по-любому работает неправильно, несмотря на получасовую отладку.

На основе вышенаписанного, делаю заявление:
Представляю вам реализацию машины Тьюринга! Она почти работает, просто нужно с ней повозиться

Да, кстати, программа не использует графику.

Вот так выглядит тестовый запуск:

Код:
[sna1l@Satellite ~]$ java -jar turing.jar
Введите начальные значения на ленте(через пробел).
Примечание: слева и справа от Вашего куска ленты будут нули. Курсор будет стоять в начале Вашей ленты.
#: 1 1 1 1 0 1 1
Введите кол-во состояний, нужных Вашей программе(без учета нулевого): 2
А теперь опишите программу.
Запишите правила в виде A B -> A B {L,R,S}
Например: 1 1 -> 1 0 S
Для выхода введите s
#: 1 1 -> 0 2 R
Правило добавлено.
#: 1 2 -> 1 2 R
Правило добавлено.
#: 0 2 -> 1 0 S
Правило добавлено.
#: s
|1|1|1|1|0|1|1|
 ^
Машина готова. На каждом шагу жмите Enter, для выхода наберите stop

|1|1|1|0|1|1|
 ^

|1|1|1|0|1|1|
   ^

|1|1|1|0|1|1|
     ^

|1|1|1|0|1|1|
       ^

|1|1|1|1|1|1|
       ^
Машина закончила работу
Пояснение:
эту программу нам задавали на дом на первом занятии. Реализация функции f(a,b) = a+b.
Числа представляются на ленте в виде кучи единиц через один нуль(в этом случае 4 и 2).
Думаю, дальше пояснять нет смысла, т.к. я плохой рассказчик, да и пост выйдет слишком большим

В архиве jar и проект эклипс
Вложения
Тип файла: zip TuringMachine.zip (13.2 Кб, 165 просмотров)

Последний раз редактировалось Sna1L; 22.11.2012 в 14:25.
Sna1L вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Машина Тьюринга Electroflower C++ Builder 1 13.09.2012 16:18
Машина Тьюринга и алгоритмы Маркова. Машина Поста. MarkForMath Помощь студентам 0 27.04.2011 21:55
машина тьюринга SchwarzeWolfin Помощь студентам 1 30.11.2010 08:48
Машина Тьюринга ДваДваВо7 Помощь студентам 0 25.10.2010 16:43
Машина Тьюринга ДваДваВо7 Помощь студентам 1 20.10.2010 23:54