Rev 2613 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
# this file expects a reply$n and returns a modulescore
# CHECKING INEQUALITIES
# x>5 or 5<x<34 or even? 10>x>5 10>x and x>5 x<10 and x>5 etc
# answer$n= 5<x&&x<10&&x>13
extra=$empty
n=$counter
goback=0
errortext=$empty
test=!wordcnt $(reply$n)
!if $test=0
goback=1
maxscore=$[$P1*$maxscore]
errortext=!record 37 of $remarkdir/commonremarks.$taal
!exit
!endif
!if ? isin $(reply$n)
remark$n=$NOK
goback=0
maxscore=0
modulescore=$[$modulescore + 0.1]
!exit
!endif
AAA=!lower $(reply$n)
!if $wims_user=supervisor
!if $varlist=$empty
errortext=THIS PROC-FILE EXPECTS YOU TO DEFINE A SINGLE VARIABLE LIKE "varlist=x"<br>x>5 <br> x<5&&x>10 <br> 123<x&&<x<432
goback=1
!exit
!endif
!endif
!if $varlist notin $AAA
testvar=!item 1 of $varlist
errortext=!record 23 of $remarkdir/commonremarks.$taal
maxscore=$[$maxscore*$P3]
goback=1
!exit
!endif
test=!replace internal < by @ in $AAA
test=!replace internal > by @ in $test
!if @ notin $test
testvar=!item 1 of $varlist
errortext=!record 23 of $remarkdir/commonremarks.$taal
goback=1
!exit
!endif
# checken eerst of er een = teken in zit, en als dat zo is het zelfde aantal als in't goede antwoord
t1=!positionof char = in $(answer$n)
t1=!itemcnt $t1
t2=!positionof char = in $AAA
t2=!itemcnt $t2
!if $t1 != $t2
maxscore=$[$maxscore*$P3]
!if $t1 > $t2
extra=!record 44 of $remarkdir/commonremarks.$taal
!else
extra=!record 45 of $remarkdir/commonremarks.$taal
!endif
!endif
# checken op wetenschappelijk schrijfwijze
aaa=!singlespace $AAA
aaa=!replace internal ** by ^ in $aaa
aaa=!replace internal e+ by *10^ in $aaa
aaa=!replace internal e- by *10^- in $aaa
!for p=1 to 3
aaa=!replace internal ** by * in $aaa
!next p
t=!char 1 of $aaa
!if $t=*
aaa=!char 2 to -1 of $aaa
!endif
# checken op een 'o' als "0"
t=!positionof char o in $aaa
!if $t != $empty
nummers=0.:;,123456789
!for p in $t
t1=!char $[$p-1] of $aaa
t2=!char $[$p+1] of $aaa
!if $t1 isin $nummers or $t1 isin $nummers
# dus 123o 123.o
maxscore=$[0.95*$maxscore]
!if $teaching=1
errortext=!record 13 of $remarkdir/commonremarks.$taal
goback=1
!exit
!else
# we corrigeren o -> 0 !
aaa=!replace internal char number $p by 0 in $aaa
ex=!record 13 of $remarkdir/commonremarks.$taal
extra=$extra <br>$ex
!endif
!endif
!next p
!endif
# check on a '+' or '-' sign as operator
!if + isin $aaa or - isin $aaa
nummers=01234567-8+9
!for s in +,-
t=!positionof char $s in $aaa
!if $t != $empty
!for p in $t
t1=!char $[$p-1] of $aaa
t2=!char $[$p+1] of $aaa
!if $t1 isin $nummers and $t2 isin $nummers
maxscore=$[0.95*$maxscore]
!if $teaching=1
errortext=!record 25 of $remarkdir/commonremarks.$taal
goback=1
!exit
!endif
!goto READY1
!endif
!next p
!endif
!next s
!endif
:READY1
#check on sin(x) sin(|x|) sin|x| etc
!for i in sqrt,log,sin,ln,cos,tan,sec,abs
!if $i isin $aaa
# eerst testen op absoluutstrepen |x|
test1=!replace internal $i| by # in $aaa
!if # isin $test1
# dus ln|x| ===> ln(|x|)
# rawmath rekent af met |x| => abs(x)
pos=!positionof char | in $aaa
tot=!itemcnt $pos
!if $[gcd($tot,2)] != 2
# oneven aantal |-strepen
errortext=!record 15 of $remarkdir/commonremarks.$taal
goback=1
!exit
!endif
!for r=1 to $[$tot-1]
p1=!item $r of $pos
p2=!item $[$r+1] of $pos
aaa=!replace internal char number $p1 by ~ in $aaa
aaa=!replace internal char number $p2 by # in $aaa
aaa=!replace internal ~ by (| in $aaa
aaa=!replace internal # by |) in $aaa
!next r
!endif
test2=!replace internal $i( by # in $aaa
!if # notin $test2
maxscore=$[$P2*$maxscore]
testvar1=!nospace $i ( x )
testvar2=!nospace $i x
errortext=!record 19 of $remarkdir/commonremarks.$taal
goback=1
!exit
!endif
I=!toupper $i
aaa=!replace internal $i by $I in $aaa
!endif
!next i
aaa=!replace internal pi by PI in $aaa
aaa=!singlespace $aaa
aaa=!words2items $aaa
aaa=!nospace $aaa
aaa=!rawmath $aaa
V=!toupper $varlist
AAA=!replace internal $varlist by $V in $aaa
# AAA wordt later gebruikt bij ongelijkheid
aaa=!replace [a-z\~\`\!\@\&\#\%\_\"\:\;|'\?\|\=\>\<] by , in $aaa
aaa=!lower $aaa
!for p=1 to 5
aaa=!replace internal ,, by , in $aaa
!next p
aaa=!replace internal sqrt, by sqrt in $aaa
aaa=!replace internal sin, by sin in $aaa
aaa=!replace internal cos, by cos in $aaa
aaa=!replace internal tan, by tan in $aaa
aaa=!replace internal (, by ( in $aaa
aaa=!replace internal ,) by ) in $aaa
aaa=!replace internal ,. by . in $aaa
aaa=!replace internal ., by . in $aaa
aaa=!replace internal ,/ by / in $aaa
aaa=!replace internal /, by / in $aaa
aaa=!replace internal ,* by * in $aaa
aaa=!replace internal *, by * in $aaa
aaa=!replace internal ^, by ^ in $aaa
aaa=!replace internal ,^ by ^ in $aaa
aaa=!replace internal ^, by ^ in $aaa
#problemen bij 3 getallen -4,-4,-4
#aaa=!replace internal ,- by - in $aaa
#aaa=!replace internal -, by - in $aaa
aaa=!replace internal ,+ by , in $aaa
aaa=!replace internal +, by , in $aaa
aaa=!nospace $aaa
aaa=!replace internal ,, by , in $aaa
t1=!char 1 of $aaa
t2=!char -1 of $aaa
!if $t1=,
aaa=!char 2 to -1 of $aaa
!endif
!if $t2=,
aaa=!char 1 to -2 of $aaa
!endif
#ATTENTION answer$n should be written like $varlist<4&&$varlist>5
# 5<x && x<10 && x>15 (but without spaces...)
ggg=!replace internal && by , in $(answer$n)
ggg=!replace [$varlist\<\>\&\&&\=] by $empty in $ggg
ggg=!nospace $ggg
K=!itemcnt $aaa
S=!itemcnt $ggg
!if $K != $S
# answer wrong
ex=!record 46 of $remarkdir/commonremarks.$taal
!if $extra=$empty
remark$n=$NOK<br>$ex
!else
remark$n=$NOK<br>$extra<br>$ex
!endif
!if $math=0
reply$n=!replace internal < by < in $(reply$n)
reply$n=!replace internal > by > in $(reply$n)
!endif
goback=0
maxscore=0
!exit
!endif
!for r=1 to $S
A$r=!item $r of $aaa
G$r=!item $r of $ggg
!next r
!if $rounding > 0
!for r=1 to $S
A=!item $r of $aaa
G=!item $r of $ggg
a$r=$[(round(($A)*$rounding))/$rounding]
g$r=$[(round(($G)*$rounding))/$rounding]
!next r
!else
# pari if(1/5==0,2,ja,nee) ==> nee
# pari if(1.0*(1/5)==0,2,ja,nee) ==> ja
!for r=1 to $S
a$r=1.0*$(A$r)
g$r=1.0*$(G$r)
!next r
!endif
!if $S>5
goback=1
errortext=THERE ARE MORE THAN 5 (e.g. $S) ITEMS IN THE CORRECT ANSWER<br>THIS PROC-FILE CAN ONLY HANDLE 5
!exit
!endif
!if $S=5
test1=!exec pari if( ($a1==$g1 || $a1==$g2 || $a1==$g3 || $a1==$g4 || $a1==$g5) && ($a2==$g1 || $a2==$g2 || $a2==$g3 || $a2==$g4 || $a2==$g5) && ($a3==$g1 || $a3==$g2 || $a3==$g3 || $a3==$g4 || $a3==$g5) && ($a4==$g1 || $a4==$g2 || $a4==$g3 || $a4==$g4 || $a4==$g5) && ($a5==$g1 || $a5==$g2 || $a5==$g3 || $a5==$g4 || $a4==$g5),1,0)
!endif
!if $S=4
test1=!exec pari if( ($a1==$g1 || $a1==$g2 || $a1==$g3 || $a1==$g4) && ($a2==$g1 || $a2==$g2 || $a2==$g3 || $a2==$g4) && ($a3==$g1 || $a3==$g2 || $a3==$g3 || $a3==$g4) && ($a4==$g1 || $a4==$g2 || $a4==$g3 || $a4==$g4),1,0)
!endif
!if $S=3
test1=!exec pari if( ($a1==$g1 || $a1==$g2 || $a1==$g3) && ($a2==$g1 || $a2==$g2 || $a2==$g3) && ($a3==$g1 || $a3==$g2 || $a3==$g3),1,0)
!endif
!if $S=2
test1=!exec pari if( ($a1==$g1 || $a1==$g2) && ($a2==$g2 || $a2==$g1),1,0)
!endif
!if $S=1
test1=!exec pari if($a1==$g1,1,0)
!endif
!if $wims_exec_error!=$empty
testvar=$(reply$n)
errortext=!record 26 of $remarkdir/commonremarks.$taal
goback=1
!exit
!endif
##getallen niet goed: snel klaar...antwoord gewoon fout
!if $test1=0
# answer wrong
ex=!record 47 of $remarkdir/commonremarks.$taal
!if $extra=$empty
remark$n=$NOK<br>$ex
!else
remark$n=$NOK<br>$extra<br>$ex
!endif
goback=0
maxscore=0
!if $math=0
reply$n=!replace internal < by < in $(reply$n)
reply$n=!replace internal > by > in $(reply$n)
!endif
!exit
!endif
#NOW the Inequality
AAA=!replace [a-z\~\`\!\@\&\+\#\%\_\"\'\?\|] by , in $AAA
AAA=!lower $AAA
AAA=!rawmath $AAA
!for q=1 to 5
AAA=!replace internal ,, by , in $AAA
!next q
AAA=!replace internal =, by = in $AAA
AAA=!replace internal ,= by = in $AAA
AAA=!replace internal *, by * in $AAA
AAA=!replace internal ,* by * in $AAA
AAA=!replace internal (, by ( in $AAA
AAA=!replace internal ,) by ) in $AAA
AAA=!replace internal +, by + in $AAA
AAA=!replace internal ,+ by + in $AAA
AAA=!replace internal >+ by > in $AAA
AAA=!replace internal >,+ by > in $AAA
AAA=!replace internal <+ by < in $AAA
AAA=!replace internal <,+ by < in $AAA
AAA=!replace internal >,- by >- in $AAA
AAA=!replace internal <,- by <- in $AAA
AAA=!replace internal ^, by ^ in $AAA
AAA=!replace internal ,^ by ^ in $AAA
AAA=!replace internal -, by - in $AAA
AAA=!replace internal /, by / in $AAA
AAA=!replace internal ,/ by / in $AAA
AAA=!replace internal >, by > in $AAA
AAA=!replace internal ,> by > in $AAA
AAA=!replace internal <, by < in $AAA
AAA=!replace internal ,< by < in $AAA
AAA=!replace internal >,$varlist by >$varlist in $AAA
AAA=!replace internal $varlist,> by $varlist> in $AAA
AAA=!replace internal <,$varlist by <$varlist in $AAA
AAA=!replace internal $varlist,< by $varlist< in $AAA
AAA=!replace internal $varlist$varlist by $varlist&&$varlist in $AAA
AAA=!replace internal $varlist,$varlist by $varlist&&$varlist in $AAA
AAA=!replace internal =$varlist< by =$varlist&&$varlist< in $AAA
AAA=!replace internal =$varlist> by =$varlist&&$varlist> in $AAA
## 5< =x=> =6 6< =x&&x> =6
AAA=!replace internal >$varlist= by >$varlist&&$varlist= in $AAA
AAA=!replace internal <$varlist= by <$varlist&&$varlist= in $AAA
AAA=!replace internal <$varlist< by <$varlist&&$varlist< in $AAA
AAA=!replace internal >$varlist> by >$varlist&&$varlist> in $AAA
AAA=!replace internal >$varlist< by >$varlist&&$varlist< in $AAA
AAA=!replace internal <$varlist> by <$varlist&&$varlist> in $AAA
t1=!char 1 of $AAA
t2=!char -1 of $AAA
!if $t1=,
AAA=!char 2 to -1 of $AAA
!endif
!if $t2=,
AAA=!char 1 to -2 of $AAA
!endif
AAA=!replace internal , by && in $AAA
AAA=!replace internal &&&& by && in $AAA
GGG=!replace internal = by $empty in $(answer$n)
AAA=!replace internal = by $empty in $AAA
GGG=!nospace $GGG
AAA=!nospace $AAA
controle=1
!for p=1 to $S
testgetal1=$[$(g$p)+0.2]
testgetal2=$[$(g$p)-0.2]
##vreselijke truuk: we vervangen de x door een getal; testen of de bewering waar is
A1=!replace internal $varlist by $testgetal1 in $AAA
G1=!replace internal $varlist by $testgetal1 in $GGG
A2=!replace internal $varlist by $testgetal2 in $AAA
G2=!replace internal $varlist by $testgetal2 in $GGG
##x>4 of 4<x => 0>4&&4<0
tot=!exec pari if(($A1)==($G1),1,0)\
if(($A2)==($G2) ,1,0)
t1=!line 1 of $tot
t2=!line 2 of $tot
!if NaN isin $t1,$t2
errortext=!record 39 of $remarkdir/commonremarks.$taal
goback=1
!exit
!endif
!if 0 isin $t1,$t2
controle=0
!goto READY2
!endif
!next p
:READY2
# html in't antwoord
!if $math=0
reply$n=!replace internal > by > in $(reply$n)
reply$n=!replace internal < by < in $(reply$n)
!endif
maxscore=$[($controle + $maxscore)/2]
modulescore=$[$modulescore + $maxscore]
!if $maxscore=1
remark$n=$OK
!else
!if $maxscore>5
remark$n=$BOK
!else
remark$n=$NOK
!endif
!endif
!if $extra != $empty
remark$n=$(remark$n)<br>$extra
!endif
goback=0
!exit