OberonCore
https://forum.oberoncore.ru/

Еще один робот (подсистема Sk)
https://forum.oberoncore.ru/viewtopic.php?f=7&t=858
Страница 2 из 6

Автор:  Info21 [ Суббота, 28 Январь, 2012 05:39 ]
Заголовок сообщения:  Re: Еще один робот

Info21 писал(а):
Плохо, что роботу уделяется непропорциональное внимание, в ущерб другим, не менее -- а, может, и более -- важным темам. Вот и всё.
Уточнение: речь о темах школьного предмета, а не этого форума :)

И ещё: речь (с моей стороны) не о том, чтобы робота запретить, а о том, чтобы
1) доработать его, в том числе с учетом того, что
2) не нужно забывать о других темах.

Автор:  Trurl [ Суббота, 28 Январь, 2012 11:06 ]
Заголовок сообщения:  Re: Еще один робот

Info21 писал(а):
Плохо, что роботу уделяется непропорциональное внимание, в ущерб другим, не менее -- а, может, и более -- важным темам.

Ну не знаю. По моим наблюдениям, если роботу и уделяется внимание, то только в ущерб Старкрафту.

Автор:  Info21 [ Суббота, 28 Январь, 2012 12:35 ]
Заголовок сообщения:  Re: Еще один робот

Trurl писал(а):
Info21 писал(а):
Плохо, что роботу уделяется непропорциональное внимание, в ущерб другим, не менее -- а, может, и более -- важным темам.

Ну не знаю. По моим наблюдениям, если роботу и уделяется внимание, то только в ущерб Старкрафту.
А!.. Мысль понятна.

Но всё-таки речь об обучающей стороне, а не обучаемой.

Автор:  Trurl [ Суббота, 28 Январь, 2012 14:56 ]
Заголовок сообщения:  Re: Еще один робот

Да я тоже об обучающей. :(

Автор:  ___ [ Понедельник, 06 Февраль, 2012 13:00 ]
Заголовок сообщения:  Re: Еще один робот

Код:
МОДУЛЬ  задание1;
   ПОДКЛЮЧИТЬ  Р:=SkRobotRu, Ч := i21eduЧерепашка, Ввод := i21eduВвод, Вывод := i21eduВывод;
   
НАЧАЛО
   ПОКА Р.СнизуСвободно() ДЕЛАТЬ
      Р.Вниз;
   КОНЕЦ;
КОНЕЦ задание1.


Если Р.Вниз поменять на Р.Вправо например (логическая ошибка), то робот до правой стены не доходит и не разбивается, а ББ зацикливается (ctrl+break не помогает). Начальная обстановка - поле 10*10 , по периметру стены.

Код:
MODULE AK_Rob1;
   IMPORT  Log := StdLog,  In := i21sysIn,  Math, R:=SkRobot;
   
BEGIN
   R.Start;
   WHILE R.DownClear() DO
      R.Right;
   END;
END AK_Rob1.


тут так же... в чем может быть причина?

Автор:  Info21 [ Понедельник, 06 Февраль, 2012 14:45 ]
Заголовок сообщения:  о визуализации движения робота

Вот какая мысль:

Если программа для робота -- обычная КП-программа,
но за кадром все команды отправляются в список, и пошаговый показ идёт после выполнения собственно программы.

Причём *без* обратной связи насчёт где именно оно в программе гробанулось :)
Штоб крепче думали :)

Автор:  Trurl [ Понедельник, 06 Февраль, 2012 15:25 ]
Заголовок сообщения:  Re: Еще один робот

___ писал(а):
тут так же... в чем может быть причина?

В SkRobot
Код:
PROCEDURE Error;
BEGIN
  Dialog.Beep;
  robo.err := 1;
  IF trap#NIL THEN trap ELSE (* HALT(20) *) END;
END Error;

вот этот комментарий вокруг HALT(20) надо бы убрать.
Но все равно получается нехорошо: ошибка вывалится внутри SkRobot.

Автор:  Илья Ермаков [ Понедельник, 06 Февраль, 2012 15:33 ]
Заголовок сообщения:  Re: о визуализации движения робота

Info21 писал(а):
но за кадром все команды отправляются в список, и пошаговый показ идёт после выполнения собственно программы.


В давешнем моём Lab так и делалось, там был такой механизм отложенного показа для исполнителей.

