Доработка интерфейса типа вопроса CppExpression
Создано для выполнения курсового проекта по "Эволюции и сопровождению".
Первые проблемы: а) наладить сообщения студенту если он использовал неподдерживаемые операции, возможно также вывод на экран студенту во время работы какие операции использовать нельзя б)проверить и наладить вывод сообщений студенту (преподавателю проверить, но должно работать) если есть синтаксические или лексические ошибки
В дальнейшем может пополняться (с соответствующим увеличением баллов).
Comments (21)
-
-
Интерфейс для преподавателя:
-
reporter Потестировал существующий код. Сразу бросаются в глаза несколько проблем.
-
Ошибка на отсутствие комментариев для переменной выдается, но никакой справки с описанием этого формата комментариев нет около поля. Как учитель должен догадаться о формате - непонятно. Сделайте везде справку, особенно для переменных.
-
Если при вводе выражения в качестве ответа поставить точку с запятой, получишь сообщение что не поддерживается операция stmt_list. Во-первых, это не операция вовсе. Во-вторых, конкретно одну точку с запятой наверное можно разрешить. А вот если там введено что-то большее, чем выражение, то и сообщение должно выдаваться соответствующее - что введено не выражение. А не что операция "цикл" не поддерживается...
-
-
Доработан интерфейс для преподавателя: * Добавил икон для типа вопроса. * Подсказка в заголовке "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, ниже поля ввода ответа, должно видно предупреждение рекомендуемых операциях.
-
Не знаю что произошло не так с форматом комментариев. Я никак не могу исправил.
-
reporter Посмотрите на превью вопросов. Во-первых, не вижу списка запрещенных операций - сообщение об их запрещении есть, а операций - нет. Во-вторых, при использовании &= лезет куча ошибок что строки с сообщением о ней нет.
-
reporter Запятая воспринимается как нормальная операция, но перестановка элементов запятой приводит к ошибкам, даже если они не влияют друг на друга.
-
Сейчас на 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); ?
-
Также все равно логика вопроса непонятна. Почему можно ввести x=a++,b++, но вот x=(a++) + (b++) уже требует того, что должны быть объявлены типы переменных?
-
Думаю, что чтобы исправить такую ситуацию, надо к модулю добавить какие-нибудь инструкции по тому, как должен быть описан ответ, какую-нибудь его структуру.
-
- Исправил отсутствие строки в файл. Объявление int a = b + (v + 3); считается statement, а не expression.
- При создании вопроса нужно заполнит необходимые полей “Question name”, “Question text”, “Declarations of variables”, ответы на воросы… Для x=(a++) + (b++) в “Declarations of variables” нужно int x,a,b;
-
А у нас замена инкремента на +1 не поддерживается? Вот я ввел например x=a++ + b++, а студентом ввел x = a + 1 + b + 1 и x = (a + 1) + (b + 1). Оба варианта дали partially correct, в то время как (по идее), должны давать правильный ответ, т. к. все является int'ами . Здесь по идее, есть различное поведение при переполнении, но оно вряд ли даст разные результаты.
-
Постфикстный инкремент 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 еще не поддерживается.
-
Коллеги, эти правила замены где-то надо при выкладывании плагина выложить. Это не так очевидно, как мы думаем. Думаю, надо бы где-то в кнопку хелпа запихнуть. На мой взгляд, например, в данном конкретно случае - не важно, что ввел студент и мой вариант подойдет.
В другом случае - может и нет, само собой. Важен контекст.
-
reporter Дмитрий, но ведь x=a++ + b++ и x = a + 1 + b + 1 в самом деле не эквивалентны с точки зрения побочного эффекта на значения a и b. Они эквивалентны только в побочном эффекте на х.
-
Так это же контекстно-зависимое действие. Если мы не знаем ничего о следующих действиях кроме типов x,a и b и того, что после этого их никто трогать не будет - то можно сказать, что они эквивалентны. По мне так, можно и развилку добавить.
Чую, просто, что у пользователей вопросы будут.
-
reporter Ну по идее эквивалентные выражения ведь должны быть эквиваленты в эффекте на все переменные? Кроме того, с точки зрения постфиксного ++ они вообще хотя для х то дадут одинаковый результат?
-
Поймите правильно, я здесь не пытаюсь высказать идеалистичную точку зрения. Вы, само собой правы - по идее, без эффекта это эквивалентно скорее x = a + b, но у пользователя могут возникнуть вопросы.
-
reporter Вывод сообщений об ошибках - неплохая задача на отдельную (магистерскую) работу, пока установка эквивалентности более чем достаточная проблема...
-
Ок, я не говорю, что это надо реализовывать, просто в документации неплохо эти правила отразить где-то, что чему у нас эквивалентно.
-
reporter - changed status to resolved
- Log in to comment
Интерфейс для студента: