Вы никогда не войдете в проверку условия while(n < 2)
во время выполнения предыдущей проверки условия или return n
. то есть. он зацикливается на while (n > 8)
, когда условие истинно, или return n
выполняется, когда условие не выполняется. Поэтому он никогда не выполнит вторую проверку условия while (n < 2)
.
Попробуйте реализовать логическое ИЛИ в одном цикле while, как показано ниже
int between_2_and_8(string prompt)
{
int n;
do
{
n = get_int("%s", prompt);
}
while (n < 3 || n > 8);// Loops around until n is either less than 2 or greater than 8
return n;
}
Редактировать : Исправления, сделанные при проверке состояния
Регулярная грамматика является или правом или леволинейный, тогда как контекстно-свободная грамматика является в основном любой комбинацией терминалов и нетерминалов. Следовательно Вы видите, что регулярная грамматика является подмножеством контекстно-свободной грамматики.
Так для палиндрома, например, имеет форму,
S->ABA
A->something
B->something
можно ясно видеть, что палиндромов нельзя выразить в регулярной грамматике, так как это должно быть или право или леволинейный, и как таковой не может иметь нетерминального на обеих сторонах.
, Так как регулярные грамматики ненеоднозначны, существует только одно порождающее правило для данного нетерминального, тогда как может быть больше чем один в случае контекстно-свободной грамматики.
Я думаю, о чем Вы хотите думать, различные насосные аннотации. Регулярный язык может быть распознан конечным автоматом. Контекстно-свободный язык требует стека, и контекстно-зависимый язык требует двух стеков (который эквивалентен высказыванию, что он требует полной Машины Тьюринга.)
Так, если мы думаем о насосная лемма для регулярных языков , что она говорит, по существу, то, что любой регулярный язык может быть разломан на три части, x , y, и z, где все экземпляры языка находятся в xy*z (где * повторение Kleene, т.е., 0 или больше копий y.) У Вас в основном есть одно "нетерминальное", которое может быть расширено.
Теперь, что относительно контекстно-свободных языков? Существует аналогичное насосная лемма для контекстно-свободных языков , который повреждает строки на языке в пять частей, uvxyz, и где все экземпляры языка находятся в UV <глоток> я глоток> xy <глоток> я глоток> z, поскольку я ≥ 0. Теперь, Вы имеете два "нетерминалы", которые могут копироваться или качаться, , пока у Вас есть тот же номер .