Сейчас я думаю, что и такой показ не нужен, достаточно начертить траекторию движения...

Автор:  ___ [ Понедельник, 06 Февраль, 2012 15:52 ]
Заголовок сообщения:  Re: Еще один робот

Trurl писал(а):
комментарий вокруг HALT(20) надо бы убрать.
Но все равно получается нехорошо: ошибка вывалится внутри SkRobot.

контрл+брэйк срабатывает. но почему робот всё же зацикливается, а не разбивается о правую стену?

Автор:  Trurl [ Вторник, 07 Февраль, 2012 07:21 ]
Заголовок сообщения:  Re: Еще один робот

Так разбивание же закомментировано.

Автор:  ___ [ Вторник, 07 Февраль, 2012 11:01 ]
Заголовок сообщения:  Re: Еще один робот

Trurl писал(а):
Так разбивание же закомментировано.


... не понятно%)

если мы просто идем влево, то робот перекрашивается и выполнение останавливается, он разбился. (даже если после влево добавить др команд то они не будут выполнены):
Вложение:
rob1.png
rob1.png [ 107.85 КБ | Просмотров: 9730 ]
rob1.png

если же эту команду поставить в цикл, то бб зацикливается, т.е. разбитие о стену не останавливает выполнение...если же прервать контрол брэйком, то будет видно, что робот разбился (красный). так и должно быть?...
Вложение:
rob2.png
rob2.png [ 114.62 КБ | Просмотров: 9730 ]
(rob2.png)

Автор:  Александр Ильин [ Вторник, 07 Февраль, 2012 11:05 ]
Заголовок сообщения:  Re: Еще один робот

___ писал(а):
Так и должно быть?
А с чего бы он останавливался? У вас же чётко написано: пока внизу свободно... Вот он и работает, пока свободно.
Вот если бы вы написали в цикле "пока внизу свободно и робот не разбился", был бы другой результат.

Альтернатива - траповать в процедуре R.Left, если робот разбился. То есть, отлавливать и пресекать попытку продолжать управление уже разбившимся роботом. (Для этого вам рекомендовали раскомментировать вызов HALT.)
Да, окно трапа будет показывать на модуль робота. Надо просто читать ниже, и вообще - уметь пользоваться окном трапа.

Автор:  ___ [ Вторник, 07 Февраль, 2012 11:12 ]
Заголовок сообщения:  Re: Еще один робот

Александр Ильин писал(а):
___ писал(а):
Так и должно быть?
А с чего бы он останавливался? У вас же чётко написано: пока внизу свободно... Вот он и работает, пока свободно.
Вот если бы вы написали в цикле "пока внизу свободно и робот не разбился", был бы другой результат.

разбивание о стену - это отказ (трап в терминологии бб), если трап происходит в цикле то он не выпадывает?)
если не ошибаюсь, то разбивание робота о стену должно прерывать программу полностью, в цикле бы произошло крушение или в линейной последовательности операторов...

хотя если эвм командует роботом, то она конечно может продолжать посылать команды разбившемуся))

Цитата:
"пока внизу свободно и робот не разбился"

а у робота есть запрос "робот разбился"?)

Цитата:
Надо просто читать ниже, и вообще - уметь пользоваться окном трапа.

не хотелось бы на роботе учить детей пользоваться трапом...

Автор:  ___ [ Вторник, 07 Февраль, 2012 11:19 ]
Заголовок сообщения:  Re: Еще один робот

Александр Ильин писал(а):
Альтернатива - траповать в процедуре R.Left, если робот разбился. То есть, отлавливать и пресекать попытку продолжать управление уже разбившимся роботом. (Для этого вам рекомендовали раскомментировать вызов HALT.)
Да, окно трапа будет показывать на модуль робота. Надо просто читать ниже, и вообще - уметь пользоваться окном трапа.


вызов халт я раскомментировал и модуль перекомпилировал, изменилось то, что теперь повисший бб реагирует на контрол+брэйк (и то далеко не всегда, в старых бб версии до сп3 контрол брэйк срабатывал вроде хорошо, а в школьной не всегда).

хотелось бы конечно без выброса трапа, просто остановка программы и робот покрасневший...

Автор:  Александр Ильин [ Вторник, 07 Февраль, 2012 11:41 ]
Заголовок сообщения:  Re: Еще один робот

