// Numbas version: exam_results_page_options {"name": "31. Frames and Machines 1", "metadata": {"description": "
Homework set. Frame and machine problems.
", "licence": "Creative Commons Attribution-ShareAlike 4.0 International"}, "duration": 0, "percentPass": 0, "showQuestionGroupNames": false, "shuffleQuestionGroups": false, "showstudentname": true, "question_groups": [{"name": "Group", "pickingStrategy": "all-ordered", "pickQuestions": 1, "questionNames": ["", "", "", ""], "variable_overrides": [[], [], [], []], "questions": [{"name": "Frame: Free Body Diagrams", "extensions": [], "custom_part_types": [], "resources": [["question-resources/fbd-0.png", "/srv/numbas/media/question-resources/fbd-0.png"], ["question-resources/fbd-1.png", "/srv/numbas/media/question-resources/fbd-1.png"], ["question-resources/fbd-2.png", "/srv/numbas/media/question-resources/fbd-2.png"], ["question-resources/fbd-3.png", "/srv/numbas/media/question-resources/fbd-3.png"], ["question-resources/fbd-4.png", "/srv/numbas/media/question-resources/fbd-4.png"], ["question-resources/fbd-5.png", "/srv/numbas/media/question-resources/fbd-5.png"], ["question-resources/fbd-6.png", "/srv/numbas/media/question-resources/fbd-6.png"], ["question-resources/fbd-7.png", "/srv/numbas/media/question-resources/fbd-7.png"], ["question-resources/fbd-8.png", "/srv/numbas/media/question-resources/fbd-8.png"], ["question-resources/fbd-9.png", "/srv/numbas/media/question-resources/fbd-9.png"], ["question-resources/fbd-10.png", "/srv/numbas/media/question-resources/fbd-10.png"], ["question-resources/fbd-11.png", "/srv/numbas/media/question-resources/fbd-11.png"], ["question-resources/fbd-12.png", "/srv/numbas/media/question-resources/fbd-12.png"], ["question-resources/fbd-13.png", "/srv/numbas/media/question-resources/fbd-13.png"], ["question-resources/fbd-14.png", "/srv/numbas/media/question-resources/fbd-14.png"], ["question-resources/fbd-15.png", "/srv/numbas/media/question-resources/fbd-15.png"], ["question-resources/fbd-16.png", "/srv/numbas/media/question-resources/fbd-16.png"], ["question-resources/fbd-17.png", "/srv/numbas/media/question-resources/fbd-17.png"], ["question-resources/fbd-18.png", "/srv/numbas/media/question-resources/fbd-18.png"], ["question-resources/fbd-19.png", "/srv/numbas/media/question-resources/fbd-19.png"], ["question-resources/fbd-20.png", "/srv/numbas/media/question-resources/fbd-20.png"], ["question-resources/fbd-21.png", "/srv/numbas/media/question-resources/fbd-21.png"], ["question-resources/fbd-22.png", "/srv/numbas/media/question-resources/fbd-22.png"], ["question-resources/fbd-23.png", "/srv/numbas/media/question-resources/fbd-23.png"], ["question-resources/fbd-24.png", "/srv/numbas/media/question-resources/fbd-24.png"], ["question-resources/fbd-25.png", "/srv/numbas/media/question-resources/fbd-25.png"], ["question-resources/fbd-26.png", "/srv/numbas/media/question-resources/fbd-26.png"], ["question-resources/fbd-27.png", "/srv/numbas/media/question-resources/fbd-27.png"], ["question-resources/fbd-28.png", "/srv/numbas/media/question-resources/fbd-28.png"], ["question-resources/fbd-29.png", "/srv/numbas/media/question-resources/fbd-29.png"], ["question-resources/fbd-30.png", "/srv/numbas/media/question-resources/fbd-30.png"], ["question-resources/fbd-31.png", "/srv/numbas/media/question-resources/fbd-31.png"], ["question-resources/fbd-32.png", "/srv/numbas/media/question-resources/fbd-32.png"], ["question-resources/fbd-33.png", "/srv/numbas/media/question-resources/fbd-33.png"], ["question-resources/fbd-34.png", "/srv/numbas/media/question-resources/fbd-34.png"], ["question-resources/fbd-35.png", "/srv/numbas/media/question-resources/fbd-35.png"], ["question-resources/fbd-36.png", "/srv/numbas/media/question-resources/fbd-36.png"], ["question-resources/fbd-37.png", "/srv/numbas/media/question-resources/fbd-37.png"], ["question-resources/fbd-38.png", "/srv/numbas/media/question-resources/fbd-38.png"], ["question-resources/fbd-39.png", "/srv/numbas/media/question-resources/fbd-39.png"], ["question-resources/fbd-40.png", "/srv/numbas/media/question-resources/fbd-40.png"], ["question-resources/fbd-41.png", "/srv/numbas/media/question-resources/fbd-41.png"], ["question-resources/fbd-42.png", "/srv/numbas/media/question-resources/fbd-42.png"], ["question-resources/fbd-43.png", "/srv/numbas/media/question-resources/fbd-43.png"], ["question-resources/fbd-44.png", "/srv/numbas/media/question-resources/fbd-44.png"], ["question-resources/fbd-45.png", "/srv/numbas/media/question-resources/fbd-45.png"], ["question-resources/fbd-46.png", "/srv/numbas/media/question-resources/fbd-46.png"], ["question-resources/fbd-47.png", "/srv/numbas/media/question-resources/fbd-47.png"], ["question-resources/fbd-48.png", "/srv/numbas/media/question-resources/fbd-48.png"]], "navigation": {"allowregen": true, "showfrontpage": false, "preventleave": false, "typeendtoleave": false}, "contributors": [{"name": "William Haynes", "profile_url": "https://numbas.mathcentre.ac.uk/accounts/profile/2530/"}], "tags": ["Free Body Diagrams", "Mechanics", "mechanics", "Statics", "statics"], "metadata": {"description": "Identify errors in student-drawn free body diagrams of a frame.", "licence": "Creative Commons Attribution-NonCommercial 4.0 International"}, "statement": "Identify the errors (if any) in the student's free body diagrams.
\n{image('resources/question-resources/'+this['filename'])}
\n(#{index}. Click image to enlarge. )
\n", "advice": "{mistakes}
", "rulesets": {}, "builtin_constants": {"e": true, "pi,\u03c0": true, "i": true}, "constants": [], "variables": {"mistakes": {"name": "mistakes", "group": "Ungrouped variables", "definition": "this['errors']", "description": "the student's mistakes
", "templateType": "anything", "can_override": false}, "choices": {"name": "choices", "group": "Ungrouped variables", "definition": "[\"Missing or incorrect labels\",\n\"Missing arrowheads\",\n\"Extra forces or moments\",\n\"Missing forces or moments\",\n\"Inconsistent forces at A\",\n\"Inconsistent forces at B\",\n\"Inconsistent forces at C\",\n\"Inconsistent forces at D\",\n\"Inconsistent moment\",\n\"Force with known direction shown as components\",\n\"Incorrect line of action\",\n\"No errors\"]\n", "description": "list of possible mistakes -- checkbox labels
", "templateType": "anything", "can_override": false}, "fbds": {"name": "fbds", "group": "Ungrouped variables", "definition": "json_decode(safe(\"[\\n {\\n \\\"filename\\\": \\\"fbd-0.png\\\",\\n \\\"errors\\\": [\\n \\\"Missing arrowheads\\\",\\n \\\"Extra forces or moments\\\",\\n \\\"Inconsistent forces at C\\\"\\n ]\\n },\\n {\\n \\\"filename\\\": \\\"fbd-2.png\\\",\\n \\\"errors\\\": [\\n \\\"Extra forces or moments\\\"\\n ]\\n },\\n {\\n \\\"filename\\\": \\\"fbd-3.png\\\",\\n \\\"errors\\\": [\\n \\\"Missing forces or moments\\\",\\n \\\"Incorrect line of action\\\"\\n ]\\n },\\n {\\n \\\"filename\\\": \\\"fbd-7.png\\\",\\n \\\"errors\\\": [\\n \\\"Inconsistent forces at C\\\",\\n \\\"Incorrect line of action\\\",\\n \\\"Inconsistent forces at B\\\",\\n \\\"Missing forces or moments\\\"\\n ]\\n },\\n {\\n \\\"filename\\\": \\\"fbd-6.png\\\",\\n \\\"errors\\\": [\\n \\\"Extra forces or moments\\\",\\n \\\"Inconsistent forces at C\\\",\\n \\\"Missing or incorrect labels\\\"\\n ]\\n },\\n {\\n \\\"filename\\\": \\\"fbd-4.png\\\",\\n \\\"errors\\\": [\\n \\\"Extra forces or moments\\\"\\n ]\\n },\\n {\\n \\\"filename\\\": \\\"fbd-5.png\\\",\\n \\\"errors\\\": [\\n \\\"No errors\\\"\\n ]\\n },\\n {\\n \\\"filename\\\": \\\"fbd-16.png\\\",\\n \\\"errors\\\": [\\n \\\"Inconsistent forces at B\\\",\\n \\\"Extra forces or moments\\\"\\n ]\\n },\\n {\\n \\\"filename\\\": \\\"fbd-17.png\\\",\\n \\\"errors\\\": [\\n \\\"Extra forces or moments\\\",\\n \\\"Incorrect line of action\\\",\\n \\\"Inconsistent forces at B\\\",\\n \\\"Inconsistent forces at C\\\",\\n \\\"Inconsistent forces at D\\\"\\n ]\\n },\\n {\\n \\\"filename\\\": \\\"fbd-29.png\\\",\\n \\\"errors\\\": [\\n \\\"Inconsistent forces at B\\\",\\n \\\"Missing forces or moments\\\"\\n ]\\n },\\n {\\n \\\"filename\\\": \\\"fbd-15.png\\\",\\n \\\"errors\\\": [\\n \\\"Inconsistent forces at A\\\",\\n \\\"Inconsistent forces at C\\\",\\n \\\"Missing forces or moments\\\",\\n \\\"Extra forces or moments\\\",\\n \\\"Incorrect line of action\\\"\\n ]\\n },\\n {\\n \\\"filename\\\": \\\"fbd-14.png\\\",\\n \\\"errors\\\": [\\n \\\"No errors\\\"\\n ]\\n },\\n {\\n \\\"filename\\\": \\\"fbd-28.png\\\",\\n \\\"errors\\\": [\\n \\\"Extra forces or moments\\\"\\n ]\\n },\\n {\\n \\\"filename\\\": \\\"fbd-10.png\\\",\\n \\\"errors\\\": [\\n \\\"No errors\\\"\\n ]\\n },\\n {\\n \\\"filename\\\": \\\"fbd-38.png\\\",\\n \\\"errors\\\": [\\n \\\"Inconsistent forces at A\\\",\\n \\\"Inconsistent forces at C\\\",\\n \\\"Missing forces or moments\\\",\\n \\\"Inconsistent forces at D\\\"\\n ]\\n },\\n {\\n \\\"filename\\\": \\\"fbd-39.png\\\",\\n \\\"errors\\\": [\\n \\\"Inconsistent forces at A\\\",\\n \\\"Inconsistent forces at C\\\",\\n \\\"Inconsistent forces at D\\\",\\n \\\"Incorrect line of action\\\"\\n ]\\n },\\n {\\n \\\"filename\\\": \\\"fbd-11.png\\\",\\n \\\"errors\\\": [\\n \\\"Extra forces or moments\\\",\\n \\\"Inconsistent forces at B\\\"\\n ]\\n },\\n {\\n \\\"filename\\\": \\\"fbd-13.png\\\",\\n \\\"errors\\\": [\\n \\\"No errors\\\"\\n ]\\n },\\n {\\n \\\"filename\\\": \\\"fbd-12.png\\\",\\n \\\"errors\\\": [\\n \\\"Missing forces or moments\\\",\\n \\\"Incorrect line of action\\\",\\n \\\"Missing or incorrect labels\\\"\\n ]\\n },\\n {\\n \\\"filename\\\": \\\"fbd-37.png\\\",\\n \\\"errors\\\": [\\n \\\"Inconsistent forces at A\\\",\\n \\\"Incorrect line of action\\\",\\n \\\"Inconsistent forces at C\\\"\\n ]\\n },\\n {\\n \\\"filename\\\": \\\"fbd-36.png\\\",\\n \\\"errors\\\": [\\n \\\"Inconsistent forces at A\\\",\\n \\\"Extra forces or moments\\\"\\n ]\\n },\\n {\\n \\\"filename\\\": \\\"fbd-22.png\\\",\\n \\\"errors\\\": [\\n \\\"Missing or incorrect labels\\\"\\n ]\\n },\\n {\\n \\\"filename\\\": \\\"fbd-34.png\\\",\\n \\\"errors\\\": [\\n \\\"Missing forces or moments\\\",\\n \\\"Inconsistent forces at B\\\"\\n ]\\n },\\n {\\n \\\"filename\\\": \\\"fbd-20.png\\\",\\n \\\"errors\\\": [\\n \\\"Missing forces or moments\\\",\\n \\\"Extra forces or moments\\\"\\n ]\\n },\\n {\\n \\\"filename\\\": \\\"fbd-21.png\\\",\\n \\\"errors\\\": [\\n \\\"Extra forces or moments\\\"\\n ]\\n },\\n {\\n \\\"filename\\\": \\\"fbd-35.png\\\",\\n \\\"errors\\\": [\\n \\\"No errors\\\"\\n ]\\n },\\n {\\n \\\"filename\\\": \\\"fbd-31.png\\\",\\n \\\"errors\\\": [\\n \\\"Extra forces or moments\\\"\\n ]\\n },\\n {\\n \\\"filename\\\": \\\"fbd-25.png\\\",\\n \\\"errors\\\": [\\n \\\"No errors\\\"\\n ]\\n },\\n {\\n \\\"filename\\\": \\\"fbd-19.png\\\",\\n \\\"errors\\\": [\\n \\\"Missing forces or moments\\\",\\n \\\"Incorrect line of action\\\",\\n \\\"Inconsistent forces at B\\\",\\n \\\"Extra forces or moments\\\",\\n \\\"Missing or incorrect labels\\\"\\n ]\\n },\\n {\\n \\\"filename\\\": \\\"fbd-18.png\\\",\\n \\\"errors\\\": [\\n \\\"Inconsistent forces at A\\\",\\n \\\"Inconsistent forces at C\\\",\\n \\\"Missing or incorrect labels\\\"\\n ]\\n },\\n {\\n \\\"filename\\\": \\\"fbd-24.png\\\",\\n \\\"errors\\\": [\\n \\\"Extra forces or moments\\\",\\n \\\"Inconsistent forces at B\\\"\\n ]\\n },\\n {\\n \\\"filename\\\": \\\"fbd-26.png\\\",\\n \\\"errors\\\": [\\n \\\"Inconsistent forces at C\\\",\\n \\\"Incorrect line of action\\\",\\n \\\"Inconsistent forces at B\\\"\\n ]\\n },\\n {\\n \\\"filename\\\": \\\"fbd-32.png\\\",\\n \\\"errors\\\": [\\n \\\"Extra forces or moments\\\",\\n \\\"Inconsistent forces at B\\\"\\n ]\\n },\\n {\\n \\\"filename\\\": \\\"fbd-27.png\\\",\\n \\\"errors\\\": [\\n \\\"Missing forces or moments\\\",\\n \\\"Inconsistent forces at C\\\",\\n \\\"Inconsistent forces at A\\\",\\n \\\"Incorrect line of action\\\"\\n ]\\n },\\n {\\n \\\"filename\\\": \\\"fbd-40.png\\\",\\n \\\"errors\\\": [\\n \\\"Extra forces or moments\\\",\\n \\\"Incorrect line of action\\\",\\n \\\"Missing forces or moments\\\"\\n ]\\n },\\n {\\n \\\"filename\\\": \\\"fbd-8.png\\\",\\n \\\"errors\\\": [\\n \\\"Extra forces or moments\\\"\\n ]\\n },\\n {\\n \\\"filename\\\": \\\"fbd-9.png\\\",\\n \\\"errors\\\": [\\n \\\"Inconsistent Moment\\\",\\n \\\"Incorrect line of action\\\",\\n \\\"Missing forces or moments\\\",\\n \\\"Inconsistent forces at B\\\"\\n ]\\n },\\n {\\n \\\"filename\\\": \\\"fbd-41.png\\\",\\n \\\"errors\\\": [\\n \\\"force with known direction shown as components\\\",\\n \\\"Extra forces or moments\\\"\\n ]\\n },\\n {\\n \\\"filename\\\": \\\"fbd-43.png\\\",\\n \\\"errors\\\": [\\n \\\"Inconsistent forces at C\\\",\\n \\\"Inconsistent forces at B\\\",\\n \\\"Missing forces or moments\\\",\\n \\\"Extra forces or moments\\\"\\n ]\\n },\\n {\\n \\\"filename\\\": \\\"fbd-42.png\\\",\\n \\\"errors\\\": [\\n \\\"No errors\\\"\\n ]\\n },\\n {\\n \\\"filename\\\": \\\"fbd-46.png\\\",\\n \\\"errors\\\": [\\n \\\"Inconsistent forces at D\\\",\\n \\\"Inconsistent forces at C\\\",\\n \\\"Inconsistent forces at A\\\",\\n \\\"Extra forces or moments\\\"\\n ]\\n },\\n {\\n \\\"filename\\\": \\\"fbd-47.png\\\",\\n \\\"errors\\\": [\\n \\\"Missing or incorrect labels\\\",\\n \\\"Incorrect line of action\\\"\\n ]\\n },\\n {\\n \\\"filename\\\": \\\"fbd-45.png\\\",\\n \\\"errors\\\": [\\n \\\"Extra forces or moments\\\"\\n ]\\n },\\n {\\n \\\"filename\\\": \\\"fbd-44.png\\\",\\n \\\"errors\\\": [\\n \\\"Missing arrowheads\\\"\\n ]\\n }\\n]\"))", "description": "array containing problem image file name and cooresponding errors
", "templateType": "json", "can_override": false}, "this": {"name": "this", "group": "Ungrouped variables", "definition": "fbds[index]", "description": "the current fbd and mistakes
", "templateType": "anything", "can_override": false}, "index": {"name": "index", "group": "Ungrouped variables", "definition": "random(0..length(fbds)-1)", "description": "", "templateType": "anything", "can_override": false}, "matrix": {"name": "matrix", "group": "Ungrouped variables", "definition": "map(if(indices(mistakes, d)=[],0,1),d,choices)", "description": "The marking matrix. 0 for don't tick, 1 for tick.
", "templateType": "anything", "can_override": false}}, "variablesTest": {"condition": "", "maxRuns": 100}, "ungrouped_variables": ["fbds", "this", "mistakes", "choices", "index", "matrix"], "variable_groups": [], "functions": {}, "preamble": {"js": "", "css": "img{width:600px;}"}, "parts": [{"type": "m_n_2", "useCustomName": false, "customName": "", "marks": 0, "scripts": {}, "customMarkingAlgorithm": "mark:\n assert(marks>0,correct()); // any answer is correct when 0 marks are available\n assert(numTicks>0,\n warn(translate(\"part.marking.nothing entered\"));\n fail(translate(\"part.marking.nothing entered\"))\n );\n apply(same_ticks)\n\nshould_be_ticked (A chocie should be ticked if it's awarded ap ositive number of marks):\n map(map(y>0,y,row),row,settings[\"matrix\"])\n\nsame_ticks (Did the student tick the same choices as the expected answer?):\n correctif(studentanswer=should_be_ticked)\n\n", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "prompt": "Check {length(mistakes)} {pluralise(length(mistakes),\"box\",\"boxes\")}.
", "minMarks": "0", "maxMarks": "10", "shuffleChoices": false, "displayType": "checkbox", "displayColumns": "2", "minAnswers": "length(mistakes)", "maxAnswers": "length(mistakes)", "warningType": "none", "showCellAnswerState": true, "markingMethod": "all-or-nothing", "choices": "choices", "matrix": "matrix"}], "partsMode": "all", "maxMarks": 0, "objectives": [], "penalties": [], "objectiveVisibility": "always", "penaltyVisibility": "always"}, {"name": "Frame: A-frame Difficulty 1", "extensions": ["geogebra", "quantities"], "custom_part_types": [{"source": {"pk": 19, "author": {"name": "William Haynes", "pk": 2530}, "edit_page": "/part_type/19/edit"}, "name": "Engineering Accuracy with units", "short_name": "engineering-answer", "description": "A value with units marked right if within an adjustable % error of the correct value. Marked close if within a wider margin of error.
", "help_url": "", "input_widget": "string", "input_options": {"correctAnswer": "siground(settings['correctAnswer'],4)", "hint": {"static": true, "value": ""}, "allowEmpty": {"static": true, "value": true}}, "can_be_gap": true, "can_be_step": true, "marking_script": "mark:\nswitch( \n right and good_units and right_sign, add_credit(1.0,'Correct.'),\n right and good_units and not right_sign, add_credit(settings['C2'],'Wrong sign.'),\n right and right_sign and not good_units, add_credit(settings['C2'],'Correct value, but wrong or missing units.'),\n close and good_units, add_credit(settings['C1'],'Close.'),\n close and not good_units, add_credit(settings['C3'],'Answer is close, but wrong or missing units.'),\n incorrect('Wrong answer.')\n)\n\n\ninterpreted_answer:\nqty(student_scalar, student_units)\n\n\n\ncorrect_quantity:\nsettings[\"correctAnswer\"]\n\n\n\ncorrect_units:\nunits(correct_quantity)\n\n\nallowed_notation_styles:\n[\"plain\",\"en\"]\n\nmatch_student_number:\nmatchnumber(studentAnswer,allowed_notation_styles)\n\nstudent_scalar:\nmatch_student_number[1]\n\nstudent_units:\nreplace_regex('ohms','ohm',\n replace_regex('\u00b0', ' deg',\n replace_regex('-', ' ' ,\n studentAnswer[len(match_student_number[0])..len(studentAnswer)])),\"i\")\n\ngood_units:\ntry(\ncompatible(quantity(1, student_units),correct_units),\nmsg,\nfeedback(msg);false)\n\n\nstudent_quantity:\nswitch(not good_units, \n student_scalar * correct_units, \n not right_sign,\n -quantity(student_scalar, student_units),\n quantity(student_scalar,student_units)\n)\n \n\n\npercent_error:\ntry(\nscalar(abs((correct_quantity - student_quantity)/correct_quantity))*100 \n,msg,\nif(student_quantity=correct_quantity,0,100))\n \n\nright:\npercent_error <= settings['right']\n\n\nclose:\nright_sign and percent_error <= settings['close']\n\nright_sign:\nsign(student_scalar) = sign(correct_quantity)", "marking_notes": [{"name": "mark", "description": "This is the main marking note. It should award credit and provide feedback based on the student's answer.", "definition": "switch( \n right and good_units and right_sign, add_credit(1.0,'Correct.'),\n right and good_units and not right_sign, add_credit(settings['C2'],'Wrong sign.'),\n right and right_sign and not good_units, add_credit(settings['C2'],'Correct value, but wrong or missing units.'),\n close and good_units, add_credit(settings['C1'],'Close.'),\n close and not good_units, add_credit(settings['C3'],'Answer is close, but wrong or missing units.'),\n incorrect('Wrong answer.')\n)\n"}, {"name": "interpreted_answer", "description": "A value representing the student's answer to this part.", "definition": "qty(student_scalar, student_units)\n\n"}, {"name": "correct_quantity", "description": "", "definition": "settings[\"correctAnswer\"]\n\n"}, {"name": "correct_units", "description": "", "definition": "units(correct_quantity)\n"}, {"name": "allowed_notation_styles", "description": "", "definition": "[\"plain\",\"en\"]"}, {"name": "match_student_number", "description": "", "definition": "matchnumber(studentAnswer,allowed_notation_styles)"}, {"name": "student_scalar", "description": "", "definition": "match_student_number[1]"}, {"name": "student_units", "description": "Modify the unit portion of the student's answer by
\n1. replacing \"ohms\" with \"ohm\" case insensitive
\n2. replacing '-' with ' '
\n3. replacing '°' with ' deg'
\nto allow answers like 10 ft-lb and 30°
", "definition": "replace_regex('ohms','ohm',\n replace_regex('\u00b0', ' deg',\n replace_regex('-', ' ' ,\n studentAnswer[len(match_student_number[0])..len(studentAnswer)])),\"i\")"}, {"name": "good_units", "description": "", "definition": "try(\ncompatible(quantity(1, student_units),correct_units),\nmsg,\nfeedback(msg);false)\n"}, {"name": "student_quantity", "description": "This fixes the student answer for two common errors.
\nIf student_units are wrong - replace with correct units
\nIf student_scalar has the wrong sign - replace with right sign
\nIf student makes both errors, only one gets fixed.
", "definition": "switch(not good_units, \n student_scalar * correct_units, \n not right_sign,\n -quantity(student_scalar, student_units),\n quantity(student_scalar,student_units)\n)\n \n"}, {"name": "percent_error", "description": "", "definition": "try(\nscalar(abs((correct_quantity - student_quantity)/correct_quantity))*100 \n,msg,\nif(student_quantity=correct_quantity,0,100))\n "}, {"name": "right", "description": "", "definition": "percent_error <= settings['right']\n"}, {"name": "close", "description": "Only marked close if the student actually has the right sign.
", "definition": "right_sign and percent_error <= settings['close']"}, {"name": "right_sign", "description": "", "definition": "sign(student_scalar) = sign(correct_quantity) "}], "settings": [{"name": "correctAnswer", "label": "Correct Quantity.", "help_url": "", "hint": "The correct answer given as a JME quantity.", "input_type": "code", "default_value": "", "evaluate": true}, {"name": "right", "label": "% Accuracy for right.", "help_url": "", "hint": "Question will be considered correct if the scalar part of the student's answer is within this % of correct value.", "input_type": "code", "default_value": "0.2", "evaluate": true}, {"name": "close", "label": "% Accuracy for close.", "help_url": "", "hint": "Question will be considered close if the scalar part of the student's answer is within this % of correct value.", "input_type": "code", "default_value": "1.0", "evaluate": true}, {"name": "C1", "label": "Close with units.", "help_url": "", "hint": "Partial Credit for close value with appropriate units. if correct answer is 100 N and close is ±1%,An A-frame structure supporting a load at the top. Simple because both legs are two force bodies.
", "licence": "Creative Commons Attribution-NonCommercial 4.0 International"}, "statement": "{geogebra_applet('qe7xhnse',[[\"B\",B],[\"C\",C],['units','\"'+units[1]+'\"']]+ggb_load )}
\nThe A-frame shown supports a {F_w} load as shown. Determine the scalar components of the reactions at pins A and C.
\n", "advice": "
{geogebra_applet('uyjv6v8r',[[\"B\",B],[\"C\",C]] + ggb_load )}
\n\n
Strategy:
\nNote that members AB and BC are two-force bodies and both act on pin B in known directions. Draw a free body diagram of the two members and of the forces acting on pin at B, and solve it for the magnitudes of A and C using the equilibrium equation method or the force-triangle method
\nKnown:
\n$W$ = {F_w}
\nDetermine necessary angles:
\n$\\alpha = \\tan^{-1}\\left(\\frac{\\var{y1}}{\\var{x1}}\\right) = \\var{siground(alpha,4)}$° This is the angle between force $\\textbf{A}$ and the horizontal.
\n$\\beta = \\tan^{-1}\\left(\\frac{\\var{y2}}{\\var{x2}}\\right) = \\var{siground(beta,4)}$° This is the angle between force $\\textbf{C}$ and the horizontal.
\nUsing the law of sines to solve for forces A and C:
\n$\\dfrac{W}{\\sin(\\alpha+\\beta)} = \\dfrac{A}{\\sin(90°-\\beta)} = \\dfrac{C}{\\sin(90°-\\alpha)}$
\n$A = W \\dfrac{\\cos(\\beta)}{\\sin(\\alpha+\\beta)}$ = {display(magA)} $\\nearrow$
\n$C = W \\dfrac{\\cos(\\alpha)}{\\sin(\\alpha+\\beta)}$ = {display(magC)} $\\nwarrow$
\nFind the scalar components of the forces at pins A and C.
\nNote: Scalar components have a sign which indicates direction: positive values indicate $\\uparrow$ or $\\rightarrow$, negative indicate $\\downarrow$ or $\\leftarrow$.
\n$\\begin{align} A_x = A \\cos(\\alpha) &= \\var{qty(vecA[0],units[0])}& &C_x = C \\cos(\\beta) = \\var{qty(vecC[0],units[0])} \\\\ A_y = A \\sin(\\alpha) &= \\var{qty(vecA[1],units[0])} && C_y = C \\sin(\\beta) = \\var{qty(vecC[1],units[0])} \\end{align}$
\nCheck
\nYou can use the equations of equilibrium to verify that these answers put point $B$ in equilibrium.
\n$\\begin{align}A_x &\\stackrel{?}{=}C_x &A_y + C_y &\\stackrel{?}{=}W\\\\ \\var{vecA[0]} &= \\var{-vecC[0]} \\quad \\checkmark & \\var{vecA[1]} + \\var{vecC[1]} &= \\var{W} \\quad \\checkmark\\\\ \\end{align}$
", "rulesets": {}, "builtin_constants": {"e": true, "pi,\u03c0": true, "i": true}, "constants": [], "variables": {"magA": {"name": "magA", "group": "magnitudes", "definition": "F_w cos(radians(beta))/sin(radians(alpha+beta))", "description": "", "templateType": "anything", "can_override": false}, "F_w": {"name": "F_w", "group": "magnitudes", "definition": "qty(w,units[0])", "description": "", "templateType": "anything", "can_override": false}, "fd": {"name": "fd", "group": "Ungrouped variables", "definition": "0//random(-250..250#50 except 0)", "description": "", "templateType": "anything", "can_override": false}, "units": {"name": "units", "group": "Ungrouped variables", "definition": "random(['N','m'],['lb','ft'])", "description": "", "templateType": "anything", "can_override": false}, "B": {"name": "B", "group": "Ungrouped variables", "definition": "vector(random(3..5),random(3..5))", "description": "", "templateType": "anything", "can_override": false}, "C": {"name": "C", "group": "Ungrouped variables", "definition": "vector(B[0]+ random(3..5),random(-2..3))", "description": "", "templateType": "anything", "can_override": false}, "ggb_load": {"name": "ggb_load", "group": "Ungrouped variables", "definition": "[['me', 0],['fd', 0],['w',-w]]", "description": "Below this will select either the force or the moment, but not both.
\n\nrandom(
[['fd',fd], ['me', 0]],
[['me',me], ['fd', 0]]
) + [['w',0]]
$A_x = $ [[0]] $A_y = $ [[1]] $C_x = $ [[2]] $C_y = $ [[3]]
", "gaps": [{"type": "engineering-answer", "useCustomName": true, "customName": "$A_x$", "marks": "5", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "settings": {"correctAnswer": "qty(vecA[0],units[0])", "right": "0.2", "close": "1.0", "C1": "75", "C2": "50", "C3": "25"}}, {"type": "engineering-answer", "useCustomName": true, "customName": "$A_y$", "marks": "5", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "settings": {"correctAnswer": "qty(vecA[1],units[0])", "right": "0.2", "close": "1.0", "C1": "75", "C2": "50", "C3": "25"}}, {"type": "engineering-answer", "useCustomName": true, "customName": "$C_x$", "marks": "5", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "settings": {"correctAnswer": "qty(vecC[0],units[0])", "right": "0.2", "close": "1.0", "C1": "75", "C2": "50", "C3": "25"}}, {"type": "engineering-answer", "useCustomName": true, "customName": "$C_y$", "marks": "5", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "settings": {"correctAnswer": "qty(vecC[1],units[0])", "right": "0.2", "close": "1.0", "C1": "75", "C2": "50", "C3": "25"}}], "sortAnswers": false}], "partsMode": "all", "maxMarks": 0, "objectives": [], "penalties": [], "objectiveVisibility": "always", "penaltyVisibility": "always"}, {"name": "Frame: A-frame Difficulty 2", "extensions": ["geogebra", "quantities", "stats", "weh"], "custom_part_types": [{"source": {"pk": 19, "author": {"name": "William Haynes", "pk": 2530}, "edit_page": "/part_type/19/edit"}, "name": "Engineering Accuracy with units", "short_name": "engineering-answer", "description": "A value with units marked right if within an adjustable % error of the correct value. Marked close if within a wider margin of error.
", "help_url": "", "input_widget": "string", "input_options": {"correctAnswer": "siground(settings['correctAnswer'],4)", "hint": {"static": true, "value": ""}, "allowEmpty": {"static": true, "value": true}}, "can_be_gap": true, "can_be_step": true, "marking_script": "mark:\nswitch( \n right and good_units and right_sign, add_credit(1.0,'Correct.'),\n right and good_units and not right_sign, add_credit(settings['C2'],'Wrong sign.'),\n right and right_sign and not good_units, add_credit(settings['C2'],'Correct value, but wrong or missing units.'),\n close and good_units, add_credit(settings['C1'],'Close.'),\n close and not good_units, add_credit(settings['C3'],'Answer is close, but wrong or missing units.'),\n incorrect('Wrong answer.')\n)\n\n\ninterpreted_answer:\nqty(student_scalar, student_units)\n\n\n\ncorrect_quantity:\nsettings[\"correctAnswer\"]\n\n\n\ncorrect_units:\nunits(correct_quantity)\n\n\nallowed_notation_styles:\n[\"plain\",\"en\"]\n\nmatch_student_number:\nmatchnumber(studentAnswer,allowed_notation_styles)\n\nstudent_scalar:\nmatch_student_number[1]\n\nstudent_units:\nreplace_regex('ohms','ohm',\n replace_regex('\u00b0', ' deg',\n replace_regex('-', ' ' ,\n studentAnswer[len(match_student_number[0])..len(studentAnswer)])),\"i\")\n\ngood_units:\ntry(\ncompatible(quantity(1, student_units),correct_units),\nmsg,\nfeedback(msg);false)\n\n\nstudent_quantity:\nswitch(not good_units, \n student_scalar * correct_units, \n not right_sign,\n -quantity(student_scalar, student_units),\n quantity(student_scalar,student_units)\n)\n \n\n\npercent_error:\ntry(\nscalar(abs((correct_quantity - student_quantity)/correct_quantity))*100 \n,msg,\nif(student_quantity=correct_quantity,0,100))\n \n\nright:\npercent_error <= settings['right']\n\n\nclose:\nright_sign and percent_error <= settings['close']\n\nright_sign:\nsign(student_scalar) = sign(correct_quantity)", "marking_notes": [{"name": "mark", "description": "This is the main marking note. It should award credit and provide feedback based on the student's answer.", "definition": "switch( \n right and good_units and right_sign, add_credit(1.0,'Correct.'),\n right and good_units and not right_sign, add_credit(settings['C2'],'Wrong sign.'),\n right and right_sign and not good_units, add_credit(settings['C2'],'Correct value, but wrong or missing units.'),\n close and good_units, add_credit(settings['C1'],'Close.'),\n close and not good_units, add_credit(settings['C3'],'Answer is close, but wrong or missing units.'),\n incorrect('Wrong answer.')\n)\n"}, {"name": "interpreted_answer", "description": "A value representing the student's answer to this part.", "definition": "qty(student_scalar, student_units)\n\n"}, {"name": "correct_quantity", "description": "", "definition": "settings[\"correctAnswer\"]\n\n"}, {"name": "correct_units", "description": "", "definition": "units(correct_quantity)\n"}, {"name": "allowed_notation_styles", "description": "", "definition": "[\"plain\",\"en\"]"}, {"name": "match_student_number", "description": "", "definition": "matchnumber(studentAnswer,allowed_notation_styles)"}, {"name": "student_scalar", "description": "", "definition": "match_student_number[1]"}, {"name": "student_units", "description": "Modify the unit portion of the student's answer by
\n1. replacing \"ohms\" with \"ohm\" case insensitive
\n2. replacing '-' with ' '
\n3. replacing '°' with ' deg'
\nto allow answers like 10 ft-lb and 30°
", "definition": "replace_regex('ohms','ohm',\n replace_regex('\u00b0', ' deg',\n replace_regex('-', ' ' ,\n studentAnswer[len(match_student_number[0])..len(studentAnswer)])),\"i\")"}, {"name": "good_units", "description": "", "definition": "try(\ncompatible(quantity(1, student_units),correct_units),\nmsg,\nfeedback(msg);false)\n"}, {"name": "student_quantity", "description": "This fixes the student answer for two common errors.
\nIf student_units are wrong - replace with correct units
\nIf student_scalar has the wrong sign - replace with right sign
\nIf student makes both errors, only one gets fixed.
", "definition": "switch(not good_units, \n student_scalar * correct_units, \n not right_sign,\n -quantity(student_scalar, student_units),\n quantity(student_scalar,student_units)\n)\n \n"}, {"name": "percent_error", "description": "", "definition": "try(\nscalar(abs((correct_quantity - student_quantity)/correct_quantity))*100 \n,msg,\nif(student_quantity=correct_quantity,0,100))\n "}, {"name": "right", "description": "", "definition": "percent_error <= settings['right']\n"}, {"name": "close", "description": "Only marked close if the student actually has the right sign.
", "definition": "right_sign and percent_error <= settings['close']"}, {"name": "right_sign", "description": "", "definition": "sign(student_scalar) = sign(correct_quantity) "}], "settings": [{"name": "correctAnswer", "label": "Correct Quantity.", "help_url": "", "hint": "The correct answer given as a JME quantity.", "input_type": "code", "default_value": "", "evaluate": true}, {"name": "right", "label": "% Accuracy for right.", "help_url": "", "hint": "Question will be considered correct if the scalar part of the student's answer is within this % of correct value.", "input_type": "code", "default_value": "0.2", "evaluate": true}, {"name": "close", "label": "% Accuracy for close.", "help_url": "", "hint": "Question will be considered close if the scalar part of the student's answer is within this % of correct value.", "input_type": "code", "default_value": "1.0", "evaluate": true}, {"name": "C1", "label": "Close with units.", "help_url": "", "hint": "Partial Credit for close value with appropriate units. if correct answer is 100 N and close is ±1%,An A-frame structure supporting a force or a moment. One leg is a two force body.
", "licence": "Creative Commons Attribution-NonCommercial 4.0 International"}, "statement": "{geogebra_applet('qe7xhnse',[[\"B\",B],[\"C\",C],['units','\"'+units[1]+'\"']]+ggb_load )}
\nThe A-frame shown supports a {description} as shown.
\nDetermine the scalar components of the reactions at pins A and C.
\nNote: the sign of a scalar component indicates the sense of the force. A positive sense indicates the force points towards the positive end of the corresponding axis.
\n\n", "advice": "Strategy:
Draw a free body diagram of the entire frame and each of its legs. Note that member {if(Fd=0,\"AB\",\"BC\")} is a two-force body and the direction of the line of action of force {if(Fd=0,\"A\",\"C\")} is known; that means that FBD {if(Fd=0,'III','II')} has three unknowns. FBD I has four unknowns, and FBD {if(Fd=0,'II','III')} has no knowns.
\n{geogebra_applet('p6rz9bqx',[[\"B\",B],[\"C\",C]] + ggb_load )}
\nKnown:
\n$M_E = \\var{display(abs(M_E))}$ $D = \\var{display(abs(F_D))}$
\nDetermine necessary angles:
\n$\\alpha = \\tan^{-1}\\left(\\frac{\\var{y1}}{\\var{x1}}\\right) = \\var{siground(alpha,4)}$°
\n$\\beta = \\tan^{-1}\\left(\\frac{\\var{y2}}{\\var{x2}}\\right) = \\var{siground(beta,4)}$°
\nStart with FBD {if(Fd=0,'III','II')} which has three unknowns, and take moments at point {if(Fd=0,'C','A')} to find force {if(Fd=0,\"A\",\"C\")}.
\nII: $\\Sigma M_A = 0$
\n$\\simplify{{sign(-fd)} D } (\\var{y1/2}) + C_x (\\var{y1}) + C_y ( \\var{x1}) = 0$
\n$\\simplify{{sign(-fd)} D} (\\var{y1/2}) + (C \\cos \\beta) (\\var{y1}) + (C \\sin \\beta) (\\var{x1}) = 0$
\n$ C = \\dfrac{\\simplify{{sign(fd)} D } (\\var{y1/2}) }{ (\\var{y1}) \\cos \\beta + (\\var{x1}) \\sin \\beta} = \\dfrac{ \\var{ F_D y1 /2 }}{\\var{display(y1 * cos(radians(beta)) + x1 * sin(radians(beta)))}} = \\var{display(magC)}$
\n$C_x = C \\cos \\beta = \\var{display(qty(-vecC[0],units[0]))} = \\var{display(abs(qty(vecC[0],units[0])))} \\var{if(vecC[0]>0,latex('\\\\rightarrow'),latex('\\\\leftarrow'))}$
\n$C_y = C \\sin \\beta = \\var{display(qty(vecC[1],units[0]))} = \\var{display(abs(qty(vecC[1],units[0])))} \\var{if(vecC[1]<0,latex('\\\\downarrow'),latex('\\\\uparrow'))}$
\n\n
II: $\\Sigma M_C = 0$
\n$\\simplify{M_E } + A_x (\\var{y2}) + A_y ( \\var{x2}) = 0$
\n$\\simplify{M_E} + (A \\cos \\alpha) (\\var{y2}) + (A \\sin \\alpha) (\\var{x2}) = 0$
\n$ A = \\dfrac{\\simplify{- M_E }}{ (\\var{y2}) \\cos \\alpha + (\\var{x2}) \\sin \\alpha} = \\dfrac{ \\var{M_E }}{\\var{display(y2 * cos(radians(alpha)) + x2 * sin(radians(alpha)))}} = \\var{display(magA)}$
\n$A_x = A \\cos \\alpha = \\var{display(qty(vecA[0],units[0]))} = \\var{display(abs(qty(vecA[0],units[0])))} \\var{if(vecA[0]<0,latex('\\\\leftarrow'),latex('\\\\rightarrow'))}$
\n$A_y = A \\sin \\alpha = \\var{display(qty(vecA[1],units[0]))} = \\var{display(abs(qty(vecA[1],units[0])))}\\var{if(vecA[1]<0,latex('\\\\downarrow'),latex('\\\\uparrow'))}$
\n\n
Apply $\\Sigma F_x = 0$ and $\\Sigma F_y=0$ to FBD I to find the reactions at {if(fd=0,'C','A')}.
\n$\\begin{align} \\Sigma F_x &= 0\\\\ A_x - C_x &=0\\\\ C_x &= A_x\\\\ &= (\\var{display(qty(vecA[0],units[0]))}) \\\\ &= \\var{display(abs(qty(vecC[0],units[0])))} \\var{if(vecC[0]<0,latex('\\\\leftarrow'),latex('\\\\rightarrow'))} \\end{align}$
\n$\\begin{align} \\Sigma F_y &= 0\\\\ C_y +A_y & = 0\\\\ C_y &= - A_y \\\\&= -(\\var{display(qty(vecA[1],units[0]))})\\\\ &= \\var{display(abs(qty(vecC[1],units[0])))} \\var{if(vecC[1]>0,latex('\\\\downarrow'),latex('\\\\uparrow'))} \\end{align}$
\n$\\begin{align} \\Sigma F_x &= 0\\\\ \\simplify{ A_x + {sign(fd)} D } - C_x &= 0\\\\ A_x &= \\simplify{C_x - {sign(fd)} D } \\\\&= \\simplify[!collectNumbers]{({-siground(vecC[0],4)}) + ({-vecD[0]})}\\\\ &= \\simplify{({-siground(vecC[0],4)}) + ({-vecD[0]})}\\\\&= \\var{display(abs(qty(vecA[0],units[0])))} \\var{if(vecA[0]<0,latex('\\\\leftarrow'),latex('\\\\rightarrow'))} \\end{align}$
\n$\\begin{align}\\Sigma F_y &= 0\\\\ A_y + C_y &=0\\\\A_y &= -C_y \\\\ &= -( \\var{display(qty(vecC[1],units[0]))}) \\\\ &= \\var{display(abs(qty(vecA[1],units[0])))} \\var{if(vecA[1]<0,latex('\\\\downarrow'),latex('\\\\uparrow'))} \\end{align}$
\nthe magnitude of the moment
", "templateType": "anything"}, "beta": {"name": "beta", "group": "magnitudes", "definition": "degrees(angle(vector(-1,0),B-C))", "description": "", "templateType": "anything"}, "w": {"name": "w", "group": "Ungrouped variables", "definition": "0//random(100..500#25)", "description": "", "templateType": "anything"}, "x2": {"name": "x2", "group": "magnitudes", "definition": "qty(abs(b[0]-c[0]),units[1])", "description": "", "templateType": "anything"}, "y1": {"name": "y1", "group": "magnitudes", "definition": "qty(B[1],units[1])", "description": "", "templateType": "anything"}, "magA": {"name": "magA", "group": "magnitudes", "definition": "M_E/(y2 * cos(radians(alpha)) + x2 sin(radians(alpha)))\n\n", "description": "\nmagnidude of force a in version 1 only
", "templateType": "anything"}, "F_w": {"name": "F_w", "group": "magnitudes", "definition": "qty(w,units[0])", "description": "", "templateType": "anything"}, "y2": {"name": "y2", "group": "magnitudes", "definition": "qty(abs(b[1]-c[1]),units[1])", "description": "", "templateType": "anything"}, "version": {"name": "version", "group": "Ungrouped variables", "definition": "random(0,1)", "description": "version 0 = force d
\nversion 1 = moment e
", "templateType": "anything"}, "vecA": {"name": "vecA", "group": "vectors", "definition": "[-vecD - scalar(magC) * vector(cos(radians(180-beta)), sin(radians(180-beta))),\nscalar(magA)* vector(cos(radians(alpha)), sin(radians(alpha)))][version]", "description": "reactions at A for both versions as a vector
", "templateType": "anything"}, "alpha": {"name": "alpha", "group": "magnitudes", "definition": "degrees(angle(vector(1,0),B))", "description": "", "templateType": "anything"}, "units": {"name": "units", "group": "Ungrouped variables", "definition": "random(['N','m'],['lb','ft'])", "description": "", "templateType": "anything"}, "M_E": {"name": "M_E", "group": "magnitudes", "definition": "qty(me,units[0]+\"*\"+units[1])", "description": "", "templateType": "anything"}, "fd": {"name": "fd", "group": "Ungrouped variables", "definition": "Load[0]", "description": "the magnitude of the force
", "templateType": "anything"}, "debug": {"name": "debug", "group": "Ungrouped variables", "definition": "false", "description": "", "templateType": "anything"}, "B": {"name": "B", "group": "Ungrouped variables", "definition": "vector(random(3..5),random(3..5))", "description": "location of pin B
", "templateType": "anything"}, "Load": {"name": "Load", "group": "Ungrouped variables", "definition": "[[random(-500..500#25 except 0),0],\n[0,random(100..2000#100) random(1,-1)]]\n[version]", "description": "establishes whether force or moment load is active. Weight at B is always zero in this problem
", "templateType": "anything"}, "ggb_load": {"name": "ggb_load", "group": "Ungrouped variables", "definition": "[['fd',fd],['me',me],['w',0]]", "description": "This will select either the force or the moment, but not both. Weight is always zero.
\n\n", "templateType": "anything"}, "C": {"name": "C", "group": "Ungrouped variables", "definition": "vector(B[0]+ random(3..5),random(-2..3))", "description": "Location of pin C. Pin A is at (0,0)
", "templateType": "anything"}, "vecC": {"name": "vecC", "group": "vectors", "definition": "[scalar(magC) * vector(cos(radians(180-beta)),sin(radians(180-beta))),\n-scalar(magA)* vector(cos(radians(alpha)), sin(radians(alpha)))][version]", "description": "reactions at C for both versions as a vector
", "templateType": "anything"}, "sigma_f": {"name": "sigma_f", "group": "vectors", "definition": "vecW+vecA+vecC + vecD", "description": "", "templateType": "anything"}, "F_d": {"name": "F_d", "group": "magnitudes", "definition": "qty(fd,units[0])", "description": "", "templateType": "anything"}, "x1": {"name": "x1", "group": "magnitudes", "definition": "qty(B[0],units[1])", "description": "", "templateType": "anything"}, "vecW": {"name": "vecW", "group": "vectors", "definition": "vector(0,-w)", "description": "always 0 in this problem
", "templateType": "anything"}, "magC": {"name": "magC", "group": "magnitudes", "definition": "(F_D y1 /2)/\n(y1 * cos(radians(beta)) + \nx1 * sin(radians(beta)))\n \n", "description": "magnitude of reaction in version 0 only
", "templateType": "anything"}, "vecD": {"name": "vecD", "group": "vectors", "definition": "vector(scalar(f_d),0)", "description": "", "templateType": "anything"}, "description": {"name": "description", "group": "magnitudes", "definition": "if(version=0,\n display(abs(F_d)) + \" force $D$ at the midpoint of member AB\",\n display(abs(M_E)) + if(me>0,\" counter-\",\" \") + \"clockwise moment $M_E$ \")", "description": "", "templateType": "anything"}}, "variablesTest": {"condition": "B[1]<> C[1] and C[1]<>0", "maxRuns": 100}, "ungrouped_variables": ["B", "C", "fd", "me", "w", "units", "ggb_load", "Load", "version", "debug"], "variable_groups": [{"name": "magnitudes", "variables": ["F_w", "F_d", "M_E", "alpha", "beta", "magA", "magC", "x1", "y1", "x2", "y2", "description"]}, {"name": "vectors", "variables": ["vecW", "vecA", "vecC", "sigma_f", "vecD"]}], "functions": {"display": {"parameters": [["Q", "quantity"]], "type": "string", "language": "jme", "definition": "string(siground(q,4))"}}, "preamble": {"js": "", "css": ""}, "parts": [{"type": "gapfill", "useCustomName": false, "customName": "", "marks": 0, "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "prompt": "$A_x = $ [[0]] $A_y = $ [[1]] $C_x = $ [[2]] $C_y = $ [[3]]
", "gaps": [{"type": "engineering-answer", "useCustomName": true, "customName": "$A_x$", "marks": "5", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "settings": {"correctAnswer": "qty(vecA[0],units[0])", "right": "0.2", "close": "1.0", "C1": "75", "C2": "50", "C3": "25"}}, {"type": "engineering-answer", "useCustomName": true, "customName": "$A_y$", "marks": "5", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "settings": {"correctAnswer": "qty(vecA[1],units[0])", "right": "0.2", "close": "1.0", "C1": "75", "C2": "50", "C3": "25"}}, {"type": "engineering-answer", "useCustomName": true, "customName": "$C_x$", "marks": "5", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "settings": {"correctAnswer": "qty(vecC[0],units[0])", "right": "0.2", "close": "1.0", "C1": "75", "C2": "50", "C3": "25"}}, {"type": "engineering-answer", "useCustomName": true, "customName": "$C_y$", "marks": "5", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "settings": {"correctAnswer": "qty(vecC[1],units[0])", "right": "0.2", "close": "1.0", "C1": "75", "C2": "50", "C3": "25"}}], "sortAnswers": false}], "partsMode": "all", "maxMarks": 0, "objectives": [], "penalties": [], "objectiveVisibility": "always", "penaltyVisibility": "always"}, {"name": "Frame: A-Frame with load", "extensions": ["geogebra", "quantities", "weh"], "custom_part_types": [{"source": {"pk": 19, "author": {"name": "William Haynes", "pk": 2530}, "edit_page": "/part_type/19/edit"}, "name": "Engineering Accuracy with units", "short_name": "engineering-answer", "description": "A value with units marked right if within an adjustable % error of the correct value. Marked close if within a wider margin of error.
", "help_url": "", "input_widget": "string", "input_options": {"correctAnswer": "siground(settings['correctAnswer'],4)", "hint": {"static": true, "value": ""}, "allowEmpty": {"static": true, "value": true}}, "can_be_gap": true, "can_be_step": true, "marking_script": "mark:\nswitch( \n right and good_units and right_sign, add_credit(1.0,'Correct.'),\n right and good_units and not right_sign, add_credit(settings['C2'],'Wrong sign.'),\n right and right_sign and not good_units, add_credit(settings['C2'],'Correct value, but wrong or missing units.'),\n close and good_units, add_credit(settings['C1'],'Close.'),\n close and not good_units, add_credit(settings['C3'],'Answer is close, but wrong or missing units.'),\n incorrect('Wrong answer.')\n)\n\n\ninterpreted_answer:\nqty(student_scalar, student_units)\n\n\n\ncorrect_quantity:\nsettings[\"correctAnswer\"]\n\n\n\ncorrect_units:\nunits(correct_quantity)\n\n\nallowed_notation_styles:\n[\"plain\",\"en\"]\n\nmatch_student_number:\nmatchnumber(studentAnswer,allowed_notation_styles)\n\nstudent_scalar:\nmatch_student_number[1]\n\nstudent_units:\nreplace_regex('ohms','ohm',\n replace_regex('\u00b0', ' deg',\n replace_regex('-', ' ' ,\n studentAnswer[len(match_student_number[0])..len(studentAnswer)])),\"i\")\n\ngood_units:\ntry(\ncompatible(quantity(1, student_units),correct_units),\nmsg,\nfeedback(msg);false)\n\n\nstudent_quantity:\nswitch(not good_units, \n student_scalar * correct_units, \n not right_sign,\n -quantity(student_scalar, student_units),\n quantity(student_scalar,student_units)\n)\n \n\n\npercent_error:\ntry(\nscalar(abs((correct_quantity - student_quantity)/correct_quantity))*100 \n,msg,\nif(student_quantity=correct_quantity,0,100))\n \n\nright:\npercent_error <= settings['right']\n\n\nclose:\nright_sign and percent_error <= settings['close']\n\nright_sign:\nsign(student_scalar) = sign(correct_quantity)", "marking_notes": [{"name": "mark", "description": "This is the main marking note. It should award credit and provide feedback based on the student's answer.", "definition": "switch( \n right and good_units and right_sign, add_credit(1.0,'Correct.'),\n right and good_units and not right_sign, add_credit(settings['C2'],'Wrong sign.'),\n right and right_sign and not good_units, add_credit(settings['C2'],'Correct value, but wrong or missing units.'),\n close and good_units, add_credit(settings['C1'],'Close.'),\n close and not good_units, add_credit(settings['C3'],'Answer is close, but wrong or missing units.'),\n incorrect('Wrong answer.')\n)\n"}, {"name": "interpreted_answer", "description": "A value representing the student's answer to this part.", "definition": "qty(student_scalar, student_units)\n\n"}, {"name": "correct_quantity", "description": "", "definition": "settings[\"correctAnswer\"]\n\n"}, {"name": "correct_units", "description": "", "definition": "units(correct_quantity)\n"}, {"name": "allowed_notation_styles", "description": "", "definition": "[\"plain\",\"en\"]"}, {"name": "match_student_number", "description": "", "definition": "matchnumber(studentAnswer,allowed_notation_styles)"}, {"name": "student_scalar", "description": "", "definition": "match_student_number[1]"}, {"name": "student_units", "description": "Modify the unit portion of the student's answer by
\n1. replacing \"ohms\" with \"ohm\" case insensitive
\n2. replacing '-' with ' '
\n3. replacing '°' with ' deg'
\nto allow answers like 10 ft-lb and 30°
", "definition": "replace_regex('ohms','ohm',\n replace_regex('\u00b0', ' deg',\n replace_regex('-', ' ' ,\n studentAnswer[len(match_student_number[0])..len(studentAnswer)])),\"i\")"}, {"name": "good_units", "description": "", "definition": "try(\ncompatible(quantity(1, student_units),correct_units),\nmsg,\nfeedback(msg);false)\n"}, {"name": "student_quantity", "description": "This fixes the student answer for two common errors.
\nIf student_units are wrong - replace with correct units
\nIf student_scalar has the wrong sign - replace with right sign
\nIf student makes both errors, only one gets fixed.
", "definition": "switch(not good_units, \n student_scalar * correct_units, \n not right_sign,\n -quantity(student_scalar, student_units),\n quantity(student_scalar,student_units)\n)\n \n"}, {"name": "percent_error", "description": "", "definition": "try(\nscalar(abs((correct_quantity - student_quantity)/correct_quantity))*100 \n,msg,\nif(student_quantity=correct_quantity,0,100))\n "}, {"name": "right", "description": "", "definition": "percent_error <= settings['right']\n"}, {"name": "close", "description": "Only marked close if the student actually has the right sign.
", "definition": "right_sign and percent_error <= settings['close']"}, {"name": "right_sign", "description": "", "definition": "sign(student_scalar) = sign(correct_quantity) "}], "settings": [{"name": "correctAnswer", "label": "Correct Quantity.", "help_url": "", "hint": "The correct answer given as a JME quantity.", "input_type": "code", "default_value": "", "evaluate": true}, {"name": "right", "label": "% Accuracy for right.", "help_url": "", "hint": "Question will be considered correct if the scalar part of the student's answer is within this % of correct value.", "input_type": "code", "default_value": "0.2", "evaluate": true}, {"name": "close", "label": "% Accuracy for close.", "help_url": "", "hint": "Question will be considered close if the scalar part of the student's answer is within this % of correct value.", "input_type": "code", "default_value": "1.0", "evaluate": true}, {"name": "C1", "label": "Close with units.", "help_url": "", "hint": "Partial Credit for close value with appropriate units. if correct answer is 100 N and close is ±1%,{geogebra_applet('wrp4gmsn',var_1)}
\nThe frame shown supports a {F} load at point $F$. Determine the $x$- and $y$- components of the forces acting on member $ADC$ at pins $A$, $D$ and $C$.
\n", "advice": "\n$L = \\var{L}$ $b = \\var{b}$ $h =\\var{h}$ $d=\\var{d}$
\n$DE = \\var{DE}$
\n$EF = \\var{EF}$
\nStart by drawing neat, labeled, consistent free body diagrams of the whole frame and each of its parts. Exposed internal forces must occur in equal and opposite pairs. In the diagram below, the external forces are drawn in red.
\n{geogebra_applet('x3npnvsb',var_2)}
\nCount the unknowns on each diagram. If any diagram has three unknowns, consider starting there. In this case FBD I has three unknowns ($A_x, A_y$, and $B$).
\nFBD I
\n\\[\\begin{align} \\text{I: }\\Sigma M_A &= 0\\\\ B ( \\simplify[]{{AD}+{DE} + {AD} }) &= F( \\simplify[!collectNumbers]{{AD}+{DE} + {EF} })\\\\B&=\\var{F} \\left( \\dfrac{\\var{AD+qty(L,unit_d)}}{\\var{qty(b,unit_d)}}\\right) \\\\ &= \\var{b_y}\\uparrow \\\\\\\\\\text{I: }\\Sigma F_y &=0\\\\A_y+B &= F\\\\A_y &= \\var{F} - \\var{b_y}\\\\&=\\var{(a_y)}\\uparrow\\\\\\\\\\text{I: }\\Sigma F_x &= 0\\\\A_x&=0\\end{align}\\]
\nFBD II
\nWith $A_x, A_y$, and $B$ known, the remaining free body diagrams all have four unknowns but, luckily in this problem, the lines of action of forces $E_x, E_y$, and $D_x$ all intersect at point $E$ on FBD II. By taking moments there, we can find $D_y$. If this was not the case, you would need to select two free body diagrams and take moments appropriately to yield two equations with two unknowns which can be solved simultaneously.
\n\\[\\begin{align} \\text{II: }\\Sigma M_E &=0\\\\ D_y(\\var{DE}) &= F(\\var{EF})\\\\D_y &= \\var{F}\\left(\\dfrac{\\var{EF}}{\\var{DE}}\\right)\\\\ &=\\var{d(D_y)}\\downarrow\\end{align}\\]
\nFBD III
\nWith $A_x, A_y$ and $D_y$ found, only three unknowns remain on FBD III, so it can be solved to satisfy the problem statement. Remember that negative results indicate that the force acts in the direction opposite to the one assumed on the free body diagram.
\n\\[\\begin{align} \\text{III: }\\Sigma M_C &= 0\\\\ - A_y ( \\var{b/2}) - D_x(\\var{h-d}) - D_y(\\var{scalar(DE/2)}) &= 0 \\\\D_x &=\\dfrac{-\\var{b/2} A_y - \\var{scalar(DE/2)}D_y}{\\var{h-d}} \\\\ &=-\\dfrac{\\var{b/2} (\\var{d(A_y)}) +\\var{scalar(DE/2)}(\\var{d(D_y)})}{\\var{h-d}} \\\\&= \\var{d(d_x)} \\leftarrow\\\\\\\\\\text{III: }\\Sigma F_y &=0\\\\A_y+D_y - C_y &= 0\\\\C_y &= \\var{d(A_y)} +\\var{d(D_y)}\\\\&=\\var{d(C_y) }\\downarrow\\\\\\\\\\text{III: }\\Sigma F_x &= 0\\\\D_x-C_x&=0\\\\C_x &= \\var{d(C_x)} \\rightarrow \\end{align}\\]
\nFBD II
\nWith $D_x$ determined, the remainin unknown on FBD II can be found.
\n\\[\\begin{align} \\text{II: }\\Sigma F_x &= 0\\\\D_x-E_x&=0\\\\E_x &= \\var{d(E_x)} \\leftarrow \\end{align}\\]
\nFBD IV
\nAll the unknown reactions are now known. You can check your work by verifying that these force put member $CEB$ in equilibrium. If they don't, you have made an error.
\n\\[\\begin{align} \\text{IV: }\\Sigma M_c &\\stackrel{?}{=} 0\\\\ 0&\\stackrel{?}{=} B_y (\\var{qty(b/2,unit_d)}) - E_y (\\var{DE/2}) + E_x (\\var{qty(h-d,unit_d)})\\\\0&\\stackrel{?}{=} (\\var{d(B_y)})(\\var{qty(b/2,unit_d)}) - (\\var{d(E_y)})(\\var{DE/2}) + (\\var{d(E_x)}) (\\var{qty(h-d,unit_d)})\\\\0&\\stackrel{?}{=} (\\var{d(B_y qty(b/2,unit_d))}) - (\\var{d(E_y DE/2)}) + (\\var{d(E_x qty(h-d,unit_d))})\\\\0&= \\var{check} \\, \\checkmark\\end{align}\\]
\n\n", "rulesets": {}, "variables": {"c_y": {"name": "c_y", "group": "solution", "definition": "A_y + D_y", "description": "member ADC sigma fy
", "templateType": "anything"}, "d_y": {"name": "d_y", "group": "solution", "definition": "f EF/DE", "description": "member DEF sum of moment about E
", "templateType": "anything"}, "e_y": {"name": "e_y", "group": "solution", "definition": "d_y + f", "description": "member DEF sum forces in y
", "templateType": "anything"}, "debug": {"name": "debug", "group": "Ungrouped variables", "definition": "false", "description": "", "templateType": "anything"}, "d": {"name": "d", "group": "Ungrouped variables", "definition": "random(1..3) h/4", "description": "height of arm
", "templateType": "anything"}, "check": {"name": "check", "group": "solution", "definition": "scalar(b_y qty(b/2,unit_d) - e_y DE/2 + e_x qty(h-d,unit_d))", "description": "member CEB sigma Mc
", "templateType": "anything"}, "b": {"name": "b", "group": "Ungrouped variables", "definition": "random(h/2..h#2)", "description": "width between supports
", "templateType": "anything"}, "var_1": {"name": "var_1", "group": "Ungrouped variables", "definition": "[['b',b],['h',h],['L',L],\n['d',d],['unit','\"'+unit_d+'\"']]", "description": "list passed to geogebra applet
", "templateType": "anything"}, "EF": {"name": "EF", "group": "solution", "definition": "qty(l,unit_d)-DE", "description": "", "templateType": "anything"}, "unit_F": {"name": "unit_F", "group": "Ungrouped variables", "definition": "if(unit_d='m','N','lb')", "description": "", "templateType": "anything"}, "F": {"name": "F", "group": "Ungrouped variables", "definition": "qty(random(10..500#50),unit_f)", "description": "", "templateType": "anything"}, "a_x": {"name": "a_x", "group": "solution", "definition": "qty(0,unit_f)", "description": "", "templateType": "anything"}, "DE": {"name": "DE", "group": "solution", "definition": "qty((h-d)/h b,unit_d)", "description": "", "templateType": "anything"}, "L": {"name": "L", "group": "Ungrouped variables", "definition": "random(scalar(DE)..b#0.5)", "description": "length of horizontal arm
", "templateType": "anything"}, "d_x": {"name": "d_x", "group": "solution", "definition": "-(qty(b/2,unit_d) A_y + DE/2 D_y)/qty(h-d,unit_d)", "description": "-\\dfrac{\\var{b/2} (\\var{A_y}) + \\var{scalar(DE/2)}(\\var{D_y})}{\\var{h-d}}
\n\nex (b_y qty(b/2,unit_d) + e_y DE/2)/qty(h-d,unit_d)
\n-(qty(b/2,unit_d) A_y + DE/2 D_y)/qty(h-d,unit_d)
", "templateType": "anything"}, "var_2": {"name": "var_2", "group": "Ungrouped variables", "definition": "[['b',b 6/h],['h',6],['L',L 6/h],\n['d',d 6/h],['unit','\"'+unit_d+'\"']]", "description": "diagram scaled proportional to h =6
", "templateType": "anything"}, "unit_d": {"name": "unit_d", "group": "Ungrouped variables", "definition": "random('m','ft')", "description": "", "templateType": "anything"}, "h": {"name": "h", "group": "Ungrouped variables", "definition": "random(4..10#2)", "description": "height of structure
", "templateType": "anything"}, "c_x": {"name": "c_x", "group": "solution", "definition": "d_x", "description": "", "templateType": "anything"}, "AD": {"name": "AD", "group": "solution", "definition": "qty(b/2 d/h,unit_d)", "description": "sum of moment about A for entire frame
", "templateType": "anything"}, "e_x": {"name": "e_x", "group": "solution", "definition": "d_x", "description": "fbd DEF sigma fx
", "templateType": "anything"}, "a_y": {"name": "a_y", "group": "solution", "definition": "f - b_y", "description": "sum f_y for whole thing
", "templateType": "anything"}, "b_y": {"name": "b_y", "group": "solution", "definition": "f * (scalar(AD)+L)/b", "description": "distance from a to force
", "templateType": "anything"}}, "variablesTest": {"condition": "scalar(AD)+L <> b and scalar(DE) <> L // prevent force over roller or pin E", "maxRuns": 100}, "ungrouped_variables": ["b", "h", "L", "d", "unit_d", "var_1", "F", "unit_F", "var_2", "debug"], "variable_groups": [{"name": "solution", "variables": ["AD", "DE", "EF", "b_y", "a_y", "d_y", "d_x", "e_y", "e_x", "c_y", "c_x", "check", "a_x"]}], "functions": {"d": {"parameters": [["q", "quantity"]], "type": "string", "language": "jme", "definition": "siground(q,4)"}}, "preamble": {"js": "", "css": ""}, "parts": [{"type": "gapfill", "useCustomName": true, "customName": "Pin A", "marks": 0, "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "prompt": "$A_x =$ [[0]] [[1]] {a_x} $A_y =$ [[2]] [[3]] {d(a_y)}
", "gaps": [{"type": "engineering-answer", "useCustomName": true, "customName": "Ax", "marks": "4", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": false, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "settings": {"correctAnswer": "qty(0,unit_f)", "right": "0.2", "close": "1.0", "C1": "75", "C2": "50", "C3": "25"}}, {"type": "1_n_2", "useCustomName": true, "customName": "L-R", "marks": 0, "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "minMarks": 0, "maxMarks": 0, "shuffleChoices": false, "displayType": "dropdownlist", "displayColumns": 0, "showCellAnswerState": true, "choices": ["←", "→", "Neither"], "matrix": [0, 0, "1"], "distractors": ["", "", ""]}, {"type": "engineering-answer", "useCustomName": true, "customName": "Ay", "marks": "4", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": false, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "settings": {"correctAnswer": "abs(A_y)", "right": "0.2", "close": "1.0", "C1": "75", "C2": "50", "C3": "25"}}, {"type": "1_n_2", "useCustomName": true, "customName": "U-D", "marks": 0, "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "minMarks": 0, "maxMarks": 0, "shuffleChoices": false, "displayType": "dropdownlist", "displayColumns": 0, "showCellAnswerState": true, "choices": ["↑", "↓", "Neither"], "matrix": ["if(scalar(A_y)>0,1,0)", "if(scalar(A_y)<0,1,0)", "if(scalar(A_y)=0,1,0)"], "distractors": ["", "", ""]}], "sortAnswers": false}, {"type": "gapfill", "useCustomName": true, "customName": "Pin D", "marks": 0, "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "prompt": "$D_x =$ [[0]] [[1]] {d(d_x)}$D_y =$ [[2]] [[3]] {d(d_y)}
", "gaps": [{"type": "engineering-answer", "useCustomName": true, "customName": "Dx", "marks": "4", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": false, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "settings": {"correctAnswer": "abs(D_x)", "right": "0.2", "close": "1.0", "C1": "75", "C2": "50", "C3": "25"}}, {"type": "1_n_2", "useCustomName": true, "customName": "L-R", "marks": 0, "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "minMarks": 0, "maxMarks": 0, "shuffleChoices": false, "displayType": "dropdownlist", "displayColumns": 0, "showCellAnswerState": true, "choices": ["←", "→", "Neither"], "matrix": ["if(scalar(D_x)>0,1,0)", "if(scalar(D_x)<0,1,0)", "if(scalar(D_x)=0,1,0)"], "distractors": ["", "", ""]}, {"type": "engineering-answer", "useCustomName": true, "customName": "Dy", "marks": "4", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": false, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "settings": {"correctAnswer": "abs(D_y)", "right": "0.2", "close": "1.0", "C1": "75", "C2": "50", "C3": "25"}}, {"type": "1_n_2", "useCustomName": true, "customName": "U-D", "marks": 0, "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "minMarks": 0, "maxMarks": 0, "shuffleChoices": false, "displayType": "dropdownlist", "displayColumns": 0, "showCellAnswerState": true, "choices": ["↑", "↓", "Neither"], "matrix": ["if(scalar(D_y)>0,1,0)", "if(scalar(D_y)<0,1,0)", "if(scalar(D_y)=0,1,0)"], "distractors": ["", "", ""]}], "sortAnswers": false}, {"type": "gapfill", "useCustomName": true, "customName": "Pin C", "marks": 0, "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "prompt": "$C_x =$ [[0]] [[1]] {d(C_x)}$C_y =$ [[2]] [[3]] {d(c_y)}
", "gaps": [{"type": "engineering-answer", "useCustomName": true, "customName": "Cx", "marks": "4", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": false, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "settings": {"correctAnswer": "abs(C_x)", "right": "0.2", "close": "1.0", "C1": "75", "C2": "50", "C3": "25"}}, {"type": "1_n_2", "useCustomName": true, "customName": "L-R", "marks": 0, "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "minMarks": 0, "maxMarks": 0, "shuffleChoices": false, "displayType": "dropdownlist", "displayColumns": 0, "showCellAnswerState": true, "choices": ["←", "→", "Neither"], "matrix": ["if(scalar(C_x)<0,1,0)", "if(scalar(C_x)>0,1,0)", "if(scalar(C_x)=0,1,0)"], "distractors": ["", "", ""]}, {"type": "engineering-answer", "useCustomName": true, "customName": "Cy", "marks": "4", "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": false, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "settings": {"correctAnswer": "abs(C_y)", "right": "0.2", "close": "1.0", "C1": "75", "C2": "50", "C3": "25"}}, {"type": "1_n_2", "useCustomName": true, "customName": "U-D", "marks": 0, "scripts": {}, "customMarkingAlgorithm": "", "extendBaseMarkingAlgorithm": true, "unitTests": [], "showCorrectAnswer": true, "showFeedbackIcon": true, "variableReplacements": [], "variableReplacementStrategy": "originalfirst", "nextParts": [], "suggestGoingBack": false, "adaptiveMarkingPenalty": 0, "exploreObjective": null, "minMarks": 0, "maxMarks": 0, "shuffleChoices": false, "displayType": "dropdownlist", "displayColumns": 0, "showCellAnswerState": true, "choices": ["↑", "↓", "Neither"], "matrix": ["if(scalar(C_y)<0,1,0)", "if(scalar(C_y)>0,1,0)", "if(scalar(C_y)=0,1,0)"], "distractors": ["", "", ""]}], "sortAnswers": false}], "partsMode": "all", "maxMarks": 0, "objectives": [], "penalties": [], "objectiveVisibility": "always", "penaltyVisibility": "always"}]}], "allowPrinting": true, "navigation": {"allowregen": true, "reverse": true, "browse": true, "allowsteps": true, "showfrontpage": false, "showresultspage": "oncompletion", "navigatemode": "sequence", "onleave": {"action": "none", "message": ""}, "preventleave": true, "startpassword": ""}, "timing": {"allowPause": true, "timeout": {"action": "none", "message": ""}, "timedwarning": {"action": "none", "message": ""}}, "feedback": {"showactualmark": true, "showtotalmark": true, "showanswerstate": true, "allowrevealanswer": true, "advicethreshold": 0, "intro": "", "end_message": "", "reviewshowscore": true, "reviewshowfeedback": true, "reviewshowexpectedanswer": true, "reviewshowadvice": true, "feedbackmessages": []}, "diagnostic": {"knowledge_graph": {"topics": [], "learning_objectives": []}, "script": "diagnosys", "customScript": ""}, "contributors": [{"name": "William Haynes", "profile_url": "https://numbas.mathcentre.ac.uk/accounts/profile/2530/"}], "extensions": ["geogebra", "quantities", "stats", "weh"], "custom_part_types": [{"source": {"pk": 19, "author": {"name": "William Haynes", "pk": 2530}, "edit_page": "/part_type/19/edit"}, "name": "Engineering Accuracy with units", "short_name": "engineering-answer", "description": "A value with units marked right if within an adjustable % error of the correct value. Marked close if within a wider margin of error.
", "help_url": "", "input_widget": "string", "input_options": {"correctAnswer": "siground(settings['correctAnswer'],4)", "hint": {"static": true, "value": ""}, "allowEmpty": {"static": true, "value": true}}, "can_be_gap": true, "can_be_step": true, "marking_script": "mark:\nswitch( \n right and good_units and right_sign, add_credit(1.0,'Correct.'),\n right and good_units and not right_sign, add_credit(settings['C2'],'Wrong sign.'),\n right and right_sign and not good_units, add_credit(settings['C2'],'Correct value, but wrong or missing units.'),\n close and good_units, add_credit(settings['C1'],'Close.'),\n close and not good_units, add_credit(settings['C3'],'Answer is close, but wrong or missing units.'),\n incorrect('Wrong answer.')\n)\n\n\ninterpreted_answer:\nqty(student_scalar, student_units)\n\n\n\ncorrect_quantity:\nsettings[\"correctAnswer\"]\n\n\n\ncorrect_units:\nunits(correct_quantity)\n\n\nallowed_notation_styles:\n[\"plain\",\"en\"]\n\nmatch_student_number:\nmatchnumber(studentAnswer,allowed_notation_styles)\n\nstudent_scalar:\nmatch_student_number[1]\n\nstudent_units:\nreplace_regex('ohms','ohm',\n replace_regex('\u00b0', ' deg',\n replace_regex('-', ' ' ,\n studentAnswer[len(match_student_number[0])..len(studentAnswer)])),\"i\")\n\ngood_units:\ntry(\ncompatible(quantity(1, student_units),correct_units),\nmsg,\nfeedback(msg);false)\n\n\nstudent_quantity:\nswitch(not good_units, \n student_scalar * correct_units, \n not right_sign,\n -quantity(student_scalar, student_units),\n quantity(student_scalar,student_units)\n)\n \n\n\npercent_error:\ntry(\nscalar(abs((correct_quantity - student_quantity)/correct_quantity))*100 \n,msg,\nif(student_quantity=correct_quantity,0,100))\n \n\nright:\npercent_error <= settings['right']\n\n\nclose:\nright_sign and percent_error <= settings['close']\n\nright_sign:\nsign(student_scalar) = sign(correct_quantity)", "marking_notes": [{"name": "mark", "description": "This is the main marking note. It should award credit and provide feedback based on the student's answer.", "definition": "switch( \n right and good_units and right_sign, add_credit(1.0,'Correct.'),\n right and good_units and not right_sign, add_credit(settings['C2'],'Wrong sign.'),\n right and right_sign and not good_units, add_credit(settings['C2'],'Correct value, but wrong or missing units.'),\n close and good_units, add_credit(settings['C1'],'Close.'),\n close and not good_units, add_credit(settings['C3'],'Answer is close, but wrong or missing units.'),\n incorrect('Wrong answer.')\n)\n"}, {"name": "interpreted_answer", "description": "A value representing the student's answer to this part.", "definition": "qty(student_scalar, student_units)\n\n"}, {"name": "correct_quantity", "description": "", "definition": "settings[\"correctAnswer\"]\n\n"}, {"name": "correct_units", "description": "", "definition": "units(correct_quantity)\n"}, {"name": "allowed_notation_styles", "description": "", "definition": "[\"plain\",\"en\"]"}, {"name": "match_student_number", "description": "", "definition": "matchnumber(studentAnswer,allowed_notation_styles)"}, {"name": "student_scalar", "description": "", "definition": "match_student_number[1]"}, {"name": "student_units", "description": "Modify the unit portion of the student's answer by
\n1. replacing \"ohms\" with \"ohm\" case insensitive
\n2. replacing '-' with ' '
\n3. replacing '°' with ' deg'
\nto allow answers like 10 ft-lb and 30°
", "definition": "replace_regex('ohms','ohm',\n replace_regex('\u00b0', ' deg',\n replace_regex('-', ' ' ,\n studentAnswer[len(match_student_number[0])..len(studentAnswer)])),\"i\")"}, {"name": "good_units", "description": "", "definition": "try(\ncompatible(quantity(1, student_units),correct_units),\nmsg,\nfeedback(msg);false)\n"}, {"name": "student_quantity", "description": "This fixes the student answer for two common errors.
\nIf student_units are wrong - replace with correct units
\nIf student_scalar has the wrong sign - replace with right sign
\nIf student makes both errors, only one gets fixed.
", "definition": "switch(not good_units, \n student_scalar * correct_units, \n not right_sign,\n -quantity(student_scalar, student_units),\n quantity(student_scalar,student_units)\n)\n \n"}, {"name": "percent_error", "description": "", "definition": "try(\nscalar(abs((correct_quantity - student_quantity)/correct_quantity))*100 \n,msg,\nif(student_quantity=correct_quantity,0,100))\n "}, {"name": "right", "description": "", "definition": "percent_error <= settings['right']\n"}, {"name": "close", "description": "Only marked close if the student actually has the right sign.
", "definition": "right_sign and percent_error <= settings['close']"}, {"name": "right_sign", "description": "", "definition": "sign(student_scalar) = sign(correct_quantity) "}], "settings": [{"name": "correctAnswer", "label": "Correct Quantity.", "help_url": "", "hint": "The correct answer given as a JME quantity.", "input_type": "code", "default_value": "", "evaluate": true}, {"name": "right", "label": "% Accuracy for right.", "help_url": "", "hint": "Question will be considered correct if the scalar part of the student's answer is within this % of correct value.", "input_type": "code", "default_value": "0.2", "evaluate": true}, {"name": "close", "label": "% Accuracy for close.", "help_url": "", "hint": "Question will be considered close if the scalar part of the student's answer is within this % of correct value.", "input_type": "code", "default_value": "1.0", "evaluate": true}, {"name": "C1", "label": "Close with units.", "help_url": "", "hint": "Partial Credit for close value with appropriate units. if correct answer is 100 N and close is ±1%,