ghost613 commited on
Commit
4fb37df
·
verified ·
1 Parent(s): e8bb3ad

Update components/MathQuizApp.tsx

Browse files
Files changed (1) hide show
  1. components/MathQuizApp.tsx +46 -13
components/MathQuizApp.tsx CHANGED
@@ -26,11 +26,25 @@ const generateQuestion = (difficulty) => {
26
  break;
27
  }
28
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29
  return {
30
  num1,
31
  num2,
32
  operation,
33
- answer: eval(`${num1} ${operation} ${num2}`),
34
  };
35
  };
36
 
@@ -72,7 +86,7 @@ const CalculatorComponent = ({ onClose }) => {
72
  case '+': return firstOp + secondOp;
73
  case '-': return firstOp - secondOp;
74
  case '*': return firstOp * secondOp;
75
- case '/': return firstOp / secondOp;
76
  default: return secondOp;
77
  }
78
  };
@@ -80,16 +94,26 @@ const CalculatorComponent = ({ onClose }) => {
80
  const performOperation = (nextOperator) => {
81
  const inputValue = parseFloat(display);
82
 
83
- if (firstOperand === null) {
84
- setFirstOperand(inputValue);
85
- } else if (operator) {
86
- const result = calculate(firstOperand, inputValue, operator);
87
- setDisplay(String(result));
88
- setFirstOperand(result);
 
 
 
 
 
 
 
 
 
 
 
 
 
89
  }
90
-
91
- setWaitingForSecondOperand(true);
92
- setOperator(nextOperator);
93
  };
94
 
95
  return (
@@ -141,13 +165,21 @@ const MathQuizApp = () => {
141
 
142
  const handleSubmit = (e) => {
143
  e.preventDefault();
144
- if (Number(userAnswer) === question.answer) {
 
 
 
 
 
 
 
145
  setResult('Correct!');
146
  setScore(score + 1);
147
  } else {
148
  setResult(`Incorrect. The correct answer is ${question.answer}.`);
149
  setWrongAnswers(wrongAnswers + 1);
150
  }
 
151
  setUserAnswer('');
152
  setQuestion(generateQuestion(difficulty));
153
  };
@@ -157,6 +189,7 @@ const MathQuizApp = () => {
157
  setQuestion(generateQuestion(e.target.value));
158
  setScore(0);
159
  setWrongAnswers(0);
 
160
  };
161
 
162
  return (
@@ -172,7 +205,6 @@ const MathQuizApp = () => {
172
  {showCalculator ? 'Hide Calculator' : 'Show Calculator'}
173
  </button>
174
  </div>
175
-
176
  <div className="grid grid-cols-1 md:grid-cols-2 gap-8">
177
  <div className="space-y-6">
178
  <form onSubmit={handleSubmit} className="space-y-6">
@@ -202,6 +234,7 @@ const MathQuizApp = () => {
202
  value={userAnswer}
203
  onChange={(e) => setUserAnswer(e.target.value)}
204
  className="bg-gray-50 border border-gray-300 text-gray-900 text-xl rounded-lg focus:ring-blue-500 focus:border-blue-500 p-4 w-full text-center"
 
205
  />
206
  </div>
207
  <div className="text-center">
 
26
  break;
27
  }
28
 
29
+ // For division, ensure it results in a whole number or simpler decimal
30
+ if (operation === '/') {
31
+ // Make sure num2 is not zero to avoid division by zero
32
+ num2 = num2 === 0 ? 1 : num2;
33
+ // For easier difficulty levels, try to make divisions that result in whole numbers
34
+ if (difficulty === 'easy' || difficulty === 'medium') {
35
+ num1 = num2 * Math.floor(Math.random() * 10) + 1;
36
+ }
37
+ }
38
+
39
+ const answer = eval(`${num1} ${operation} ${num2}`);
40
+ // Round the answer to 2 decimal places if it's a float
41
+ const roundedAnswer = Number.isInteger(answer) ? answer : parseFloat(answer.toFixed(2));
42
+
43
  return {
44
  num1,
45
  num2,
46
  operation,
47
+ answer: roundedAnswer,
48
  };
49
  };
50
 
 
86
  case '+': return firstOp + secondOp;
87
  case '-': return firstOp - secondOp;
88
  case '*': return firstOp * secondOp;
89
+ case '/': return secondOp === 0 ? 'Error' : firstOp / secondOp;
90
  default: return secondOp;
91
  }
92
  };
 
94
  const performOperation = (nextOperator) => {
95
  const inputValue = parseFloat(display);
96
 
97
+ if (nextOperator === '=') {
98
+ if (operator && firstOperand !== null) {
99
+ const result = calculate(firstOperand, inputValue, operator);
100
+ setDisplay(String(result));
101
+ setFirstOperand(null);
102
+ setOperator(null);
103
+ setWaitingForSecondOperand(false);
104
+ }
105
+ } else {
106
+ if (firstOperand === null) {
107
+ setFirstOperand(inputValue);
108
+ } else if (operator) {
109
+ const result = calculate(firstOperand, inputValue, operator);
110
+ setDisplay(String(result));
111
+ setFirstOperand(result);
112
+ }
113
+
114
+ setWaitingForSecondOperand(true);
115
+ setOperator(nextOperator);
116
  }
 
 
 
117
  };
118
 
119
  return (
 
165
 
166
  const handleSubmit = (e) => {
167
  e.preventDefault();
168
+
169
+ // Parse the user answer as a float and check against the question answer
170
+ const parsedAnswer = parseFloat(userAnswer);
171
+
172
+ // Check if the answer matches (with some tolerance for floating point)
173
+ const isCorrect = Math.abs(parsedAnswer - question.answer) < 0.001;
174
+
175
+ if (isCorrect) {
176
  setResult('Correct!');
177
  setScore(score + 1);
178
  } else {
179
  setResult(`Incorrect. The correct answer is ${question.answer}.`);
180
  setWrongAnswers(wrongAnswers + 1);
181
  }
182
+
183
  setUserAnswer('');
184
  setQuestion(generateQuestion(difficulty));
185
  };
 
189
  setQuestion(generateQuestion(e.target.value));
190
  setScore(0);
191
  setWrongAnswers(0);
192
+ setResult('');
193
  };
194
 
195
  return (
 
205
  {showCalculator ? 'Hide Calculator' : 'Show Calculator'}
206
  </button>
207
  </div>
 
208
  <div className="grid grid-cols-1 md:grid-cols-2 gap-8">
209
  <div className="space-y-6">
210
  <form onSubmit={handleSubmit} className="space-y-6">
 
234
  value={userAnswer}
235
  onChange={(e) => setUserAnswer(e.target.value)}
236
  className="bg-gray-50 border border-gray-300 text-gray-900 text-xl rounded-lg focus:ring-blue-500 focus:border-blue-500 p-4 w-full text-center"
237
+ step="any"
238
  />
239
  </div>
240
  <div className="text-center">