math-exercises 3.0.97 → 3.0.98
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/exercises/math/calculLitteral/inequations/index.d.ts +2 -0
- package/lib/exercises/math/calculLitteral/inequations/index.d.ts.map +1 -1
- package/lib/exercises/math/calculLitteral/inequations/index.js +2 -0
- package/lib/exercises/math/calculLitteral/inequations/inverseInequality.d.ts.map +1 -1
- package/lib/exercises/math/calculLitteral/inequations/inverseInequality.js +83 -5
- package/lib/exercises/math/calculLitteral/inequations/inverseInequalityWithGraph.d.ts +10 -0
- package/lib/exercises/math/calculLitteral/inequations/inverseInequalityWithGraph.d.ts.map +1 -0
- package/lib/exercises/math/calculLitteral/inequations/inverseInequalityWithGraph.js +220 -0
- package/lib/exercises/math/conversion/hoursToDecimal.js +1 -1
- package/lib/exercises/math/functions/affines/leadingCoefficient.js +1 -1
- package/lib/exercises/math/functions/basics/findZeroesProductQuotient.js +1 -1
- package/lib/exercises/math/functions/basics/graphicInequation.d.ts.map +1 -1
- package/lib/exercises/math/functions/basics/graphicInequation.js +37 -5
- package/lib/exercises/math/functions/basics/inverseImageFunctionTable.js +1 -1
- package/lib/exercises/math/functions/basics/isPointOnFunction.d.ts.map +1 -1
- package/lib/exercises/math/functions/basics/isPointOnFunction.js +1 -1
- package/lib/exercises/math/functions/basics/twoFunctionsInequation.d.ts.map +1 -1
- package/lib/exercises/math/functions/basics/twoFunctionsInequation.js +34 -0
- package/lib/exercises/math/functions/basics/valueTableFromGraph.d.ts.map +1 -1
- package/lib/exercises/math/functions/basics/valueTableFromGraph.js +1 -1
- package/lib/exercises/math/functions/inverse/index.d.ts +1 -0
- package/lib/exercises/math/functions/inverse/index.d.ts.map +1 -1
- package/lib/exercises/math/functions/inverse/index.js +1 -0
- package/lib/exercises/math/functions/inverse/solveInverseEquation.d.ts +8 -0
- package/lib/exercises/math/functions/inverse/solveInverseEquation.d.ts.map +1 -0
- package/lib/exercises/math/functions/inverse/solveInverseEquation.js +147 -0
- package/lib/exercises/math/functions/sign/affineProductSignTable.js +1 -1
- package/lib/exercises/math/functions/sign/affineProductSignTableThirdLine.d.ts +9 -0
- package/lib/exercises/math/functions/sign/affineProductSignTableThirdLine.d.ts.map +1 -0
- package/lib/exercises/math/functions/sign/affineProductSignTableThirdLine.js +201 -0
- package/lib/exercises/math/functions/sign/affineSignTable.js +1 -1
- package/lib/exercises/math/functions/sign/index.d.ts +1 -0
- package/lib/exercises/math/functions/sign/index.d.ts.map +1 -1
- package/lib/exercises/math/functions/sign/index.js +1 -0
- package/lib/exercises/math/functions/square/index.d.ts +2 -0
- package/lib/exercises/math/functions/square/index.d.ts.map +1 -1
- package/lib/exercises/math/functions/square/index.js +2 -1
- package/lib/exercises/math/functions/square/squareFunctionInequationWithGraph.d.ts +9 -0
- package/lib/exercises/math/functions/square/squareFunctionInequationWithGraph.d.ts.map +1 -0
- package/lib/exercises/math/functions/square/squareFunctionInequationWithGraph.js +151 -0
- package/lib/exercises/math/functions/square/squareImageIntervalWithGraph.d.ts.map +1 -1
- package/lib/exercises/math/functions/square/squareImageIntervalWithGraph.js +19 -3
- package/lib/exercises/math/functions/variations/index.d.ts +4 -0
- package/lib/exercises/math/functions/variations/index.d.ts.map +1 -1
- package/lib/exercises/math/functions/variations/index.js +4 -0
- package/lib/exercises/math/functions/variations/readExtremaOnGraph.d.ts +14 -0
- package/lib/exercises/math/functions/variations/readExtremaOnGraph.d.ts.map +1 -0
- package/lib/exercises/math/functions/variations/readExtremaOnGraph.js +215 -0
- package/lib/exercises/math/functions/variations/readVarOnGraph.d.ts +9 -0
- package/lib/exercises/math/functions/variations/readVarOnGraph.d.ts.map +1 -0
- package/lib/exercises/math/functions/variations/readVarOnGraph.js +128 -0
- package/lib/exercises/math/functions/variations/readVarOnGraph2.d.ts +9 -0
- package/lib/exercises/math/functions/variations/readVarOnGraph2.d.ts.map +1 -0
- package/lib/exercises/math/functions/variations/readVarOnGraph2.js +172 -0
- package/lib/exercises/math/functions/variations/varTableExtremaReading.d.ts +4 -1
- package/lib/exercises/math/functions/variations/varTableExtremaReading.d.ts.map +1 -1
- package/lib/exercises/math/functions/variations/varTableExtremaReading.js +108 -42
- package/lib/exercises/math/functions/variations/varTableFromSentences.d.ts +7 -0
- package/lib/exercises/math/functions/variations/varTableFromSentences.d.ts.map +1 -1
- package/lib/exercises/math/functions/variations/varTableFromSentences.js +167 -137
- package/lib/exercises/math/geometry/areas/triangleArea.js +1 -1
- package/lib/exercises/math/probaStat/basicStats/calculateFrequency.js +1 -1
- package/lib/exercises/math/probaStat/binomial/binomialInequation.js +2 -2
- package/lib/exercises/math/trigonometry/trigonometryAngleCalcul.js +1 -1
- package/lib/exercises/math/trigonometry/trigonometrySideCalcul.js +1 -1
- package/lib/geogebra/colors.d.ts +0 -1
- package/lib/geogebra/colors.d.ts.map +1 -1
- package/lib/geogebra/colors.js +2 -2
- package/lib/index.d.ts +42 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/math/inequations/inequation.d.ts +1 -0
- package/lib/math/inequations/inequation.d.ts.map +1 -1
- package/lib/math/inequations/inequation.js +12 -0
- package/lib/tree/nodes/operators/addNode.js +0 -1
- package/lib/tree/nodes/sets/intervalNode.d.ts +1 -0
- package/lib/tree/nodes/sets/intervalNode.d.ts.map +1 -1
- package/lib/tree/nodes/sets/intervalNode.js +3 -0
- package/lib/tree/parsers/intervalParser.d.ts +2 -0
- package/lib/tree/parsers/intervalParser.d.ts.map +1 -1
- package/lib/tree/parsers/intervalParser.js +2 -1
- package/package.json +1 -1
|
@@ -2,8 +2,10 @@ export * from "./firstDegreeInequationsType0.js";
|
|
|
2
2
|
export * from "./firstDegreeInequationsType1.js";
|
|
3
3
|
export * from "./firstDegreeInequationsType2.js";
|
|
4
4
|
export * from "./firstDegreeInequationsType3.js";
|
|
5
|
+
export * from "./inverseInequality.js";
|
|
5
6
|
export * from "./squareFunctionInequation.js";
|
|
6
7
|
export * from "./inequationsSign.js";
|
|
7
8
|
export * from "./minNumberInequality.js";
|
|
8
9
|
export * from "./isInequalityTrue.js";
|
|
10
|
+
export * from "./inverseInequalityWithGraph.js";
|
|
9
11
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/calculLitteral/inequations/index.ts"],"names":[],"mappings":"AAAA,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC;AACjD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/calculLitteral/inequations/index.ts"],"names":[],"mappings":"AAAA,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC;AACjD,cAAc,wBAAwB,CAAC;AACvC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iCAAiC,CAAC"}
|
|
@@ -2,7 +2,9 @@ export * from "./firstDegreeInequationsType0.js";
|
|
|
2
2
|
export * from "./firstDegreeInequationsType1.js";
|
|
3
3
|
export * from "./firstDegreeInequationsType2.js";
|
|
4
4
|
export * from "./firstDegreeInequationsType3.js";
|
|
5
|
+
export * from "./inverseInequality.js";
|
|
5
6
|
export * from "./squareFunctionInequation.js";
|
|
6
7
|
export * from "./inequationsSign.js";
|
|
7
8
|
export * from "./minNumberInequality.js";
|
|
8
9
|
export * from "./isInequalityTrue.js";
|
|
10
|
+
export * from "./inverseInequalityWithGraph.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inverseInequality.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/calculLitteral/inequations/inverseInequality.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,
|
|
1
|
+
{"version":3,"file":"inverseInequality.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/calculLitteral/inequations/inverseInequality.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAcT,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,gBAAgB,EAGjB,MAAM,sCAAsC,CAAC;AAkB9C,KAAK,WAAW,GAAG;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,gBAAgB,EAAE,gBAAgB,CAAC;CACpC,CAAC;AAkOF,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,WAAW,CAenD,CAAC"}
|
|
@@ -6,11 +6,13 @@ import { InequationSolutionNode } from "../../../../tree/nodes/inequations/inequ
|
|
|
6
6
|
import { MinusInfinityNode, PlusInfinityNode, } from "../../../../tree/nodes/numbers/infiniteNode.js";
|
|
7
7
|
import { NumberNode } from "../../../../tree/nodes/numbers/numberNode.js";
|
|
8
8
|
import { frac } from "../../../../tree/nodes/operators/fractionNode.js";
|
|
9
|
+
import { multiply } from "../../../../tree/nodes/operators/multiplyNode.js";
|
|
9
10
|
import { ClosureType } from "../../../../tree/nodes/sets/closure.js";
|
|
10
11
|
import { IntervalNode } from "../../../../tree/nodes/sets/intervalNode.js";
|
|
11
12
|
import { UnionIntervalNode } from "../../../../tree/nodes/sets/unionIntervalNode.js";
|
|
12
13
|
import { unionIntervalParser } from "../../../../tree/parsers/unionIntervalParser.js";
|
|
13
14
|
import { handleVEAError } from "../../../../utils/errors/handleVEAError.js";
|
|
15
|
+
import { alignTex } from "../../../../utils/latex/alignTex.js";
|
|
14
16
|
const getPropositions = (n, { answer, k, inequationSymbol }) => {
|
|
15
17
|
const propositions = [];
|
|
16
18
|
addValidProp(propositions, answer);
|
|
@@ -33,9 +35,9 @@ const getAnswer = (identifiers) => {
|
|
|
33
35
|
if (symbol.isSup) {
|
|
34
36
|
// Pour l'inegalite 1/x > k on a en solution [0, 1/k]
|
|
35
37
|
const interval = new IntervalNode(new NumberNode(0), frac(1, k).simplify(),
|
|
36
|
-
// Toujours
|
|
38
|
+
// Toujours ouvert sur 0
|
|
37
39
|
// Pour 1/k, ouvert si <, sinon ferme pour <=
|
|
38
|
-
isStrict ? ClosureType.
|
|
40
|
+
isStrict ? ClosureType.OO : ClosureType.OF);
|
|
39
41
|
return new InequationSolutionNode(interval).toTex();
|
|
40
42
|
}
|
|
41
43
|
else {
|
|
@@ -70,7 +72,11 @@ const getAnswer = (identifiers) => {
|
|
|
70
72
|
};
|
|
71
73
|
const getInstruction = (identifiers) => {
|
|
72
74
|
const { k, inequationSymbol } = identifiers;
|
|
73
|
-
return `Résoudre
|
|
75
|
+
return `Résoudre, pour $x \\neq 0$ :
|
|
76
|
+
|
|
77
|
+
$$
|
|
78
|
+
${frac(1, "x").toTex()} ${inequationSymbol} ${k}
|
|
79
|
+
$$`;
|
|
74
80
|
};
|
|
75
81
|
const getKeys = (identifiers) => {
|
|
76
82
|
return ["S", "equal", "lbracket", "rbracket", "semicolon", "infty", "cup"];
|
|
@@ -80,7 +86,7 @@ const isAnswerValid = (ans, { answer }) => {
|
|
|
80
86
|
const parsed = unionIntervalParser(ans.replaceAll("S", "").replaceAll("=", ""));
|
|
81
87
|
if (!parsed)
|
|
82
88
|
return false;
|
|
83
|
-
return "S=\\ " + parsed.simplify().toTex() === answer;
|
|
89
|
+
return ("S=\\ " + parsed.simplify({ decimalToFractions: true }).toTex() === answer);
|
|
84
90
|
}
|
|
85
91
|
catch (err) {
|
|
86
92
|
return handleVEAError(err);
|
|
@@ -95,18 +101,89 @@ const getInverseInequalityQuestion = (ops) => {
|
|
|
95
101
|
};
|
|
96
102
|
return getQuestionFromIdentifiers(identifiers);
|
|
97
103
|
};
|
|
104
|
+
const getHint = (identifiers) => {
|
|
105
|
+
return `Résous l'inéquation en considérant que $x$ est négatif, puis en considérant qu'il est positif.`;
|
|
106
|
+
};
|
|
107
|
+
const getCorrection = (identifiers) => {
|
|
108
|
+
const { k, inequationSymbol } = identifiers;
|
|
109
|
+
const ineqSign = new InequationSymbol(inequationSymbol);
|
|
110
|
+
const interval = new IntervalNode(MinusInfinityNode, new NumberNode(0), ClosureType.OO);
|
|
111
|
+
const isSup = ineqSign.isSup;
|
|
112
|
+
const kPos = k > 0;
|
|
113
|
+
let xNegCorr = ``;
|
|
114
|
+
let xPosCorr = ``;
|
|
115
|
+
const statement = `${frac(1, "x").toTex()} ${inequationSymbol} ${k}`;
|
|
116
|
+
if (isSup) {
|
|
117
|
+
if (kPos) {
|
|
118
|
+
xNegCorr = `Si $x$ est négatif, alors $\\frac{1}{x}$ est négatif, donc il n'y a pas de solution.`;
|
|
119
|
+
xPosCorr = `Si $x$ est positif, alors :
|
|
120
|
+
|
|
121
|
+
${alignTex([
|
|
122
|
+
[statement, "\\iff", `1 ${inequationSymbol} ${multiply(k, "x").toTex()}`],
|
|
123
|
+
["", "\\iff", `x ${ineqSign.reversed()} ${frac(1, k).simplify().toTex()}`],
|
|
124
|
+
])}`;
|
|
125
|
+
//x pos : x>1/k
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
//x nég: x<-1/k
|
|
129
|
+
xPosCorr = `Si $x$ est positif, alors $\\frac{1}{x}$ est positif, donc tous les nombres positifs sont solutions de cette inéquation.`;
|
|
130
|
+
xNegCorr = `Si $x$ est négatif, alors :
|
|
131
|
+
|
|
132
|
+
${alignTex([
|
|
133
|
+
[statement, "\\iff", `1 ${ineqSign.reversed()} ${multiply(k, "x").toTex()}`],
|
|
134
|
+
["", "\\iff", `x ${ineqSign.reversed()} ${frac(1, k).simplify().toTex()}`],
|
|
135
|
+
])}`;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
if (kPos) {
|
|
140
|
+
xNegCorr = `Si $x$ est négatif, alors $\\frac{1}{x}$ est négatif, donc tous les nombres négatifs sont solutions de cette inéquation.`;
|
|
141
|
+
xPosCorr = `Si $x$ est positif, alors :
|
|
142
|
+
|
|
143
|
+
${alignTex([
|
|
144
|
+
[statement, "\\iff", `1 ${inequationSymbol} ${multiply(k, "x").toTex()}`],
|
|
145
|
+
["", "\\iff", `x ${ineqSign.reversed()} ${frac(1, k).simplify().toTex()}`],
|
|
146
|
+
])}`;
|
|
147
|
+
//x pos : x>1/k
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
//x nég: x<-1/k
|
|
151
|
+
xPosCorr = `Si $x$ est positif, alors $\\frac{1}{x}$ est positif, donc il n'y a pas de solution.`;
|
|
152
|
+
xNegCorr = `Si $x$ est négatif, alors :
|
|
153
|
+
|
|
154
|
+
${alignTex([
|
|
155
|
+
[statement, "\\iff", `1 ${ineqSign.reversed()} ${multiply(k, "x").toTex()}`],
|
|
156
|
+
["", "\\iff", `x ${ineqSign.reversed()} ${frac(1, k).simplify().toTex()}`],
|
|
157
|
+
])}`;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return `On multiplie les deux membres de l'inéquation par $x$.
|
|
161
|
+
|
|
162
|
+
${xPosCorr}
|
|
163
|
+
|
|
164
|
+
${xNegCorr}
|
|
165
|
+
|
|
166
|
+
Ainsi, la solution de l'inéquation :
|
|
167
|
+
|
|
168
|
+
$$
|
|
169
|
+
${getAnswer(identifiers)}
|
|
170
|
+
$$
|
|
171
|
+
`;
|
|
172
|
+
};
|
|
98
173
|
const getQuestionFromIdentifiers = (identifiers) => {
|
|
99
174
|
return {
|
|
100
175
|
answer: getAnswer(identifiers),
|
|
101
176
|
instruction: getInstruction(identifiers),
|
|
102
177
|
keys: getKeys(identifiers),
|
|
178
|
+
hint: getHint(identifiers),
|
|
179
|
+
correction: getCorrection(identifiers),
|
|
103
180
|
answerFormat: "tex",
|
|
104
181
|
identifiers,
|
|
105
182
|
};
|
|
106
183
|
};
|
|
107
184
|
export const inverseInequality = {
|
|
108
185
|
id: "inverseInequality",
|
|
109
|
-
label: "Résoudre $\\frac{1}{x} < k$",
|
|
186
|
+
label: "Résoudre une inéquation du type $\\frac{1}{x} < k$",
|
|
110
187
|
isSingleStep: true,
|
|
111
188
|
generator: (nb, opts) => getDistinctQuestions(() => getInverseInequalityQuestion(opts), nb),
|
|
112
189
|
qcmTimer: 60,
|
|
@@ -117,4 +194,5 @@ export const inverseInequality = {
|
|
|
117
194
|
getInstruction,
|
|
118
195
|
getAnswer,
|
|
119
196
|
getQuestionFromIdentifiers,
|
|
197
|
+
hasHintAndCorrection: true,
|
|
120
198
|
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Exercise } from "../../../../exercises/exercise.js";
|
|
2
|
+
import { InegalitySymbols } from "../../../../math/inequations/inequation.js";
|
|
3
|
+
import { NodeIdentifiers } from "../../../../tree/nodes/nodeConstructor.js";
|
|
4
|
+
type Identifiers = {
|
|
5
|
+
k: NodeIdentifiers;
|
|
6
|
+
inequationSymbol: InegalitySymbols;
|
|
7
|
+
};
|
|
8
|
+
export declare const inverseInequalityWithGraph: Exercise<Identifiers>;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=inverseInequalityWithGraph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inverseInequalityWithGraph.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/calculLitteral/inequations/inverseInequalityWithGraph.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAeT,MAAM,6BAA6B,CAAC;AAIrC,OAAO,EACL,gBAAgB,EAGjB,MAAM,sCAAsC,CAAC;AAM9C,OAAO,EACL,eAAe,EAEhB,MAAM,qCAAqC,CAAC;AAiB7C,KAAK,WAAW,GAAG;IACjB,CAAC,EAAE,eAAe,CAAC;IACnB,gBAAgB,EAAE,gBAAgB,CAAC;CACpC,CAAC;AAgQF,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,WAAW,CAgB5D,CAAC"}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
import { addValidProp, shuffleProps, tryToAddWrongProp, } from "../../../../exercises/exercise.js";
|
|
2
|
+
import { getDistinctQuestions } from "../../../../exercises/utils/getDistinctQuestions.js";
|
|
3
|
+
import { randomColor } from "../../../../geogebra/colors.js";
|
|
4
|
+
import { GeogebraConstructor } from "../../../../geogebra/geogebraConstructor.js";
|
|
5
|
+
import { InequationSymbol, InequationSymbolConstructor, } from "../../../../math/inequations/inequation.js";
|
|
6
|
+
import { RationalConstructor } from "../../../../math/numbers/rationals/rational.js";
|
|
7
|
+
import { randint } from "../../../../math/utils/random/randint.js";
|
|
8
|
+
import { opposite } from "../../../../tree/nodes/functions/oppositeNode.js";
|
|
9
|
+
import { InequationSolutionNode } from "../../../../tree/nodes/inequations/inequationSolutionNode.js";
|
|
10
|
+
import { reifyAlgebraic, } from "../../../../tree/nodes/nodeConstructor.js";
|
|
11
|
+
import { MinusInfinityNode, PlusInfinityNode, } from "../../../../tree/nodes/numbers/infiniteNode.js";
|
|
12
|
+
import { NumberNode } from "../../../../tree/nodes/numbers/numberNode.js";
|
|
13
|
+
import { frac } from "../../../../tree/nodes/operators/fractionNode.js";
|
|
14
|
+
import { ClosureType } from "../../../../tree/nodes/sets/closure.js";
|
|
15
|
+
import { IntervalNode } from "../../../../tree/nodes/sets/intervalNode.js";
|
|
16
|
+
import { UnionIntervalNode } from "../../../../tree/nodes/sets/unionIntervalNode.js";
|
|
17
|
+
import { unionIntervalParser } from "../../../../tree/parsers/unionIntervalParser.js";
|
|
18
|
+
import { coinFlip } from "../../../../utils/alea/coinFlip.js";
|
|
19
|
+
import { random } from "../../../../utils/alea/random.js";
|
|
20
|
+
import { handleVEAError } from "../../../../utils/errors/handleVEAError.js";
|
|
21
|
+
const getPropositions = (n, { answer, k, inequationSymbol }) => {
|
|
22
|
+
const propositions = [];
|
|
23
|
+
addValidProp(propositions, answer);
|
|
24
|
+
const kNode = reifyAlgebraic(k);
|
|
25
|
+
tryToAddWrongProp(propositions, getAnswer({ k: opposite(kNode).toIdentifiers(), inequationSymbol }));
|
|
26
|
+
tryToAddWrongProp(propositions, getAnswer({
|
|
27
|
+
k,
|
|
28
|
+
inequationSymbol: new InequationSymbol(inequationSymbol).reversed(),
|
|
29
|
+
}));
|
|
30
|
+
tryToAddWrongProp(propositions, getAnswer({
|
|
31
|
+
k,
|
|
32
|
+
inequationSymbol: new InequationSymbol(inequationSymbol).strictnessToggled(),
|
|
33
|
+
}));
|
|
34
|
+
return shuffleProps(propositions, n);
|
|
35
|
+
};
|
|
36
|
+
const getAnswer = (identifiers) => {
|
|
37
|
+
const { k, inequationSymbol } = identifiers;
|
|
38
|
+
const symbol = new InequationSymbol(inequationSymbol);
|
|
39
|
+
const isStrict = symbol.isStrict;
|
|
40
|
+
const kNode = reifyAlgebraic(k);
|
|
41
|
+
const kEv = kNode.evaluate();
|
|
42
|
+
if (kEv > 0) {
|
|
43
|
+
if (symbol.isSup) {
|
|
44
|
+
// Pour l'inegalite 1/x > k on a en solution [0, 1/k]
|
|
45
|
+
const interval = new IntervalNode(new NumberNode(0), frac(1, kNode).simplify(),
|
|
46
|
+
// Toujours ouvert sur 0
|
|
47
|
+
// Pour 1/k, ouvert si <, sinon ferme pour <=
|
|
48
|
+
isStrict ? ClosureType.OO : ClosureType.OF);
|
|
49
|
+
return new InequationSolutionNode(interval).toTex();
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
// Pour l'inegalite 1/x < k on a en solution ]-inf, 0[ u [1/k, +inf]
|
|
53
|
+
const intervalNeg = new IntervalNode(MinusInfinityNode, new NumberNode(0), ClosureType.OO);
|
|
54
|
+
const intervalSup = new IntervalNode(frac(1, kNode).simplify(), PlusInfinityNode,
|
|
55
|
+
// Pour 1/k, ouvert si <, sinon ferme pour <=
|
|
56
|
+
// Toujours ouvert sur +inf
|
|
57
|
+
isStrict ? ClosureType.OO : ClosureType.FO);
|
|
58
|
+
return new InequationSolutionNode(new UnionIntervalNode([intervalNeg, intervalSup])).toTex();
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
if (symbol.isSup) {
|
|
63
|
+
// Pour 1/x > k on a en solution ]-inf, 1/k) u ]0, +inf[
|
|
64
|
+
const intervalNeg = new IntervalNode(MinusInfinityNode,
|
|
65
|
+
// Pour 1/k, ouvert si <, sinon ferme pour <=
|
|
66
|
+
// Toujours ouvert sur +inf
|
|
67
|
+
frac(1, kNode).simplify(), isStrict ? ClosureType.OO : ClosureType.OF);
|
|
68
|
+
const intervalSup = new IntervalNode(new NumberNode(0), PlusInfinityNode, ClosureType.OO);
|
|
69
|
+
return new InequationSolutionNode(new UnionIntervalNode([intervalNeg, intervalSup])).toTex();
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
// Pour 1/x < k on a en solution (1/k, 0[
|
|
73
|
+
const interval = new IntervalNode(frac(1, kNode).simplify(), new NumberNode(0),
|
|
74
|
+
// Pour 1/k, ouvert si <, sinon ferme pour <=
|
|
75
|
+
// Toujours ouvert sur 0
|
|
76
|
+
isStrict ? ClosureType.OO : ClosureType.FO);
|
|
77
|
+
return new InequationSolutionNode(interval).toTex();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
const getInstruction = (identifiers) => {
|
|
82
|
+
const { k, inequationSymbol } = identifiers;
|
|
83
|
+
return `On donne ci-dessous la courbe représentative de la fonction inverse $f(x)= \\frac{1}{x}$.
|
|
84
|
+
|
|
85
|
+
Résoudre, pour $x \\neq 0$ :
|
|
86
|
+
|
|
87
|
+
$$
|
|
88
|
+
${frac(1, "x").toTex()} ${inequationSymbol} ${reifyAlgebraic(k).toTex()}
|
|
89
|
+
$$`;
|
|
90
|
+
};
|
|
91
|
+
const getKeys = (identifiers) => {
|
|
92
|
+
return ["S", "equal", "lbracket", "rbracket", "semicolon", "infty", "cup"];
|
|
93
|
+
};
|
|
94
|
+
const isAnswerValid = (ans, { answer }) => {
|
|
95
|
+
try {
|
|
96
|
+
const parsed = unionIntervalParser(ans.replaceAll("S", "").replaceAll("=", ""));
|
|
97
|
+
if (!parsed)
|
|
98
|
+
return false;
|
|
99
|
+
return ("S=\\ " + parsed.simplify({ decimalToFractions: true }).toTex() === answer);
|
|
100
|
+
}
|
|
101
|
+
catch (err) {
|
|
102
|
+
return handleVEAError(err);
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
const getGGBOptions = (identifiers) => {
|
|
106
|
+
const { inequationSymbol, k } = identifiers;
|
|
107
|
+
const ggb = new GeogebraConstructor({
|
|
108
|
+
commands: [
|
|
109
|
+
`f(x) = 1/x`,
|
|
110
|
+
`SetColor(f, "${randomColor()}")`,
|
|
111
|
+
`SetFixed(f, true)`,
|
|
112
|
+
],
|
|
113
|
+
lockedAxesRatio: false,
|
|
114
|
+
});
|
|
115
|
+
const kNode = reifyAlgebraic(k);
|
|
116
|
+
const kEv = kNode.evaluate();
|
|
117
|
+
return ggb.getOptions({
|
|
118
|
+
coords: [
|
|
119
|
+
Math.min(-5, Math.abs(1 / kEv) - 2),
|
|
120
|
+
Math.max(5, Math.abs(1 / kEv) + 2),
|
|
121
|
+
-Math.abs(kEv) - 2,
|
|
122
|
+
Math.abs(kEv) + 2,
|
|
123
|
+
],
|
|
124
|
+
});
|
|
125
|
+
};
|
|
126
|
+
const getInverseInequalityQuestion = (ops) => {
|
|
127
|
+
const k = coinFlip()
|
|
128
|
+
? RationalConstructor.randomIrreductibleWithSign().toTree()
|
|
129
|
+
: (random([-1, 1]) * 2 ** randint(0, 3) * 5 ** randint(0, 3)).toTree();
|
|
130
|
+
const inequationSymbol = InequationSymbolConstructor.random();
|
|
131
|
+
const identifiers = {
|
|
132
|
+
k: k.toIdentifiers(),
|
|
133
|
+
inequationSymbol: inequationSymbol.symbol,
|
|
134
|
+
};
|
|
135
|
+
return getQuestionFromIdentifiers(identifiers);
|
|
136
|
+
};
|
|
137
|
+
const getHint = (identifiers) => {
|
|
138
|
+
const { inequationSymbol, k } = identifiers;
|
|
139
|
+
const kNode = reifyAlgebraic(k);
|
|
140
|
+
return `Détermine l'antécédent de $${kNode.toTex()}$ par la fonction inverse.
|
|
141
|
+
|
|
142
|
+
Puis, utilise le graphique pour déterminer la solution de l'inéquation.`;
|
|
143
|
+
};
|
|
144
|
+
const getCorrection = (identifiers) => {
|
|
145
|
+
const { k, inequationSymbol } = identifiers;
|
|
146
|
+
const ineqSign = new InequationSymbol(inequationSymbol);
|
|
147
|
+
const interval = new IntervalNode(MinusInfinityNode, new NumberNode(0), ClosureType.OO);
|
|
148
|
+
const isSup = ineqSign.isSup;
|
|
149
|
+
const kNode = reifyAlgebraic(k);
|
|
150
|
+
const kEv = kNode.evaluate();
|
|
151
|
+
const kPos = kEv > 0;
|
|
152
|
+
let corr = "";
|
|
153
|
+
if (isSup) {
|
|
154
|
+
if (kPos) {
|
|
155
|
+
corr = `tout nombre $x$ positif tel que $x ${ineqSign.reversed()} ${frac(1, kNode)
|
|
156
|
+
.simplify()
|
|
157
|
+
.toTex()}$ est une solution de l'inéquation.`;
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
corr = `tout nombre $x$ positif est solution de l'inéquation, et tout nombre $x$ négatif tel que $x ${ineqSign.reversed()} ${frac(1, kNode)
|
|
161
|
+
.simplify()
|
|
162
|
+
.toTex()}$ est également une solution.`;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
if (kPos) {
|
|
167
|
+
corr = `tout nombre $x$ négatif est solution de l'inéquation, et tout nombre $x$ positif tel que $x ${ineqSign.reversed()} ${frac(1, kNode)
|
|
168
|
+
.simplify()
|
|
169
|
+
.toTex()}$ est également une solution.`;
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
//x nég: x<-1/k
|
|
173
|
+
corr = `tout nombre $x$ négatif tel que $x ${ineqSign.reversed()} ${frac(1, kNode)
|
|
174
|
+
.simplify()
|
|
175
|
+
.toTex()}$ est une solution de l'inéquation.`;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
const statement = `${frac(1, "x").toTex()} ${inequationSymbol} ${k}`;
|
|
179
|
+
return `On détermine l'antécédent de $${kNode.toTex()}$ par la fonction inverse :
|
|
180
|
+
|
|
181
|
+
$$
|
|
182
|
+
\\frac{1}{x} = ${kNode.toTex()} \\iff x = ${frac(1, kNode).simplify().toTex()}
|
|
183
|
+
$$
|
|
184
|
+
|
|
185
|
+
Puis, d'après le graphique, on voit que ${corr}
|
|
186
|
+
|
|
187
|
+
Ainsi, la solution de l'inéquation est :
|
|
188
|
+
|
|
189
|
+
$$
|
|
190
|
+
${getAnswer(identifiers)}
|
|
191
|
+
$$`;
|
|
192
|
+
};
|
|
193
|
+
const getQuestionFromIdentifiers = (identifiers) => {
|
|
194
|
+
return {
|
|
195
|
+
answer: getAnswer(identifiers),
|
|
196
|
+
instruction: getInstruction(identifiers),
|
|
197
|
+
keys: getKeys(identifiers),
|
|
198
|
+
hint: getHint(identifiers),
|
|
199
|
+
correction: getCorrection(identifiers),
|
|
200
|
+
answerFormat: "tex",
|
|
201
|
+
identifiers,
|
|
202
|
+
ggbOptions: getGGBOptions(identifiers),
|
|
203
|
+
};
|
|
204
|
+
};
|
|
205
|
+
export const inverseInequalityWithGraph = {
|
|
206
|
+
id: "inverseInequalityWithGraph",
|
|
207
|
+
label: "Résoudre une inéquation du type $\\frac{1}{x} < k$ (avec graphique)",
|
|
208
|
+
isSingleStep: true,
|
|
209
|
+
generator: (nb, opts) => getDistinctQuestions(() => getInverseInequalityQuestion(opts), nb),
|
|
210
|
+
qcmTimer: 60,
|
|
211
|
+
freeTimer: 60,
|
|
212
|
+
getPropositions,
|
|
213
|
+
isAnswerValid,
|
|
214
|
+
subject: "Mathématiques",
|
|
215
|
+
getInstruction,
|
|
216
|
+
getAnswer,
|
|
217
|
+
getQuestionFromIdentifiers,
|
|
218
|
+
hasHintAndCorrection: true,
|
|
219
|
+
hasGeogebra: true,
|
|
220
|
+
};
|
|
@@ -21,7 +21,7 @@ $$
|
|
|
21
21
|
${durationTex}
|
|
22
22
|
$$
|
|
23
23
|
|
|
24
|
-
Arrondir ${isDecimalToHours ? "à la minute
|
|
24
|
+
Arrondir ${isDecimalToHours ? "à la minute" : "au centième"}.`;
|
|
25
25
|
};
|
|
26
26
|
const getAnswer = (identifiers) => {
|
|
27
27
|
const { dec, isDecimalToHours } = identifiers;
|
|
@@ -127,7 +127,7 @@ const options = [
|
|
|
127
127
|
export const leadingCoefficient = {
|
|
128
128
|
id: "leadingCoefficient",
|
|
129
129
|
connector: "=",
|
|
130
|
-
label: "Lire le coefficient directeur d'une droite",
|
|
130
|
+
label: "Lire graphiquement le coefficient directeur d'une droite",
|
|
131
131
|
isSingleStep: false,
|
|
132
132
|
generator: (nb, opts) => getDistinctQuestions(() => getLeadingCoefficientQuestion(opts), nb),
|
|
133
133
|
qcmTimer: 60,
|
|
@@ -196,7 +196,7 @@ const getQuestionFromIdentifiers = (identifiers) => {
|
|
|
196
196
|
};
|
|
197
197
|
export const findZeroesProductQuotient = {
|
|
198
198
|
id: "findZeroesProductQuotient",
|
|
199
|
-
label: "Déterminer la ou les
|
|
199
|
+
label: "Déterminer la ou les valeurs d'annulation d'une fonction par le calcul",
|
|
200
200
|
isSingleStep: true,
|
|
201
201
|
generator: (nb, opts) => getDistinctQuestions(() => getFindZeroesProductQuotientQuestion(opts), nb),
|
|
202
202
|
qcmTimer: 60,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graphicInequation.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/functions/basics/graphicInequation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAeT,MAAM,6BAA6B,CAAC;AAQrC,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAQ/D,KAAK,WAAW,GAAG;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;IACjC,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,WAAW,CAAA;KAAE,EAAE,CAAC;CAC7D,CAAC;
|
|
1
|
+
{"version":3,"file":"graphicInequation.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/functions/basics/graphicInequation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAeT,MAAM,6BAA6B,CAAC;AAQrC,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAQ/D,KAAK,WAAW,GAAG;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;IACjC,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,WAAW,CAAA;KAAE,EAAE,CAAC;CAC7D,CAAC;AAiQF,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,WAAW,CAgBnD,CAAC"}
|
|
@@ -113,10 +113,42 @@ const getGraphicInequationQuestion = () => {
|
|
|
113
113
|
return getQuestionFromIdentifiers(identifiers);
|
|
114
114
|
};
|
|
115
115
|
const getHint = (identifiers) => {
|
|
116
|
-
|
|
116
|
+
const { intervals, isAskingSup, isStrict, splinePoints, yValue } = identifiers;
|
|
117
|
+
const word = isAskingSup
|
|
118
|
+
? isStrict
|
|
119
|
+
? "strictement supérieure"
|
|
120
|
+
: "supérieure"
|
|
121
|
+
: isStrict
|
|
122
|
+
? "strictement inférieure"
|
|
123
|
+
: "inférieure";
|
|
124
|
+
return `Lit toutes les valeurs de $x$ pour lesquelles $f(x)$ est ${word} à $${yValue.frenchify()}$.`;
|
|
117
125
|
};
|
|
118
126
|
const getCorrection = (identifiers) => {
|
|
119
|
-
|
|
127
|
+
//trace droit y = y, lit x sous
|
|
128
|
+
const { intervals, isAskingSup, isStrict, splinePoints, yValue } = identifiers;
|
|
129
|
+
const word = isAskingSup
|
|
130
|
+
? isStrict
|
|
131
|
+
? "strictement supérieure"
|
|
132
|
+
: "supérieure"
|
|
133
|
+
: isStrict
|
|
134
|
+
? "strictement inférieure"
|
|
135
|
+
: "inférieure";
|
|
136
|
+
const word2 = isAskingSup
|
|
137
|
+
? isStrict
|
|
138
|
+
? "strictement au-dessous"
|
|
139
|
+
: "au-dessous"
|
|
140
|
+
: isStrict
|
|
141
|
+
? "strictement en-dessous"
|
|
142
|
+
: "en-dessous";
|
|
143
|
+
return `On cherche toutes les valeurs de $x$ pour lesquelles $f(x)$ est ${word} à $${yValue.frenchify()}$.
|
|
144
|
+
|
|
145
|
+
Pour cela, on peut tracer la droite d'équation $y = ${yValue.frenchify()}$. On repère les points d'intersection de la courbe et de cette droite, puis on lit les abscisses des points de la courbe qui sont ${word2} de cette droite.
|
|
146
|
+
|
|
147
|
+
On trouve alors comme solution :
|
|
148
|
+
|
|
149
|
+
$$
|
|
150
|
+
${getAnswer(identifiers)}
|
|
151
|
+
$$`;
|
|
120
152
|
};
|
|
121
153
|
const getQuestionFromIdentifiers = (identifiers) => {
|
|
122
154
|
const question = {
|
|
@@ -136,8 +168,8 @@ const getQuestionFromIdentifiers = (identifiers) => {
|
|
|
136
168
|
answerFormat: "tex",
|
|
137
169
|
ggbOptions: getGGBOptions(identifiers),
|
|
138
170
|
identifiers,
|
|
139
|
-
|
|
140
|
-
|
|
171
|
+
hint: getHint(identifiers),
|
|
172
|
+
correction: getCorrection(identifiers),
|
|
141
173
|
};
|
|
142
174
|
return question;
|
|
143
175
|
};
|
|
@@ -190,5 +222,5 @@ export const graphicInequation = {
|
|
|
190
222
|
subject: "Mathématiques",
|
|
191
223
|
pdfOptions: { shouldSpreadPropositions: true },
|
|
192
224
|
getQuestionFromIdentifiers,
|
|
193
|
-
|
|
225
|
+
hasHintAndCorrection: true,
|
|
194
226
|
};
|
|
@@ -100,7 +100,7 @@ const isAnswerValid = (ans, { answer, xValues, imageValues, isAskingImage, value
|
|
|
100
100
|
};
|
|
101
101
|
export const inverseImageFunctionTable = {
|
|
102
102
|
id: "inverseImageFunctionTable",
|
|
103
|
-
label: "Déterminer une image ou un antécédent à partir d'un tableau de valeurs",
|
|
103
|
+
label: "Déterminer une image ou un antécédent à partir d'un tableau de valeurs d'une fonction",
|
|
104
104
|
isSingleStep: true,
|
|
105
105
|
generator: (nb) => getDistinctQuestions(getInverseImageFunctionTableQuestion, nb),
|
|
106
106
|
qcmTimer: 60,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isPointOnFunction.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/functions/basics/isPointOnFunction.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAeT,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAGL,gBAAgB,EACjB,MAAM,8BAA8B,CAAC;AAItC,OAAO,EACL,eAAe,EAEhB,MAAM,qCAAqC,CAAC;AAI7C,KAAK,WAAW,GAAG;IACjB,KAAK,EAAE,gBAAgB,CAAC;IACxB,IAAI,EAAE,eAAe,CAAC;CACvB,CAAC;AA2HF,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,WAAW,
|
|
1
|
+
{"version":3,"file":"isPointOnFunction.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/functions/basics/isPointOnFunction.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAeT,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAGL,gBAAgB,EACjB,MAAM,8BAA8B,CAAC;AAItC,OAAO,EACL,eAAe,EAEhB,MAAM,qCAAqC,CAAC;AAI7C,KAAK,WAAW,GAAG;IACjB,KAAK,EAAE,gBAAgB,CAAC;IACxB,IAAI,EAAE,eAAe,CAAC;CACvB,CAAC;AA2HF,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,WAAW,CAmBnD,CAAC"}
|
|
@@ -115,7 +115,7 @@ const getQuestionFromIdentifiers = (identifiers) => {
|
|
|
115
115
|
};
|
|
116
116
|
export const isPointOnFunction = {
|
|
117
117
|
id: "isPointOnFunction",
|
|
118
|
-
label: "Déterminer si un point appartient à la courbe d
|
|
118
|
+
label: "Déterminer si un point appartient à la courbe représentative d'une fonction",
|
|
119
119
|
answerType: "QCU",
|
|
120
120
|
isSingleStep: true,
|
|
121
121
|
generator: (nb, opts) => getDistinctQuestions(() => getIsPointOnFunctionQuestion(opts), nb),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"twoFunctionsInequation.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/functions/basics/twoFunctionsInequation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,
|
|
1
|
+
{"version":3,"file":"twoFunctionsInequation.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/functions/basics/twoFunctionsInequation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAgBT,MAAM,6BAA6B,CAAC;AAKrC,OAAO,EACL,gBAAgB,EAGjB,MAAM,sCAAsC,CAAC;AAK9C,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAU/D,KAAK,WAAW,GAAG;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,EAAE,EAAE,CAAC;IAC1B,aAAa,EAAE,MAAM,EAAE,EAAE,CAAC;IAC1B,UAAU,EAAE,gBAAgB,CAAC;IAC7B,SAAS,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,WAAW,CAAA;KAAE,EAAE,CAAC;CAC7D,CAAC;AAuSF,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAAC,WAAW,CAcxD,CAAC"}
|
|
@@ -142,6 +142,37 @@ const getTwoFunctionsInequationQuestion = () => {
|
|
|
142
142
|
};
|
|
143
143
|
return getQuestionFromIdentifiers(identifiers);
|
|
144
144
|
};
|
|
145
|
+
const getHint = (identifiers) => {
|
|
146
|
+
const { ineqSymbol } = identifiers;
|
|
147
|
+
const word = ineqSymbol === "<"
|
|
148
|
+
? "strictement en-dessous"
|
|
149
|
+
: ineqSymbol === ">"
|
|
150
|
+
? "strictement au-dessus"
|
|
151
|
+
: ineqSymbol === "\\ge"
|
|
152
|
+
? "au-dessus"
|
|
153
|
+
: "en-dessous";
|
|
154
|
+
return `Repère les intervalles sur lesquels la courbe de la fonction $f$ est ${word} de la courbe de la fonction $g$.`;
|
|
155
|
+
};
|
|
156
|
+
const getCorrection = (identifiers) => {
|
|
157
|
+
const { fSplinePoints, gSplinePoints, ineqSymbol, intervals, yValue } = identifiers;
|
|
158
|
+
const word = ineqSymbol === "<"
|
|
159
|
+
? "strictement en-dessous"
|
|
160
|
+
: ineqSymbol === ">"
|
|
161
|
+
? "strictement au-dessus"
|
|
162
|
+
: ineqSymbol === "\\ge"
|
|
163
|
+
? "au-dessus"
|
|
164
|
+
: "en-dessous";
|
|
165
|
+
const intervalsNodes = intervals.map((e) => new IntervalNode(e.a.toTree(), e.b.toTree(), e.closure));
|
|
166
|
+
return `On lit graphiquement que la courbe de la fonction $f$ est ${word} de la courbe de la fonction $g$ sur ${intervals.length === 1
|
|
167
|
+
? `l'intervalle $${intervalsNodes[0].toTex()}$`
|
|
168
|
+
: `les intervalles $${intervalsNodes[0].toTex()}$ et $${intervalsNodes[1].toTex()}$`}.
|
|
169
|
+
|
|
170
|
+
La solution de l'inéquation est donc :
|
|
171
|
+
|
|
172
|
+
$$
|
|
173
|
+
${getAnswer(identifiers)}
|
|
174
|
+
$$`;
|
|
175
|
+
};
|
|
145
176
|
const getQuestionFromIdentifiers = (identifiers) => {
|
|
146
177
|
const question = {
|
|
147
178
|
answer: getAnswer(identifiers),
|
|
@@ -150,6 +181,8 @@ const getQuestionFromIdentifiers = (identifiers) => {
|
|
|
150
181
|
answerFormat: "tex",
|
|
151
182
|
identifiers,
|
|
152
183
|
ggbOptions: getGGBOptions(identifiers),
|
|
184
|
+
hint: getHint(identifiers),
|
|
185
|
+
correction: getCorrection(identifiers),
|
|
153
186
|
};
|
|
154
187
|
return question;
|
|
155
188
|
};
|
|
@@ -204,4 +237,5 @@ export const twoFunctionsInequation = {
|
|
|
204
237
|
hasGeogebra: true,
|
|
205
238
|
subject: "Mathématiques",
|
|
206
239
|
getQuestionFromIdentifiers,
|
|
240
|
+
hasHintAndCorrection: true,
|
|
207
241
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"valueTableFromGraph.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/functions/basics/valueTableFromGraph.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAUT,MAAM,6BAA6B,CAAC;AAUrC,KAAK,WAAW,GAAG;IACjB,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC;CACvB,CAAC;AAkIF,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,WAAW,
|
|
1
|
+
{"version":3,"file":"valueTableFromGraph.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/functions/basics/valueTableFromGraph.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAUT,MAAM,6BAA6B,CAAC;AAUrC,KAAK,WAAW,GAAG;IACjB,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC;CACvB,CAAC;AAkIF,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,WAAW,CAkBrD,CAAC"}
|
|
@@ -122,7 +122,7 @@ const getQuestionFromIdentifiers = (identifiers) => {
|
|
|
122
122
|
export const valueTableFromGraph = {
|
|
123
123
|
id: "valueTableFromGraph",
|
|
124
124
|
connector: "=",
|
|
125
|
-
label: "Compléter un tableau de valeurs
|
|
125
|
+
label: "Compléter un tableau de valeurs à partir de la courbe d'une fonction",
|
|
126
126
|
isSingleStep: true,
|
|
127
127
|
generator: (nb, opts) => getDistinctQuestions(() => getValueTableFromGraphQuestion(opts), nb),
|
|
128
128
|
valueTableTimer: 120,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/functions/inverse/index.ts"],"names":[],"mappings":"AAAA,cAAc,kCAAkC,CAAC;AACjD,cAAc,2BAA2B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/functions/inverse/index.ts"],"names":[],"mappings":"AAAA,cAAc,kCAAkC,CAAC;AACjD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Exercise } from "../../../../exercises/exercise.js";
|
|
2
|
+
import { NodeIdentifiers } from "../../../../tree/nodes/nodeConstructor.js";
|
|
3
|
+
type Identifiers = {
|
|
4
|
+
k: NodeIdentifiers;
|
|
5
|
+
};
|
|
6
|
+
export declare const solveInverseEquation: Exercise<Identifiers>;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=solveInverseEquation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solveInverseEquation.d.ts","sourceRoot":"","sources":["../../../../../src/exercises/math/functions/inverse/solveInverseEquation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAeT,MAAM,6BAA6B,CAAC;AAMrC,OAAO,EACL,eAAe,EAEhB,MAAM,qCAAqC,CAAC;AAO7C,KAAK,WAAW,GAAG;IACjB,CAAC,EAAE,eAAe,CAAC;CACpB,CAAC;AAkJF,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,WAAW,CAiBtD,CAAC"}
|