___ писал(а):
вызов халт я раскомментировал и модуль перекомпилировал
Забыли перезапустить ББ.
___ писал(а):
не хотелось бы на роботе учить детей пользоваться трапом...
Ну, тогда учите писать заканчивающиеся циклы. : )
Если напишете WHILE TRUE DO END, тоже на робота будете пенять? : )
___ писал(а):
а у робота есть запрос "робот разбился"?)
IF R.robo.err = 0 THEN (* работаем *) ELSE (* робот разбился*) END.

Автор:  ___ [ Вторник, 07 Февраль, 2012 11:55 ]
Заголовок сообщения:  Re: Еще один робот

Александр Ильин писал(а):
Забыли перезапустить ББ.

не забыл.

Александр Ильин писал(а):
Если напишете WHILE TRUE DO END, тоже на робота будете пенять? : )

на робота пенять не буду)
WHILE TRUE DO END тоже зацикливает так, что контрл+брэйк не помогает( но это уже к роботу не относится.

Цитата:
IF R.robo.err = 0 THEN (* работаем *) ELSE (* робот разбился*) END.

угу. в любом цикле делать частью охраны R.robo.err = 0
оч забавный методический приём)

Автор:  Евгений Темиргалеев [ Вторник, 07 Февраль, 2012 12:05 ]
Заголовок сообщения:  Re: Еще один робот

___ писал(а):
Цитата:
IF R.robo.err = 0 THEN (* работаем *) ELSE (* робот разбился*) END.

угу. в любом цикле делать частью охраны R.robo.err = 0
оч забавный методический приём)
Робот не обязательно разбился. Может внутри что-то поломалось. Он на команду не так среагирует и прихлопнет испытателя.

Пример обратной связи. :)

Автор:  ___ [ Вторник, 07 Февраль, 2012 12:07 ]
Заголовок сообщения:  Re: Еще один робот

Александр Ильин писал(а):
___ писал(а):
Так и должно быть?
А с чего бы он останавливался? У вас же чётко написано: пока внизу свободно... Вот он и работает, пока свободно.
Вот если бы вы написали в цикле "пока внизу свободно и робот не разбился", был бы другой результат.


Александр Ильин и Евгений Темиргалеев
хотите убедить, что так и должно быть?)

в кумире:
Код:
использовать Робот
алг
нач
нц пока снизу свободно
влево
кц
кон

выполнение останавливается

в SkRobot (используя скрипт)
Код:
SkScript.DoThis
   начало
      пока СправаСвободно выполнять
         Влево
      конец
   конец

выполнение останавливается

так что похоже это все-таки не нормально...

Автор:  Info21 [ Вторник, 07 Февраль, 2012 12:14 ]
Заголовок сообщения:  Re: Еще один робот

Вот пример того, как посознание профи отталкивает проблемы, возникающие в классе, как непроблемы.

Когда с десятком галдящих бойцов начинаешь бегать и с какой-нибудь хренью полчаса бороться, сразу и понимаешь...

Автор:  Александр Ильин [ Вторник, 07 Февраль, 2012 12:42 ]
Заголовок сообщения:  Re: Еще один робот

___ писал(а):
Александр Ильин писал(а):
Забыли перезапустить ББ.
не забыл.
У меня работает:
Вложение:
Trap.png
Trap.png [ 69.58 КБ | Просмотров: 9705 ]
___ писал(а):
WHILE TRUE DO END тоже зацикливает так, что контрл+брэйк не помогает( но это уже к роботу не относится.
Покажите ваш модуль Kernel.
___ писал(а):
угу. в любом цикле делать частью охраны R.robo.err = 0
оч забавный методический приём)
Не только забавный, но и правильный.
Можете сделать процедуру RobotWorks(): BOOLEAN, если сравнение с нулём затрудняет понимание.
___ писал(а):
выполнение останавливается
так что похоже это все-таки не нормально...
Когда HALT заработает, и у вас будет останавливаться.
Для сравнения попробуйте в Кумире убрать вызов "влево". Остановится?
Info21 писал(а):
Вот пример того, как подсознание профи отталкивает проблемы, возникающие в классе, как непроблемы.
Попрошу не додумывать.
Есть интерфейсная проблема (работает не так, как ожидается; показывает лишние окна трапов), и есть алгоритмическая проблема (необходимо учитывать все условия остановки цикла; необходимо писать так, чтобы работало как надо).

Страница 2 из 6 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/