0 / 0 / 0
Регистрация: 05.04.2013
Сообщений: 15
|
||||||
1 | ||||||
Пожалуйста найдите ошибку в Конечном Автомате на С++06.04.2013, 00:11. Показов 1042. Ответов 19
Метки нет (Все метки)
Помогите найти ошибку в Конечном Автомате на С++ для: а*b*с*(d|f)+n*h* .
Может даже и не верна введена таблица для исходного выражения.
0
|
06.04.2013, 00:11 | |
Ответы с готовыми решениями:
19
Пожалуйста, найдите ошибку) Пожалуйста найдите ошибку Найдите пожалуйста ошибку Пожалуйста найдите ошибку |
0 / 0 / 0
Регистрация: 05.04.2013
Сообщений: 15
|
|
06.04.2013, 00:55 [ТС] | 3 |
По идее, я должен вводить комбинацию из букв a,b,c,(d или f),n,h , где a* - значит что может быть хоть сколько элементов 'a' или не быть,также для и для b*,c*,n*,h*. А (d|f)+ это какой нибудь из двух элементов d или f ,
в котором может быть хоть сколько элементов, но обязательность должен быть один элемент. К примеру выражение abcdnh - верно, acfn-верно и даже просто d или f - верно.
0
|
127 / 131 / 11
Регистрация: 25.12.2011
Сообщений: 443
|
|
06.04.2013, 07:05 | 5 |
Если убрать из таблицы состояние 0, то получается примерно такая картинка. Как это связанно с выражением "а*b*с*(d|f)+n*h*" сложно понять... Вроде бы никак не связанна, т.е. автомат не соответствует этому выражению.
1
|
127 / 131 / 11
Регистрация: 25.12.2011
Сообщений: 443
|
|
06.04.2013, 07:44 | 6 |
Вот вроде бы такой автомат должен быть:
1
|
0 / 0 / 0
Регистрация: 05.04.2013
Сообщений: 15
|
|
06.04.2013, 12:41 [ТС] | 7 |
kamre, Дело в том, что это еще нужно запрограммировать на С++ таблицой
Добавлено через 6 минут alsav22, Просто 'а' не будет верен, так как есть 'd' и 'f' , над которым стоит знак плюс, означает что 'd' или 'f' должен быть обязательно, верно будет ad или af. Также ответом является просто элемент 'd' или 'f'.
0
|
127 / 131 / 11
Регистрация: 25.12.2011
Сообщений: 443
|
|
06.04.2013, 13:22 | 8 |
Ну так подправьте свою таблицу исходя из картинки автомата. Это совсем не сложно: из состояния '1' при встрече буквы 'b' переход идет в состояние '2', значит на 1 строке (соотв. '1') во 2 столбце (соотв. 'b') стоит значение 2 (соотв. '2').
1
|
0 / 0 / 0
Регистрация: 05.04.2013
Сообщений: 15
|
|
06.04.2013, 15:55 [ТС] | 9 |
Извиняюсь, но до меня ваще не доходит, башка не шарит чета, можешь наброски хотя бы сделать
0
|
127 / 131 / 11
Регистрация: 25.12.2011
Сообщений: 443
|
||||||
06.04.2013, 22:25 | 10 | |||||
Набросок (переходы из состояния '1'):
2
|
0 / 0 / 0
Регистрация: 05.04.2013
Сообщений: 15
|
||||||||||||||||
07.04.2013, 02:34 [ТС] | 11 | |||||||||||||||
kamre, Спасибо, программа стала работать лучше но все же есть косяки.
А можно как нибудь тебе файл отправить чтоб ты подкорректировал программу. Добавлено через 15 минут Похоже ошибка в таблице. К примеру, когда я ввожу 'a' 'd' то пишет верно и переходит на 5 строчку, когда 'a' 'd' 'd' то неверно, переходит на ноль. Добавлено через 54 минуты
Добавлено через 13 секунд
0
|
127 / 131 / 11
Регистрация: 25.12.2011
Сообщений: 443
|
|
07.04.2013, 04:48 | 12 |
Непонятно зачем прибавлял единицу.
Почему должен вывести ошибку, если эта строка подходит под выражение а*b*с*(d|f)+n*h* ? И автомат распознает ее корректно:
0
|
0 / 0 / 0
Регистрация: 05.04.2013
Сообщений: 15
|
|
07.04.2013, 10:27 [ТС] | 13 |
d|f означает, что должен быть только один из этих элементов, либо d, либо f. И если автомат видит их сразу двоих, то обязан видеть ошибку
0
|
127 / 131 / 11
Регистрация: 25.12.2011
Сообщений: 443
|
|
07.04.2013, 12:21 | 14 |
0
|
0 / 0 / 0
Регистрация: 05.04.2013
Сообщений: 15
|
||||||
07.04.2013, 14:21 [ТС] | 15 | |||||
Ошибка в том, что должно быть только одна из этих букв d или f, так как символ ' | ' в выражении (d|f)+ означает или f или d. Если я введу выражение abcdfnh acdf acdf df , то все они будет не верны. Должно быть abcdnh или abcfnh, acf, acd, f , d . А где именно исправить это я не знаю. Нужно добавить в программе что если в выражении попадутся d и f, выдавала ошибку. Типо добавить
0
|
127 / 131 / 11
Регистрация: 25.12.2011
Сообщений: 443
|
|
07.04.2013, 21:25 | 16 |
А что означает + после выражения? Должно означать повтор выражения один раз или более. Поэтому d и f могут повторяться сколько угодно раз чередуясь в произвольном порядке.
1
|
0 / 0 / 0
Регистрация: 05.04.2013
Сообщений: 15
|
|
07.04.2013, 22:32 [ТС] | 17 |
+ означает, что элемент может повторяться хоть сколько раз, но обязательно должен быть один раз.
* означает, что элемент может повторяться хоть сколько раз, а может и не быть. d|f означает, либо первый элемент, либо второй,но не могут быть вместе. Поэтому и выражение a*b*c*(d|f)+n*h* одним из ответом является d или f.
0
|
127 / 131 / 11
Регистрация: 25.12.2011
Сообщений: 443
|
|
08.04.2013, 07:45 | 18 |
И вот эта конструкция "либо первый элемент, либо второй" после добавления к ней + может повторяться сколько угодно раз:
"либо d, либо f", "либо d, либо f", "либо d, либо f", .... В итоге любая комбинация из d и f будет подходить, неужели это не очевидно?
1
|
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|||||||||||||||||||||
08.04.2013, 09:12 | 19 | ||||||||||||||||||||
Сейчас проверил в Qt. Получается, что kamre прав.
Добавлено через 5 минут Вот такая конструкция выдаст true:
Или так:
Или так:
Добавлено через 3 минуты Отсюда уже и это истинно:
1
|
0 / 0 / 0
Регистрация: 05.04.2013
Сообщений: 15
|
|
08.04.2013, 17:09 [ТС] | 20 |
Все, спасибо вам ребята, програ работает отлично =)
0
|
08.04.2013, 17:09 | |
08.04.2013, 17:09 | |
Помогаю со студенческими работами здесь
20
найдите пожалуйста ошибку Найдите ошибку, пожалуйста найдите ошибку пожалуйста Найдите ошибку пожалуйста... Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |