Subversion Repositories wimsdev

Rev

Rev 2093 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
338 schaersvoo 1
# checkt x1=sqrt(123) and x2=sqrt[5](1/3) and x3=4^(1/5) and x4=2*sqrt[7](4)/5
2
# checkt x1=1/2+sqrt(123)/2 and x2=3-5sqrt[5](1/3)-4 
3
# sin,cos,tan...
4
# niet voor complex?
5
# powersyntax 3e+3 => 3*10^3 
6
# 3*10**3 => 3*10^3
7
# error bij "x=sqrt(4)+sqrt(5](5)"  dus bij meerdere wortels/sqrt
8
# checkt op doublures x1=sqrt(2) x2=(2)^(1/2)
9
# mag afronden via $rounding
10
# arglist=x ofiets anders als goede antwoord is x=123 checkt dus op "x="
11
# goede antwoord is komma lijst met goede oplossingen answer$n
12
# exact met maxima
13
# afgerond met pari
14
###############################
15
# levert een modulescore !!!! #
16
##############################
17
 
18
n=$counter
19
errortext=$empty
362 schaersvoo 20
goback=0
338 schaersvoo 21
!if $AAA=$empty
22
    !if ? isin $(reply$n)
23
	remark$n=$NOK
24
	goback=0
2093 schaersvoo 25
	maxscore=0
338 schaersvoo 26
	!exit
27
    !endif
28
    AAA=!lower $(reply$n)
29
!endif
30
 
31
!if $arglist != $empty
32
    !for p in $arglist
33
	AAA=!replace $p[_0-9]*= by @ in $AAA
34
    !next p
35
    !if @ notin $AAA
36
	testvar=<b>$arglist= ?</b>
37
	errortext=!record 53 of $remarkdir/commonremarks.$taal
5807 schaersvoo 38
	#@Je moet het antwoord wel netjes opschrijven...<br />Wat dacht je van <b>x=</b> je antwoord ?
338 schaersvoo 39
	maxscore=$[$P1*$maxscore]
40
	goback=1
41
	!exit
42
    !endif
43
    AAA=!replace internal @ by , in $AAA
44
!else
45
    !if $AAA=$empty
46
	errortext=!record 37 of $remarkdir/commonremarks.$taal
47
	goback=1
48
	maxscore=$[$P4*$maxscore]
49
	!exit
50
    !endif
51
!endif
52
 
53
AAA=!words2items $AAA
54
AAA=!nospace $AAA
55
 
56
!for p=1 to 5
57
    AAA=!replace internal ,, by , in $AAA
58
!next p
59
 
60
t=!char 1 of $AAA
61
!if t=,
62
    AAA=!char 2 to -1 of $AAA
63
!endif
64
 
65
t=!char -1 of $AAA
66
!if t=,
67
    AAA=!char 1 to -2 of $AAA
68
!endif
69
 
70
!if $AAA=,
71
    errortext=!record 37 of $remarkdir/commonremarks.$taal
72
    goback=1
73
    maxscore=$[$P4*$maxscore]
74
 !exit
75
!endif
76
 
77
### power syntax
78
!if x10 isin $AAA
79
    ex=!record 68 of $remarkdir/commonremarks.$taal
80
    maxscore=$[$P1*$maxscore]
81
    !if $teaching=1
82
	goback=1
83
	errortext=$ex
84
	!exit
85
    !else
86
	!if $extra=$empty
87
	    extra=$ex
88
	!else
5807 schaersvoo 89
	    extra=$extra<br />$ex
338 schaersvoo 90
	!endif
91
	AAA=!replace internal x10 by *10 in $AAA
92
    !endif
93
!else
94
    test=!replace [0-9]e[0-9] by @ in $AAA
95
    !if @ isin $test
96
	maxscore=$[$P1*$maxscore]
97
	testvar1=!replace internal e by e+ in $AAA
98
	testvar1=<font color=green>$testvar1</font>
5807 schaersvoo 99
	testvar2=<br /><font color=red>$AAA</font>
338 schaersvoo 100
	errortext=!record 16 of $remarkdir/commonremarks.$taal
101
	goback=1
102
	!exit
103
    !endif
104
    AAA=!replace internal ** by ^ in $AAA
105
    AAA=!replace internal e+ by *10^ in $AAA
106
    AAA=!replace internal e- by *10^- in $AAA
107
    !for p=1 to 3
108
	AAA=!replace internal ** by * in $AAA
109
    !next p
110
    t=!char 1 of $AAA
111
    !if $t=*
112
	AAA=!char 2 to -1 of $AAA
113
    !endif
114
!endif
115
 
116
# rest
117
!if $varlist = $empty
118
    vars=x
119
    # hmmm
120
!else
121
    vars=!words2items $varlist
122
!endif
123
 
124
!for p in sin,tan,cos,abs,sqrt,pi,i,e,$vars
125
    P=!toupper $p
126
    AAA=!replace internal $p by $P in $AAA
127
!next p
128
 
