Доработка интерфейса типа вопроса CppExpression

Issue #433 resolved
Oleg Sychev repo owner created an issue

Создано для выполнения курсового проекта по "Эволюции и сопровождению".

Первые проблемы: а) наладить сообщения студенту если он использовал неподдерживаемые операции, возможно также вывод на экран студенту во время работы какие операции использовать нельзя б)проверить и наладить вывод сообщений студенту (преподавателю проверить, но должно работать) если есть синтаксические или лексические ошибки

В дальнейшем может пополняться (с соответствующим увеличением баллов).

Comments (21)

  1. Oleg Sychev reporter

    Потестировал существующий код. Сразу бросаются в глаза несколько проблем.

    1. Ошибка на отсутствие комментариев для переменной выдается, но никакой справки с описанием этого формата комментариев нет около поля. Как учитель должен догадаться о формате - непонятно. Сделайте везде справку, особенно для переменных.

    2. Если при вводе выражения в качестве ответа поставить точку с запятой, получишь сообщение что не поддерживается операция stmt_list. Во-первых, это не операция вовсе. Во-вторых, конкретно одну точку с запятой наверное можно разрешить. А вот если там введено что-то большее, чем выражение, то и сообщение должно выдаваться соответствующее - что введено не выражение. А не что операция "цикл" не поддерживается...

  2. Phan Tuan Anh

    Доработан интерфейс для преподавателя: * Добавил икон для типа вопроса. * Подсказка в заголовке "Adding a C++ expression question". * Подсказка в заголовке "Declarations of variables". * Сообщение про ошибок объявления переменных. * Сообщение про ошибок выражении ответа.

    Доработан интерфейс для студента: * предупреждение рекомендуемых операциях.

    Testing instructions для преподавателя: 1) Октрыть желательный курс 2) Окрыть "Question bank" 3) Нажать на кноку "Create a new question ..." 4) Выбрать тип вопроса Cppexpression и нажать кноку "Add" 5) Нажать на знак вопроса рядом заголовка "Adding a C++ expression question", должно показать общое описание типа вопроса 6) Нажать на знак вопроса рядом заголовка "Declarations of variables", должно показать правила задавать объявления переменных 7) Нажать на кнопку "Save changes", если есть ошибки ввода, должно показать сообщия соответственно рядом поля ввода. Иначе, успешно добавил вопроса.

    Testing instructions для студента: 1) Открыть тест. 2) Для каждого вопроса типа cppexpression, ниже поля ввода ответа, должно видно предупреждение рекомендуемых операциях.

  3. Phan Tuan Anh

    Не знаю что произошло не так с форматом комментариев. Я никак не могу исправил.

  4. Oleg Sychev reporter

    Посмотрите на превью вопросов. Во-первых, не вижу списка запрещенных операций - сообщение об их запрещении есть, а операций - нет. Во-вторых, при использовании &= лезет куча ошибок что строки с сообщением о ней нет.

  5. Oleg Sychev reporter

    Запятая воспринимается как нормальная операция, но перестановка элементов запятой приводит к ошибкам, даже если они не влияют друг на друга.

  6. Dmitry Mamontov

    Сейчас на edu.vstu.org плагин кидает warning

    Invalid get_string() identifier: 'program' or component 'qtype_cppexpression'. Perhaps you are missing $string['program'] = ''; in /home/www/server1biz/data/www/edu.vstu.org/question/type/cppexpression/lang/en/qtype_cppexpression.php?

    Вообще, честно говоря, я не в курсе логики типа вопроса, но мне не вполне понятно, почему нельзя нормализовать int a = b + (v + 3); ?

  7. Dmitry Mamontov

    Также все равно логика вопроса непонятна. Почему можно ввести x=a++,b++, но вот x=(a++) + (b++) уже требует того, что должны быть объявлены типы переменных?

  8. Dmitry Mamontov

    Думаю, что чтобы исправить такую ситуацию, надо к модулю добавить какие-нибудь инструкции по тому, как должен быть описан ответ, какую-нибудь его структуру.

  9. Phan Tuan Anh
    1. Исправил отсутствие строки в файл. Объявление int a = b + (v + 3); считается statement, а не expression.
    2. При создании вопроса нужно заполнит необходимые полей “Question name”, “Question text”, “Declarations of variables”, ответы на воросы… Для x=(a++) + (b++) в “Declarations of variables” нужно int x,a,b;
  10. Dmitry Mamontov

    А у нас замена инкремента на +1 не поддерживается? Вот я ввел например x=a++ + b++, а студентом ввел x = a + 1 + b + 1 и x = (a + 1) + (b + 1). Оба варианта дали partially correct, в то время как (по идее), должны давать правильный ответ, т. к. все является int'ами . Здесь по идее, есть различное поведение при переполнении, но оно вряд ли даст разные результаты.

  11. Phan Tuan Anh

    Постфикстный инкремент a++ заменяется на a = a + 1. x=a++ + b++ эквивален x=a+b, a +=1, b+=1 так как значение переменых а и b поменяется. Если x = ++a + ++b то x=a+b+2, a+=1,b+=1 или a+=1, b+=1, x=a + b - 2 еще не поддерживается.

  12. Dmitry Mamontov

    Коллеги, эти правила замены где-то надо при выкладывании плагина выложить. Это не так очевидно, как мы думаем. Думаю, надо бы где-то в кнопку хелпа запихнуть. На мой взгляд, например, в данном конкретно случае - не важно, что ввел студент и мой вариант подойдет.

    В другом случае - может и нет, само собой. Важен контекст.

  13. Oleg Sychev reporter

    Дмитрий, но ведь x=a++ + b++ и x = a + 1 + b + 1 в самом деле не эквивалентны с точки зрения побочного эффекта на значения a и b. Они эквивалентны только в побочном эффекте на х.

  14. Dmitry Mamontov

    Так это же контекстно-зависимое действие. Если мы не знаем ничего о следующих действиях кроме типов x,a и b и того, что после этого их никто трогать не будет - то можно сказать, что они эквивалентны. По мне так, можно и развилку добавить.

    Чую, просто, что у пользователей вопросы будут.

  15. Oleg Sychev reporter

    Ну по идее эквивалентные выражения ведь должны быть эквиваленты в эффекте на все переменные? Кроме того, с точки зрения постфиксного ++ они вообще хотя для х то дадут одинаковый результат?

  16. Dmitry Mamontov

    Поймите правильно, я здесь не пытаюсь высказать идеалистичную точку зрения. Вы, само собой правы - по идее, без эффекта это эквивалентно скорее x = a + b, но у пользователя могут возникнуть вопросы.

  17. Oleg Sychev reporter

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

  18. Dmitry Mamontov

    Ок, я не говорю, что это надо реализовывать, просто в документации неплохо эти правила отразить где-то, что чему у нас эквивалентно.

  19. Log in to comment