Большая
просьба! Так как название моего сайта сложное и непонятное, добавьте,
пожалуйста, мой адрес в "Избранное"
- а то вдруг забудете! :)
Проект
Паркетчик:
Номер двенадцатый:
Теория:
Так, сегодня мы научим паркетчика проходить
лабиринт.
Основным в программе будет *подпрограмма* а саму *программу* я
даже могу написать:
Программа {
Делать пока ( не к ) {
Вызвать обход ;
};
}
.
Зададим ему что концом лабиринта считается красная клетка,
тоесть при попадании на нее паркетчик заканчивает работу.
Также, есть так называемое правило правой руки, с помощью него
можно пройти любой лабиринт, если все стены у него связаны, и
если конец находится у стены.
Правило заключается в том что мы проходим лабиринт всегда
держась правой рукой за стенку (для паркетчика просто идти вдоль
стены). По этому правилу мы его и научим проходить.
Практика.
*Подпрограмма* здесь будет тоже небольшой.
четыре *делать пока* в каждом из них шаг и проверка после него -
стоим ли мы на красной плитке.
Передвижения просты. так как держимся правой рукой, то при ходе
вправо - стена снизу и не справа, вниз - слева и не снизу, влево
- сверху и не слева, а про верх сами догадайтесь.
Ну вот и всё, осталось только сделать если с окончанием работы (при
попадании на красную плитку, оператор *стоп*).
Для особо умных: попробуйте разобраться с оператором *сообщить*,
и чтобы паркетчик в конце сообщал, что он прошел лабиринт.
Коды:
Обход:
Подпрограмма обход {
Делать пока ((не справа стена) и (снизу стена)) {
Шаг вправо;
Если (к) то {
Сообщить "Лабиринт пройден.";
Стоп;
}
Если ( не снизу стена ) то {
Шаг вниз;
Положить( з );
}
};
Делать пока ((не снизу стена) и (слева стена)) {
Шаг вниз;
Если (к) то {
Сообщить "Лабиринт пройден.";
Стоп;
}
Если ( з ) то {
Снять плитку;
}
Если ( не слева стена ) то {Шаг влево;}
};
Делать пока ((не слева стена) и (сверху стена )){
Шаг влево;
Если (к) то {
Сообщить "Лабиринт пройден.";
Стоп;
}
Если ( з ) то {
Снять плитку;
}
Если ( не сверху стена ) то {Шаг вверх;}
};
Делать пока ((не сверху стена) и (справа стена)) {
Шаг вверх;
Если (к) то {
Сообщить "Лабиринт пройден.";
Стоп;
}
Если ( з ) то {
Снять плитку;
}
Если ( не справа стена ) то {Шаг вправо;}
};
}
Программа {
Делать пока ( не к ) {
Вызвать обход ;
};
}