129
AAA=!replace [a-z\@\#\!\%\&\:\;\"\'\_\#\=] by $empty in $AAA
130
AAA=!lower $AAA
131
 
132
# nu zou AAA een getal moeten zijn?
133
!if $AAA=$empty
134
    errortext=!record 37 of $remarkdir/commonremarks.$taal
135
    goback=1
136
    maxscore=$[$P4*$maxscore]
137
 !exit
138
!endif
139
 
140
ta=!itemcnt $AAA
141
aaa=$empty
142
!for p=1 to $ta
143
    A=!item $p of $AAA
144
    !if $A != $empty
145
	!if sqrt isin $A
146
	    ### try to convert AAA= x*sqrt[p](y) => aaa= x*(y)^(1/p)
147
	    chk=!positionof sqrt[ in $A
148
	    chk=!itemcnt $chk
149
	    !if $chk>1
150
		errortext=!record 74 of $remarkdir/commonremarks.$taal
5807 schaersvoo 151
		#@Dit programma kan geen antwoorden met meerdere wortels erin nakijken<br />Je kunt $A toch echt wel wat wiskundiger/korter schrijven ?<br />Zo niet dan is dit een "fout in de opdracht" en moet je me maar even mailen...
338 schaersvoo 152
	        goback=1
153
		!exit
154
	    !else
155
		# special syntax sqrt[]()
156
		!if $chk=1
157
		    test=!replace internal sqrt[ by @ in $A
158
		    !if @ isin $test
159
			# ook 
160
		        test=!replace internal ] by @ in $test
161
			t=!positionof char @ in $test
162
			t1=!item 1 of $t
163
			t2=!item 2 of $t
164
			power=!char $[$t1+1] to $[$t2-1] of $test
165
			tt=!nospace  sqrt [ $power ]
166
			A=!replace internal $tt by sqrt in $A
167
		    !else
168
			# this is nonsens here
169
			power=2
170
			# dus 2 == 1/2 (ofwel gewone wortel)
171
		    !endif
172
		    test=!replace internal sqrt( by @# in $A
173
		    test=!replace internal ( by # in $test
174
		    test=!replace internal ) by % in $test
175
		    begin=!positionof char @ in $test
176
		    tot=!charcnt $test
177
		    wait=0
178
		    got=0
179
		    end=0
180
		    !for s=$begin to $tot
181
			!if $end=0
182
			    ch=!char $s of $test
183
			    !if $ch=#
184
				!increase wait
185
			    !endif
186
			    !if $ch=%
187
				!increase got
188
			    !endif
189
			    !if $got !=0
190
				!if $wait=$got
191
				    end=$s
192
				!endif
193
			    !endif
194
			!endif
195
		    !next s
196
		    sqrt=!char $[$begin+2] to $[$end-1] of $test
197
		    sqrt=!replace internal # by ( in $sqrt
198
		    sqrt=!replace internal % by ) in $sqrt
199
		    A=!replace internal sqrt($sqrt) by ($sqrt)^(1/$power) in $A
200
		!endif
201
	    !endif
202
	!endif
203
	A=!rawmath $A
204
	aaa=!append item $A to $aaa
205
    !endif
206
!next p
207
 
208
 
209
g=!itemcnt $(answer$n)
210
a=!itemcnt $aaa
211
 
212
# corrigeren de score voor vergeten of teveel gevonden antwoorden...
213
!if $g != $a
214
    !if $a>$g
215
	maxscore=$[$maxscore*$g/$a]
216
    !else
217
	maxscore=$[$maxscore*$a/$g]
218
    !endif
219
!endif
220
 
221
klaar=0
222
!if $rounding<1
223
    # exact (0) of nvt (-1)
224
    maximastring=$empty
225
    !for i=1 to $g
226
	G=!item $i of $(answer$n)
227
	!for s=1 to $a
228
	    A=!item $s of $aaa
229
	    maximastring=!append line if rationalize(expand($A)) = rationalize(expand($G)) then 1 else 0; to $maximastring
230
	!next s
231
    !next i
232
    test=!exec maxima $maximastring
233
!else
234
    paristring=$empty
235
    !for i=1 to $g
236
	G=!item $i of $(answer$n)
237
	G=$[(round($rounding*($G)))/$rounding]
238
	!for s=1 to $a
239
	    A=!item $s of $aaa
240
	    A=$[(round($rounding*($A)))/$rounding]
241
	    paristring=!append line if($A==$G,1,0) to $paristring
242
	!next s
243
    !next i
244
    test=!exec pari $paristring
245
!endif
246
 
247
#errortext=aaa=$aaa ? sqrt=$sqrt maximasrtin=$maximastring TEST=$test
248
#goback=1
249
#!exit
250
 
251
!if $wims_exec_error != $empty
252
    goback=1
253
    maxscore=$[$P1*$maxscore]
254
    errortext=!record 39 of $remarkdir/commonremarks.$taal
255
    #@ je antwoord $(reply$n) is in deze vorm niet na te kijken 
256
 !exit
257
!endif
258
 
259
duplicate=0
260
cnt=$[$g*$a]
261
tot=0
262
 
263
# test=1 0 0 0 1 0 0 0 1
264
# g=3 a=3
265
!for i=1 to $cnt step $g
266
    t=0
267
    !for s=$i to $[$i+$a-1]
268
	p=!line $s of $test
269
	!ifval $p=1
270
	    !increase t
271
	!endif
272
    !next s
273
    !ifval $t=1
274
	tot=$[$tot+$t]
275
    !else
276
	!if $t>1
277
	    duplicate=$[$duplicate+1]
278
	!endif
279
    !endif
280
!next i
281
!if $duplicate !=0
282
    testvar=$[2*$duplicate]
283
    ex=!record 51 of $remarkdir/commonremarks.$taal
284
    !if $extra=$empty
285
	extra=$ex
286
    !else
5807 schaersvoo 287
	extra=$extra <br />$ex
338 schaersvoo 288
    !endif
289
!endif
290
 
291
 
292
maxscore=$[$maxscore*($tot)/($g)]
293
modulescore=$[$modulescore + $maxscore]
294
 
295
!if $maxscore>0.9
296
    remark$n=$OK
297
!else
298
    !if $maxscore>0.45
299
	remark$n=$BOK
300
    !else
301
	remark$n=$NOK
302
    !endif
303
!endif
304
 
305
!if $extra != $empty
5807 schaersvoo 306
    remark$n=$(remark$n)<br />$extra
338 schaersvoo 307
!endif
308
 
309
!exit