// 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

\n

1. replacing \"ohms\" with \"ohm\"  case insensitive

\n

2. replacing '-' with ' ' 

\n

3. replacing '°' with ' deg' 

\n

to 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.  

\n

If student_units are wrong  - replace with correct units

\n

If student_scalar has the wrong sign - replace with right sign

\n

If 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%,
99  N is accepted.", "input_type": "percent", "default_value": "75"}, {"name": "C2", "label": "No units or wrong sign", "help_url": "", "hint": "Partial credit for forgetting units or using wrong sign.
If the correct answer is 100 N, both 100 and -100 N are accepted.", "input_type": "percent", "default_value": "50"}, {"name": "C3", "label": "Close, no units.", "help_url": "", "hint": "Partial Credit for close value but forgotten units.
This value would be close if the expected units were provided.  If the correct answer is 100 N, and close is ±1%,
99 is accepted.", "input_type": "percent", "default_value": "25"}], "public_availability": "always", "published": true, "extensions": ["quantities"]}], "resources": [], "navigation": {"allowregen": true, "showfrontpage": false, "preventleave": false, "typeendtoleave": false}, "contributors": [{"name": "William Haynes", "profile_url": "https://numbas.mathcentre.ac.uk/accounts/profile/2530/"}], "tags": ["Equilibrium", "equilibrium", "Frame", "frame", "Mechanics", "mechanics", "Statics", "statics"], "metadata": {"description": "

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 )}

\n

The 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:

\n

Note 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

\n

Known:

\n

$W$ = {F_w}

\n

Determine 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.

\n

Using 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$

\n

Find the scalar components of the forces at pins A and C.

\n

Note: 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}$

\n

Check

\n

You 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

\n

random(
[['fd',fd], ['me', 0]],
[['me',me], ['fd', 0]]
) + [['w',0]]

", "templateType": "anything", "can_override": false}, "debug": {"name": "debug", "group": "Ungrouped variables", "definition": "false", "description": "", "templateType": "anything", "can_override": false}, "sigma_f": {"name": "sigma_f", "group": "vectors", "definition": "vecW+vecA+vecC", "description": "", "templateType": "anything", "can_override": false}, "beta": {"name": "beta", "group": "magnitudes", "definition": "degrees(angle(vector(-1,0),B-C))", "description": "", "templateType": "anything", "can_override": false}, "vecC": {"name": "vecC", "group": "vectors", "definition": "siground(scalar(magC) *\nvector(cos(radians(180-beta)),\n sin(radians(180-beta))),4)", "description": "", "templateType": "anything", "can_override": false}, "y1": {"name": "y1", "group": "magnitudes", "definition": "qty(B[1],units[1])", "description": "", "templateType": "anything", "can_override": false}, "x1": {"name": "x1", "group": "magnitudes", "definition": "qty(B[0],units[1])", "description": "", "templateType": "anything", "can_override": false}, "vecW": {"name": "vecW", "group": "vectors", "definition": "vector(0,-w)", "description": "", "templateType": "anything", "can_override": false}, "y2": {"name": "y2", "group": "magnitudes", "definition": "qty(abs(b[1]-c[1]),units[1])", "description": "", "templateType": "anything", "can_override": false}, "alpha": {"name": "alpha", "group": "magnitudes", "definition": "degrees(angle(vector(1,0),B))", "description": "", "templateType": "anything", "can_override": false}, "vecA": {"name": "vecA", "group": "vectors", "definition": "siground(scalar(magA)*\nvector(cos(radians(alpha)),\n sin(radians(alpha))),4)", "description": "", "templateType": "anything", "can_override": false}, "magC": {"name": "magC", "group": "magnitudes", "definition": "F_w cos(radians(alpha))/sin(radians(alpha+beta))", "description": "", "templateType": "anything", "can_override": false}, "me": {"name": "me", "group": "Ungrouped variables", "definition": "0//random(-1000..1000#100 except 0)", "description": "", "templateType": "anything", "can_override": false}, "w": {"name": "w", "group": "Ungrouped variables", "definition": "random(100..500#25)", "description": "", "templateType": "anything", "can_override": false}, "x2": {"name": "x2", "group": "magnitudes", "definition": "qty(abs(b[0]-c[0]),units[1])", "description": "", "templateType": "anything", "can_override": false}}, "variablesTest": {"condition": "B[1]<> C[1] and B[0] <> B[1] and C[0] <> C[1]", "maxRuns": 100}, "ungrouped_variables": ["B", "C", "fd", "me", "w", "units", "ggb_load", "debug"], "variable_groups": [{"name": "magnitudes", "variables": ["F_w", "alpha", "beta", "magA", "magC", "x1", "y1", "x2", "y2"]}, {"name": "vectors", "variables": ["vecW", "vecA", "vecC", "sigma_f"]}], "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 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

\n

1. replacing \"ohms\" with \"ohm\"  case insensitive

\n

2. replacing '-' with ' ' 

\n

3. replacing '°' with ' deg' 

\n

to 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.  

\n

If student_units are wrong  - replace with correct units

\n

If student_scalar has the wrong sign - replace with right sign

\n

If 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%,
99  N is accepted.", "input_type": "percent", "default_value": "75"}, {"name": "C2", "label": "No units or wrong sign", "help_url": "", "hint": "Partial credit for forgetting units or using wrong sign.
If the correct answer is 100 N, both 100 and -100 N are accepted.", "input_type": "percent", "default_value": "50"}, {"name": "C3", "label": "Close, no units.", "help_url": "", "hint": "Partial Credit for close value but forgotten units.
This value would be close if the expected units were provided.  If the correct answer is 100 N, and close is ±1%,
99 is accepted.", "input_type": "percent", "default_value": "25"}], "public_availability": "always", "published": true, "extensions": ["quantities"]}], "resources": [], "navigation": {"allowregen": true, "showfrontpage": false, "preventleave": false, "typeendtoleave": false}, "contributors": [{"name": "William Haynes", "profile_url": "https://numbas.mathcentre.ac.uk/accounts/profile/2530/"}], "tags": ["Equilibrium", "equilibrium", "frame", "Frame", "Mechanics", "mechanics", "statics", "Statics"], "metadata": {"description": "

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 )}

\n

The A-frame shown supports a {description} as shown.  

\n

Determine the scalar components of the reactions at pins A and C.  

\n

Note: 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:

\n

       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 )}

\n

Known:

\n

$M_E = \\var{display(abs(M_E))}$ $D = \\var{display(abs(F_D))}$

\n

Determine 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)}$°

\n

Start 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\")}

\n
\n

II: $\\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
\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
\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
\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
\n

\n
\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}$

\n
", "rulesets": {}, "variables": {"me": {"name": "me", "group": "Ungrouped variables", "definition": "load[1]", "description": "

the 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": "

\n

magnidude 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

\n

version 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

\n

1. replacing \"ohms\" with \"ohm\"  case insensitive

\n

2. replacing '-' with ' ' 

\n

3. replacing '°' with ' deg' 

\n

to 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.  

\n

If student_units are wrong  - replace with correct units

\n

If student_scalar has the wrong sign - replace with right sign

\n

If 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%,
99  N is accepted.", "input_type": "percent", "default_value": "75"}, {"name": "C2", "label": "No units or wrong sign", "help_url": "", "hint": "Partial credit for forgetting units or using wrong sign.
If the correct answer is 100 N, both 100 and -100 N are accepted.", "input_type": "percent", "default_value": "50"}, {"name": "C3", "label": "Close, no units.", "help_url": "", "hint": "Partial Credit for close value but forgotten units.
This value would be close if the expected units were provided.  If the correct answer is 100 N, and close is ±1%,
99 is accepted.", "input_type": "percent", "default_value": "25"}], "public_availability": "always", "published": true, "extensions": ["quantities"]}], "resources": [], "navigation": {"allowregen": true, "showfrontpage": false, "preventleave": false, "typeendtoleave": false}, "contributors": [{"name": "William Haynes", "profile_url": "https://numbas.mathcentre.ac.uk/accounts/profile/2530/"}], "tags": ["Equilibrium", "equilibrium", "frame", "Frame", "Mechanics", "mechanics", "Statics", "statics"], "metadata": {"description": "Solve for the internal forces at on a multipart frame.", "licence": "Creative Commons Attribution-NonCommercial 4.0 International"}, "statement": "

{geogebra_applet('wrp4gmsn',var_1)}

\n

The 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}$

\n

Start 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)}

\n

Count 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$).

\n

FBD 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}\\]

\n

FBD II

\n

With $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}\\]

\n

FBD III

\n

With $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}\\]

\n

FBD II

\n

With $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}\\]

\n

FBD IV

\n

All 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

\n

 ex (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

\n

1. replacing \"ohms\" with \"ohm\"  case insensitive

\n

2. replacing '-' with ' ' 

\n

3. replacing '°' with ' deg' 

\n

to 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.  

\n

If student_units are wrong  - replace with correct units

\n

If student_scalar has the wrong sign - replace with right sign

\n

If 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%,
99  N is accepted.", "input_type": "percent", "default_value": "75"}, {"name": "C2", "label": "No units or wrong sign", "help_url": "", "hint": "Partial credit for forgetting units or using wrong sign.
If the correct answer is 100 N, both 100 and -100 N are accepted.", "input_type": "percent", "default_value": "50"}, {"name": "C3", "label": "Close, no units.", "help_url": "", "hint": "Partial Credit for close value but forgotten units.
This value would be close if the expected units were provided.  If the correct answer is 100 N, and close is ±1%,
99 is accepted.", "input_type": "percent", "default_value": "25"}], "public_availability": "always", "published": true, "extensions": ["quantities"]}], "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"]]}