diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/rangen |
Initial commit
Diffstat (limited to 'macros/latex/contrib/rangen')
-rw-r--r-- | macros/latex/contrib/rangen/README | 37 | ||||
-rw-r--r-- | macros/latex/contrib/rangen/doc/rangen_man.pdf | 1432 | ||||
-rw-r--r-- | macros/latex/contrib/rangen/doc/rangen_man.tex | 1563 | ||||
-rw-r--r-- | macros/latex/contrib/rangen/examples/randomLIP.tex | 53 | ||||
-rw-r--r-- | macros/latex/contrib/rangen/examples/randomQ.tex | 27 | ||||
-rw-r--r-- | macros/latex/contrib/rangen/examples/randomR.tex | 44 | ||||
-rw-r--r-- | macros/latex/contrib/rangen/examples/randomZ.tex | 38 | ||||
-rw-r--r-- | macros/latex/contrib/rangen/examples/rangen_fp.tex | 24 | ||||
-rw-r--r-- | macros/latex/contrib/rangen/examples/rangen_tst.tex | 280 | ||||
-rw-r--r-- | macros/latex/contrib/rangen/rangen.dtx | 1988 | ||||
-rw-r--r-- | macros/latex/contrib/rangen/rangen.ins | 64 |
11 files changed, 5550 insertions, 0 deletions
diff --git a/macros/latex/contrib/rangen/README b/macros/latex/contrib/rangen/README new file mode 100644 index 0000000000..6ae2f48356 --- /dev/null +++ b/macros/latex/contrib/rangen/README @@ -0,0 +1,37 @@ +The rangen Package + +The rangen package is a package that generates random integers, +rational numbers, and decimal number. Actually, the package uses the +lcg package (by Erich Janka) to generate random integers, while +rangen builds rational numbers and decimal numbers from the +generated integers. My purpose in writing this package was to be +able to create random questions for the quizzes of exerquiz (part of +AeB). Indeed, that is what you can do with this package: Write a +quiz question based on a template (for example, differentiate +$\a x^{\n}$ , where \a and \n are RVs (random variables) generated with +rangen); determine if the user input is correct; and display the +correct answer to the question. + +Beta Testers wanted: The package is still in development. I would +invite anyone interested to test the package, looking for bugs. +Also, suggested features would be appreciated. + +The rangen package requires the insdljs package from AeB. The +package can be used without exerquiz, perhaps there are some +applications to the generation of random numbers. As pointed out in +the documentation, the fp package can be used to manipulate the +numbers created by rangen. + +The home page for rangen is + + http://www.math.uakron.edu/~dpstory/rangen.html + +The home page for AeB is + + http://www.math.uakron.edu/~dpstory/webeq.html + +Comments and suggestions are always gratefully accepted and seriously +considered. + +D. P. Story +09/30/09 diff --git a/macros/latex/contrib/rangen/doc/rangen_man.pdf b/macros/latex/contrib/rangen/doc/rangen_man.pdf new file mode 100644 index 0000000000..de23fc124c --- /dev/null +++ b/macros/latex/contrib/rangen/doc/rangen_man.pdf @@ -0,0 +1,1432 @@ +%PDF-1.4
%
+367 0 obj
<</AA<<>>/AcroForm 368 0 R/Metadata 364 0 R/Names 369 0 R/OCProperties<</D<</AS[<</Category[/View]/Event/View/OCGs[417 0 R]>><</Category[/Print]/Event/Print/OCGs[417 0 R]>><</Category[/Export]/Event/Export/OCGs[417 0 R]>>]/ON[417 0 R]/Order[]/RBGroups[]>>/OCGs[417 0 R]>>/OpenAction<</D[370 0 R/XYZ null null 1]/S/GoTo>>/Outlines 199 0 R/PageLabels 358 0 R/PageLayout/SinglePage/PageMode/UseNone/Pages 360 0 R/Type/Catalog/ViewerPreferences<<>>>>
endobj
368 0 obj
<</CO 225 0 R/DA(/Helv 10 Tf 0 g)/DR<</Font<</Helv 227 0 R/ZaDb 228 0 R>>>>/Fields[29 0 R 450 0 R 436 0 R 432 0 R 424 0 R 429 0 R 124 0 R 139 0 R 486 0 R]>>
endobj
364 0 obj
<</Length 4231/Subtype/XML/Type/Metadata>>stream
+<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> +<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.6-c015 81.157285, 2014/12/12-00:43:15 "> + <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> + <rdf:Description rdf:about="" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:pdf="http://ns.adobe.com/pdf/1.3/" + xmlns:xmp="http://ns.adobe.com/xap/1.0/" + xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" + xmlns:xmpRights="http://ns.adobe.com/xap/1.0/rights/"> + <dc:format>application/pdf</dc:format> + <dc:source>rangen_man.tex</dc:source> + <dc:description> + <rdf:Alt> + <rdf:li xml:lang="x-default">Documentation for annot_pro from AcroTeX</rdf:li> + </rdf:Alt> + </dc:description> + <dc:title> + <rdf:Alt> + <rdf:li xml:lang="x-default">The : Random Generation of Integer, Rational, and Real Numbers with Applications to the exercise, quiz, and shortquiz Environments of Exerquiz</rdf:li> + </rdf:Alt> + </dc:title> + <dc:creator> + <rdf:Seq> + <rdf:li>D. P. Story</rdf:li> + </rdf:Seq> + </dc:creator> + <dc:rights> + <rdf:Alt> + <rdf:li xml:lang="x-default">Copyright (C) 2016, D. P. Story</rdf:li> + </rdf:Alt> + </dc:rights> + <pdf:Producer>Acrobat Distiller 15.0 (Windows)</pdf:Producer> + <pdf:Keywords/> + <xmp:CreatorTool>The AcroTeX eDucation Bundle</xmp:CreatorTool> + <xmp:ModifyDate>2016-02-20T05:34:56-06:00</xmp:ModifyDate> + <xmp:CreateDate>2016-02-20T05:34:46</xmp:CreateDate> + <xmp:MetadataDate>2016-02-20T05:34:56-06:00</xmp:MetadataDate> + <xmpMM:DocumentID>uuid:868101b7-edf6-4b9c-b714-9714f44eb86a</xmpMM:DocumentID> + <xmpMM:InstanceID>uuid:9df1dd09-c6a3-4f09-bd5d-0fbb4e95c8a5</xmpMM:InstanceID> + <xmpRights:Marked>True</xmpRights:Marked> + <xmpRights:WebStatement>http://www.acrotex.net</xmpRights:WebStatement> + </rdf:Description> + </rdf:RDF> +</x:xmpmeta> + + + + + + + + + + + + + + + + + + + + + +<?xpacket end="w"?>
+endstream
endobj
369 0 obj
<</Dests 230 0 R/JavaScript 535 0 R>>
endobj
199 0 obj
<</Count 25/First 200 0 R/Last 201 0 R>>
endobj
358 0 obj
<</Nums[0 359 0 R]>>
endobj
360 0 obj
<</Count 29/Kids[361 0 R 362 0 R 363 0 R]/Type/Pages>>
endobj
361 0 obj
<</Count 10/Kids[370 0 R 1 0 R 28 0 R 47 0 R 56 0 R 59 0 R 62 0 R 65 0 R 68 0 R 71 0 R]/Parent 360 0 R/Type/Pages>>
endobj
362 0 obj
<</Count 10/Kids[74 0 R 79 0 R 82 0 R 85 0 R 88 0 R 91 0 R 94 0 R 97 0 R 100 0 R 103 0 R]/Parent 360 0 R/Type/Pages>>
endobj
363 0 obj
<</Count 9/Kids[106 0 R 109 0 R 112 0 R 116 0 R 123 0 R 136 0 R 145 0 R 152 0 R 155 0 R]/Parent 360 0 R/Type/Pages>>
endobj
106 0 obj
<</Contents 497 0 R/CropBox[0 0 612 791]/MediaBox[0 0 612 792]/Parent 363 0 R/Resources<</ColorSpace<</CS0 375 0 R>>/ExtGState<</GS0 498 0 R/GS1 376 0 R>>/Font<</T1_0 392 0 R/T1_1 397 0 R/T1_2 374 0 R/T1_3 387 0 R/T1_4 172 0 R/T1_5 193 0 R/T1_6 164 0 R/T1_7 159 0 R/T1_8 192 0 R>>/ProcSet[/PDF/Text]/XObject<</Fm0 405 0 R>>>>/Rotate 0/Type/Page>>
endobj
109 0 obj
<</Contents 495 0 R/CropBox[0 0 612 791]/MediaBox[0 0 612 792]/Parent 363 0 R/Resources<</ColorSpace<</CS0 375 0 R>>/ExtGState<</GS0 496 0 R/GS1 376 0 R>>/Font<</T1_0 392 0 R/T1_1 159 0 R/T1_2 374 0 R/T1_3 397 0 R/T1_4 382 0 R/T1_5 164 0 R/T1_6 172 0 R/T1_7 193 0 R>>/ProcSet[/PDF/Text]/XObject<</Fm0 405 0 R>>>>/Rotate 0/Type/Page>>
endobj
112 0 obj
<</Annots[113 0 R]/Contents 493 0 R/CropBox[0 0 612 791]/MediaBox[0 0 612 792]/Parent 363 0 R/Resources<</ColorSpace<</CS0 375 0 R>>/ExtGState<</GS0 494 0 R/GS1 376 0 R>>/Font<</T1_0 392 0 R/T1_1 159 0 R/T1_2 172 0 R/T1_3 397 0 R/T1_4 374 0 R/T1_5 382 0 R/T1_6 164 0 R>>/ProcSet[/PDF/Text]/XObject<</Fm0 405 0 R>>>>/Rotate 0/Type/Page>>
endobj
116 0 obj
<</Annots[117 0 R 118 0 R 119 0 R 120 0 R]/Contents 491 0 R/CropBox[0 0 612 791]/MediaBox[0 0 612 792]/Parent 363 0 R/Resources<</ColorSpace<</CS0 375 0 R>>/ExtGState<</GS0 492 0 R/GS1 376 0 R>>/Font<</T1_0 164 0 R/T1_1 392 0 R/T1_2 374 0 R/T1_3 397 0 R/T1_4 159 0 R>>/ProcSet[/PDF/Text]/XObject<</Fm0 405 0 R>>>>/Rotate 0/Type/Page>>
endobj
123 0 obj
<</Annots[124 0 R 125 0 R 126 0 R 127 0 R 128 0 R 129 0 R]/Contents 489 0 R/CropBox[0 0 612 791]/MediaBox[0 0 612 792]/Parent 363 0 R/Resources<</ColorSpace<</CS0 375 0 R>>/ExtGState<</GS0 490 0 R/GS1 376 0 R>>/Font<</T1_0 164 0 R/T1_1 392 0 R/T1_2 397 0 R/T1_3 374 0 R/T1_4 171 0 R/T1_5 172 0 R/T1_6 159 0 R/T1_7 198 0 R>>/ProcSet[/PDF/Text]/XObject<</Fm0 405 0 R>>>>/Rotate 0/Type/Page>>
endobj
136 0 obj
<</Annots[137 0 R 138 0 R 139 0 R 140 0 R 141 0 R 142 0 R]/Contents 487 0 R/CropBox[0 0 612 791]/MediaBox[0 0 612 792]/Parent 363 0 R/Resources<</ColorSpace<</CS0 375 0 R>>/ExtGState<</GS0 488 0 R/GS1 376 0 R>>/Font<</T1_0 164 0 R/T1_1 392 0 R/T1_2 397 0 R/T1_3 159 0 R/T1_4 192 0 R/T1_5 374 0 R/T1_6 172 0 R>>/ProcSet[/PDF/Text]/XObject<</Fm0 405 0 R>>>>/Rotate 0/Type/Page>>
endobj
145 0 obj
<</Annots[146 0 R 147 0 R 148 0 R 149 0 R]/Contents 421 0 R/CropBox[0 0 612 791]/MediaBox[0 0 612 792]/Parent 363 0 R/Resources<</ColorSpace<</CS0 375 0 R>>/ExtGState<</GS0 422 0 R/GS1 376 0 R>>/Font<</T1_0 164 0 R/T1_1 392 0 R/T1_2 397 0 R/T1_3 374 0 R/T1_4 159 0 R>>/ProcSet[/PDF/Text]/XObject<</Fm0 405 0 R>>>>/Rotate 0/Type/Page>>
endobj
152 0 obj
<</Contents 419 0 R/CropBox[0 0 612 791]/MediaBox[0 0 612 792]/Parent 363 0 R/Resources<</ColorSpace<</CS0 375 0 R>>/ExtGState<</GS0 420 0 R/GS1 376 0 R>>/Font<</T1_0 164 0 R/T1_1 392 0 R/T1_2 397 0 R/T1_3 159 0 R/T1_4 192 0 R/T1_5 181 0 R>>/ProcSet[/PDF/Text]/XObject<</Fm0 405 0 R>>>>/Rotate 0/Type/Page>>
endobj
155 0 obj
<</Annots[156 0 R]/Contents 404 0 R/CropBox[0 0 612 791]/MediaBox[0 0 612 792]/Parent 363 0 R/Resources<</ColorSpace<</CS0 375 0 R>>/ExtGState<</GS0 418 0 R/GS1 376 0 R>>/Font<</T1_0 392 0 R/T1_1 374 0 R/T1_2 159 0 R/T1_3 397 0 R/T1_4 164 0 R/T1_5 181 0 R/T1_6 188 0 R>>/ProcSet[/PDF/Text]/XObject<</Fm0 405 0 R>>>>/Rotate 0/Type/Page>>
endobj
404 0 obj
<</Filter/FlateDecode/Length 711>>stream
+HTmk0_}snit +b؇v'vSo%;Y ^s.tmQ4,}oi7eBQ/\J|v, H,|NЪ
%A: +>I%vME aۀRLfps!2B@ILAt +W,[D0FaPF]V=09FK<Bcᬒ3Žzck'SNY)v= RJ#96D}z
1/(a ++Y=ۺY坟|ތwx8F[ϖuYU6#w3L+4^ +*5ᤋzvvoFT92ؐfNHx9nueیar +3sJ? +endstream
endobj
405 0 obj
<</BBox[0.0 0.0 612.0 792.007]/Filter/FlateDecode/Group 406 0 R/LastModified(D:20160220053446-06'00')/Length 8198/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/OC 407 0 R/PieceInfo<</ADBE_CompoundType<</LastModified(D:20160220053446-06'00')/Private/Background>>>>/Resources<</ColorSpace<</CS0 410 0 R>>/ExtGState<</GS0 415 0 R/GS1 416 0 R>>/Properties<</MC0 414 0 R>>/Shading<</Sh0 408 0 R/Sh1 409 0 R>>>>/Subtype/Form/Type/XObject>>stream
+HWݎGߧٮ8 )H/ZA>uN7kob
uOwzo|l߽*7߾~+pKۻXk=itn2._<n{wo8[ıRDKt{|wÛevq~^ë՛Mgom{|?ne#&L6}8{7MH$8_3_BPUn6YzhoM|>*˖o~&7˲w*~W +r<=~*`aRG了SF\ލ̝J~04=N6@x@}0cx@`#:Ru-Z*xMhiYI=]ĖTj]=P`jxh",5:By6\{`eh4/܍|YִK>~Z"h͞liYVVmuWW9P$2+Z2ٲ?z+@rghD~ĵeߓ&g'! +a"##:Z"hNPf1*72{&Xld i;@j?7aDֲOCKsQ)Գ[yAZ.0%Ʊ؝"; +]!feY5VU?\K>*Zk50Vl[\uq +h4ɂ&YWFM!(b]Hl,h2LU%8CL0B
rcFSZZkDC7tde=̺(!#fN9LB!R cC uVZ%j-[%|6Iln_%Ė/Ll&vlpdٰ8v# + +@_7Z s
9v +oؽZ[NeĴ P +3g=eҦsw_,=yYldnr/)Chٕ_ HS]
5~ $:/
I3D[* Ǎe֬IUٷsl퍖t,Kޗ&ZK=@^[t1/Dʫ43ˊlL5*VGjδq5*Ýkas ėK7EZEm?14{n,@=)e(`C]9`6?CiCط +^<fx3qs;4[KPVF\H.QAx&X1>n
5au +;j"< Su_Ú#E-Z-膉S"Tºz<k-In3:|G%zGAM]rsYv&SHmj;1 +| +Bq#c+o5xeַAӢfCYlyNیnd
\<=e`RE`pop2+^U%L88 +FUA7MRU|p7J +@̜]uAd68iV;4ժŖ-iAS:cy+_e[>6c7Vy*\~80jKCc-z'ߐt7:T&UFm>*$ț;lJqg罐E2V>(Icg:0_Vb+i2[UB}2JEZbfՑD{31-uz̮@[}Xn~hcg<̢$ +d?EE5TY)iܨ۩pGyI̴o믹pi(uk}BO".7ɍ*eP</kJ2aU\ojZ8-x:P(N>[vER"NǟL?vT=hM +[}ƎchB)@;Ns;Y +>"zTujXEUi3ncvKtr29%
L^RpI{*5 3=ZsDSk!h?OOKiX^[ޢs!>6j@X<2=2=Zg]poZXĊqllU`\\Y2( ^xoù?u_ +N``E
P
\L
1>q磱NT%ErRٜ.Lz]QoCn&-3idz%rTvB쒠96B +[ +@j)
ۘ +ԞgXUqAB`>/dۧ§[\F] +EbE<~@!
}ϲ-`. B/]2=<D:+!ǭs9Y9VokRbwkT /u.rVaQKb!5,)@xlk:%,0u)}Kizshl¦mYöФv(B#NXE^sղ#mC3Ix^@U'd/9}uuWd1KW<2Y|
/Ӗk-⯼YɧO+ +hQrZ҆_ҥص5Ә&L/A<*iH> + H&Ɏ BW0:(\<=rr +RjTYvB!f@+Fsz4?S_#LtygBJQ@N=fB3"p9@<:qf=VE _ [ +*'@8jɨcڊ0>_o5'ŷ~ãM4wO~x*߾~3+~ +oI +M\n_Av{Eo_$oSlko/N +IE:㹯%vj86JC.olqYp|ϗBve0fz`mB6<EPu;k%kd>/xX/ע=\oNv>OWyl͊8.w,{K|Sh=ݣ>[?."փ?iKm! +S>f26A Hcx:>qtO?Fqc_R(+lۊWl1*i4Ķ7Z)x:IșZq-[KQkMTzPi E0QҸڜT$Oy8RITEI5q崌f`FU]ӣVyc>LfT[X nWY,SH)X630cAF0V%,QLeHFNe߄r +sW{Vs_KBiL3L,^"@8l3$\;ʡfS')*Rv7zZSthNZĪpfˠ\xj\G Kvf+2t[&uvޏ>x&o`>qDN۰$F2Vn.@ʡR+;]c<&5=6"/4YT3%63lB"H`xg2K,ox6">a +]c*dsrSXT@+ +l + H.c[UMu54^ +ZrOv5%V_8U\-St3eLy1@>Vm}^aWɮ&cBBJڨ*Y*k*D4jF#UWl}=eȳPx[&jwS;tf_mq*oO'TB&r +!cR|C.`~yii/BWgL]S^1-sG3_":p.(ЃMEa\Qتk +ύD*Ĕ9_F@JcvDƘrPT.Jwl)1[n$f%+Ű8W(]M] `(Dj$F:'_HiԆTY5YNӳ֝PbT/dQvCWA6`vK<+ ;X[S|H)zqy)zbhEߤqvv8<ӊ>;ӊЊ_h^ʼ|H+B+zz=J=ʅUUΤ"RȉTJ*z%v&TL*z&}@*v"{Tt'q!&ww2{Q 2alD;& +ӳ96%?!3BE&ipJ1V +R [AHuA;c +\
%q«@TTj~+Li!ۍd$G5Cޭ( +AiMdO_nO` +endstream
endobj
406 0 obj
<</K true/S/Transparency/Type/Group>>
endobj
407 0 obj
<</OCGs 417 0 R/Type/OCMD>>
endobj
408 0 obj
<</ColorSpace 410 0 R/Coords[0 0 1 0]/Extend[true true]/Function 413 0 R/ShadingType 2>>
endobj
409 0 obj
<</ColorSpace 410 0 R/Coords[0 0 1 0]/Extend[true true]/Function 411 0 R/ShadingType 2>>
endobj
410 0 obj
[/ICCBased 412 0 R]
endobj
411 0 obj
<</BitsPerSample 8/Decode[0 1 0 1 0 1]/Domain[0 1]/Encode[0 255]/Filter/FlateDecode/FunctionType 0/Length 356/Range[0 1 0 1 0 1]/Size[256]>>stream
+HLƅRa@ᷲ;PX) iQPQ,XTlNg3ߜ9O"Wv6`+&Zd7HEznDNyf}Y̐8X3B?AX@~&^G>D3q{CF&E5,,0`DQ4 + +
+endstream
endobj
412 0 obj
<</Alternate/DeviceRGB/Filter/FlateDecode/Length 2575/N 3>>stream
+HyTSwoɞc
[5laQIBHADED2mtFOE.c}088GNg9w߽ + +V)gB0iW8#8wթ8_٥ʨQQj@&A)/g>'K +x- +ꇆnQt}MA0alSx k&^>0|>_',G!"F$H:R!zFQd?r9\A&GrQhE]a4zBgE#H *B=0HIpp0MxJ$D1D, VĭKĻYdE"EI2EBGt4MzNr!YK ?%_&#(0J:EAiQ(()ӔWT6U@P+!~mDeԴ!hӦh/']B/ҏӿ?a0nhF!X8܌kc&5S6lIa2cKMA!E#ƒdV(kel
}}Cq9 +N')].uJr +wG xR^[oƜchg`>b$*~ :Eb~,m,-ݖ,Y¬*6X[ݱF=3뭷Y~dó tizf6~`{v.Ng#{}}jc1X6fm;'_9 r:8q:˜O:ϸ8uJqnv=MmR 4 +n3ܣkGݯz=[==<=G</z^^j^ ޡZQB0FX'+t<u-{__ߘ-G,}/Hh8mW2p[AiAN#8$X?AKHI{!7<qWy(!46-aaaW @@`lYĎH,$((Yh7ъb<b*b<~L&Y&9%uMssNpJP%MIJlN<DHJIڐtCj'KwKgC%Nd|ꙪO=%mLuvx:HoL!ȨC&13#s$/Y=OsbsrnsO1v=ˏϟ\h٢#¼oZ<]TUt}`IÒsKV-Y,+>TB(/S,]6*-W:#7*e^YDY}UjAyT`#D="b{ų+ʯ:!kJ4Gmt}uC%K7YVfFY.=b?SƕƩȺy
چk5%4m7lqlioZlG+Zzmzy]?uuw|"űNwW&e֥ﺱ*|j5kyݭǯg^ykEklD_p߶7Dmo꿻1ml{Mś
nLl<9O +zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs
2F[p(@Xr4Pm8Ww)Km +
+endstream
endobj
413 0 obj
<</BitsPerSample 8/Decode[0 1 0 1 0 1]/Domain[0 1]/Encode[0 255]/Filter/FlateDecode/FunctionType 0/Length 278/Range[0 1 0 1 0 1]/Size[256]>>stream
+HTr@_"͆+*(X +{BO;>acͭ6;XZ6Y0\60]Z,d2gV7.,ɐnNc11&tuԾ0
Bs}5=`ZZ.Ԛ*T\wBֆb+7B +
+endstream
endobj
414 0 obj
<<>>
endobj
415 0 obj
<</OP false/OPM 1/SA false/SM 0.02/Type/ExtGState/op false>>
endobj
416 0 obj
<</OP false/OPM 1/SA true/SM 0.02/Type/ExtGState/op false>>
endobj
417 0 obj
<</Name(Watermark)/Type/OCG/Usage<</Export<</ExportState/ON>>/PageElement<</Subtype/BG>>/Print<</PrintState/ON>>/View<</ViewState/ON>>>>>>
endobj
392 0 obj
<</BaseFont/PELCMA+LucidaBright/Encoding 393 0 R/FirstChar 2/FontDescriptor 395 0 R/LastChar 169/Subtype/Type1/ToUnicode 396 0 R/Type/Font/Widths[741 994 304 304 304 304 304 304 304 304 304 304 304 304 304 304 304 304 304 304 304 304 304 304 304 304 304 304 304 304 304 265 304 304 304 304 304 304 316 316 304 304 265 325 265 512 608 608 608 608 608 608 608 608 608 608 265 265 304 608 304 480 874 744 609 695 768 566 548 732 771 325 422 708 557 860 751 777 573 778 679 542 663 719 699 925 657 678 304 304 304 304 304 304 304 543 611 509 642 530 404 571 633 307 346 599 313 946 633 602 642 617 440 504 392 633 545 795 557 551 595 304 241 304 304 304 304 304 304 1000 304 304 304 304 304 304 304 304 304 458 458 265 265 304 304 657 663 304 304 304 304 304 304 304 304 304 304 304 304 304 304 304 304 304 304 304 304 855]>>
endobj
374 0 obj
<</BaseFont/PELCLN+LucidaBright-Demi/Encoding 377 0 R/FirstChar 44/FontDescriptor 379 0 R/LastChar 147/Subtype/Type1/ToUnicode 380 0 R/Type/Font/Widths[265 289 265 312 312 623 623 623 623 623 623 624 623 623 265 312 312 312 312 312 312 795 639 711 794 601 584 753 312 349 312 312 584 312 788 810 614 810 720 556 714 312 312 312 702 312 312 312 312 312 312 312 312 556 640 541 652 562 416 599 654 325 312 654 325 967 654 617 652 640 462 524 389 654 657 880 608 654 584 312 312 312 312 312 312 312 312 312 312 312 312 312 312 312 312 312 312 312 312 312 312 312 312 672]>>
endobj
159 0 obj
<</BaseFont/PELCNB+LucidaNewMath-Symbol/Encoding 163 0 R/FirstChar 2/FontDescriptor 167 0 R/LastChar 138/Subtype/Type1/ToUnicode 165 0 R/Type/Font/Widths[468 468 795 940 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 610 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 561 795 795 795 795 795 795 795 795 795 795]>>
endobj
397 0 obj
<</BaseFont/PELCMB+LucidaSansTypewriter/Encoding 398 0 R/FirstChar 26/FontDescriptor 400 0 R/LastChar 126/Subtype/Type1/ToUnicode 401 0 R/Type/Font/Widths[602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602]>>
endobj
164 0 obj
<</BaseFont/PELCNC+LucidaSans/Encoding 162 0 R/FirstChar 69/FontDescriptor 168 0 R/LastChar 122/Subtype/Type1/ToUnicode 161 0 R/Type/Font/Widths[542 316 316 316 316 316 316 316 316 316 316 316 316 316 316 316 316 316 316 316 316 316 316 316 316 316 316 316 552 630 512 630 557 367 623 620 289 304 316 289 316 620 316 630 630 409 509 316 620 316 316 613 522 574]>>
endobj
181 0 obj
<</BaseFont/PELCOF+LucidaBlackletter/Encoding 183 0 R/FirstChar 68/FontDescriptor 182 0 R/LastChar 80/Subtype/Type1/ToUnicode 178 0 R/Type/Font/Widths[787 267 267 267 267 267 267 267 267 267 267 267 815]>>
endobj
188 0 obj
<</BaseFont/PELCPH+LucidaNewMath-Arrows/Encoding 185 0 R/FirstChar 2/FontDescriptor 189 0 R/LastChar 3/Subtype/Type1/Type/Font/Widths[241 795]>>
endobj
185 0 obj
<</Differences[2/arrowdblext/squaresolid]/Type/Encoding>>
endobj
189 0 obj
<</Ascent 0/CapHeight 723/CharSet(/space/arrowdblext/squaresolid)/Descent 0/Flags 4/FontBBox[-114 -205 1108 964]/FontFile3 190 0 R/FontName/PELCPH+LucidaNewMath-Arrows/ItalicAngle 0/StemH 48/StemV 48/Type/FontDescriptor>>
endobj
190 0 obj
<</Filter/FlateDecode/Length 308/Subtype/Type1C>>stream
+hbd`ab`dd pq)MLIK-M,u,*//ɫe!CG7_/~E2={R߷122'e$t$V&d8Teg(h$k*ZZ Ԝr5bļHHϼd=+}rJL^r~_~QnbV200l` ##5wUw3fdF +auu?ڏl|se:]nԙ3ps +endstream
endobj
183 0 obj
<</Differences[68/D 80/P]/Type/Encoding>>
endobj
182 0 obj
<</Ascent 854/CapHeight 854/CharSet(/space/D/P)/Descent -205/Flags 6/FontBBox[-286 -217 1210 958]/FontFile3 180 0 R/FontName/PELCOF+LucidaBlackletter/ItalicAngle 0/StemH 83/StemV 97/Type/FontDescriptor/XHeight 553>>
endobj
178 0 obj
<</Filter/FlateDecode/Length 223>>stream
+hT=o w~ō:dMU ]@g<ý<u12~apT5XgL:LpM#g*ΑW؝EA^";awS_B )7 .q
9Zh$&q̏fT*Q'#ubO5faNBEN|sw +endstream
endobj
180 0 obj
<</Filter/FlateDecode/Length 1015/Subtype/Type1C>>stream
+hd]L[u +Uk,eGep߄CQ]OWazE֩jjx`(ޠ|[v^y~d@7{3|w;__#>o<#(5hbv첓Ĝㆽ`ݷ\j-aB!FC0B
t&qNvaPl`3ItcxDV.rmYr}e!6IE#pjۭ|U=׀k(IkxS8X L0@_qэ-dMCɆx!ROqY&c%)̦Iod6,cnISnM}Κ){"ٺ<]sTξ*qM/!N[!C@! ,&孴5laa:gt$ qGĒ$b$mYoh~W~t?.<W +endstream
endobj
162 0 obj
<</Differences[69/E 97/a/b/c/d/e/f/g/h/i/j 108/l 110/n 112/p/q/r/s 117/u 120/x/y/z]/Type/Encoding>>
endobj
168 0 obj
<</Ascent 771/CapHeight 723/CharSet(/space/r/a/n/g/e/x/q/u/i/z/l/c/h/y/p/f/d/E/j/s/b)/Descent -193/Flags 4/FontBBox[-293 -250 1006 936]/FontFile3 160 0 R/FontName/PELCNC+LucidaSans/ItalicAngle 0/StemH 72/StemV 96/Type/FontDescriptor/XHeight 530>>
endobj
161 0 obj
<</Filter/FlateDecode/Length 267>>stream
+hTQMo +|NBd>tSp2 B!~3~ClFb:p/A#--<E %)90V +endstream
endobj
160 0 obj
<</Filter/FlateDecode/Length 1737/Subtype/Type1C>>stream
+hެT}TS$^2kssZ갎6EXE#M +0[\|MZ 5~XZZ(wt:0AUmP,Qg'l,PAޝlDElGe^"Dp$& +#r".0BHWxY#Rt#4̄b +<{g.tY{D.9 |{ +JjhxUl?=Jݻ·r&.a>BlNp? +opmPuq[OwR3z+ +b?OOx?s
} iٟ̕fʪ4^ +endstream
endobj
398 0 obj
<</Differences[26/circumflex 33/exclam 36/dollar/percent 40/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon 60/less/equal 65/A/B/C/D/E/F/G/H/I/J 76/L/M/N/O/P/Q/R/S/T/U/V/W 90/Z/bracketleft/backslash/bracketright 95/underscore 97/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde]/Type/Encoding>>
endobj
400 0 obj
<</Ascent 770/CapHeight 723/CharSet(/space/w/period/a/c/r/o/t/e/x/n/backslash/R/d/m/Z/Q/L/I/P/S/O/f/s/y/p/i/g/underscore/z/h/colon/slash/u/k/asciitilde/b/q/l/equal/one/j/bracketleft/bracketright/braceleft/braceright/zero/comma/hyphen/five/asterisk/bar/dollar/less/two/three/nine/seven/E/U/fo\
ur/N/G/T/D/v/six/eight/parenleft/parenright/plus/percent/circumflex/C/F/A/B/M/W/H/J/V/exclam)/Descent -205/Flags 4/FontBBox[-12 -205 618 928]/FontFile3 399 0 R/FontName/PELCMB+LucidaSansTypewriter/ItalicAngle 0/StemH 72/StemV 97/Type/FontDescriptor/XHeight 530>>
endobj
401 0 obj
<</Filter/FlateDecode/Length 297>>stream
+hTQMo +|E2UaZ)8] g
Ap.4^E8z;ٲ$>\FZw*NsfWgw _3l'K8! /f@,Î׀P,yNXƟtn562)N2Q$fVF"8Ch-5zWZ"R& +endstream
endobj
399 0 obj
<</Filter/FlateDecode/Length 5827/Subtype/Type1C>>stream
+hޔXTgf]8A#X`bLc!"MzYAiK٥/(,Ja h&`F44~?瞳p|[yoE&CLD"ф?<]A^!AHk*L0D|HL4Yr$}lQ&CD" +tAǧ!*ӔZeg11]O<_z4v8AVpKggK=3ġ}n%9| qPVPkQ{|~L-MrƎ4T!Hׄz{W_]b:7=ʇ,t&0]Y3xf9!|8n=zz~Nξ5]'|w3g..`QXkq>/=wzkl}E4 +zmgkԪ@~:ڣ3A]6\(W;E+1f +ҝ:9<{w^ASshuuUM5?~YKC{Nt[X#J}̮hJ@$RUhs,È0U|Hxd7LVĔG,p,ЛPSi7,alUNc5I2paP /nf G,C(XO9 +J,+Y!254ygr*z*&!9,Be4[鲆sO,R¼aˀ/AЋ
"
&r^@%MMXC4D dQT/ojK˞)n䅢sq
=bh7g"G#9jC8wy] aK0n2u\nGHSTIQ\d..ҕgOnZ8m.xFn?fG'Fuz}sC
4N Nu~,$_%g`il=śUF"'76Uv|Ҿ^9Wѕu$/Gw%|*j֕sL.r~[O 456 /|Ozpdzxy6|hCOB7 +I\ڒe#?lN֜9'y22Z-9|@SDjInnni43;cg`QZ}\(!"
_o +_8Gffљ!,ڂ,\)7 +\r5Yx>H'Y4s*{Xނ GN"p)QɮzUߟ:.W= +)E<~i&F7q{%M+l$H>٭wA4/z+Ӆ
<<`oNtA~LSP +`lFw]%?h +ǔS<# +2+4Mê'm\v&ȵ.h҉^(F==6@tc4=ԛJLj$EaE2a
Ζ#b25$AҀphg+<đd:hw1˟q'rLUԤWx!qnrPa˄EAtS9Xco0YXM
.M0"vh0@~q~L>%L#pxp|%t_b*@fLM%R1 +W ӳ6n22r{!/-L' +|av1ۑ"\a3}F'FTr5a>$þ9)Ye #':?/ZUdӧVSp-腹=iZi."XY*=Q{"6|$2m0741f LsYa^s0.9$y兹ERdd=p [yh`-DyWQM2MA7TWu%߷|sTI.L(Ь7bфe^дwo;$Klz㚂Ϥq +<A ߗԈAOճ0{0wڌO`'k2HzQOԉ@}PQ!\-<@Y\
&V_!6`ju[0PN5u^be*M8D.'IxBXչVrXpZfGk7e'aG7 +[Į~-gVkGmZSf ;kb>`;0ZgXv<rdhB,M_7`]LE~p,/1 s9^Z㚿uN'F&F!{(*Ω6JRyv+ +NCCv魯)yB,H2qqg62FIbv0I+$1bGݩ+`,gsuNX<tc!쳈}@IUrP'kUJ::q0d`2[\"~A@"50B}uz_M]~)2_ynΆpܐJ\3ymLJٮ4)-]d:Ndd)$/А0/ t^ǎ]̕w 1}Pc-ؿ`~-NIH$+BtAo/AÑ^+mOppQ^JERv?V]=X\s1}A|y>b_
L
}ڊe,y'*+22-N +I g}v?S\r-Ϡ\Eoo7Z6txp45ȳ{Kl}SR\
jT6*4
nKCwJz<+cxݨߡŝrTtYR}2+]>?kn״#uH,z}jp95tAڛEfh1}Fi*깚rm~Y#&cmVW(㢒аu{v;PGfp2a;Up:_ڹ\ +ex>Ȉtǽs#LC=Zdhp! 23~;X"7Ov#E֑kå*5G%d(kS\gaҙ܁fn k +oxtv@<h{tTM>>c\^+Gg cp)H;PrRjL.SUb;kǩ24006RWZW:-Ƶw6uC8 +1{H?F!NV+Q20W +FfLFKВgav$6܀_S'A7,ə#2!=;!
:UEo"9toL;1{L%w +D8S-0 +Q"܄όqٳ
%SyӽعkoB31σ]M_ǫHsLߤh"2weMIVm'?mz+".l]o:wtWNz[)mK5* +R鄖ʔKWn;
GJl`<]N)nedp괼t*'N
ܭ`]5(\dU"B}X +ztiw)8EiJQ۠U9>~Rfy+{+-krFpޖD2aaMBAOoٳMg%3fa頃yx| ˅^7HtL(pf`r& +_h P!ڌʌ 9vӉNf +wI6do +ߦT +Iκ5WgVqU
%̓g1دba}SWly$/n~ +Z+fÂrݹeM>삭kdzSf&eq8~MC" yȊO|rs6 +endstream
endobj
163 0 obj
<</Differences[2/angbracketleft/angbracketright/lessequal/arrowdblright/asteriskmath 43/plus 61/equal 83/S 128/bullet 138/minus]/Type/Encoding>>
endobj
167 0 obj
<</Ascent 0/CapHeight 854/CharSet(/space/bullet/minus/equal/plus/S/angbracketleft/angbracketright/lessequal/arrowdblright/asteriskmath)/Descent 0/Flags 68/FontBBox[0 -954 1260 898]/FontFile3 166 0 R/FontName/PELCNB+LucidaNewMath-Symbol/ItalicAngle -11.25/StemH 30/StemV 107/Type/FontDescriptor>>
endobj
165 0 obj
<</Filter/FlateDecode/Length 263>>stream
+hTMo >vB.(6>vp2 B4kۦ& +endstream
endobj
166 0 obj
<</Filter/FlateDecode/Length 771/Subtype/Type1C>>stream
+hl{HSq?ZklޢIRAPKd5:mFO#WUAaQV`BWLa"act~7ۋ?sp^%& qzF`-̶ٝU +lU˂r!<&
o)]YK}'N|Mc!Ko85e9(c6={͆*]^/8ʽZ_痼N_[|>i<_f|!<>/ܒk*;M|I=kJ9vEC7UA:d@]ĭȏChzVYpC셛=H~ % +z&<|Y!_ +shbhtW~^l_Ax4hZ;Ɯ7^A;XGn}e[?>fXim55=/L +endstream
endobj
377 0 obj
<</Differences[44/comma/hyphen/period 49/one/two/three/four/five/six/seven/eight/nine/colon 65/A/B/C/D/E/F/G 73/I 76/L 78/N/O/P/Q/R/S/T 88/X 97/a/b/c/d/e/f/g/h/i 107/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z 147/fi]/Type/Encoding>>
endobj
379 0 obj
<</Ascent 770/CapHeight 723/CharSet(/space/A/c/r/o/T/E/X/period/N/e/t/h/P/a/k/g/R/n/d/m/G/i/f/I/comma/l/u/b/s/w/p/v/D/S/y/C/one/three/two/q/four/O/five/B/six/seven/Q/z/nine/fi/L/F/colon/x/eight/hyphen)/Descent -205/Flags 262150/FontBBox[-287 -205 1122 928]/FontFile3 378 0 R/FontName/PELCLN+LucidaBright-Demi/ItalicAngle 0/StemH 46/StemV 144/Type/FontDescriptor/XHeight 535>>
endobj
380 0 obj
<</Filter/FlateDecode/Length 293>>stream
+hTQn0+ +i$Ch#qCMڻ1E*2pﻶiyY=VQ]pi\B5 4A$ӌC`ٮ;W۠ukIe13DP`x,͋q $~oc +HTƲ[%-ّ&*cZ7S6elCd^84&JO&{Gd 7DD&Ek}+I-RN|M^h\a? +endstream
endobj
378 0 obj
<</Filter/FlateDecode/Length 5681/Subtype/Type1C>>stream
+hެXy\-$c3VsV(n,a!$@d" aKګl{g%}>/'c9{g?E+X9~EJxԶQ;"_^pOA1?L!^qCs|'{ [(3ܧ}Ɔ?}dQ;"bi>}(cb#|lqҸ>3^y%--mF|gpeϼ +<%O_0B$',"L+ +3pO)"X*"8qK,B/&aggEDd߿xπ1K&)2$tȃ狽fxUx.jPFkyag^RSϒw+C~m߀G7aS_qFm|mj|"9 %>h!B)e _`X;cs +}>G?:aVaPIjuXSEkRC`wu"<T|l6Fs&FbAke!(Yıf^[R#?à1DK/P ٹDw +a B"72Qq;w&H""wFF32։TRᄏz=/y?8*7ev%1e:;{Kr.]^ݭҊMF;3g7Vԥ֔S+M'U쒃`%4q^&yobM'jQVK=zHhq<x Auž$
"f@RaGdlͧ]CmlHKJ1zowo;,O](E<PxD.EϏش?RҭL.CQډH.:S;Yv樍l28F ֞`r咒4Z$h"Ң'HK_lc:n]ðDԛSvD*ڂ|J@ +}R,o/A^kfɢBc6( +ar@ʳ{?{G<z5hW;`'ü?.C}XSSl,JM^vδWz+MNLmOVu6K'O)ڏuwo9nL/[(ַMdglo͍Q@fSauīMo/v_|bӜP+Yx(a_5 +-~ g|4YZZX6ℱܝDnѸ$0rd֊ML&%r4 @]8_rPa-*b&=;F7?螄0.pq~C~'B~|3FợH L3ü*c!!?'(B5i!z]5Lrt(;9|sCʭD<OSDuIr t(Y&Wx + D0
(z|sg% +|%!_ +>}qr9\HZ/T4Ջ;.oOlPGmq̥Pm +e90m.'
QFU47_o4)0p#y/bq +uGQ;Y3eQ,qkV1D(F"_>WV{QQdV
r۫krг? 9. +[Xc\h}._^wMN-C0U5bheu֢VZ7˚\X+8
a5l2&`h~5\&ށa9i|) +> +y_C;~`7
',jhZΔ./4晲8{Bg:$ڴ
#b8"w1/IF'h@w%'(S|,+J8';хP~ZhaS )\C=mkLߗk98wj- qeIkVqb.˱#)3h4`2`t)}c[πv$!0㗓N,spv
Op-IY07r̅IgpM:~.3 gu¦qi2-n:}>
3H+EgNo={*©1;BܳBKQh&ON)ϐޓccɅ>=Kwy=g|~_ʠ
K-?¿(
_&miL'D[@p~()"H2q#;CW#uXqfJzkN<nVbڏr[C@>jči7#5+Q?F)±Ex?}k6pLޝf]Qz7
XJ9/5|⸇?
B F.wQ B~<>n_JEqLycdl(K@'\ +.n)pI\)ߪ<$8Enΐ #/$$s +@)V>LwJ~r]*VQk4rRL^w`vZ +zȭ䯝Z /,Ptm]%n{R_Q04l) +
ȯן
RF*5p;͡>gOq9.>?ᒊyO0wh<sf=6O8vc4!|LFRA~^]}P
Amլڈ5 +)ds/d0} <|~8_C~ĝU?O7P/CD6sN1|5_۷faFx+4͡,).)T+cJ004rj:rkNrN*|ӣ.i7e9&8vt>MN<ג + +6TTھFkow2mfNf5am;6ƄƢ8L] g㙻tŅ
hx_w&\$/YAѪ:Uy|z)XA]ri"*@\wn?}Ҽ9MjRtp|C's꣹vsu_:?JwoƔ_HFFI)=j&h?~g>hH+ݻrVkԓj~{OSi>zQZjJr%5{,:t21a5)*9nYަ"#x4a6B~ORX=7`,⠣XVd-J\<kD0[Q'0z
x;b=F\Sb"/+*Ezkɪw&$'"ČKm ܦ)LbelbCV[ + +r +T?J#F(YnS\RklZhb2nX'%r$.o4ׯׅ|%An'MǸzu?';n&`]]AlSaRU6U)X^2IK`#.u0:_<' 0b~dZZVG3O}@T:RS)L;EL*1);SkbbȜMս$GD"2*zvTRH*PRRQzɮ6 +endstream
endobj
393 0 obj
<</Differences[2/ff/ffi 33/exclam 40/parenleft/parenright 44/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon 61/equal 63/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y 97/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z 124/bar 131/ellipsis 141/quotedblleft/quotedblright/quoteleft/quoteright 147/fi/fl 169/copyright]/Type/Encoding>>
endobj
395 0 obj
<</Ascent 770/CapHeight 723/CharSet(/space/C/o/p/y/r/i/g/h/t/copyright/two/zero/one/six/d/s/at/a/c/e/x/period/n/P/colon/F/b/u/comma/V/four/L/A/T/E/X/k/R/q/m/D/five/eight/three/seven/O/N/S/l/f/nine/G/w/Q/z/I/semicolon/v/parenleft/hyphen/parenright/j/B/M/quotedblleft/quotedblright/fi/quoterig\
ht/ff/slash/J/U/W/fl/equal/question/H/ffi/Y/quoteleft/ellipsis/bar/exclam/K)/Descent -205/Flags 6/FontBBox[-286 -211 1014 928]/FontFile3 394 0 R/FontName/PELCMA+LucidaBright/ItalicAngle 0/StemH 33/StemV 97/Type/FontDescriptor/XHeight 530>>
endobj
396 0 obj
<</Filter/FlateDecode/Length 320>>stream
+hTQn0{LՃiyHM)>ԤHXݵQxwg`Ļy7-n0z +o3jy` :t9/ +}~/@`ϰ9_D/v MؾhGmT8AZW
%Eh{}+R63*%,%}:vp%\r*'b?UMBVU
0<-k##cDЁLfJip-V%]D薬xOEl9mnr"?ɯ +endstream
endobj
394 0 obj
<</Filter/FlateDecode/Length 7941/Subtype/Type1C>>stream
+hZ xeoZ6DAP.ĕCP.@KKm9;}M)-ZNA(肫emK]7T@wɓμd8#Gxp8ѫ\jᔕ![%D'?vw_ÞXulhX$[<Ϊƥ8fRKcf̝;eߙcEFǦyq;ђ1[cBe1SDŽ'%͛6-55uj +o/Vef)S*y:%P(9US9Uvʔ_BN8 Xt/hs`kQ<|NgM\ +`
wÔyZVbN\~76]V + +Fv--LnA!Y)MNdyڦ^'o}3'kh(<jQ\?]sln9\Jgv>^.9ȷ6^OB@ +N`%D<X0t#y=%:V;x`Șfb))xckDn20T:yR&\b6ʬ*zlPK6.pry[`˭7o@ +2o5{rwEwEo^Kzw9zCet;~AgÐڊ_m6#-:=)!{^Wom>tL<VOFn-!A Ϫsi5F>Tl݀[DP
~q"K.HCEG)V靃\C?S}Ei&-H͊Z^$b 1郷g#Io1!rۏ/ZNcS`;+ ă= ;lS6ɗ1JJ>. +Fi
9B=y WMb_'7rZcu%|[Q]6m>#F/|0l\6y:R
{$%V(w4
x6j2{Bx:9+Ԅ.AF7 0?J6hR&C͛c=@8$0Ϸle +_tcr
E+weH 4l_Xd-p + +x"F-'hȅ
izSX.!Q _t#16*wp G!ϗFijw9Ç`#`lCkj$
b;xUJY.v^>0n&=y3DŽip~6L}\a&, BaEx( +ΞO/.uyȹ> +HC1g#$5p*LeѵuVBg!ۙmWU5HY.ӱ=~t|yDep[x ;> >;pfW^n-U+52&ɢQīk۴.=Ri;l G?\Sx;B'xpkDz~6#d(>36-z}:h +瓚e5IjMVSeFa+i>@1`3jԖ!d䘤|hY:FV$ +7ke2>Zc8T#aiX̌tM[LaRF']XN؍
T.:ЪUh"7!hZSmF:̩id4#"!ca$AZfLc
aa?oנ+G9sa}avB +#)s'+f@ZJ,J=߉i3,NEtȝ`N>~=yѻE*@kZ1u*_A8/@E5P[k~R+W*Std-VVԒ4mM/Å<8r42zW\ؽX,V+?&ݒ &}6{.<A|nO`%z +o8 +>?8gOAQm5 +]xruw;/&6maQ2ÁyJ)KbF$4q +
5炭p|?|;j_bo"s-ØO̻hFq&'.2E.
B},?d[M|M
L$^98cբej< +L)çl#eWUQ,KNKlE3 +ʠ0ɬ~ǽ{)ӛPlEzIp >tg:4C&* C|ЭGwvUL;0nsoyF>wb涠(*!=77bb,_e mɊR-sae?RlKo/vMx# znpAB`[p>y,|90L#_[y>gAt-0AfR$-"qM6<lk:1~A ~k#1h*mO{*nrs*+S||"~` +O''+xGE[$%Q+=~J0MYɦ!5vpQb^ňktX=/GHhUZY7;Zj,֚SxQaA]!YtE:ڬ[%Qe[Nf-SibvxvjA`;v: +k4Jlͮʒ"d +w,@-B؊/jlG:fPRSJ5 TOGJ'/d9FδF̂3Q\N.;(U&Bw6llNUR vhSa+v)Йfqk8R]@!J"O5
qr
sY;9BaΘD+c0 1Xȃ$V XyH-ŠO04s!rT4I<|{X=ق<j3<Ey]]k-ZYjZU~Z$1 +M^#s_{ +zUo_Kߝ:C}|o5WKЧ<:u+gM$̗aP>Yp4|m]^<9 F!!gm9UC26a{ϟ@]AEzVkaT4jMVka%n>:QahI*M9֊; xlS4Rib=}Vpj+ 6ʿi<vw`%a_ofv1aRN*b"-m;R24z{mt7ucCZ%
Rzfeae0<p +8ʷmE?z>z| Ws(= +endstream
endobj
418 0 obj
<</CA 1.0/Type/ExtGState/ca 1.0>>
endobj
376 0 obj
<</AIS false/BM/Normal/CA 1/OP false/OPM 1/SA false/SM 0.02/SMask/None/TK true/Type/ExtGState/ca 1/op false>>
endobj
375 0 obj
[/ICCBased 402 0 R]
endobj
402 0 obj
<</Alternate/DeviceRGB/Filter/FlateDecode/Length 2597/N 3>>stream
+hޜwTTϽwz0z.0. Qf +3R +tqX)I)B>==
<8Xȉ9<QDhʸ8Qyl£sy0OZk( +@JPA#h'@8
.: ``a!2D!UH2 dA>P ECqB**Z:]B=h~L2
5pN:|ó@
QC!H,G6 H9R ]H/rAw(Q(OTJCm@*QGQ-(j MF+
6h/*t:].G7Зw7Xa<1:L1 +BѠPX-z%8CաzQEoYeYUgdGhMEKNІh(/qZYcI˒%srrrBV;rn;)2*\RV**O(W)VSUVQPNUޯ|QyZ⨒RrVeJjU-S=.Kw'+=5%5O5ZZڼzzz#
C#VL[cFSUW3WY^OWkN[G;L{vNNC]nnm=C/QM}XB?^Jl`i58`0z)oiaCaa(Ϩ腱qn^O&&I&&LeLWvjo22mN6w7hir2βZP,|-Yt[|[XNYiZE[U[
3F15ziw666&6N.YY^|NݎiWk7bO?d?tsxvlppsJp:ę<b+Z&V]=ν}cyOna/e/W +Wx+}|a{|Z[=O> +llGmnacOkE&EEY2⫅;K,KhtiN=e²{^-_V^Oo§s]?TWީrjVQ=w}`嚢zԶiו8>k
+
E
<hؤT7E7--֢o:}$dwZUQ +ۡS+Nuwv}ojȞ)9K8v\ι/]~pq==/]~bS+vWN_zZu}}m?Xo~FM]:^zmלּ302tw8rx.佤{/gܟ!a#G叕cșQѾ'AOƞӇfܧn>[ly邟~_Y53rW^{7so}x>|쇊z>yz +endstream
endobj
156 0 obj
<</Border[0 0 0]/C[1 0 0]/Dest(page.27)/H/I/Rect[497.014 551.241 507.853 559.667]/Subtype/Link/Type/Annot>>
endobj
419 0 obj
<</Filter/FlateDecode/Length 1155>>stream
+HV[o6~>Px%+]Za-"Q%/q==C\sjehwFͼٮ;3m*Suset߿?N\]FS#.JgiU~-;/A<v>pZ>^:|?$F}3qx*+!OZq߈SDRuV9A>Uuɿ
!aJkXxΒGl!Ŷ?)TJ}i*O?_'I};)D̃6 O/IbbJ}|fY$XR|Y{ʐS$r:W^|-NLN95^絡֪4+Mk8 +endstream
endobj
192 0 obj
<</BaseFont/PELCPG+LucidaSansTypewriterOblique/Encoding 191 0 R/FirstChar 44/FontDescriptor 184 0 R/LastChar 122/Subtype/Type1/ToUnicode 187 0 R/Type/Font/Widths[602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602]>>
endobj
191 0 obj
<</Differences[44/comma/hyphen/period 49/one/two/three 68/D/E 76/L 78/N 80/P 82/R 85/U/V 90/Z 95/underscore 97/a/b/c/d/e/f/g 105/i 107/k/l/m/n/o/p/q/r/s/t/u/v 120/x/y/z]/Type/Encoding>>
endobj
184 0 obj
<</Ascent 770/CapHeight 723/CharSet(/space/n/u/m/b/e/r/k/y/hyphen/v/a/l/s/z/L/E/P/U/x/underscore/d/o/q/one/comma/two/three/period/p/Z/i/t/f/c/V/N/D/g/R)/Descent -205/Flags 68/FontBBox[-53 -205 804 928]/FontFile3 186 0 R/FontName/PELCPG+LucidaSansTypewriterOblique/ItalicAngle -11.3/StemH 72/StemV 97/Type/FontDescriptor/XHeight 530>>
endobj
187 0 obj
<</Filter/FlateDecode/Length 311>>stream
+hTMO0>qHRU vClpOSwTiv{u^ioԻy7-I +`uf3jyqo :Rt8/]7|~'/ +v:#}U*}JONڞ4PW7Gu786(L\āi!NSf-D~i)+8BJȉBY(E`!N)+Q㔲ʍy +K=R]Zkޓ롕[vux#` +endstream
endobj
186 0 obj
<</Filter/FlateDecode/Length 2959/Subtype/Type1C>>stream
+hޔVyT!dfLCK͠-֊uim݈jWQ*a [a;
[>mڱkk]LJ
M=^;3|wq
q鍫6>-*.:͈$mJFQE*Rb\ۖs4=.Rˍ{G"_PjZ1_pcɐtԓ^#S07ȒS8yofs~/'Q$kfIV$ƨ"Bf[5/VNY2wF[BD%'T(6ܨ6Ǩb1sW?d7lcc\a/bB{V`X ðX xX4g&V`` W}{ ^%~!r'y +"'x(===}={Dh~??LJ+-)*M/]~UuM"r\Ĭs7O\,8t5&;/`$/nm 侀|qyH/Bl+ +dSɳ͖ʎ*jQon]Q~&&<<,<24.7EF-3dUt~X%Ҳp:apQ`-D4 [)h<jtBCqdO+KNڢolm;jH/I*Q."{-fCw%b@t"bMX<!IIP,]{/t1 +F7P+dçq9E`f<n`Dųxӫ,n[f[p,M巸9 +ɗ:Ovm+Y@4`w!CN}bqGk+hf$!o%HSCsAzY8w̻{uVKXWUG5vO|z!9<Fq|E6tE1DXĴd$!J
{ʂj3XUI*"2ަC
j&uH©*r>/NKhiWipVТ:/yT@oP(ПqA<o?pXR IS!ӳiH{7"#<o¦0]pZd=!v5_V$gDdSɣ+Z*֎.[a9Do8:;*:[mmU{sBWGꚊҖz}1ࢰ,`Wc)bM+OHC$R_Σr*͝>gD9poCeʰ̣cFi3y:*''`*8vv0i䡎&3uѽjLLZdj$VV֧0i*u3%ұtT5s&q1K/OSR*i3(Yxl[7̒b4M+F7ʫHw{f]]vln͈x>f @Z ú4#eR**4<-x&x}ts︣tRUj)".7 +)]^`k`䥯m=JqIƦU4<b,XwtSvD]%QETILC/~ȅd&$FVsn7B2喲7WAn,2+ZګNӝ=%mLŮҺ>@1kN=UՖkiDZfTe ђ7E; )~F粭%TźC}L@M?%+IoGBg
eJM6yhZݜ :j:Fc2E}suY%TQZzY2Yaf + + +Qqzl.UC'%ЁO>\1tS)kY^8$ĨOvaAF^.+ژcT3vBi)A7:U>_D8csr|\'_8'B3G5|>f_nyvS0̯_o9Z/$Ω܃ҖD*gՇ%'Qq&
t8A +t˰s܄ HnY6`+rSjB5>O!%,/ &+osϸ`{-A1 JnQx+c\ob7&{íuK +faq7m߂ +#4LUya}{=a+']Zc +0 +endstream
endobj
420 0 obj
<</CA 1.0/Type/ExtGState/ca 1.0>>
endobj
421 0 obj
<</Filter/FlateDecode/Length 2068>>stream
+HWmo8_ANcZ$%J:lH}Kc\-3ZYr$9N-%mw!5g^4]qv=o7;Ѭyś|UT+{ +;AzoxxY8E,l9y_p0xöc $(J,
Q`oBő0gb< a݉ƮRԳێ*|aF(T,-p[xVmע)r^=)#xHzo^7'iT'
ĶMFHe#M])Eq.py4]duӈ7I/]WWJn;MREeNBiƐG=1MQR&&Dp34N,{_TRvc,f:
VzI9ezw9MwPD7̈MSe3fD1'Mrd730b%@iGbh7%RݑǽZL1glۢZ9Db/&ķ XA?#@FhtޖF^P7~x7 +Ky2s!'YQ}OH#"]<pT|RԼ7/l`\uU(N>PK@+Lf'?G~7ŦvW<M"쐾kzwJ\X*EBZS?8]Op@1H,/"i Z%KHwPփȄ + kJS>BA +"`kt\3~%kM_CCW҅b)hBPwVDknkỳa+z!M˼ԂőI7[r`ĉ5E':ggw1dA@mفϊ/F1=pbQX!U4K$JIQ3Tn=9kUTPTUw䖐UwI3ʕX4s܂'r +L4!OE )MPubň2KX +'DP[Ӹ_vյڠr +^}{w}me)T3yIۨ˷B0va)fu^p\\R(@ڿIQC!em"L_/O閯ݾ-VM([/8A1]F, j`[WN˺=Q}i
G
!WW`F~fB?.9QI P|Q_z̊0msI5K=q!-tIeTI4*ZIDGhӜh77N%XhR5}/5XMz:N+hgOpZlzݱStEԾDWuNP"> +Ŋ%W3U#oF؈P4W2|=#Hfy9].g'>M=B"c=af7t.A.PyNYj=ёa:UہI~vn1O(Zʢ5/,ؐ(5 + +endstream
endobj
422 0 obj
<</CA 1.0/Type/ExtGState/ca 1.0>>
endobj
146 0 obj
<</AA<</F<</JS(var sq1=new Object;\r\nsq1.Grp={}; )/S/JavaScript>>>>/BS<</S/S/W 1>>/DA(/Helv 0 Tf 0 g)/F 4/Ff 1/MK<<>>/P 145 0 R/Parent 486 0 R/Rect[109.854 406.271 111.854 408.271]/Subtype/Widget/Type/Annot>>
endobj
147 0 obj
<</AA<</Bl<</JS(OnBlurRespBox\(null,"sq1"\);)/S/JavaScript>>/F<</JS()/S/JavaScript>>/Fo<</JS(var retn = null;)/S/JavaScript>>/K<</JS(if\(event.willCommit\) {\r\n _mathVars="x";\r\n retn = ProcResp\(0," \(7* 16+ 3* 16\)/\( 16* 16\) ",2,.0001,"[0,2]","x", {priorParse: new Array\(nodec,NoAddOrSub\)}\);\r\n OnBlurRespBox\(retn,"sq1"\); \r\n})/S/JavaScript>>>>/AP<</N 485 0 R>>/BS<</S/S/W 1>>/DA(/Helv 9 Tf 0 g)/F 4/MK<</BC[0 0 0]>>/P 145 0 R/Parent 456 0 R/Rect[190.651 230.743 228.651 243.743]/Subtype/Widget/Type/Annot>>
endobj
148 0 obj
<</A<</JS(if \(event.shift\)\r\n this.gotoNamedDest\("sq1.1"\);\r\nelse\r\n rngCorrAnsButton\("obj.sq1.1","rFrac\( rEval\( 7* 16+ 3* 16\)/rEval\( 16* 16\) \)",sq1\); )/S/JavaScript>>/AA<<>>/AP<</D 483 0 R/N 484 0 R>>/BS<</S/S/W 1>>/DA(/Helv 9 Tf 0 g)/Ff 65536/H/P/MK<</BC[0 0.6 0]/BG[0.753 0.753 0.753]/CA(Ans)>>/P 145 0 R/Parent 444 0 R/Rect[460.678 230.743 480.991 243.743]/Subtype/Widget/Type/Annot>>
endobj
149 0 obj
<</A<</JS(ProcessIt = false;\r\nif \( typeof sq1 == "undefined" \)\r\n sq1 = new Object;\r\nif \(typeof appAlerts["sq1"] == "undefined"\)\r\n appAlerts["sq1"] = new Object;\r\nthis.resetForm\(new Array\("mc.sq1","obj.sq1","tally.sq1","grpobj.sq1"\)\);\r\nvar f = th\
is.getField\("obj.sq1"\);\r\nif \( f != null \) f.strokeColor=color.black;\r\nf = this.getField\("grpobj.sq1"\);\r\nif \( f != null \) f.strokeColor=color.black;\r\nf = this.getField\("rbmarkup.sq1"\);\r\nif \( f != null \) f.display=display.hidden;\r\nsq\
1.Grp = {};\r\nappAlerts["sq1"].bAfterValue=false;\r\nProcessIt=true;)/S/JavaScript>>/AA<<>>/AP<</N 482 0 R>>/BS<</S/B/W 1>>/DA(/Helv 9 Tf 0 g)/F 4/Ff 65540/MK<</BC[0 0 0]/BG[0.753 0.753 0.753]/CA(Clear)>>/P 145 0 R/Parent 423 0 R/Rect[479.991 230.743 507.854 243.743]/Subtype/Widget/Type/Annot>>
endobj
423 0 obj
<</DA(/Helv 9 Tf 0 g)/FT/Btn/Ff 65540/Kids[120 0 R 149 0 R]/Parent 424 0 R/T(sq1)>>
endobj
424 0 obj
<</Kids[51 0 R 127 0 R 142 0 R 423 0 R]/T(clear)>>
endobj
51 0 obj
<</A<</JS(ProcessIt = false;\r\nif \( typeof answer == "undefined" \)\r\n answer = new Object;\r\nif \(typeof appAlerts["answer"] == "undefined"\)\r\n appAlerts["answer"] = new Object;\r\nthis.resetForm\(new Array\("mc.answer","obj.answer","tally.answer","grpobj.an\
swer"\)\);\r\nvar f = this.getField\("obj.answer"\);\r\nif \( f != null \) f.strokeColor=color.black;\r\nf = this.getField\("grpobj.answer"\);\r\nif \( f != null \) f.strokeColor=color.black;\r\nf = this.getField\("rbmarkup.answer"\);\r\nif \( f != null \)\
f.display=display.hidden;\r\nanswer.Grp = {};\r\nappAlerts["answer"].bAfterValue=false;\r\nProcessIt=true;)/S/JavaScript>>/AA<<>>/AP<</N 480 0 R>>/BS<</S/B/W 1>>/DA(/Helv 9 Tf 0 g)/F 4/FT/Btn/Ff 65540/MK<</BC[0 0 0]/BG[0.753 0.753 0.753]/CA(Clear)>>/P 47 0 R/Parent 424 0 R/Rect[463.991 619.368 491.854 632.368]/Subtype/Widget/T(answer)/Type/Annot>>
endobj
127 0 obj
<</A<</JS(ProcessIt = false;\r\nif \( typeof sq2 == "undefined" \)\r\n sq2 = new Object;\r\nif \(typeof appAlerts["sq2"] == "undefined"\)\r\n appAlerts["sq2"] = new Object;\r\nthis.resetForm\(new Array\("mc.sq2","obj.sq2","tally.sq2","grpobj.sq2"\)\);\r\nvar f = th\
is.getField\("obj.sq2"\);\r\nif \( f != null \) f.strokeColor=color.black;\r\nf = this.getField\("grpobj.sq2"\);\r\nif \( f != null \) f.strokeColor=color.black;\r\nf = this.getField\("rbmarkup.sq2"\);\r\nif \( f != null \) f.display=display.hidden;\r\nsq\
2.Grp = {};\r\nappAlerts["sq2"].bAfterValue=false;\r\nProcessIt=true;)/S/JavaScript>>/AA<<>>/AP<</N 426 0 R>>/BS<</S/B/W 1>>/DA(/Helv 9 Tf 0 g)/F 4/FT/Btn/Ff 65540/MK<</BC[0 0 0]/BG[0.753 0.753 0.753]/CA(Clear)>>/P 123 0 R/Parent 424 0 R/Rect[479.991 451.799 507.854 464.799]/Subtype/Widget/T(sq2)/Type/Annot>>
endobj
142 0 obj
<</A<</JS(ProcessIt = false;\r\nif \( typeof sq3 == "undefined" \)\r\n sq3 = new Object;\r\nif \(typeof appAlerts["sq3"] == "undefined"\)\r\n appAlerts["sq3"] = new Object;\r\nthis.resetForm\(new Array\("mc.sq3","obj.sq3","tally.sq3","grpobj.sq3"\)\);\r\nvar f = th\
is.getField\("obj.sq3"\);\r\nif \( f != null \) f.strokeColor=color.black;\r\nf = this.getField\("grpobj.sq3"\);\r\nif \( f != null \) f.strokeColor=color.black;\r\nf = this.getField\("rbmarkup.sq3"\);\r\nif \( f != null \) f.display=display.hidden;\r\nsq\
3.Grp = {};\r\nappAlerts["sq3"].bAfterValue=false;\r\nProcessIt=true;)/S/JavaScript>>/AA<<>>/AP<</N 425 0 R>>/BS<</S/B/W 1>>/DA(/Helv 9 Tf 0 g)/F 4/FT/Btn/Ff 65540/MK<</BC[0 0 0]/BG[0.753 0.753 0.753]/CA(Clear)>>/P 136 0 R/Parent 424 0 R/Rect[479.991 193.311 507.854 206.31]/Subtype/Widget/T(sq3)/Type/Annot>>
endobj
425 0 obj
<</BBox[0.0 0.0 27.863 12.999]/Filter[/FlateDecode]/FormType 1/Length 168/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</Font<</Helv 227 0 R>>/ProcSet[/PDF/Text]>>/Subtype/Form/Type/XObject>>stream
+Hl +0DsKlL\ѫ,Im!CfvlJ`Hi !`!#>yGR{~E!6%(ng{6B_q8&$[=3C\TS~\Eڜ[A7Z:tt +endstream
endobj
227 0 obj
<</BaseFont/Helvetica/Encoding 229 0 R/Name/Helv/Subtype/Type1/Type/Font>>
endobj
229 0 obj
<</Differences[24/breve/caron/circumflex/dotaccent/hungarumlaut/ogonek/ring/tilde 39/quotesingle 96/grave 128/bullet/dagger/daggerdbl/ellipsis/emdash/endash/florin/fraction/guilsinglleft/guilsinglright/minus/perthousand/quotedblbase/quotedblleft/quotedblright/quoteleft/quoteright/quotesinglbase/trademark/fi/fl/Lslash/OE/Scaron/Ydieresis/Zcaron/dotlessi/lslash/oe/scaron/zcaron 164/currency 166/brokenbar 168/dieresis/copyright/ordfeminine 172/logicalnot/.notdef/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu 183/periodcentered/cedilla/onesuperior/ordmasculine 188/onequarter/onehalf/threequarters 192/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]/Type/Encoding>>
endobj
426 0 obj
<</BBox[0.0 0.0 27.863 13.0]/Filter[/FlateDecode]/FormType 1/Length 159/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</Font<</Helv 227 0 R>>/ProcSet[/PDF/Text]>>/Subtype/Form/Type/XObject>>stream
+H\ +0DsKMH^ѫ,IՀ$̼!lb0lc sDm`ʷH6,y~ђAOl<[╘~Z;oy +ٓ]tW`(6Ɨ&/3Bڍ2ot +endstream
endobj
47 0 obj
<</Annots[48 0 R 49 0 R 50 0 R 51 0 R 179 0 R 52 0 R 53 0 R]/Contents 427 0 R/CropBox[0 0 612 791]/MediaBox[0 0 612 792]/Parent 361 0 R/Resources<</ColorSpace<</CS0 375 0 R>>/ExtGState<</GS0 428 0 R/GS1 376 0 R>>/Font<</T1_0 392 0 R/T1_1 374 0 R/T1_2 172 0 R/T1_3 181 0 R/T1_4 159 0 R/T1_5 397 0 R/T1_6 164 0 R>>/ProcSet[/PDF/Text]/XObject<</Fm0 405 0 R>>>>/Rotate 0/Type/Page>>
endobj
427 0 obj
<</Filter/FlateDecode/Length 1601>>stream
+HWYo7~ׯuQk)ShhC]Eq;V) p~{'gm_,O^\oI&n1u_4udqD#Hfh5NhE3z?Χ˩$vV)`始!E@9Odx2F)?=f]?fSF1)bD$(Ȋ*wsYs{=yuvذ?x8&}q$@0?:Qw{r$48cO!,>BDN[{es*sI/lu2R"Eez57ԬEi/TG~mLfuܕ]=,'M߁_ + g(pR#4|LwUB0RD$4NRAZoѴ/eHOQжYc|
) +o1Hzob*?dSȐ:T̟lC p HM`8,%rm
s)v<vWvd20-f<#$AiO*Xs +Xo^t}[m;'Bhm1571!$zm|ΦnPm +`xznmJa0T͏ +e$vP)pOA÷BR#ۢE3,Hz7~Ӿ6+|lxw
k7XΝI9_ʕv$Ԇ #2ۥ|>6Ih%$qaK'4{ʡƂdnQi?u0ٚ; +0 +endstream
endobj
172 0 obj
<</BaseFont/PELCOE+LucidaNewMath-AltItalic/Encoding 174 0 R/FirstChar 2/FontDescriptor 177 0 R/LastChar 120/Subtype/Type1/ToUnicode 175 0 R/Type/Font/Widths[780 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 458 458 795 795 289 795 289 525 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 600 900 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 795 706 795 795 795 795 795 795 795 795 795 776 795 795 795 795 795 795 795 795 795 714]>>
endobj
174 0 obj
<</Differences[2/pi 40/parenleft/parenright 44/comma 46/period/slash 60/less 62/greater 80/P/Q 100/d 110/n 120/x]/Type/Encoding>>
endobj
177 0 obj
<</Ascent 770/CapHeight 723/CharSet(/space/x/d/P/Q/parenleft/comma/parenright/less/slash/period/greater/n/pi)/Descent -211/Flags 70/FontBBox[-8 -325 1333 1016]/FontFile3 176 0 R/FontName/PELCOE+LucidaNewMath-AltItalic/ItalicAngle -11.25/StemH 42/StemV 102/Type/FontDescriptor/XHeight 541>>
endobj
175 0 obj
<</Filter/FlateDecode/Length 283>>stream
+hTKO Y^JI>b{鴒XJ(];@q`hMA6yZB
d:[u8֦(ٻvOYv+n6' b7h<(KgznK;"X'W >۬g*t +!K(t1U\z:n%+ +,dE'#cG]dZ~z0#=Jօ}r9AImxE8J)!k,jqs hן
~ +endstream
endobj
176 0 obj
<</Filter/FlateDecode/Length 1595/Subtype/Type1C>>stream
+ht{PSWo
QIcͽzof:t*,V-]E@#!2!`0Q4B-bC[ժlݸtڙ39ߜo~}X,z-[7R'(g3ŪoU*B$YbVR 1]fs+v+-Sq@[\KW`X5G^]^U(+WVIE)iikD*JUjswZXY".(C)MT듓juR~&?IZȪQѵCV"KIARV$Y<"nڶ% +YUGr$iFz6B1vvئk˚\6 + ia{JdQD(+`B y f߾?<ʚFД[oAfz[u + G + up7=)}ٓWU}~vMc-;;+ F\p5TuI<C靳`,~?żz*EM%Ve#Q8wҕsgؖ-"
nL%aYNޢ&#[(KAd&IW~)5⫈NRf| +=?\z:+ +endstream
endobj
428 0 obj
<</CA 1.0/Type/ExtGState/ca 1.0>>
endobj
48 0 obj
<</AA<</Bl<</JS(OnBlurRespBox\(null,"answer"\);)/S/JavaScript>>/F<</JS()/S/JavaScript>>/Fo<</JS(var retn = null;)/S/JavaScript>>/K<</JS(if\(event.willCommit\) {\r\n _mathVars="xy";\r\n retn = ProcRespEq\(0,"y = \(10- 4\)/\(8- 7\)*x + \(4- 7*\(10- 4\)/\(8- 7\)\) ",3,.0001,"[0,2]x[0,2]","xy",diffCompare\);\r\n OnBlurRespBox\(retn,"answer"\); \r\n})/S/JavaScript>>>>/AP<</N 479 0 R>>/BS<</S/S/W 1>>/DA(/Helv 9 Tf 0 g)/F 4/FT/Tx/MK<</BC[0 0 0]>>/P 47 0 R/Parent 449 0 R/Rect[233.655 651.747 379.655 664.747]/Subtype/Widget/T(6)/Type/Annot>>
endobj
49 0 obj
<</A<</JS(rngCorrAnsButton\("obj.answer.6","y = rFrac\(rEval\(\(10- 4\)\)/rEval\(\(8- 7\)\)\) x + rFrac\(\(rEval\( 4* \(8- 7\)- 7*\(10- 4\)\)\)/\(rEval\(\(8- 7\)\)\)\)",answer\); )/S/JavaScript>>/AA<<>>/AP<</D 477 0 R/N 478 0 R>>/BS<</S/S/W 1>>/DA(/Helv 9 Tf 0 g)/FT/Btn/Ff 65536/H/P/MK<</BC[0 0 0]/BG[0.753 0.753 0.753]/CA(Ans)>>/P 47 0 R/Parent 435 0 R/Rect[471.541 651.747 491.854 664.747]/Subtype/Widget/T(6)/Type/Annot>>
endobj
50 0 obj
<</AA<<>>/AP<</N 476 0 R>>/BS<</S/I/W 1>>/DA(/Helv 9 Tf 1 0 0 rg)/FT/Tx/Ff 1/MK<</BC[0 0 0]>>/P 47 0 R/Parent 431 0 R/Q 2/Rect[490.854 651.747 507.854 664.747]/Subtype/Widget/T(6)/Type/Annot>>
endobj
179 0 obj
<</AA<</C<</JS(AFSimple_Calculate\("SUM",new Array\("tally.answer"\)\); )/S/JavaScript>>/F<</JS(AFNumber_Format\(0,0,0,0,"",true\);)/S/JavaScript>>/K<</JS(AFNumber_Keystroke\(0,0,0,0,"",true\);)/S/JavaScript>>>>/AP<</N 430 0 R>>/BS<</S/I/W 1>>/DA(/Helv 9 Tf 1 0 0 rg)/FT/Tx/Ff 1/MK<</BC[0 0 0]>>/P 47 0 R/Parent 429 0 R/Q 2/Rect[490.854 619.368 507.854 632.368]/Subtype/Widget/T(answer)/Type/Annot>>
endobj
52 0 obj
<</Border[0 0 0]/C[1 0 0]/Dest(Hfootnote.1)/H/I/Rect[188.084 349.525 194.282 363.025]/Subtype/Link/Type/Annot>>
endobj
53 0 obj
<</A<</S/URI/URI(http://www.math.uakron.edu/~dpstory/webeq.html)>>/Border[0 0 0]/C[0 1 1]/H/I/Rect[150.098 194.088 414.188 205.212]/Subtype/Link/Type/Annot>>
endobj
429 0 obj
<</Kids[179 0 R]/T(tallytotal)>>
endobj
430 0 obj
<</BBox[0.0 0.0 17.0 13.0]/Filter/FlateDecode/FormType 1/Length 86/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</ProcSet[/PDF]>>/Subtype/Form/Type/XObject>>stream
+H235045VH2T0TF +9\fPTH(`%XXa.W@(E6KT!R +endstream
endobj
431 0 obj
<</Kids[32 0 R 35 0 R 38 0 R 41 0 R 44 0 R 50 0 R]/Parent 432 0 R/T(answer)>>
endobj
432 0 obj
<</Kids[431 0 R]/T(tally)>>
endobj
32 0 obj
<</AA<<>>/AP<</N 475 0 R>>/BS<</S/I/W 1>>/DA(/Helv 9 Tf 1 0 0 rg)/FT/Tx/Ff 1/MK<</BC[0 0 0]>>/P 28 0 R/Parent 431 0 R/Q 2/Rect[287.873 355.562 304.873 368.562]/Subtype/Widget/T(1)/Type/Annot>>
endobj
35 0 obj
<</AA<<>>/AP<</N 474 0 R>>/BS<</S/I/W 1>>/DA(/Helv 9 Tf 1 0 0 rg)/FT/Tx/Ff 1/MK<</BC[0 0 0]>>/P 28 0 R/Parent 431 0 R/Q 2/Rect[490.854 355.562 507.854 368.562]/Subtype/Widget/T(2)/Type/Annot>>
endobj
38 0 obj
<</AA<<>>/AP<</N 473 0 R>>/BS<</S/I/W 1>>/DA(/Helv 9 Tf 1 0 0 rg)/FT/Tx/Ff 1/MK<</BC[0 0 0]>>/P 28 0 R/Parent 431 0 R/Q 2/Rect[490.854 259.767 507.854 272.767]/Subtype/Widget/T(3)/Type/Annot>>
endobj
41 0 obj
<</AA<<>>/AP<</N 472 0 R>>/BS<</S/I/W 1>>/DA(/Helv 9 Tf 1 0 0 rg)/FT/Tx/Ff 1/MK<</BC[0 0 0]>>/P 28 0 R/Parent 431 0 R/Q 2/Rect[490.854 221.259 507.854 234.259]/Subtype/Widget/T(4)/Type/Annot>>
endobj
44 0 obj
<</AA<<>>/AP<</N 471 0 R>>/BS<</S/I/W 1>>/DA(/Helv 9 Tf 1 0 0 rg)/FT/Tx/Ff 1/MK<</BC[0 0 0]>>/P 28 0 R/Parent 431 0 R/Q 2/Rect[490.854 125.198 507.854 138.198]/Subtype/Widget/T(5)/Type/Annot>>
endobj
28 0 obj
<</Annots[29 0 R 30 0 R 31 0 R 32 0 R 33 0 R 34 0 R 35 0 R 36 0 R 37 0 R 38 0 R 39 0 R 40 0 R 41 0 R 42 0 R 43 0 R 44 0 R]/Contents 433 0 R/CropBox[0 0 612 791]/MediaBox[0 0 612 792]/Parent 361 0 R/Resources<</ColorSpace<</CS0 375 0 R>>/ExtGState<</GS0 434 0 R/GS1 376 0 R>>/Font<</T1_0 392 0 R/T1_1 374 0 R/T1_2 164 0 R/T1_3 397 0 R/T1_4 159 0 R/T1_5 171 0 R/T1_6 172 0 R>>/ProcSet[/PDF/Text]/XObject<</Fm0 405 0 R>>>>/Rotate 0/Type/Page>>
endobj
433 0 obj
<</Filter/FlateDecode/Length 2365>>stream
+HWo>--M_."-Тޢrza{wh-s!!/>fy}wm9uM}ˀ@ U^^-m8 +fqx0]-ޭ!Wȿq{9XBE)I譪UmrlB*)6_|yL_'yG%i죎6R!a7>ggK +^ד̾a9O͝ŤKwfV̘J͘gL7qht,TɌ?`bJ̛ +RdvI +
0h,b^tԝ6@t +J #:iBΟ'`+2h\욡ZY+\CᰃBb%MdJ +gK].>,q=9Zn\(67$iT4V,>W9y8*lE!
oNLf2,MAƿg=c N{H')!~_e/*
/T +-oyg[{D'&uaPP0{>7$o\*`ISKirt1~Vl\Y 6_v:_Ned +endstream
endobj
171 0 obj
<</BaseFont/PELCOD+LucidaNewMath-Extension/Encoding 173 0 R/FirstChar 2/FontDescriptor 169 0 R/LastChar 4/Subtype/Type1/Type/Font/Widths[564 480 480]>>
endobj
173 0 obj
<</Differences[2/integraldisplay/parenleftbig/parenrightbig]/Type/Encoding>>
endobj
169 0 obj
<</Ascent 0/CapHeight 0/CharSet(/space/integraldisplay/parenleftbig/parenrightbig)/Descent 0/Flags 4/FontBBox[83 -2198 665 40]/FontFile3 170 0 R/FontName/PELCOD+LucidaNewMath-Extension/ItalicAngle 0/StemH 49/StemV 49/Type/FontDescriptor>>
endobj
170 0 obj
<</Filter/FlateDecode/Length 572/Subtype/Type1C>>stream
+hbd`ab`ddpqw)MLIK-M,u(I+)!CX\NɟYe|Wd%?112 +hVO+IM/JI,.I,H,JIM+IL23@J0[A#YSPD)8e+)x+$(DE(x%)dX뗗Ue*srspyNF(L@30113fT+]n;w?~Wx'bעwVȵdTgsTTV5Jtv6O$tQA~ii~꺂}__g\n)ſIb>{M每'uwMooh[X|E7f,P['_Jo)>>7]>Eu|O&=666D:TDsd42Z[pܼ%ѫb:NmUȁ0*Ew-:mU;잿cͽ%߅H=..uO|wѮ]W,HcywTi>u*L&}y8p^}Q +endstream
endobj
434 0 obj
<</CA 1.0/Type/ExtGState/ca 1.0>>
endobj
29 0 obj
<</AA<</F<</JS(var answer=new Object;\r\nanswer.Grp={}; )/S/JavaScript>>>>/BS<</S/S/W 1>>/DA(/Helv 0 Tf 0 g)/F 4/FT/Tx/Ff 1/MK<<>>/P 28 0 R/Rect[109.854 395.797 111.854 397.797]/Subtype/Widget/T(sqIDanswer)/Type/Annot>>
endobj
30 0 obj
<</AA<</Bl<</JS(OnBlurRespBox\(null,"answer"\);)/S/JavaScript>>/F<</JS()/S/JavaScript>>/Fo<</JS(var retn = null;)/S/JavaScript>>/K<</JS(if\(event.willCommit\) {\r\n _mathVars="x";\r\n retn = ProcResp\(0," \(3* 8- 5* 16\)/\( 16* 8\) ",2,.0001,"[0,2]","x", {priorParse: new Array\(nodec,NoAddOrSub\)}\);\r\n OnBlurRespBox\(retn,"answer"\); \r\n})/S/JavaScript>>>>/AP<</N 470 0 R>>/BS<</S/S/W 1>>/DA(/Helv 9 Tf 0 g)/F 4/FT/Tx/MK<</BC[0 0 0]>>/P 28 0 R/Parent 449 0 R/Rect[183.892 355.562 221.892 368.562]/Subtype/Widget/T(1)/Type/Annot>>
endobj
31 0 obj
<</A<</JS(rngCorrAnsButton\("obj.answer.1","rFrac\( rEval\( 3* 8- 5* 16\)/rEval\( 16* 8\) \)",answer\); )/S/JavaScript>>/AA<<>>/AP<</D 468 0 R/N 469 0 R>>/BS<</S/S/W 1>>/DA(/Helv 9 Tf 0 g)/FT/Btn/Ff 65536/H/P/MK<</BC[0 0 0]/BG[0.753 0.753 0.753]/CA(Ans)>>/P 28 0 R/Parent 435 0 R/Rect[268.56 355.562 288.873 368.562]/Subtype/Widget/T(1)/Type/Annot>>
endobj
33 0 obj
<</AA<</Bl<</JS(OnBlurRespBox\(null,"answer"\);)/S/JavaScript>>/F<</JS()/S/JavaScript>>/Fo<</JS(var retn = null;)/S/JavaScript>>/K<</JS(if\(event.willCommit\) {\r\n _mathVars="x";\r\n retn = ProcResp\(0," \(7* 8- 3* 8\)/\( 8* 8\) ",2,.0001,"[0,2]","x", {priorParse: new Array\(nodec,NoAddOrSub\)}\);\r\n OnBlurRespBox\(retn,"answer"\); \r\n})/S/JavaScript>>>>/AP<</N 467 0 R>>/BS<</S/S/W 1>>/DA(/Helv 9 Tf 0 g)/F 4/FT/Tx/MK<</BC[0 0 0]>>/P 28 0 R/Parent 449 0 R/Rect[380.113 355.562 418.113 368.562]/Subtype/Widget/T(2)/Type/Annot>>
endobj
34 0 obj
<</A<</JS(rngCorrAnsButton\("obj.answer.2","rFrac\( rEval\( 7* 8- 3* 8\)/rEval\( 8* 8\) \)",answer\); )/S/JavaScript>>/AA<<>>/AP<</D 465 0 R/N 466 0 R>>/BS<</S/S/W 1>>/DA(/Helv 9 Tf 0 g)/FT/Btn/Ff 65536/H/P/MK<</BC[0 0 0]/BG[0.753 0.753 0.753]/CA(Ans)>>/P 28 0 R/Parent 435 0 R/Rect[471.541 355.562 491.854 368.562]/Subtype/Widget/T(2)/Type/Annot>>
endobj
36 0 obj
<</AA<</Bl<</JS(OnBlurRespBox\(null,"answer"\);)/S/JavaScript>>/F<</JS()/S/JavaScript>>/Fo<</JS(var retn = null;)/S/JavaScript>>/K<</JS(if\(event.willCommit\) {\r\n _mathVars="x";\r\n retn = ProcResp\(0,"\(2/3/3\)x^3+\(5/6/2\) x^2 + 3x",3,.0001,"[0,2]","x",diffCompare\);\r\n OnBlurRespBox\(retn,"answer"\); \r\n})/S/JavaScript>>>>/AP<</N 464 0 R>>/BS<</S/S/W 1>>/DA(/Helv 9 Tf 0 g)/F 4/FT/Tx/MK<</BC[0 0 0]>>/P 28 0 R/Parent 449 0 R/Rect[248.114 259.767 394.114 272.767]/Subtype/Widget/T(3)/Type/Annot>>
endobj
37 0 obj
<</A<</JS(rngCorrAnsButton\("obj.answer.3","\(rFrac\(rEval\(2\)/rEval\(3*3\)\)\) x^3 + \(rFrac\(rEval\(5\)/rEval\(2*6\)\)\) x^2 + 3x + C",answer\); )/S/JavaScript>>/AA<<>>/AP<</D 462 0 R/N 463 0 R>>/BS<</S/S/W 1>>/DA(/Helv 9 Tf 0 g)/FT/Btn/Ff 65536/H/P/MK<</BC[0 0 0]/BG[0.753 0.753 0.753]/CA(Ans)>>/P 28 0 R/Parent 435 0 R/Rect[471.541 259.767 491.854 272.767]/Subtype/Widget/T(3)/Type/Annot>>
endobj
39 0 obj
<</AA<</Bl<</JS(OnBlurRespBox\(null,"answer"\);)/S/JavaScript>>/F<</JS()/S/JavaScript>>/Fo<</JS(var retn = null;)/S/JavaScript>>/K<</JS(if\(event.willCommit\) {\r\n _mathVars="x";\r\n retn = ProcResp\(0,"\(3/2/3\)x^3+\(1/2\) x^2 + 1x",3,.0001,"[0,2]","x",diffCompare\);\r\n OnBlurRespBox\(retn,"answer"\); \r\n})/S/JavaScript>>>>/AP<</N 461 0 R>>/BS<</S/S/W 1>>/DA(/Helv 9 Tf 0 g)/F 4/FT/Tx/MK<</BC[0 0 0]>>/P 28 0 R/Parent 449 0 R/Rect[238.963 221.259 384.963 234.259]/Subtype/Widget/T(4)/Type/Annot>>
endobj
40 0 obj
<</A<</JS(rngCorrAnsButton\("obj.answer.4","\(rFrac\(rEval\(3\)/rEval\(3*2\)\)\) x^3 + \(rFrac\(rEval\(1\)/rEval\(2*1\)\)\) x^2 + 1x + C",answer\); )/S/JavaScript>>/AA<<>>/AP<</D 459 0 R/N 460 0 R>>/BS<</S/S/W 1>>/DA(/Helv 9 Tf 0 g)/FT/Btn/Ff 65536/H/P/MK<</BC[0 0 0]/BG[0.753 0.753 0.753]/CA(Ans)>>/P 28 0 R/Parent 435 0 R/Rect[471.541 221.259 491.854 234.259]/Subtype/Widget/T(4)/Type/Annot>>
endobj
42 0 obj
<</AA<</Bl<</JS(OnBlurRespBox\(null,"answer"\);)/S/JavaScript>>/F<</JS()/S/JavaScript>>/Fo<</JS(var retn = null;)/S/JavaScript>>/K<</JS(if\(event.willCommit\) {\r\n _mathVars="xy";\r\n retn = ProcRespEq\(0,"y = \(6- 0\)/\(5- 3\)*x + \(0- 3*\(6- 0\)/\(5- 3\)\) ",3,.0001,"[0,2]x[0,2]","xy",diffCompare\);\r\n OnBlurRespBox\(retn,"answer"\); \r\n})/S/JavaScript>>>>/AP<</N 458 0 R>>/BS<</S/S/W 1>>/DA(/Helv 9 Tf 0 g)/F 4/FT/Tx/MK<</BC[0 0 0]>>/P 28 0 R/Parent 449 0 R/Rect[226.895 125.198 372.895 138.198]/Subtype/Widget/T(5)/Type/Annot>>
endobj
43 0 obj
<</A<</JS(rngCorrAnsButton\("obj.answer.5","y = rFrac\(rEval\(\(6- 0\)\)/rEval\(\(5- 3\)\)\) x + rFrac\(\(rEval\( 0* \(5- 3\)- 3*\(6- 0\)\)\)/\(rEval\(\(5- 3\)\)\)\)",answer\); )/S/JavaScript>>/AA<<>>/AP<</D 447 0 R/N 448 0 R>>/BS<</S/S/W 1>>/DA(/Helv 9 Tf 0 g)/FT/Btn/Ff 65536/H/P/MK<</BC[0 0 0]/BG[0.753 0.753 0.753]/CA(Ans)>>/P 28 0 R/Parent 435 0 R/Rect[471.541 125.198 491.854 138.198]/Subtype/Widget/T(5)/Type/Annot>>
endobj
435 0 obj
<</Kids[31 0 R 34 0 R 37 0 R 40 0 R 43 0 R 49 0 R]/Parent 436 0 R/T(answer)>>
endobj
436 0 obj
<</Kids[435 0 R 437 0 R 438 0 R 439 0 R]/T(corr)>>
endobj
437 0 obj
<</Kids[444 0 R]/Parent 436 0 R/T(sq1)>>
endobj
438 0 obj
<</Kids[126 0 R]/Parent 436 0 R/T(sq2)>>
endobj
439 0 obj
<</Kids[141 0 R]/Parent 436 0 R/T(sq3)>>
endobj
141 0 obj
<</A<</JS(rngCorrAnsButton\("obj.sq3.1","y = rFrac\(rEval\(\(5- 3\)\)/rEval\(\(9- 8\)\)\) x + rFrac\(\(rEval\( 3* \(9- 8\)- 8*\(5- 3\)\)\)/\(rEval\(\(9- 8\)\)\)\)",sq3\); )/S/JavaScript>>/AA<<>>/AP<</D 440 0 R/N 441 0 R>>/BS<</S/S/W 1>>/DA(/Helv 9 Tf 0 g)/FT/Btn/Ff 65536/H/P/MK<</BC[0 0 0]/BG[0.753 0.753 0.753]/CA(Ans)>>/P 136 0 R/Parent 439 0 R/Rect[460.678 193.311 480.991 206.31]/Subtype/Widget/T(1)/Type/Annot>>
endobj
440 0 obj
<</BBox[0.0 0.0 20.313 12.999]/Filter/FlateDecode/FormType 1/Length 157/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</Font<</Helv 227 0 R>>/ProcSet[/PDF/Text]>>/Subtype/Form/Type/XObject>>stream
+HTA +@E9_1ɴT +@ۂ-x~3SHO^nWz +1!PKJV`d' O׳R-D]虏,9f\i4#}6˴Cm+wEJ;F|1҅> +endstream
endobj
441 0 obj
<</BBox[0.0 0.0 20.313 12.999]/Filter/FlateDecode/FormType 1/Length 120/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</Font<</Helv 227 0 R>>/ProcSet[/PDF/Text]>>/Subtype/Form/Type/XObject>>stream
+H4A +@>eрU&@~7 KrI +endstream
endobj
126 0 obj
<</A<</JS(rngCorrAnsButton\("%.4f","obj.sq2.1","rEval\(-2\(\(3\)^\(\n+1\)-\(5/8\)^\(\n+1\)\)/\(\n+1\)\)",sq2\); )/S/JavaScript>>/AA<<>>/AP<</D 442 0 R/N 443 0 R>>/BS<</S/S/W 1>>/DA(/Helv 9 Tf 0 g)/FT/Btn/Ff 65536/H/P/MK<</BC[0 0 0]/BG[0.753 0.753 0.753]/CA(Ans)>>/P 123 0 R/Parent 438 0 R/Rect[460.678 451.799 480.991 464.799]/Subtype/Widget/T(1)/Type/Annot>>
endobj
442 0 obj
<</BBox[0.0 0.0 20.313 13.0]/Filter/FlateDecode/FormType 1/Length 151/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</Font<</Helv 227 0 R>>/ProcSet[/PDF/Text]>>/Subtype/Form/Type/XObject>>stream
+HD +0Dsԃqw z~iZݤH!3Dz;\'Cyi#v5Z*V$qVth1'V%#gyw]34N)_D*n]UǀqH/:'O +*
+endstream
endobj
443 0 obj
<</BBox[0.0 0.0 20.313 13.0]/Filter/FlateDecode/FormType 1/Length 117/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</Font<</Helv 227 0 R>>/ProcSet[/PDF/Text]>>/Subtype/Form/Type/XObject>>stream
+H$A +0DsYObYV>xP +=ef61*TP*JpKFT"\:/j9 ]XWg>K-M'.mh/ +endstream
endobj
444 0 obj
<</DA(/Helv 9 Tf 0 g)/FT/Btn/Ff 65536/Kids[119 0 R 148 0 R]/Parent 437 0 R/T(1)>>
endobj
119 0 obj
<</A<</JS(rngCorrAnsButton\("obj.sq1.1","rFrac\( rEval\( 7* 16- 3* 16\)/rEval\( 16* 16\) \)",sq1\); )/S/JavaScript>>/AA<<>>/AP<</D 445 0 R/N 446 0 R>>/BS<</S/S/W 1>>/H/P/MK<</BC[0 0 0]/BG[0.753 0.753 0.753]/CA(Ans)>>/P 116 0 R/Parent 444 0 R/Rect[460.678 583.63 480.991 596.63]/Subtype/Widget/Type/Annot>>
endobj
445 0 obj
<</BBox[0.0 0.0 20.313 13.0]/Filter/FlateDecode/FormType 1/Length 151/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</Font<</Helv 227 0 R>>/ProcSet[/PDF/Text]>>/Subtype/Form/Type/XObject>>stream
+HD +0Dsԃqw z~iZݤH!3Dz;\'Cyi#v5Z*V$qVth1'V%#gyw]34N)_D*n]UǀqH/:'O +*
+endstream
endobj
446 0 obj
<</BBox[0.0 0.0 20.313 13.0]/Filter/FlateDecode/FormType 1/Length 117/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</Font<</Helv 227 0 R>>/ProcSet[/PDF/Text]>>/Subtype/Form/Type/XObject>>stream
+H$A +0DsYObYV>xP +=ef61*TP*JpKFT"\:/j9 ]XWg>K-M'.mh/ +endstream
endobj
447 0 obj
<</BBox[0.0 0.0 20.313 13.0]/Filter/FlateDecode/FormType 1/Length 151/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</Font<</Helv 227 0 R>>/ProcSet[/PDF/Text]>>/Subtype/Form/Type/XObject>>stream
+HD +0Dsԃqw z~iZݤH!3Dz;\'Cyi#v5Z*V$qVth1'V%#gyw]34N)_D*n]UǀqH/:'O +*
+endstream
endobj
448 0 obj
<</BBox[0.0 0.0 20.313 13.0]/Filter/FlateDecode/FormType 1/Length 117/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</Font<</Helv 227 0 R>>/ProcSet[/PDF/Text]>>/Subtype/Form/Type/XObject>>stream
+H$A +0DsYObYV>xP +=ef61*TP*JpKFT"\:/j9 ]XWg>K-M'.mh/ +endstream
endobj
449 0 obj
<</Kids[30 0 R 33 0 R 36 0 R 39 0 R 42 0 R 48 0 R]/Parent 450 0 R/T(answer)>>
endobj
450 0 obj
<</Kids[449 0 R 451 0 R 452 0 R 453 0 R]/T(obj)>>
endobj
451 0 obj
<</Kids[456 0 R]/Parent 450 0 R/T(sq1)>>
endobj
452 0 obj
<</Kids[125 0 R]/Parent 450 0 R/T(sq2)>>
endobj
453 0 obj
<</Kids[140 0 R]/Parent 450 0 R/T(sq3)>>
endobj
140 0 obj
<</AA<</Bl<</JS(OnBlurRespBox\(null,"sq3"\);)/S/JavaScript>>/F<</JS()/S/JavaScript>>/Fo<</JS(var retn = null;)/S/JavaScript>>/K<</JS(if\(event.willCommit\) {\r\n _mathVars="xy";\r\n retn = ProcRespEq\(0,"y = \(5- 3\)/\(9- 8\)*x + \(3- 8*\(5- 3\)/\(9- 8\)\)/\(1\)",3,.0001,"[0,2]x[0,2]","xy",diffCompare\);\r\n OnBlurRespBox\(retn,"sq3"\); \r\n})/S/JavaScript>>>>/AP<</N 454 0 R>>/BS<</S/S/W 1>>/DA(/Helv 9 Tf 0 g)/F 4/FT/Tx/MK<</BC[0 0 0]>>/P 136 0 R/Parent 453 0 R/Rect[226.895 193.311 372.895 206.311]/Subtype/Widget/T(1)/Type/Annot>>
endobj
454 0 obj
<</BBox[0.0 0.0 146.0 13.0]/FormType 1/Length 24/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</ProcSet[/PDF]>>/Subtype/Form/Type/XObject>>stream
+0 G +0.5 0.5 145 12 re +s +
+endstream
endobj
125 0 obj
<</AA<</Bl<</JS(OnBlurRespBox\(null,"sq2"\);)/S/JavaScript>>/F<</JS()/S/JavaScript>>/Fo<</JS(var retn = null;)/S/JavaScript>>/K<</JS(if\(event.willCommit\) {\r\n _mathVars="x";\r\n retn = ProcResp\(0,"-2\(\(3\)^\(\n+1\)-\(5/8\)^\(\n+1\)\)/\(\n+1\)",3,.0001,"[0,2]","x",diffCompare\);\r\n OnBlurRespBox\(retn,"sq2"\); \r\n})/S/JavaScript>>>>/AP<</N 455 0 R>>/BS<</S/S/W 1>>/DA(/Helv 9 Tf 0 g)/F 4/FT/Tx/MK<</BC[0 0 0]>>/P 123 0 R/Parent 452 0 R/Rect[227.99 451.799 373.99 464.799]/Subtype/Widget/T(1)/Type/Annot>>
endobj
455 0 obj
<</BBox[0.0 0.0 146.0 13.0]/FormType 1/Length 24/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</ProcSet[/PDF]>>/Subtype/Form/Type/XObject>>stream
+0 G +0.5 0.5 145 12 re +s +
+endstream
endobj
456 0 obj
<</AA<</F<</JS()/S/JavaScript>>/K<</JS(if\(event.willCommit\) {\r\n _mathVars="x";\r\n retn = ProcResp\(0," \(7* 16- 3* 16\)/\( 16* 16\) ",2,.0001,"[0,2]","x", {priorParse: new Array\(nodec,NoAddOrSub\)}\);\r\n OnBlurRespBox\(retn,"sq1"\); \r\n})/S/JavaScript>>>>/DA(/Helv 9 Tf 0 g)/FT/Tx/Kids[118 0 R 147 0 R]/Parent 451 0 R/T(1)>>
endobj
118 0 obj
<</AA<</Bl<</JS(OnBlurRespBox\(null,"sq1"\);)/S/JavaScript>>/Fo<</JS(var retn = null;)/S/JavaScript>>>>/AP<</N 457 0 R>>/BS<</S/S/W 1>>/F 4/MK<</BC[0 0 0]>>/P 116 0 R/Parent 456 0 R/Rect[190.651 583.63 228.651 596.63]/Subtype/Widget/Type/Annot>>
endobj
457 0 obj
<</BBox[0.0 0.0 38.0 13.0]/FormType 1/Length 23/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</ProcSet[/PDF]>>/Subtype/Form/Type/XObject>>stream
+0 G +0.5 0.5 37 12 re +s +
+endstream
endobj
458 0 obj
<</BBox[0.0 0.0 146.0 13.0]/FormType 1/Length 24/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</ProcSet[/PDF]>>/Subtype/Form/Type/XObject>>stream
+0 G +0.5 0.5 145 12 re +s +
+endstream
endobj
459 0 obj
<</BBox[0.0 0.0 20.313 13.0]/Filter/FlateDecode/FormType 1/Length 151/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</Font<</Helv 227 0 R>>/ProcSet[/PDF/Text]>>/Subtype/Form/Type/XObject>>stream
+HD +0Dsԃqw z~iZݤH!3Dz;\'Cyi#v5Z*V$qVth1'V%#gyw]34N)_D*n]UǀqH/:'O +*
+endstream
endobj
460 0 obj
<</BBox[0.0 0.0 20.313 13.0]/Filter/FlateDecode/FormType 1/Length 117/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</Font<</Helv 227 0 R>>/ProcSet[/PDF/Text]>>/Subtype/Form/Type/XObject>>stream
+H$A +0DsYObYV>xP +=ef61*TP*JpKFT"\:/j9 ]XWg>K-M'.mh/ +endstream
endobj
461 0 obj
<</BBox[0.0 0.0 146.0 13.0]/FormType 1/Length 24/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</ProcSet[/PDF]>>/Subtype/Form/Type/XObject>>stream
+0 G +0.5 0.5 145 12 re +s +
+endstream
endobj
462 0 obj
<</BBox[0.0 0.0 20.313 13.0]/Filter/FlateDecode/FormType 1/Length 151/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</Font<</Helv 227 0 R>>/ProcSet[/PDF/Text]>>/Subtype/Form/Type/XObject>>stream
+HD +0Dsԃqw z~iZݤH!3Dz;\'Cyi#v5Z*V$qVth1'V%#gyw]34N)_D*n]UǀqH/:'O +*
+endstream
endobj
463 0 obj
<</BBox[0.0 0.0 20.313 13.0]/Filter/FlateDecode/FormType 1/Length 117/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</Font<</Helv 227 0 R>>/ProcSet[/PDF/Text]>>/Subtype/Form/Type/XObject>>stream
+H$A +0DsYObYV>xP +=ef61*TP*JpKFT"\:/j9 ]XWg>K-M'.mh/ +endstream
endobj
464 0 obj
<</BBox[0.0 0.0 146.0 13.0]/FormType 1/Length 24/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</ProcSet[/PDF]>>/Subtype/Form/Type/XObject>>stream
+0 G +0.5 0.5 145 12 re +s +
+endstream
endobj
465 0 obj
<</BBox[0.0 0.0 20.313 13.0]/Filter/FlateDecode/FormType 1/Length 151/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</Font<</Helv 227 0 R>>/ProcSet[/PDF/Text]>>/Subtype/Form/Type/XObject>>stream
+HD +0Dsԃqw z~iZݤH!3Dz;\'Cyi#v5Z*V$qVth1'V%#gyw]34N)_D*n]UǀqH/:'O +*
+endstream
endobj
466 0 obj
<</BBox[0.0 0.0 20.313 13.0]/Filter/FlateDecode/FormType 1/Length 117/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</Font<</Helv 227 0 R>>/ProcSet[/PDF/Text]>>/Subtype/Form/Type/XObject>>stream
+H$A +0DsYObYV>xP +=ef61*TP*JpKFT"\:/j9 ]XWg>K-M'.mh/ +endstream
endobj
467 0 obj
<</BBox[0.0 0.0 38.0 13.0]/FormType 1/Length 23/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</ProcSet[/PDF]>>/Subtype/Form/Type/XObject>>stream
+0 G +0.5 0.5 37 12 re +s +
+endstream
endobj
468 0 obj
<</BBox[0.0 0.0 20.313 13.0]/Filter/FlateDecode/FormType 1/Length 151/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</Font<</Helv 227 0 R>>/ProcSet[/PDF/Text]>>/Subtype/Form/Type/XObject>>stream
+HD +0Dsԃqw z~iZݤH!3Dz;\'Cyi#v5Z*V$qVth1'V%#gyw]34N)_D*n]UǀqH/:'O +*
+endstream
endobj
469 0 obj
<</BBox[0.0 0.0 20.313 13.0]/Filter/FlateDecode/FormType 1/Length 117/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</Font<</Helv 227 0 R>>/ProcSet[/PDF/Text]>>/Subtype/Form/Type/XObject>>stream
+H$A +0DsYObYV>xP +=ef61*TP*JpKFT"\:/j9 ]XWg>K-M'.mh/ +endstream
endobj
470 0 obj
<</BBox[0.0 0.0 38.0 13.0]/FormType 1/Length 23/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</ProcSet[/PDF]>>/Subtype/Form/Type/XObject>>stream
+0 G +0.5 0.5 37 12 re +s +
+endstream
endobj
471 0 obj
<</BBox[0.0 0.0 17.0 13.0]/Filter/FlateDecode/FormType 1/Length 86/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</ProcSet[/PDF]>>/Subtype/Form/Type/XObject>>stream
+H235045VH2T0TF +9\fPTH(`%XXa.W@(E6KT!R +endstream
endobj
472 0 obj
<</BBox[0.0 0.0 17.0 13.0]/Filter/FlateDecode/FormType 1/Length 86/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</ProcSet[/PDF]>>/Subtype/Form/Type/XObject>>stream
+H235045VH2T0TF +9\fPTH(`%XXa.W@(E6KT!R +endstream
endobj
473 0 obj
<</BBox[0.0 0.0 17.0 13.0]/Filter/FlateDecode/FormType 1/Length 86/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</ProcSet[/PDF]>>/Subtype/Form/Type/XObject>>stream
+H235045VH2T0TF +9\fPTH(`%XXa.W@(E6KT!R +endstream
endobj
474 0 obj
<</BBox[0.0 0.0 17.0 13.0]/Filter/FlateDecode/FormType 1/Length 86/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</ProcSet[/PDF]>>/Subtype/Form/Type/XObject>>stream
+H235045VH2T0TF +9\fPTH(`%XXa.W@(E6KT!R +endstream
endobj
475 0 obj
<</BBox[0.0 0.0 17.0 13.0]/Filter/FlateDecode/FormType 1/Length 86/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</ProcSet[/PDF]>>/Subtype/Form/Type/XObject>>stream
+H235045VH2T0TF +9\fPTH(`%XXa.W@(E6KT!R +endstream
endobj
476 0 obj
<</BBox[0.0 0.0 17.0 13.0]/Filter/FlateDecode/FormType 1/Length 86/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</ProcSet[/PDF]>>/Subtype/Form/Type/XObject>>stream
+H235045VH2T0TF +9\fPTH(`%XXa.W@(E6KT!R +endstream
endobj
477 0 obj
<</BBox[0.0 0.0 20.313 13.0]/Filter/FlateDecode/FormType 1/Length 151/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</Font<</Helv 227 0 R>>/ProcSet[/PDF/Text]>>/Subtype/Form/Type/XObject>>stream
+HD +0Dsԃqw z~iZݤH!3Dz;\'Cyi#v5Z*V$qVth1'V%#gyw]34N)_D*n]UǀqH/:'O +*
+endstream
endobj
478 0 obj
<</BBox[0.0 0.0 20.313 13.0]/Filter/FlateDecode/FormType 1/Length 117/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</Font<</Helv 227 0 R>>/ProcSet[/PDF/Text]>>/Subtype/Form/Type/XObject>>stream
+H$A +0DsYObYV>xP +=ef61*TP*JpKFT"\:/j9 ]XWg>K-M'.mh/ +endstream
endobj
479 0 obj
<</BBox[0.0 0.0 146.0 13.0]/FormType 1/Length 24/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</ProcSet[/PDF]>>/Subtype/Form/Type/XObject>>stream
+0 G +0.5 0.5 145 12 re +s +
+endstream
endobj
480 0 obj
<</BBox[0.0 0.0 27.863 13.0]/Filter[/FlateDecode]/FormType 1/Length 159/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</Font<</Helv 227 0 R>>/ProcSet[/PDF/Text]>>/Subtype/Form/Type/XObject>>stream
+H\ +0DsKMH^ѫ,IՀ$̼!lb0lc sDm`ʷH6,y~ђAOl<[╘~Z;oy +ٓ]tW`(6Ɨ&/3Bڍ2ot +endstream
endobj
120 0 obj
<</A<</JS(ProcessIt = false;\r\nif \( typeof sq1 == "undefined" \)\r\n sq1 = new Object;\r\nif \(typeof appAlerts["sq1"] == "undefined"\)\r\n appAlerts["sq1"] = new Object;\r\nthis.resetForm\(new Array\("mc.sq1","obj.sq1","tally.sq1","grpobj.sq1"\)\);\r\nvar f = th\
is.getField\("obj.sq1"\);\r\nif \( f != null \) f.strokeColor=color.black;\r\nf = this.getField\("grpobj.sq1"\);\r\nif \( f != null \) f.strokeColor=color.black;\r\nf = this.getField\("rbmarkup.sq1"\);\r\nif \( f != null \) f.display=display.hidden;\r\nsq\
1.Grp = {};\r\nappAlerts["sq1"].bAfterValue=false;\r\nProcessIt=true;)/S/JavaScript>>/AA<<>>/AP<</N 481 0 R>>/BS<</S/B/W 1>>/F 4/MK<</BC[0 0 0]/BG[0.753 0.753 0.753]/CA(Clear)>>/P 116 0 R/Parent 423 0 R/Rect[479.991 583.63 507.854 596.63]/Subtype/Widget/Type/Annot>>
endobj
481 0 obj
<</BBox[0.0 0.0 27.863 13.0]/Filter[/FlateDecode]/FormType 1/Length 159/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</Font<</Helv 227 0 R>>/ProcSet[/PDF/Text]>>/Subtype/Form/Type/XObject>>stream
+H\ +0DsKMH^ѫ,IՀ$̼!lb0lc sDm`ʷH6,y~ђAOl<[╘~Z;oy +ٓ]tW`(6Ɨ&/3Bڍ2ot +endstream
endobj
482 0 obj
<</BBox[0.0 0.0 27.863 13.0]/Filter[/FlateDecode]/FormType 1/Length 159/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</Font<</Helv 227 0 R>>/ProcSet[/PDF/Text]>>/Subtype/Form/Type/XObject>>stream
+H\ +0DsKMH^ѫ,IՀ$̼!lb0lc sDm`ʷH6,y~ђAOl<[╘~Z;oy +ٓ]tW`(6Ɨ&/3Bڍ2ot +endstream
endobj
483 0 obj
<</BBox[0.0 0.0 20.313 13.0]/Filter/FlateDecode/FormType 1/Length 158/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</Font<</Helv 227 0 R>>/ProcSet[/PDF/Text]>>/Subtype/Form/Type/XObject>>stream
+HD +0Dsԃq9*H*?@ mA~-R&HVx +A#| +]4ħm,h*ĥ1:e_8j^eP6hqf;6rȲ==/r;]Q.0_rr +endstream
endobj
484 0 obj
<</BBox[0.0 0.0 20.313 13.0]/Filter/FlateDecode/FormType 1/Length 123/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</Font<</Helv 227 0 R>>/ProcSet[/PDF/Text]>>/Subtype/Form/Type/XObject>>stream
+H$ +@DsKvQAU HA~K˛QZRURHl19:@%/U-x#M}{連aw__VQ:홤+5eK{d' +endstream
endobj
485 0 obj
<</BBox[0.0 0.0 38.0 13.0]/FormType 1/Length 23/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</ProcSet[/PDF]>>/Subtype/Form/Type/XObject>>stream
+0 G +0.5 0.5 37 12 re +s +
+endstream
endobj
486 0 obj
<</AA<</F<</JS(var sq1=new Object;\r\nsq1.Grp={}; )/S/JavaScript>>>>/DA(/Helv 0 Tf 0 g)/FT/Tx/Ff 1/Kids[117 0 R 146 0 R]/T(sqIDsq1)>>
endobj
117 0 obj
<</AA<<>>/BS<</S/S/W 1>>/F 4/MK<<>>/P 116 0 R/Parent 486 0 R/Rect[109.854 653.247 111.854 655.247]/Subtype/Widget/Type/Annot>>
endobj
487 0 obj
<</Filter/FlateDecode/Length 2464>>stream
+HWmo8_bFMZ`oƸ.^hյ%GrHZ>dQ45p^9W57?_FRz翋FVQ4㳘h~Q/o? Q wֽ{_~Aj6ڄGn{J44I#μ8Nro(8|D/52fv僬V;)RM>I^F#qfϒd0Y!v)b9wycf#R%~[lΤOKV 1q?MUNVc!tE
Z|0#Ms3_ղ%Ax}J,C{U'B[r\.3:G\<Nm^ru#7>g
fy9.76&RIڵ헠D|Q[D3@ya季]̉5X6}T^pQKIͯro.$q/|~oKҦɋ陵1tD(vV3o$Ġܯd7] h \KQ9qa<_w9,P͏Ϳy +4W) +C*ߑFZ6D_ +k+w}^@Xze +p*/zL z*֖\Hp#x!lG8;\G$
+#mw:ʶB9',4d$*3n5_5r'燝xpOS[a o]J$j[6u[Hئ_?ovf9-(na-?-7X82@+e#̐R
)ːr轉1ژ +.8յ)}_U$/SkjuQmԐj;y؍":q'>q%uN͜O7㱬X־B<kB<j,Pm{5LLWAj>T -vB +%ʝOC3LJƄf͛Eh%V +p.zYAYNDv~ xrz t4BC&PX$ՇJ~uhahLgxr9:Hdt9[{hd5FkSmpz%9)b(C[ZQƼ~$PCCEHa\GԒ˪ʱK$R3RАF#ytU}wPlgd;?\<Y +! +[Z)(tVw5[;ɐ6WX41 e
Ó`}5CRi+ +endstream
endobj
488 0 obj
<</CA 1.0/Type/ExtGState/ca 1.0>>
endobj
137 0 obj
<</Border[0 0 0]/C[1 0 0]/Dest(section.1)/H/I/Rect[332.938 653.247 402.871 663.819]/Subtype/Link/Type/Annot>>
endobj
138 0 obj
<</Border[0 0 0]/C[1 0 0]/Dest(section.1)/H/I/Rect[455.603 653.247 464.363 663.285]/Subtype/Link/Type/Annot>>
endobj
139 0 obj
<</AA<</F<</JS(var sq3=new Object;\r\nsq3.Grp={}; )/S/JavaScript>>>>/BS<</S/S/W 1>>/DA(/Helv 0 Tf 0 g)/F 4/FT/Tx/Ff 1/MK<<>>/P 136 0 R/Rect[109.854 449.61 111.854 451.61]/Subtype/Widget/T(sqIDsq3)/Type/Annot>>
endobj
489 0 obj
<</Filter/FlateDecode/Length 2316>>stream
+Hko6^L)wݴn+heEIdKN(8Cg4m4kロ\lfZzV֫&S}k˴͈ͫx#hh +{ѧG 8Χ +IN)觋!&yȯr)˓591 +cO˹Z Xy'Mǀv00 +WK?4!Od#OƌG(m@ym]eim +0kJi[B`,2=`L Bx P#)Pd`0G#ײmwKПAޅ>U@01 + \oGbSfJig\jgڶN#1gめJ۲M+\hew]t3gm&kcM +S#$ ta*@ʴ%L6h(tTT[YI 9kFER]r/UڂCBFjQA[mkYljiʾ-9&GgfJ~)Z˻t.:6/ +iZgI0YJӲl]pPXFJ+?Wʭ3j
%!TFn|u
xU/k<S&+[^ _>E6CPTզ65c?}:Sk;{aR_"]Ma9?mji=f89cPD{~JRj(An
֝u|i?ZW6E4ANUrq5R-i҆HiA2qR&49w
Ae&j`jB`wy {&Ρ~l@vNBcz~:RI?~ueq00/o`q^#EF4 @&0`^I@ caJn`0ńh~16 &ìEB< +!$Dch|ۺnJ7-^?NcU`Pud(xg +,d4*}A 9L^Tx& +!%M@3<6!ͱ}+~q\#o\ +Xʧƀʉac6ضj=OG#fd H!V#c{bit[`F\ABA_(#UFY@*(0j'qply5$5F̯'bbM*~~Y +0 +endstream
endobj
198 0 obj
<</BaseFont/PELDHG+LucidaBright-Oblique/Encoding 132 0 R/FirstChar 46/FontDescriptor 134 0 R/LastChar 118/Subtype/Type1/ToUnicode 135 0 R/Type/Font/Widths[265 304 304 304 304 304 304 304 304 304 304 304 304 304 304 304 304 304 304 744 304 304 304 304 304 304 304 325 422 304 304 304 304 304 573 304 679 542 304 304 304 304 304 304 304 304 304 304 304 304 304 543 611 509 304 530 404 304 304 307 304 304 304 304 633 602 642 304 440 304 392 304 545]>>
endobj
132 0 obj
<</Differences[46/period 65/A 73/I/J 80/P 82/R/S 97/a/b/c 101/e/f 105/i 110/n/o/p 114/r 116/t 118/v]/Type/Encoding>>
endobj
134 0 obj
<</Ascent 770/CapHeight 723/CharSet(/space/J/a/v/S/c/r/i/p/t/f/o/A/b/P/I/R/e/n/period)/Descent -205/Flags 70/FontBBox[-332 -211 1293 928]/FontFile3 133 0 R/FontName/PELDHG+LucidaBright-Oblique/ItalicAngle -11.3/StemH 33/StemV 97/Type/FontDescriptor/XHeight 530>>
endobj
135 0 obj
<</Filter/FlateDecode/Length 298>>stream
+hTQMo +MULeM<#u;kRen7cTa&`Z:p~0fzOaף}r&9/ns*;oE7j7hHŎ㋲jD!<o!tZdRTʘqU9_&IvӀ}`HILY>xGy]2'\ER+HxV$) Au('buⴻE},8:{:G=fi'K-~ +endstream
endobj
133 0 obj
<</Filter/FlateDecode/Length 2126/Subtype/Type1C>>stream
+hޜV{PSWps!GmUim;muYߣB4y'$<D +ֺmٱuW=ciw̜3g~w (v
c6ӥiqE̬m۟+-KfW1$Ɖfpf~0}lZ{`s-g`/~A8AY'_._hfE'͔旉7$ⴼq҂EwJJ +V,YRVV8IZ/!7WcXCR,)*d,ޚ_$KQ.dD!H4"ȫ(C-ى A%HAćL{ЯC897B~!f8^ˋ
Pe|3 /a¸`4 ،.fq|&Ujd҄vOQ-;E@SQ[h/YfP +) @dY-:QU+0c`7W +q=8@<x>ufIlRR492*'vC0OW4mt{g"wZn`L0smDIV7)G^5T&nJ1a0Ph17Zar5)MH+$O1ϭ`J̷me]{.G/skܫJG*wr[I1PZKK+$3!E@S)՝#n̻y؛-r*bӥ,*ǫ7y]Ʌ4hpVǫ5t_K҅MҖȈo
Lć;C-!*-*h1 䶽\a,wzZ0>Aѩ-ĉ!]Q|lXhCWUudwhC9]T4շLک'UF^]ŋ[\5'j-mrw2.ݥN +Snujy`uֺ\<y0?2ܶ/ncKKia$7&A`*B V36l{`蛸cM>U|? +~ۏ< +UA&3d QV
T
q%;K\"]56M!,I`bM$ƅWC?3
1dt4. +endstream
endobj
490 0 obj
<</CA 1.0/Type/ExtGState/ca 1.0>>
endobj
124 0 obj
<</AA<</F<</JS(var sq2=new Object;\r\nsq2.Grp={}; )/S/JavaScript>>>>/BS<</S/S/W 1>>/DA(/Helv 0 Tf 0 g)/F 4/FT/Tx/Ff 1/MK<<>>/P 123 0 R/Rect[109.854 547.005 111.854 549.005]/Subtype/Widget/T(sqIDsq2)/Type/Annot>>
endobj
128 0 obj
<</Border[0 0 0]/C[1 0 0]/Dest(Hfootnote.2)/H/I/Rect[345.37 139.293 351.569 152.792]/Subtype/Link/Type/Annot>>
endobj
129 0 obj
<</A<</S/URI/URI(http://livedocs.adobe.com/acrobat_sdk/9/Acrobat9_HTMLHelp)>>/Border[0 0 0]/C[0 1 1]/H/I/Rect[126.89 116.924 453.654 128.048]/Subtype/Link/Type/Annot>>
endobj
491 0 obj
<</Filter/FlateDecode/Length 2271>>stream
+HWYs8~ׯ<Щ&@ڙLUl\j HxUۍ Rn +xlv|uӲ%x';!h<L9x*1AWW-v`7/XeǶnXi7ҭҧ
8ƆL,}04lZQ,=haƓ=<ɃU,UU};"_yOY80]2
Tٲ<i+B&e<(YKq|3G)8Y@$4c\Ȝ +c`V=jǶ~Sv\:8v~qi;9lOǬsCGo[}1 &oЌheM!hMC0S<A+Z~<uh1
Iung$P 3e((a}FiI~
+'Eoۛ w}[6byK-1^4Z+ƈM8TQs(=R +wyo$-<}cVu|&L5n i݊_|Ҳ<7YOoH:
h^HöіiQwUcRp$24CԢ[?Bl0F9.R;~+Hn!C1(@臗6 +YɑzX($Pۙ"H㤪Ky9Bij*.m!n(Dڪ[ՠ@$`L
gf"BRa2=/5[b6,-`摻nVWёV+:IJ
@H<uȎT%d?;8L ΧhE0/T>!|Tn&&O` +endstream
endobj
492 0 obj
<</CA 1.0/Type/ExtGState/ca 1.0>>
endobj
493 0 obj
<</Filter/FlateDecode/Length 2063>>stream
+HWYo#7~ׯоͣ ;A$aZݔqv5ʯOERcloUw/YOqX'륪34]gm?ty¦4'?=馛X};8y_LzAn~0FK8nh D F)|I0]ԓ7?'sp(&fw\`V6]5D]~[v(marQJ<.濋_& Iׇ
$ +2c$a PAŴ6,vW6 "x ]?eTFy`T47iz%U~Nۡ*,PO[M̄aLB+WDe\IiUIn9t]-Z:ʟ\6Ԁ_C
xm_Y6;N;Ν 8B@}^[b}pRJݢU~̞g qUKP8mTWꄕBٱ2AfɜR{ğG̝Cz-˦W-Xy^ۦ<8hX'A@bf<z#SPwLA2""\VWWֻVAW?mno`6*3(̉Muϭm*{}ZpQW>R^*q@oCqwiWumb:g>TR~7 +IP̺ܿrIȇV7:^{jģ}t#wn(wm5p>;S[lL,&jVm"Uy%ڽvh%Ks\{E6{`CE$}|fL|42'nj)ҳw=Ê:<^3yIۆ.&`ǹ> +JWx|V]PRg"7.ΎUjW=u>rӨ +0D,̥*ɞ\}Yfʯ4%z-fc{'={@зWtiѹRGg\J}vіV=<g^}ħٷRTߝ/ MMǛ^\3I̮[Ffek$a/EiE"3Sui;/~`ŗf?{chtm 38.f$MNL4/)|M46卄a.(,B@36i^`dȇbt@Ae:vNo8,o0_LDQ+"ͦFtGm9lB6m
hk} +-ًӒƺ?0OYZ:HCЕ Emp|}ߞ ri7zt)Pel3Z')SX:5+@tHw|?ٌ褰ByhZ#U?o2t~o]Qvu-2?Óp[o<,&0 +endstream
endobj
382 0 obj
<</BaseFont/PELCLO+LucidaSans-Demi/Encoding 383 0 R/FirstChar 69/FontDescriptor 385 0 R/LastChar 122/Subtype/Type1/ToUnicode 386 0 R/Type/Font/Widths[601 319 319 319 319 319 319 319 319 319 319 319 319 319 319 319 319 319 319 319 319 319 319 319 319 319 319 319 588 319 319 319 586 414 660 319 325 319 319 319 319 657 319 663 663 454 319 319 657 319 319 591 319 591]>>
endobj
383 0 obj
<</Differences[69/E 97/a 101/e/f/g 105/i 110/n 112/p/q/r 117/u 120/x 122/z]/Type/Encoding>>
endobj
385 0 obj
<</Ascent 770/CapHeight 723/CharSet(/space/r/a/n/g/e/E/x/q/u/i/z/f/p)/Descent -205/Flags 262148/FontBBox[-309 -205 1151 936]/FontFile3 384 0 R/FontName/PELCLO+LucidaSans-Demi/ItalicAngle 0/StemH 108/StemV 193/Type/FontDescriptor/XHeight 535>>
endobj
386 0 obj
<</Filter/FlateDecode/Length 274>>stream
+hTMO 9@۬e7!M̪I~ĮYVK {k< +endstream
endobj
384 0 obj
<</Filter/FlateDecode/Length 1252/Subtype/Type1C>>stream
+h\Lgz]JR؆-F
Ub*3hQ(hd +* 3:mihR܋َil~~ǤtK"t3se<[dɒ;v&0"&)Bא!D1K6 [+ @X?R_e%Xrs +w3cbfp&VdyF.-,m*7?/3)(ȟ9mZaaaTxipqf38fZd˓a5Q<8c`0- +m#Ţk`½'~h_,̺4:<mbRJymUxC#ͨ4$Ҽi +3{ѳLYꁈ}i2x>_4Dd|jܿH(E1S(J1`ƫO}뱏DxXvvP0j~kU)HaUm@j,vW$DA|Ӗ]其uLno7V6x/R}V+[^~\8LҠ@se1QƑ(#C1$$&Ce ~xïk k}pBY֏("ۉV: a5~? +endstream
endobj
494 0 obj
<</CA 1.0/Type/ExtGState/ca 1.0>>
endobj
113 0 obj
<</Border[0 0 0]/C[1 0 0]/Dest(section.1)/H/I/Rect[453.687 494.406 504.907 504.444]/Subtype/Link/Type/Annot>>
endobj
495 0 obj
<</Filter/FlateDecode/Length 2095>>stream
+HWێ6}7C숖Hꆤ$.}Y+4߷7]{:h)X:uswW?ȉ_KQg}'gx]$pj믞s6n66o~<la?T)2OaNsPm[}eA踰iMUT@8[Tp|$ܾ[#Fly$H'Y+F6FڷMӓ8xcȟ}W`Gc{Qϵ~B:OhhBSCmOm+㖕f\ߪhͨ茔denFAttLl]J/7H)eyB2eB<bF죕F< Ys^ṛgEт`K},GAkn +A굘>#$t5D+8]ϣ O5h=0Ǜz7dϫW@ǷRV4$~F;#%Af0 8P<e A@ah EmV_(hŌ$S-@OM7C'f^'x8s` h{L.xh#EߗEol"[_xdaMv
+cə\IjzhڏV.%=3,]ٹ!R/d%7k`g=53rFͧdWeg#MUDsӎ6@85D.X3wU(ڵKA:$IFjY>ne_\B+igz
FOE`ʉ>W JƩ^sz.sth"na'>J3u|#N<"QNy +a{$& `B{ %x(֊}BDVi^`]ZUgfg"vkW,2Eє55$1""KCcĬ*Q[BlQIM]`Ď@1ސQ +FG#-d}/<[eg!%u);oŢVYRM<ɉ h09B.(d]"'*ۦ[!YxY#ZAd߾ђ&3$JIħf \ +#njPVdA+/̏Hhk
?KV|_Hf&`X)&Ǫ]1g%/ًοcVJVN#t9RSjoau,CyTpr9Eٳ z)j:zqjFT3L|LՉl
%]ZVAcRYښv1
3|:XcdJgeZ6E+q̓IBؔAk蛎E3jXEg0G8k8C_G(uG0_>ݖMO ?W<OG]x{xcl,dp~@H(ZDPGmfJ!8,P͖X +p18e@C +nJј9GD?FR%uA;Dc-o)SU"MH[KZ cǧX05m7Db/OejdP!=lb%)}EMh/aQ.9o~_5 +MP{-o[n5PRպAQvZxV/rmT'jUV'jN zEה7,drhʌXp0]4{H +endstream
endobj
193 0 obj
<</BaseFont/PELCPI+LucidaBright-Italic/Encoding 194 0 R/FirstChar 97/FontDescriptor 197 0 R/LastChar 118/Subtype/Type1/ToUnicode 195 0 R/Type/Font/Widths[608 596 487 608 518 380 602 304 289 304 304 289 944 631 560 608 599 470 440 355 630 558]>>
endobj
194 0 obj
<</Differences[97/a/b/c/d/e/f/g 105/i 108/l/m/n/o/p/q/r/s/t/u/v]/Type/Encoding>>
endobj
197 0 obj
<</Ascent 770/CapHeight 723/CharSet(/space/n/o/t/b/e/q/u/a/l/f/r/i/g/s/c/m/d/v/p)/Descent -205/Flags 70/FontBBox[-290 -211 1124 928]/FontFile3 196 0 R/FontName/PELCPI+LucidaBright-Italic/ItalicAngle -15.5/StemH 33/StemV 97/Type/FontDescriptor/XHeight 530>>
endobj
195 0 obj
<</Filter/FlateDecode/Length 241>>stream
+hTPn SuXJJVuڝEa< +0 +endstream
endobj
196 0 obj
<</Filter/FlateDecode/Length 2135/Subtype/Type1C>>stream
+hެVPSWNrU%67:Z1T(>*ꊂ +τ +>ntV⣻tŶ+{ԝٝ{Ν9g}.* +k1Q~ [EQR3rsq
I +z[ m뾹)4*5:!_5(}ΊW,q~9~\@y(BNTJ,'%)18 "QbxY(,Fl8{=\!7=l 9*P`6 +YI2J)zPy.o]&i
frt8u(9s;QL'߫]v< T 2B+ʤ2(IUTVR+ +vEB\N.kWXXu@X~aׯ_mnO#[]q{#))hsC@zFv +.?%[FvjPP--fo*C|7vA7W;Vobs#$Yi8C1kH[gSmjgX#\aԽh>]MF\#ک'hx^0DEi(G$`_0
a(7>?5YXn;IE%)[[Ox¯D! :u:w9+Kl +蔼5DG6zOq +RѨ0,(2t#x 1ra~1Q 49m|=ZقKO'g@F k(T>/A ,er*~l|\$_jSd)#yC6w zBV||M!;Np/(P:/llËŤAzcf}cވ[
&r[8^TȺs6eBi>t}Ae2}5b#|Ħm4~^n6~Ԇov#<p،
YD\$i}':{fUIBky+yktāԇ4PK_%x| +
1bIv >xva@nnقP$'֞tlp=dvxgXEޝ'Nj|K$g&}@90rn34UZ@<tµoΑX+,zh +3" eNyqScia+0'3LЌI$7f'@2\ +>!?ʦW̸F- Ufbh>T,BWX&f'U$V +|7EqB!nW5RfEF>ųJ
5VVU"Ҵg'DdiaLSZWyK^7Ynnno9x +endstream
endobj
496 0 obj
<</CA 1.0/Type/ExtGState/ca 1.0>>
endobj
497 0 obj
<</Filter/FlateDecode/Length 2180>>stream
+HW[o~ׯ>r<7I$ Nnl +(%Ibo
ɖ
XgsΜnr>D_~y~>o9]-NFUD_}C4eB"QY4ד]hOZ袝\N'0ND}KOB!95-MFyY$ +9&~/j~0m]fџ4qıRfĔM=IA(aj&4ꡚQA)ʸ0J+~l1(ZD"%(M3rJ5OB1OSmrUvg W"Y +BIajVfQBa,EyoWʅېͺkz,H!ڣKc6,x[f[w#@ +<yuqߗW6 +-
+3E +ĥQ!aO4 xW#quнvt#ibȑ i\9PJPi^F50lQ`B3 +]mݔP~g!h=̮4~NaNw,}GcQؒ)
u{0cV/͂dž-bg{ j +S2(O@(%P i}濗\36T5!%Y95& +e^U7m7ƎZЪU]YwnaK 4U#QN)Ԅ<swm_
կJRU#wwYPX?C5trpt<LBB% _ M(.!0YǹH!@13R^˞Aajb9C4'CP0"`b+<VAmGJYZrBx^ҕqr%a@ 0 +endstream
endobj
387 0 obj
<</BaseFont/PELCLP+LucidaSansTypewriterBold/Encoding 388 0 R/FirstChar 73/FontDescriptor 390 0 R/LastChar 122/Subtype/Type1/ToUnicode 391 0 R/Type/Font/Widths[602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602]>>
endobj
388 0 obj
<</Differences[73/I 76/L 79/O/P/Q/R/S 90/Z 92/backslash 97/a 99/c/d/e/f 104/h/i 109/m/n/o/p/q/r/s/t/u 120/x/y/z]/Type/Encoding>>
endobj
390 0 obj
<</Ascent 770/CapHeight 723/CharSet(/space/e/x/r/c/i/s/q/u/z/h/o/t/backslash/R/a/n/d/m/Z/Q/L/I/P/S/O/f/y/p)/Descent -205/Flags 262148/FontBBox[-6 -205 639 928]/FontFile3 389 0 R/FontName/PELCLP+LucidaSansTypewriterBold/ItalicAngle 0/StemH 96/StemV 144/Type/FontDescriptor/XHeight 530>>
endobj
391 0 obj
<</Filter/FlateDecode/Length 286>>stream
+hTn0<S`HbJ"ġ?*iPb,Q=cQҶ#w +G[k<5Bq]-AjFJ[ea31~ +'&:肴TϬd4ET{-cM!TuAM?\B}'')98bwѯ +endstream
endobj
389 0 obj
<</Filter/FlateDecode/Length 2297/Subtype/Type1C>>stream
+hޤUPSW>TH۩kRUlKj +*Z
" <i- BR!`X@Q4RiJk:vfZvOvgvgwfܙ3sOr?$IͶ<e-qbSvX,FsBfhZJVIi\ +N)Z@M@=P|ps ?i~*-ݚi45k-=h&hHHIh<bJĦk^y65nfٜjbYOWƥ4SR4>,MDBVBfNB AE,#bx D(AlϒD8KDj+GȈzMVYdIBeJA=B2J&
e,BqP:'IN&͞9Y;ѺRBhߝ[n{|S~4NVQ,.VX-+7!*@@TlP |w|E0_(nuYO_ +&+8g`LZpב/Z̓!ubshx 6DPY"t5&c:W[iT$zX1&TKy\p֫
XQސik*o-efoqD9/ E$61#B#%!u*.VE=rP, +`,b*͕C'_.j [s|1.缒]&
b'-jd<S?:spS.R%ЊB @')^X;@+Z/E'
=j;97&;{}I-6]4d'8vBNAd]MFϷB)lz,UKrtm[dK3 +"|'Tǡs,(H }cyxcucw×rn3{\;_aɦtmGE(YZzB +(Hp` +FoY`Ow;xXi/:IHĊ(+5[ܝu}97hŮwU9U<zw7A8'?%:|h5?' w?-n}eX\EБFC_/XUBb,=3ϼ@5=0_Wc+qU&
2OG+_׃k +LM|Lblfcf3~Nin?@?C07wDWlFW H47+wȞw`97AsbBZK.].%Brw +x[-\TSTǖ֔;U}-c'*;MrdL+aU#Mz!ƔWmePN7e7YF~+ml[yey\MB/&|}%(b>b
=S|υZi`o3)6@AAel[*\*=x|ܱѥS, 72"Oz~-&asqw|ܭe<MeC<I4<
6 +ӈAC0Ԉ"P;,nIL +FZ
ZKCAڞdć/mt=x䅼(d9i#'N,A]D"$NZV
7\PG.Flj8sSmWH +endstream
endobj
498 0 obj
<</CA 1.0/Type/ExtGState/ca 1.0>>
endobj
74 0 obj
<</Annots[75 0 R 76 0 R]/Contents 517 0 R/CropBox[0 0 612 791]/MediaBox[0 0 612 792]/Parent 362 0 R/Resources<</ColorSpace<</CS0 375 0 R>>/ExtGState<</GS0 518 0 R/GS1 376 0 R>>/Font<</T1_0 392 0 R/T1_1 397 0 R/T1_2 164 0 R/T1_3 159 0 R/T1_4 172 0 R/T1_5 374 0 R/T1_6 387 0 R/T1_7 192 0 R/T1_8 193 0 R>>/ProcSet[/PDF/Text]/XObject<</Fm0 405 0 R>>>>/Rotate 0/Type/Page>>
endobj
79 0 obj
<</Contents 515 0 R/CropBox[0 0 612 791]/MediaBox[0 0 612 792]/Parent 362 0 R/Resources<</ExtGState<</GS0 516 0 R/GS1 376 0 R>>/Font<</T1_0 392 0 R/T1_1 397 0 R/T1_2 164 0 R/T1_3 193 0 R/T1_4 159 0 R/T1_5 192 0 R/T1_6 172 0 R>>/ProcSet[/PDF/Text]/XObject<</Fm0 405 0 R>>>>/Rotate 0/Type/Page>>
endobj
82 0 obj
<</Contents 513 0 R/CropBox[0 0 612 791]/MediaBox[0 0 612 792]/Parent 362 0 R/Resources<</ExtGState<</GS0 514 0 R/GS1 376 0 R>>/Font<</T1_0 392 0 R/T1_1 397 0 R/T1_2 374 0 R/T1_3 172 0 R/T1_4 159 0 R>>/ProcSet[/PDF/Text]/XObject<</Fm0 405 0 R>>>>/Rotate 0/Type/Page>>
endobj
85 0 obj
<</Contents 511 0 R/CropBox[0 0 612 791]/MediaBox[0 0 612 792]/Parent 362 0 R/Resources<</ColorSpace<</CS0 375 0 R>>/ExtGState<</GS0 512 0 R/GS1 376 0 R>>/Font<</T1_0 392 0 R/T1_1 374 0 R/T1_2 387 0 R/T1_3 397 0 R/T1_4 159 0 R/T1_5 192 0 R>>/ProcSet[/PDF/Text]/XObject<</Fm0 405 0 R>>>>/Rotate 0/Type/Page>>
endobj
88 0 obj
<</Contents 509 0 R/CropBox[0 0 612 791]/MediaBox[0 0 612 792]/Parent 362 0 R/Resources<</ColorSpace<</CS0 375 0 R>>/ExtGState<</GS0 510 0 R/GS1 376 0 R>>/Font<</T1_0 392 0 R/T1_1 374 0 R/T1_2 387 0 R/T1_3 397 0 R/T1_4 159 0 R/T1_5 192 0 R/T1_6 172 0 R>>/ProcSet[/PDF/Text]/XObject<</Fm0 405 0 R>>>>/Rotate 0/Type/Page>>
endobj
91 0 obj
<</Contents 507 0 R/CropBox[0 0 612 791]/MediaBox[0 0 612 792]/Parent 362 0 R/Resources<</ExtGState<</GS0 508 0 R/GS1 376 0 R>>/Font<</T1_0 392 0 R/T1_1 374 0 R/T1_2 159 0 R/T1_3 192 0 R/T1_4 397 0 R/T1_5 172 0 R>>/ProcSet[/PDF/Text]/XObject<</Fm0 405 0 R>>>>/Rotate 0/Type/Page>>
endobj
94 0 obj
<</Contents 505 0 R/CropBox[0 0 612 791]/MediaBox[0 0 612 792]/Parent 362 0 R/Resources<</ColorSpace<</CS0 375 0 R>>/ExtGState<</GS0 506 0 R/GS1 376 0 R>>/Font<</T1_0 392 0 R/T1_1 172 0 R/T1_2 159 0 R/T1_3 397 0 R/T1_4 374 0 R/T1_5 387 0 R/T1_6 192 0 R>>/ProcSet[/PDF/Text]/XObject<</Fm0 405 0 R>>>>/Rotate 0/Type/Page>>
endobj
97 0 obj
<</Contents 503 0 R/CropBox[0 0 612 791]/MediaBox[0 0 612 792]/Parent 362 0 R/Resources<</ColorSpace<</CS0 375 0 R>>/ExtGState<</GS0 504 0 R/GS1 376 0 R>>/Font<</T1_0 392 0 R/T1_1 374 0 R/T1_2 397 0 R/T1_3 159 0 R/T1_4 172 0 R/T1_5 171 0 R/T1_6 387 0 R>>/ProcSet[/PDF/Text]/XObject<</Fm0 405 0 R>>>>/Rotate 0/Type/Page>>
endobj
100 0 obj
<</Contents 501 0 R/CropBox[0 0 612 791]/MediaBox[0 0 612 792]/Parent 362 0 R/Resources<</ColorSpace<</CS0 375 0 R>>/ExtGState<</GS0 502 0 R/GS1 376 0 R>>/Font<</T1_0 392 0 R/T1_1 159 0 R/T1_2 397 0 R/T1_3 172 0 R/T1_4 374 0 R/T1_5 387 0 R>>/ProcSet[/PDF/Text]/XObject<</Fm0 405 0 R>>>>/Rotate 0/Type/Page>>
endobj
103 0 obj
<</Contents 499 0 R/CropBox[0 0 612 791]/MediaBox[0 0 612 792]/Parent 362 0 R/Resources<</ColorSpace<</CS0 375 0 R>>/ExtGState<</GS0 500 0 R/GS1 376 0 R>>/Font<</T1_0 392 0 R/T1_1 159 0 R/T1_2 397 0 R/T1_3 172 0 R/T1_4 374 0 R/T1_5 387 0 R/T1_6 164 0 R>>/ProcSet[/PDF/Text]/XObject<</Fm0 405 0 R>>>>/Rotate 0/Type/Page>>
endobj
499 0 obj
<</Filter/FlateDecode/Length 2223>>stream
+HWYo~ׯCj<6 $h͵bL$CR^p3sfF(Vg9˜lvCV}fx?ՠZu˅]Tw(9% -g_h.i4\x}XMf6rc/3c9Gf<"JX:~*wm]f_LH"QfŜ^,k00\{fi8ŝc\*딼7(zƊ$<s"2'aYa)܉zB& +媟^$/^q{~>#)uRe\W;Gcj,/N͙3N/9#I;4H؉Ep*Z64g :}Tb9lCd@N=߯T͙+pj} +Ю=uU~[+4@h2I@wc +Ad8hP̠'܀IP$=ë}/B4)IC~˔H8 ++gE)sWxW+eZ'j +0!e`j_
{vؤm0#YXUT@m?'SXڽ<VjKt3&-h_pÂ64jNoޔ)6$`|5A_!zncTAgNJXd68gtp>93R3"?
{Bv!l @V&&ު:
w-lCxOl]ctǒFП!SA.H!CBv:1hg0l+R)1!{'u,ĩP1qzxQĹhګUD38~< Nt\կ{'k CRj>e.R6!j;~bs5<dmiC˦Sv+[ҩB]IVG!aouY]8P+uij4ώ't<H4<ItUuRu
W{px֮F1O<<eeX4S'2{+1[nvk%ג~U88-ߴwzAɤy>E}Cjmt~SGI6~p+}d+hI(l +
)2, +3^f~i˭9Dܲ
iBfpXjGN!qxcڙcK$G8_b?tƲ?cd{k-aT>fV&Yϣ:.TQɅ}Aot&("2Ww*:<@:Y H(8L2ƭJC\m_k\;D9&+O|S6|mMrk3<2r,_)ĶZEMbvk,ki2~fl6X#`K$iꭱ'iF/X_,akT^paP7&AB0+'SP3&Fex=kƏ)=.T߷0mgj0}X' +endstream
endobj
500 0 obj
<</CA 1.0/Type/ExtGState/ca 1.0>>
endobj
501 0 obj
<</Filter/FlateDecode/Length 2405>>stream
+HWn8}W!"fx +BrB]X- EaD81(T(jjpF*ܽ<~UEiR:5AǞ~ɉxp0}UT3[Wnhw?rU*s>pi$"p{:A W^XKD@َr3"]s=ʺ @6Oq:8_Kpu1c2&`OS{_=lM1ee%P)FƳ0s/,fa>rt-ò^=L1$9eSki2z>ڀy p~\483lZXپJ,M"XB-%Jb("vy\nTX&mjQh=!3Vt5eQ$*xJC/G@A
/An˪Rd|j4RClTq/x<l6մg}Yi&o3UI<wZ5:",$>̽0 +W&1aTv?H㉀,GHX>f +FߌL69bԬŐa@#<ΞΊAq:9ngC\ .^$[[JIr@1
iBgБ#!ۜ#W]P#EbJC~;5pv& +q:
x߇kBÿbѧ>5Ya䔌pV~a<Th%SƁ%{ĢY' q8)¶sVja7jGÒ +. +)2e{=m+C?x>}9,1~д52Sp-ߧȳ宁38n#:76uN%P6Ѕ;FrO&6`,l_j7
ɐ=r9ISQ8 +-]vA*1՞ߨaDznv;*&` +endstream
endobj
502 0 obj
<</CA 1.0/Type/ExtGState/ca 1.0>>
endobj
503 0 obj
<</Filter/FlateDecode/Length 1320>>stream
+HWn6Oh~JThtbb-:fɩ4 .IQi]QHHÛ+_^/;N?j7MY]W\^~#WU07m0}[r~7j?v[!I~MFRp&`Ỵ7y[&1<VU^׀qıvfV? +1AYyD$4A<m+k</Rr:m,"BXX%|#?v- +fZRAMvӽ3sBr38[,4R@.AlmmJ=ޙM5f(J5Z!\8}~8)&*c#ínU3)NP=("v@ۃS~_B(k5(\>QVVZC8te0z=r1U2P7ˏT̞C6MA[zҡ"g\;0x/Xy`1Z</3j=ԑ>~wxQ*w TkN-p$Fa̱$!$b<,ϫ$/nk Z`ճT,
LLX4*?BВHpj#Řy.kRӽ^|_$Wr}̤>#SF85}:?OQlJ( ,FIf?gA3 +X0]jCifD @خ'd$~Ғo$#6]wwvN5fc~_-Uu3\m+e̓""z([VjXy*zunTNsԘN7ÁvS˛AM>C$o)ΣƽQYaą)PN_qSŷ +*:O`v4yַALᥠ\bt&dz6ELGQ?OU |sF4TXbm6ƒ=0Xw5ܺA~4BO <px%p3Av6"mm#QZugyBClØ%MG<[bS8K&_P"P$?8c =p!?jhm=s?+ԂRV1!1TCY7.C9<9bX?&t=Cȹ"ƕ0 L)gL lUa +endstream
endobj
504 0 obj
<</CA 1.0/Type/ExtGState/ca 1.0>>
endobj
505 0 obj
<</Filter/FlateDecode/Length 1645>>stream
+HWYoF~ׯK*V{* +͘B3Ǐ`Y.it:guY&UN?/08`%td +ș3Ĉ'7VZhaN>HOEkNy%Z=\.H&6C:s"k3y+<#=nh$Bǧ!TZI.#E0,&`(ʓA8>'-f{yЈ"ĩ3F'@UFtp?c`Ѓ}] +]?
p'dR]*|QyII.nLӍc-! p1 +!ew#
+7ꋩRV $2Iz +GW9Q=!^ӚnbO(CN w48aMyI&Xebo']NOtV"Df籛tv(Sp^ +V=m,$k_ܜ,ơol]Hjp.Q:u͘p9^rBJq|sx ?nct~6S q(3`,oErvM!̄acFց{x= +>4L4^jϔS>dgy|}~/_I nv¾R;gSAFSi8,lkzE!|OWo+W!U +90YKנ +@#`IĆ8ͳS>v! +:7i!
P=C,0d&2`B
Z$sSaS;Ş=ʽhdVqb8vW؛ h@rRd]#eܛP#\nvf;Օ,˥-@B1 +!s';(fj4xJ\FY}o2>qBuUR;4ݽb!<^ +endstream
endobj
506 0 obj
<</CA 1.0/Type/ExtGState/ca 1.0>>
endobj
507 0 obj
<</Filter/FlateDecode/Length 1621>>stream
+HWYoF~ׯC +Pރ8@E +HAkJZl\*kwD:FP99xcחꃗ/Om+]ŻOBo۲}W 0F f '[99Y3mr+\x/!Q:YfB"$F (Obsy,Er57MUz-LXbY'!I<!Fs +
τ\uel|%\)"`lS'>^Hwbo*nZťF4Q6^hyIĪbvJuOsuHY#,iWpic@QAt>7wXh)%""Aq*Fi_;WK
oA)dZ'kyZˀ]){řКohɡo1'ʦKGC:w칸#Z)xvv%r5wi%((kFI"ngP DBbX/oNjߗvilRCZ6ջ6(zSLmDVz>*6l/gs0H'Pr'9*46Ha;Tira1pz=Y1b +c2-qf35 ~,R>1iehqjܨK56rWY>l9,~C~u4v87m]Z$e"$VSh_p>=}7]<'(V,-;KQ<bF{ wZ7Ŵ(f~o@q?+^}
ZFȩşy;eZG7j+Ѥ3XA7l<3w8 +`bO(vjoyY5|v6܃q +<v5l8$dn:<OvJBG +ʥu+S@)+HKr^kN`f/Wub9>V3lic!s@AYWnҩir[W%ܰ!?h{[{(BPV՚l̬~ m{uw)e}'\{UkǁSթ%-
Y? +endstream
endobj
508 0 obj
<</CA 1.0/Type/ExtGState/ca 1.0>>
endobj
509 0 obj
<</Filter/FlateDecode/Length 1643>>stream
+HnHiڮJۤ]jn qklj&CWgss?_:Mf;7Բ\'o<*͓:-rwW +xA5Rߑ`o]71#A(>
.IQ-MDQ脑iz$<bkNײ2qo|TbhpLIouv8 +M*d#";QD:GfiMs0yɟ/q6DaPXKV'Hv +Tt_w͏~lS߉>uD7;ֵiQ\mg;8q+
Uu i` +endstream
endobj
510 0 obj
<</CA 1.0/Type/ExtGState/ca 1.0>>
endobj
511 0 obj
<</Filter/FlateDecode/Length 2023>>stream
+HWm6_2`$m +$C^5PvpmŒ\I&Moo!E3<lbfOϫAN5efs=s++*W
"ӈ,h(ص(xG^6^#ŏ0q|;P*QheJ#"c$H`^-)DPe^m?F\1(b<h +)08~Lga$QB( +XDm/VUg
}<_͖mٝUr`e|xd;亅#rB(%'BpeDP!,H"KPS}BA2!ҌYFɉO5lhW(QEopM-V$뙲6˱bip2&L:.N>[(Fj
)cː 2/XSl,7@Ís'TpKxĭʛ}z,_%T0=Vto??CzV}`ysRmRElfoԵ +xB0׆8- ì/@NLXIrH=@ +r!օ uYMsyNE#-#%QԿkUFCF=Cc 6>#=$wlzd_%Z+ی6[dH"H_GU.y]ӭ&cK +32s +e!Y=AdfLU\Ey[qJ9)/Zz> +endstream
endobj
512 0 obj
<</CA 1.0/Type/ExtGState/ca 1.0>>
endobj
513 0 obj
<</Filter/FlateDecode/Length 1308>>stream
+HWYoF~C\u4@!)(VfC5;R(nc fe\EmN7f%Q2g{U:)rWgmEl?baȳ5yW5ya
b<VDM$&E"$Za'QqfqfMWJG.y]dȗWqı/-vc.Cxjb,D~R!d4r}K9rլpEl)/g߮,e~K29>F[6ru]4i?.ϭ]DHՑ1Ei +㇞jZL̠ͧa|Bo5qKe#˺=-+dv?ߣ?
hVi7T\Ov6dT|22XΌ-g\;^Gy̻7cx'O*x}S:Ji?V\F*FVi{:kF sb:ZJLt¼`dF)˻ +^b8 +endstream
endobj
514 0 obj
<</CA 1.0/Type/ExtGState/ca 1.0>>
endobj
515 0 obj
<</Filter/FlateDecode/Length 2415>>stream
+HWY~㬰s@1Y@vdlr'"gI=\!˪>뛿m˛Ux_Vׇ8Y|Wy[T^~>}% +E35_f7?~]3@篫/7?WٛGn_fr;c0r$URFh*6z7j!4W\m&$"Ư-xF )6uܤZHIҋ+>_0A QѶ#?:|*h$di,,_>jy",ܲ#<pm;] +n~5zmcdng~;][eSQul`%j*7ƛ, &*\fֺ:hЭxjp7:BxKb\o!Fpf]MQügIc6_p،Ի;?G:w[1#$U{n{X?mG <k&H&SCLs0m'͇`$"L_F.:]pH8~DI[\ +£^.OCaY٥ݕh6|lQ}JcUa d9^ؔ`^iFh&dV*ʟWf(ds`u[zy ҘѲ_pc
9l' +ciHVaS[V0t<"/EFy=kd4N0vvɩal*;Y{MNz Tz7%ï&AuꝥDFjuH& +mbdL1)veU'&γDviV.bukK +tv*TS]g΅},/_"q%<Gݲ/|yD +xl +.2i?Q*2a +trS<xU1_J)2&2LgV%ۋ^ݕ7_y Wj(ISY`|"Ug࠭11JYm,+z8```18ٶM\n5`ƏAh +P0*wUj >JGDy5G,4ńP8 +endstream
endobj
516 0 obj
<</CA 1.0/Type/ExtGState/ca 1.0>>
endobj
517 0 obj
<</Filter/FlateDecode/Length 2165>>stream
+HWYs~>@)a4'T,ySNe>[)A@k{zNd1ΖĞ\U^WE缗&o?WS=!+/:7#/8&W?lppL~NM"Q0ՄDHJB+Q*8fpʃf2]Y\Dlz]2qı2f\L=C$!FZ]Dƈj-TWcM0qj4
L
_ s{>5f|/#|?>D>>0*d &mY֊8Yfn;0;qدHEsJײڿ8 +Zf9S6k?^4u`* E07fGGV"lW;F N,Fvlfp-՟ +Af +lZ X<6qeW_0pQB)x#ap&#B̤UvuYȼiγEab*Ɓv'{'uZ~UMQ[~_e;%)"Jbq7' om"#1# $MU_G&r15(1{YCȲr&eM> NhuWWnlRڌtSDZV?Vc{.G鍢,6_V +l/fഀ#;||NUט8`"(RZ.7;i_CUtHtE
o>7;Ucfm֨;bwUS+*=!җu` +Gp +gHg9-[ƀ MT@Awn{:R.]Xy `ԧO^ʇsT]I,7;vYAr +0 +endstream
endobj
518 0 obj
<</CA 1.0/Type/ExtGState/ca 1.0>>
endobj
75 0 obj
<</Border[0 0 0]/C[1 0 0]/Dest(section*.6)/H/I/Rect[180.299 435.553 295.705 447.737]/Subtype/Link/Type/Annot>>
endobj
76 0 obj
<</Border[0 0 0]/C[1 0 0]/Dest(section*.6)/H/I/Rect[345.938 437.699 354.698 447.737]/Subtype/Link/Type/Annot>>
endobj
370 0 obj
<</AA<</O<</JS(if\(typeof exerquizLoaded == "undefined"\)\r\n \( app.viewerVersion > 8 \) ? aebTrustedFunctions\( this, aebImportAnFDF, "exerquiz.fdf"\) : this.importAnFDF\("exerquiz.fdf"\);\r\nif\(typeof dljslib == "undefined"\)\r\n \( app.viewerVersion > 8 \) ? aebTru\
stedFunctions\( this, aebImportAnFDF, "dljslib.fdf"\) : this.importAnFDF\("dljslib.fdf"\);\r\nif\(typeof _execXMP == "undefined"\)\r\n \( app.viewerVersion > 8 \) ? aebTrustedFunctions\( this, aebImportAnFDF, "execXMP.fdf"\) : this.importAnFDF\("execXMP.f\
df"\);\r\nif\(typeof partialExpand == "undefined"\)\r\n \( app.viewerVersion > 8 \) ? aebTrustedFunctions\( this, aebImportAnFDF, "partial.fdf"\) : this.importAnFDF\("partial.fdf"\);\r\nif\(typeof _docassembly == "undefined"\)\r\n \( app.viewerVersion > 8\
\) ? aebTrustedFunctions\( this, aebImportAnFDF, "docassembly.fdf"\) : this.importAnFDF\("docassembly.fdf"\);\r\n)/S/JavaScript>>>>/Annots[371 0 R 372 0 R]/Contents 533 0 R/CropBox[0 0 612 791]/MediaBox[0 0 612 792]/Parent 361 0 R/Resources<</ColorSpace<</CS0 375 0 R>>/ExtGState<</GS0 534 0 R/GS1 376 0 R>>/Font<</T1_0 374 0 R/T1_1 382 0 R/T1_2 387 0 R/T1_3 392 0 R/T1_4 397 0 R>>/ProcSet[/PDF/Text]/XObject<</Fm0 405 0 R>>>>/Rotate 0/Type/Page>>
endobj
1 0 obj
<</Annots[2 0 R 3 0 R 4 0 R 5 0 R 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R 14 0 R 15 0 R 16 0 R 17 0 R 18 0 R 19 0 R 20 0 R 21 0 R 22 0 R 23 0 R 24 0 R 25 0 R]/Contents 531 0 R/CropBox[0 0 612 791]/MediaBox[0 0 612 792]/Parent 361 0 R/Resources<</ColorSpace<</CS0 375 0 R>>/ExtGState<</GS0 532 0 R/GS1 376 0 R>>/Font<</T1_0 374 0 R/T1_1 392 0 R/T1_2 397 0 R/T1_3 159 0 R/T1_4 382 0 R/T1_5 164 0 R>>/ProcSet[/PDF/Text]/XObject<</Fm0 405 0 R>>>>/Rotate 0/Type/Page>>
endobj
56 0 obj
<</Contents 529 0 R/CropBox[0 0 612 791]/MediaBox[0 0 612 792]/Parent 361 0 R/Resources<</ColorSpace<</CS0 375 0 R>>/ExtGState<</GS0 530 0 R/GS1 376 0 R>>/Font<</T1_0 392 0 R/T1_1 374 0 R/T1_2 397 0 R/T1_3 164 0 R/T1_4 159 0 R/T1_5 192 0 R/T1_6 188 0 R/T1_7 172 0 R>>/ProcSet[/PDF/Text]/XObject<</Fm0 405 0 R>>>>/Rotate 0/Type/Page>>
endobj
59 0 obj
<</Contents 527 0 R/CropBox[0 0 612 791]/MediaBox[0 0 612 792]/Parent 361 0 R/Resources<</ColorSpace<</CS0 375 0 R>>/ExtGState<</GS0 528 0 R/GS1 376 0 R>>/Font<</T1_0 392 0 R/T1_1 374 0 R/T1_2 387 0 R/T1_3 397 0 R/T1_4 159 0 R/T1_5 192 0 R/T1_6 193 0 R/T1_7 164 0 R/T1_8 172 0 R>>/ProcSet[/PDF/Text]/XObject<</Fm0 405 0 R>>>>/Rotate 0/Type/Page>>
endobj
62 0 obj
<</Contents 525 0 R/CropBox[0 0 612 791]/MediaBox[0 0 612 792]/Parent 361 0 R/Resources<</ColorSpace<</CS0 375 0 R>>/ExtGState<</GS0 526 0 R/GS1 376 0 R>>/Font<</T1_0 392 0 R/T1_1 397 0 R/T1_2 159 0 R/T1_3 374 0 R/T1_4 164 0 R/T1_5 172 0 R/T1_6 192 0 R>>/ProcSet[/PDF/Text]/XObject<</Fm0 405 0 R>>>>/Rotate 0/Type/Page>>
endobj
65 0 obj
<</Contents 523 0 R/CropBox[0 0 612 791]/MediaBox[0 0 612 792]/Parent 361 0 R/Resources<</ColorSpace<</CS0 375 0 R>>/ExtGState<</GS0 524 0 R/GS1 376 0 R>>/Font<</T1_0 392 0 R/T1_1 397 0 R/T1_2 159 0 R/T1_3 192 0 R/T1_4 374 0 R/T1_5 387 0 R/T1_6 193 0 R/T1_7 164 0 R>>/ProcSet[/PDF/Text]/XObject<</Fm0 405 0 R>>>>/Rotate 0/Type/Page>>
endobj
68 0 obj
<</Contents 521 0 R/CropBox[0 0 612 791]/MediaBox[0 0 612 792]/Parent 361 0 R/Resources<</ExtGState<</GS0 522 0 R/GS1 376 0 R>>/Font<</T1_0 392 0 R/T1_1 397 0 R/T1_2 159 0 R/T1_3 172 0 R/T1_4 192 0 R/T1_5 164 0 R>>/ProcSet[/PDF/Text]/XObject<</Fm0 405 0 R>>>>/Rotate 0/Type/Page>>
endobj
71 0 obj
<</Contents 519 0 R/CropBox[0 0 612 791]/MediaBox[0 0 612 792]/Parent 361 0 R/Resources<</ExtGState<</GS0 520 0 R/GS1 376 0 R>>/Font<</T1_0 392 0 R/T1_1 159 0 R/T1_2 192 0 R/T1_3 397 0 R/T1_4 172 0 R/T1_5 164 0 R/T1_6 374 0 R>>/ProcSet[/PDF/Text]/XObject<</Fm0 405 0 R>>>>/Rotate 0/Type/Page>>
endobj
519 0 obj
<</Filter/FlateDecode/Length 1864>>stream
+HW[o6~"yӭh;m6t^<hSM'ZeɕACRR$;s"@"/Ue3}dnhnj:{6ڤlӋH,Ϟ=b:2aS +OI@E@`LfӋz2uC/ɛٟp|r6ٜc17-f8b&Cc9o&i-O|AlbU|>H&'3|D +Unjs{Ԏgd1`F~;%_ qH2YŎ"g|@ғnCڍd' o)R*bGc$᱗ӑ!CƼyTPuSev.ͳTGnժT뛢IC:?zq4wcɑw=u2J*Z.u@4lD#iӨͶĥC5z}34qD?82mضO2
復)Ǻ;4AއD F$tnk+Gj5u`n5v6Y{̾1Ib~LXEhboLM@Aadva$3 1E|Fb13o\cG:`z/&CV}@ګ@~1.ҭ>CB`uRӶL!t#.*QAԁ%:]Vl/-AfuDĦ)B|pͷ8bKHz0G:Jަ'x?]dF˲p*LR{n
21Hmc$\GK̠|fFz\9F&K>swp pq]? Hb{6w[OC%X23l#~ke
i-Y-5k|U]3X +U&+p2%j,nK1Զ6|:陼S*L&nz3VSabwsYumT.J?yS>s@ѱE'ՑU`K]zF~w'H'Ual}@0cS}z^rZ;T.4+_! +I:Wk_aAAsqu`7~i/A˘C`c:_NÓ'XS?ϬJHΚŕθ0tоFyF{k +߲\c9¼SoIkᇔí\9ec?ng\`F& +I + S(f"O{s܅:Dہh2۹Dx8|-0X=>pN;?ĈQ17'z88#>4nh" LzF{wl!6pL{i6vq{}m_ +endstream
endobj
520 0 obj
<</CA 1.0/Type/ExtGState/ca 1.0>>
endobj
521 0 obj
<</Filter/FlateDecode/Length 2187>>stream
+HWmoF_to|\ܵEhU(i-CRv|)R})Xٙgf]l_X?nk5_~:ՔY|dʺ/_z|qF!EHde->e8]6Zެ#ŏ0ZpjF)4aF)
I"G)̄e*kł".ˬڵ~qI0,H/V'JVu,%"jkpuY5jwܪvV a$~uZUu?C(ai:_rXWq,2R;#Q歓ʺݩ.7+'u$+uwM[mYW;i* +b>J.EQYݨ1"FljmݯέVXnvKLͺіQSJqe$a_FAdτ;HH!â$˹!aau?=RnsI<ZWlc6-Lב+#7h\)C6uQ'd)N#'(}c9!HF8(BB9wV +z'^|͉oD +([6_g.DuR@ĀB:"'r`:J*I8bI$ߒ^ gDf!KS~ǽ8M.=g#LGM1" +D'"GaH'-2xȧݸJ",Ӊ
JLcUv<)JܿuOP&gFLX486sq7cR*/6NJ< 0f"葉Uה9{1H~bABݿG8Ex{yV]reh.TyVׂߪz[vW!OʫmJ`2!)P#
-E#+BPuh5LShFAEӿx/Ix8-`23zr<<FuGN]ci3-,U(J8Rw)sd!H))xCoUtA7U=v핆s{ u曼Ȼ\Y}yŁ\笧BH xf!l8x؍҅Cף.]tv $jDQ.7YGFvWr,F +M:$t{ȷ#gձq(koqMA)i?4J!Ή (-ZKpQxR"eÞF*k7L
K}{};BԈrE8&n,}OjebXsWs1
6G.`*qTn5H10'xP86B'*FH$t a(F7 +b0aD2,IFPܒ3cZPO0:;)D\_T p>D(֫8o9a[!&f(ےP$nsA7-N[V4(gm~??@ͰaN<i0ӟSWP|646 1cݵZ9܍j:Gu8)3xO +endstream
endobj
522 0 obj
<</CA 1.0/Type/ExtGState/ca 1.0>>
endobj
523 0 obj
<</Filter/FlateDecode/Length 2235>>stream
+HWm_tq\$@}g.ɩȇ;#XQ;&)ϪWR.UZf2;3˿}E|{,lw5X[P֢/:ۗ7oQY8(voq-w8i?,^}^V#Qa\vA"$@+Qs$9.|)x1f{n9_mab>#QX1Ho~w+YcLs3JQθQ.,;:Q҉Y7;e٦uSA-lKG7%YlebUы(9A!Q;#LD
"hT8%
F_]?}LZ+$Ip5:p{J7^ˢݾi{Q~}j5Ee^a?k9Txˋ";<ոYj.ٕ_\Ry` )%H:ӄ9+j(60bEDߗÙ + +<JtY#~Pk܍߆QJtϨ}i:l4IΝ<:5F:4m=Qﴠ^MG#[*t}G<;ŚA_KDC6B0 +8Q
TEn9+9o0tS3Z|NB
{g[=kޡN +az' '+jp%Y+eq6$8?+J95d`nϑ<D~mrb +p +EA58QW"иNOS6`pDU_-5 s| +kK"`ewEFgXV_hZo8;1J|jMiΈ]]4b%@sZ,z$~4xڑ-(<=4YBQ| 0$d ]ѯtmwOdI?Jgf2/qE^YPFQxͽOcҌlfxCPPo`.ݹN.<
72IN+7ȷ4*i) +2|{jƝ[z}ߪqsESWi'ScuN`TU5-aH:r#9xHWi-[2!I)̗9rxQ¿&jz^)EJ?,w3Fh~` +endstream
endobj
524 0 obj
<</CA 1.0/Type/ExtGState/ca 1.0>>
endobj
525 0 obj
<</Filter/FlateDecode/Length 1808>>stream
+HWYoF~ׯC\pRvZD +JZLDR!8ٓ); +=ɖqNOǗYsm*Ox"7^Y6YY8ϟ];O#`=<u=c.MF/&#a5rD"$AMQ L=Kl~1eŢ>z?mq'M><F"c@Oܬp'3nz31ts6-m[^EgвB!JiR!OW_:u<t]qa Ń(!l'zH)}'VYO<^'[ xXY_"o~M>q{ehi}ݧ=wl!\eH#?G&:Eܬ~rёYJ
1W!dv9bލغB
)s+Ug+w__}=GYT +Bߘ +Ee(ľ/,L]p6ѧ,hފg^ JHmSDaՍ-d5dJɐ mŗ4_x}25X A= bIbv{`{=?@%}>H `iEE FԢRa#i0%Vywo5Tce_( +\7 =B5CbbnYDY&PG,!ŐFKZ4t(]$F +-}sL{dq(P@) w4>@+E'2ac*[Σqm6Į13-ܾֆC)p}ːK="WY6^{E)̻uLR_٤dl83uG"%3PX*D8ޓԔI4*#8BcSĘD^vy V}!xDhᅘ7ec0p!ֈknTaF6:ynEX'T5l.!{TF<P|&3t kM2%*~Ys\tk2yztw&nSTT@I{)뒈[>lHQ@`N!` + JCdY}%k@*GN|VYZ/iT(_ĂjZ@0g_:ju.3tHЖ*T!8F +]ڽP@$ѿ@@4А`90; +endstream
endobj
526 0 obj
<</CA 1.0/Type/ExtGState/ca 1.0>>
endobj
527 0 obj
<</Filter/FlateDecode/Length 2263>>stream
+HWo6>ʁ&)uhpE{H- +[ZE+66~Czۦ+n^oý.~:w
mQe]QW7z}-~_0]R i߮w..QuiGxZYL}bW7c +
%I(/Ja&[-e@YvYm~[}BBi +VZ\\yQ@~86tO_1I@v $.Nh;8ew$f[2TmWwRk^%h(:yz˵kJZk5(l5Ce6+Oӻ!Hae/D*TՇ")At`E!D'i覰~;x "DdLO% \ј{J>6Bהr{|w`oSVN˧SÛOԦ ӎDM#-0M!؉_w1dģmйlY;۬XBcd-ۼ)UOƋR9aNW\5lF<I+YѴһz[/N"q͑-6$xɥ + +ܗ]IbnAeߘ*!NJaMݗYN\6?HuvuSq3)&Qk}۹]
J4bA]j"(qERjif[&%Yuzᦱ( OoLHnX`PAmJx<8(- +mpzC}VrNboU#.M^zOm*-YnYmrzL$
3˛AL'U}!!X,Xn1Ђl2,G~9' +"EYZlvMiQE$q`U!e:LٽxMM +4&<JŬhyyF΄R1ahZuzoegI4Lᠢ;(\%=݀TUU-~_>3z ºIaJ?xWU Ʋ@>2U3őTb&({p8r' +jZѦgDǷR0kwF8D<TuE{3)fѬ'6e=\h8a=AfCh/^25@'89j8l-y@QYQ=icel\ H +DHj` +r"@,iFWPlA杫h$lB
>B!8ѧ[?E$ +#',}cs': ?cLD@cHuT2TsĕN7ſ +
+endstream
endobj
528 0 obj
<</CA 1.0/Type/ExtGState/ca 1.0>>
endobj
529 0 obj
<</Filter/FlateDecode/Length 2155>>stream
+HWY~ׯ#'YaGy=SIىV)ϤR!L&>!̮gj
}n(T1,_zyQ
UiyƅծlPo^}\Ș8ˢ^\xx]xx^[|zMiίJ3f:Z1s!I+q&zɫϋ71a<<?I-}Ѡ\rBLZM L${ rE߫i`<\Ŕ$/IgԊ~s:$ +) SmS=谡E+^,H DԯhP[9Yy[th8GJQ1^oΕӴQwiUV,$ց1^Tw_V,Dwٶcѝvѝڰޅhp).UŁ4Nכ)zk['҉n*{u4!idzFe,Rs&^m<
2LxTj_]g<n[.NBr+Gh#S aYn%#-&BeXOm}(+w/HwaF2ֳu&RȊ>*p{ 'J#*N` +TUZU幍k0L<i$1~8QM{Z0MT<*4^ +3 %<q +n?5.Fb=_P1=
L*˦JUy_/R_3 JL:p^ SDTwЗLC0wOʲUu<m
˽u%Xx@Ł$.?F՚` +j6a,lGVuw{]q_}}ӂ< } Moa +&xȄy+"RQ +Aw(/ +61"!ka-B< 2zEs/'@OK'B#i^
_*(]Afɫ*3?Agщja`GS<shN+lBUű(s7#bɝj$ݴ` +;WIlԥӊܽEYʳv=P{Od~4$ +endstream
endobj
530 0 obj
<</CA 1.0/Type/ExtGState/ca 1.0>>
endobj
531 0 obj
<</Filter/FlateDecode/Length 1069>>stream
+HWmo6_0<Rš(Iѡ[^,`ÜaPljɮ,ck}%[ +xK +`y.b2-*<Od<ɢ"Yf۫5q>;@kQɄdZIޏmp<87 *td&r** d=ɜ@@2Ùo_gʼn/= +\p
ErV}^/"Ίug9 +endstream
endobj
532 0 obj
<</CA 1.0/Type/ExtGState/ca 1.0>>
endobj
2 0 obj
<</Border[0 0 0]/C[1 0 0]/Dest(section.1)/H/I/Rect[498.927 627.559 506.854 641.059]/Subtype/Link/Type/Annot>>
endobj
3 0 obj
<</Border[0 0 0]/C[1 0 0]/Dest(section.2)/H/I/Rect[498.927 601.995 506.854 615.495]/Subtype/Link/Type/Annot>>
endobj
4 0 obj
<</Border[0 0 0]/C[1 0 0]/Dest(subsection.2.1)/H/I/Rect[499.094 587.549 506.854 601.049]/Subtype/Link/Type/Annot>>
endobj
5 0 obj
<</Border[0 0 0]/C[1 0 0]/Dest(subsection.2.2)/H/I/Rect[499.094 573.103 506.854 586.603]/Subtype/Link/Type/Annot>>
endobj
6 0 obj
<</Border[0 0 0]/C[1 0 0]/Dest(section.3)/H/I/Rect[498.927 547.539 506.854 561.039]/Subtype/Link/Type/Annot>>
endobj
7 0 obj
<</Border[0 0 0]/C[1 0 0]/Dest(section.4)/H/I/Rect[498.927 521.975 506.854 535.475]/Subtype/Link/Type/Annot>>
endobj
8 0 obj
<</Border[0 0 0]/C[1 0 0]/Dest(section.5)/H/I/Rect[498.927 496.411 506.854 509.911]/Subtype/Link/Type/Annot>>
endobj
9 0 obj
<</Border[0 0 0]/C[1 0 0]/Dest(subsection.5.1)/H/I/Rect[499.094 481.965 506.854 495.465]/Subtype/Link/Type/Annot>>
endobj
10 0 obj
<</Border[0 0 0]/C[1 0 0]/Dest(subsection.5.2)/H/I/Rect[499.094 467.52 506.854 481.019]/Subtype/Link/Type/Annot>>
endobj
11 0 obj
<</Border[0 0 0]/C[1 0 0]/Dest(subsection.5.3)/H/I/Rect[492.334 453.074 506.854 466.574]/Subtype/Link/Type/Annot>>
endobj
12 0 obj
<</Border[0 0 0]/C[1 0 0]/Dest(subsection.5.4)/H/I/Rect[492.334 438.628 506.854 452.128]/Subtype/Link/Type/Annot>>
endobj
13 0 obj
<</Border[0 0 0]/C[1 0 0]/Dest(subsection.5.5)/H/I/Rect[492.334 424.182 506.854 437.682]/Subtype/Link/Type/Annot>>
endobj
14 0 obj
<</Border[0 0 0]/C[1 0 0]/Dest(subsection.5.6)/H/I/Rect[492.334 409.736 506.854 423.236]/Subtype/Link/Type/Annot>>
endobj
15 0 obj
<</Border[0 0 0]/C[1 0 0]/Dest(subsection.5.7)/H/I/Rect[492.334 395.29 506.854 408.79]/Subtype/Link/Type/Annot>>
endobj
16 0 obj
<</Border[0 0 0]/C[1 0 0]/Dest(subsection.5.8)/H/I/Rect[492.334 380.845 506.853 394.344]/Subtype/Link/Type/Annot>>
endobj
17 0 obj
<</Border[0 0 0]/C[1 0 0]/Dest(subsubsection.5.8.1)/H/I/Rect[492.334 366.398 506.854 379.898]/Subtype/Link/Type/Annot>>
endobj
18 0 obj
<</Border[0 0 0]/C[1 0 0]/Dest(subsubsection.5.8.2)/H/I/Rect[492.333 351.953 506.853 365.453]/Subtype/Link/Type/Annot>>
endobj
19 0 obj
<</Border[0 0 0]/C[1 0 0]/Dest(subsubsection.5.8.3)/H/I/Rect[492.334 337.507 506.854 351.007]/Subtype/Link/Type/Annot>>
endobj
20 0 obj
<</Border[0 0 0]/C[1 0 0]/Dest(subsection.5.9)/H/I/Rect[492.334 323.061 506.853 336.561]/Subtype/Link/Type/Annot>>
endobj
21 0 obj
<</Border[0 0 0]/C[1 0 0]/Dest(section.6)/H/I/Rect[492.001 297.497 506.854 310.997]/Subtype/Link/Type/Annot>>
endobj
22 0 obj
<</Border[0 0 0]/C[1 0 0]/Dest(section.7)/H/I/Rect[492.001 271.933 506.854 285.433]/Subtype/Link/Type/Annot>>
endobj
23 0 obj
<</Border[0 0 0]/C[1 0 0]/Dest(subsection.7.1)/H/I/Rect[492.334 257.487 506.854 270.987]/Subtype/Link/Type/Annot>>
endobj
24 0 obj
<</Border[0 0 0]/C[1 0 0]/Dest(subsection.7.2)/H/I/Rect[492.334 243.041 506.853 256.541]/Subtype/Link/Type/Annot>>
endobj
25 0 obj
<</Border[0 0 0]/C[1 0 0]/Dest(section*.23)/H/I/Rect[492.001 217.477 506.854 230.977]/Subtype/Link/Type/Annot>>
endobj
533 0 obj
<</Filter/FlateDecode/Length 636>>stream
+HlTko0_DjTU#6iU֢mR6M.q k8K_?6*$cs=ڗT^Ƿ;[+FF\Vu+Mݵ'@ q89,_bX l0W0b gNC(2;4/[0+8S/H
99"iJ)"F.NKM(ɯ3(ͅ3HE%f(I|]6`Hx>sJ0ʰH Ou,+H*V) <'e[v\I +endstream
endobj
534 0 obj
<</CA 1.0/Type/ExtGState/ca 1.0>>
endobj
371 0 obj
<</A<</S/URI/URI(mailto:dpstory@acrotex.net)>>/Border[0 0 0]/C[0 1 1]/H/I/Rect[192.485 130.706 289.508 141.83]/Subtype/Link/Type/Annot>>
endobj
372 0 obj
<</A<</S/URI/URI(www.acrotex.net)>>/Border[0 0 0]/C[0 1 1]/H/I/Rect[417.538 132.533 505.002 140.524]/Subtype/Link/Type/Annot>>
endobj
359 0 obj
<</S/D>>
endobj
200 0 obj
<</Dest(toc.1)/Next 214 0 R/Parent 199 0 R/Title(Table of Contents)>>
endobj
201 0 obj
<</Dest(section*.23)/Parent 199 0 R/Prev 202 0 R/Title(Solutions to Quizzes)>>
endobj
202 0 obj
<</Count 2/Dest(section.7)/First 203 0 R/Last 204 0 R/Next 201 0 R/Parent 199 0 R/Prev 205 0 R/Title(7 rangen and exerquiz)>>
endobj
203 0 obj
<</Dest(subsection.7.1)/Next 204 0 R/Parent 202 0 R/Title(7.1 Creating Quizzes using rangen)>>
endobj
204 0 obj
<</Dest(subsection.7.2)/Parent 202 0 R/Prev 203 0 R/Title(7.2 Creating Solutions to Random Quizzes)>>
endobj
205 0 obj
<</Dest(section.6)/Next 202 0 R/Parent 199 0 R/Prev 206 0 R/Title(6 rangen and fp)>>
endobj
206 0 obj
<</Count 12/Dest(section.5)/First 207 0 R/Last 208 0 R/Next 205 0 R/Parent 199 0 R/Prev 209 0 R/Title(5 Basic Commands)>>
endobj
207 0 obj
<</Dest(subsection.5.1)/Next 223 0 R/Parent 206 0 R/Title(5.1 \\RandomZ)>>
endobj
208 0 obj
<</Dest(subsection.5.9)/Parent 206 0 R/Prev 215 0 R/Title(5.9 \\defineZ, \\defineQ, and \\defineR)>>
endobj
209 0 obj
<</Dest(section.4)/Next 206 0 R/Parent 199 0 R/Prev 210 0 R/Title(4 Package Options)>>
endobj
210 0 obj
<</Dest(section.3)/Next 209 0 R/Parent 199 0 R/Prev 211 0 R/Title(3 Installation)>>
endobj
211 0 obj
<</Count 2/Dest(section.2)/First 212 0 R/Last 213 0 R/Next 210 0 R/Parent 199 0 R/Prev 214 0 R/Title(2 Requirements)>>
endobj
212 0 obj
<</Dest(subsection.2.1)/Next 213 0 R/Parent 211 0 R/Title(2.1 LaTeX Package Requirements)>>
endobj
213 0 obj
<</Dest(subsection.2.2)/Parent 211 0 R/Prev 212 0 R/Title(2.2 PDF Creator Requirements)>>
endobj
214 0 obj
<</Dest(section.1)/Next 211 0 R/Parent 199 0 R/Prev 200 0 R/Title(1 Introduction)>>
endobj
215 0 obj
<</Count 3/Dest(subsection.5.8)/First 216 0 R/Last 217 0 R/Next 208 0 R/Parent 206 0 R/Prev 218 0 R/Title(5.8 Commands that Operate on Numbers)>>
endobj
216 0 obj
<</Dest(subsubsection.5.8.1)/Next 224 0 R/Parent 215 0 R/Title( \\nOf and \\dOf)>>
endobj
217 0 obj
<</Dest(subsubsection.5.8.3)/Parent 215 0 R/Prev 224 0 R/Title( Getting the Data type with \\typeOf)>>
endobj
218 0 obj
<</Dest(subsection.5.7)/Next 215 0 R/Parent 206 0 R/Prev 219 0 R/Title(5.7 \\RandomS)>>
endobj
219 0 obj
<</Dest(subsection.5.6)/Next 218 0 R/Parent 206 0 R/Prev 220 0 R/Title(5.6 \\RandomP)>>
endobj
220 0 obj
<</Dest(subsection.5.5)/Next 219 0 R/Parent 206 0 R/Prev 221 0 R/Title(5.5 \\RandomI)>>
endobj
221 0 obj
<</Dest(subsection.5.4)/Next 220 0 R/Parent 206 0 R/Prev 222 0 R/Title(5.4 \\RandomL)>>
endobj
222 0 obj
<</Dest(subsection.5.3)/Next 221 0 R/Parent 206 0 R/Prev 223 0 R/Title(5.3 \\RandomR)>>
endobj
223 0 obj
<</Dest(subsection.5.2)/Next 222 0 R/Parent 206 0 R/Prev 207 0 R/Title(5.2 \\RandomQ)>>
endobj
224 0 obj
<</Dest(subsubsection.5.8.2)/Next 217 0 R/Parent 215 0 R/Prev 216 0 R/Title( Special Formatting Commands: The \\ds and \\fmt families)>>
endobj
230 0 obj
<</Kids[231 0 R 232 0 R]>>
endobj
535 0 obj
<</Names[(Access to Title, Subject, and Keywords)536 0 R(AeB: AcroTeX eDucation Bundle)537 0 R(Eq: Global Data)538 0 R(Eq: Miscellaneous JS)539 0 R(Eq: Quiz Management)540 0 R(Eq: Support Text Fill-in)541 0 R(Eq: Support for Grouped Questions)542 0 R(Eq: Support for Math Fill-in)543 0 R(Eq: Support for Multi-Selection)544 0 R(ExecJS docassembly)545 0 R(ExecJS execXMP)546 0 R(Rangen)547 0 R(dljslib: AcroTeX DLJS Library)548 0 R(dljslib: Contrib - No Decimals)549 0 R(dljslib: Equation Handling)550 0 R(dljslib: Implied Multiplication)551 0 R(dljslib: Indefinite Integral Handling)552 0 R(dljslib: Limit Arithmetic and Built in Functions)553 0 R]>>
endobj
536 0 obj
<</JS 566 0 R/S/JavaScript>>
endobj
537 0 obj
<</JS(/*\r\n Document Level JavaScript\r\n AcroTeX eDucation Bundle\r\n D. P. Story copyright 2000-2016\r\n*/\r\nvar exerquizLoaded = true;\r\nthis.disclosed = true;\r\napp.runtimeHighlight=false;\r\n)/S/JavaScript>>
endobj
538 0 obj
<</JS 565 0 R/S/JavaScript>>
endobj
539 0 obj
<</JS 564 0 R/S/JavaScript>>
endobj
540 0 obj
<</JS 563 0 R/S/JavaScript>>
endobj
541 0 obj
<</JS 562 0 R/S/JavaScript>>
endobj
542 0 obj
<</JS 561 0 R/S/JavaScript>>
endobj
543 0 obj
<</JS 560 0 R/S/JavaScript>>
endobj
544 0 obj
<</JS 559 0 R/S/JavaScript>>
endobj
545 0 obj
<</JS(var _docassembly = true;)/S/JavaScript>>
endobj
546 0 obj
<</JS(var _execXMP = true;)/S/JavaScript>>
endobj
547 0 obj
<</JS 558 0 R/S/JavaScript>>
endobj
548 0 obj
<</JS(/*\r\n The Document Level JavaScript Library\r\n D. P. Story copyright 2001-2016\r\n*/\r\nvar dljslib = true;\r\n)/S/JavaScript>>
endobj
549 0 obj
<</JS(function nodec\(UserAns\)\r\n{\r\n var dot = /[\\.\\.]/;\r\n if \(dot.test\(UserAns\)\) {\r\n eqAppAlert\("A decimal answer is not acceptable here. Please express your answer using a fraction.",3\);\r\n return null;\r\n } else retur\
n true;\r\n}\r\n)/S/JavaScript>>
endobj
550 0 obj
<</JS 557 0 R/S/JavaScript>>
endobj
551 0 obj
<</JS 556 0 R/S/JavaScript>>
endobj
552 0 obj
<</JS 555 0 R/S/JavaScript>>
endobj
553 0 obj
<</JS 554 0 R/S/JavaScript>>
endobj
554 0 obj
<</Filter[/FlateDecode]/Length 1303>>stream
+HWmo6^1A9 +CFV'h2DLdR%8m#%z +2x<AYj$'D`Բ +E* + ³9'?~c%RشJFL0
D
}|K tLi(nuTÛwG'}O*l S$i+h1_jl&L?[*m~ڿ2fTIpagXֈ-pT67M̋T',$w@ϷW + ';(HHPJ.yz7db,*gpw&N'5"P(pR2tU}(ߡn(F5v8gʺMVh(ήs-w:5]R*¥pj +N/+Ȕtg'z:Lhk>jEDQot#-&:f!x}~k4f& +XtMljk%Gڮ 7&le/D&r
ZQXV +71.2IgwIۅϬGfo~*:V1oSZI{=:)x06T3BݒD(S$=}dVDl͒Y~c#'<=О/_ 0Zxx&Q[?iՃ4">BM;WK.5;Iͭw +endstream
endobj
555 0 obj
<</Filter[/FlateDecode]/Length 476>>stream
+HUMo0W0n>*BHpVԀi:& +w KU9yffFԙi&֣PVs|eߗgV)o/S7 ²Ȍg ow䬚N8D0zD?3҆nra(k7fF_0({x$ \Je;`7%F%^cŵ5{Vj*ًVh42~+7 Sm2^$+Zl_)OUaewږ4;?j'7Yzns-Μ}9Vr2.]/@!JNhc*Nkl{İ8P|5k̞CTa O|nfsgYvlax]Т4(s^-9N.~?ʬ90-
ү@rTٲ +endstream
endobj
556 0 obj
<</Filter[/FlateDecode]/Length 953>>stream
+HW]o0}!&[֏ReLT!M,}6>mBNxIb|>gرӘG{Dc\d{zbQ@(]pB + _̋~sz> x~iJwe k0!f hh4A1D +6y 4ޣd[6<cup+fM)kf{}4:8WenbËs +@0`EFmxv;}n<[F4OWFz/tk9٠HٰV?&VAIA7NI3] ڻ4%.,Y`⹋x,ڰf>~0|e䡎
kL1Yn_1R
$P"o[I(RD̒ʀ8!C&Z[t"bQ{ܒRk>Zgy>OX8CRKs*lVrDMٱ# +endstream
endobj
557 0 obj
<</Filter[/FlateDecode]/Length 1387>>stream
+HW[o6~/p9鶗t`MAeȤJN}ȢDrڗaXwWKX\|E3K3~jc&U(BfZ3RRD~MO"|#S`EŅvie"STKcf)7P,ޤRd3+ld6wB5jųgSn;Jʶ3iY0Kut{.7AũQFΥr`Օ)Sv{soG(5TwG|$͚(|\2 +?U%Lug<n@dh[Gg4٫i%J*_Z㵧oշ:K;+8Y:QhftVWq;k\Or#F5@}zլ~WcLn5j#$PYJDЄPbs +UFP3li_=L[hcڇP̈́w9Q;|Sjk53Mqd0.5I?%~+zT +r\YN)Vp~xXq.H{F''!iŊ~<3M6e +>NXڠ_Sg,>]xG+)p*_e?uTڷ'YugdHj`$~Z~T,Ƈصxo$&s`p%A_dGhVzsNB
ptF>
==D7CP7`y6}S;{bMOj`~D{<Y|
S^[3 +?p)3gk{y+ +endstream
endobj
558 0 obj
<</Filter[/FlateDecode]/Length 847>>stream
+HWn@G?L*cC!iHCkBkMk"!R,fͼ˲TH +3dXhII5puE +FYOՔ1ɧ +endstream
endobj
559 0 obj
<</Filter[/FlateDecode]/Length 786>>stream
+HUMO@W|@6*4~"3vVwV:1ٍ
Ixf|7<Lp)EJ}oJnuX(%:"o_GEXko>R 9ĠLE+{Uȣ
^p9rAkIWZ68$5|9 .Z 72]jgBLP%&ױeυƋ`D^%=F<EOΊ9K"|mj>Nlʩǁ@eY_bKCs'vJ$yn8`pTElu<
NH8[bu{$%
)ȐPݖ;ޭH +L^R4 z X}S0w" ؊g?2 {O`B +endstream
endobj
560 0 obj
<</Filter[/FlateDecode]/Length 4386>>stream
+HWmsӸAtYv^2ev;qQl%qؾӖm_%ISR\Yy}-zϟMWa81峈<ןz_G&R/b
6-Uk&"wbcMEiuBj#iqrzψs?\ņyҍ7xJ?˴|]}2UGX츁%tޠ1aUI;C;E +m{N07&*!>(%gtLB|Y>٭tW/j6Ob
LS[kJP_\5ڦ3gs_n?ㇾ̊Okvzmtf%y/ʣ6gGmnCӄJj}ek+Mյ1Ĥ6Hgpti@ +`vzVەC/A٘1]Ͱ腀^ +mLɲ&XKi覺F`U3$iBa*F>8X=]9dɇt4t4Ri<)as┺f~X&7>
I$xcd/TJ!
O&ԣ͜6OA=B2iK6I^m|2gC{ +#,݂Fo]YVIG%'I6{fKFƢ~{etArJ>4ì@phCJ{[iZ*:Id#ԾXڒiI(<I-ź¢Y!WL D('O]I8*!TA]Ա@y|'mCgH9L_}WѾ +t }xP=o,q;7縀"0_Pu=:k93Ցưߊӽz-j@ypA 7j +'@$wMdK<͠ K
TƗ;J/۰nX4qA ˶Votm=%\%|#9Kx+]IpXà]Yx}ug.{Fo/IiSZH8$s%NNh̟s^nw=?P{xW]**U}̔B?kp.D8$ܡw>XuВs\z݇Em4D!&["sŮ?6>ncI&T, +m)ƸKL3QѪ-aA +F=WTR x^K]L6DIsןឡJT8ʓ'\ڎ&zhf)fR*&o)=|)B^#7B%[u%j +ӻ8$pBRjY& +ZZƳ <"˭z!DXD98&Bڃ/ԫBZ +z +ɻ:̗'λdvTe +ك,,z%#Gn<l=Fyn: +SՏFR_N/W +ʚ8F &u폦]r8.Ԑ\vyXo].!F㑜ysr®x|rU-9U[WJ3:+ϰv +G#?h+Ѯ2=/8wd/PwqTکC4U-D2H5|Y|1+7AiMKS\4 [/8ST
6l AO>&'epBWLAt_`G>*aU}spN9>R@=煁nOq(6kxE- +d{h? zGȴ +endstream
endobj
561 0 obj
<</Filter[/FlateDecode]/Length 337>>stream
+HSAK0>wJR3zEOٚto`ݴYFAP0$}%KdmNY%ںpM +^TBYvalo6OB+p +Nl
+endstream
endobj
562 0 obj
<</Filter[/FlateDecode]/Length 689>>stream
+HTO0#?<r(-FBCI&@{җ]H2)>;u;t8͇ޏ{/DkQ&7(oP}x +j])%v_OkD1eu:"q]%"` +endstream
endobj
563 0 obj
<</Filter[/FlateDecode]/Length 3826>>stream
+HWmo8^nV;-NMAIdr%ӸDEՇDp^9Lx-u쓿bcb[N6da}D\QqþiĂqk +⅟zq'6ẃk>$Q~A^ѭ`]<ljpே<,$y& *W|Q<4|YC +2 +MΆNŋIlVQjxjͶI`SUte6
tѶQEڗWe2vA{2A@B۱<oT +QFz5j\BW<x`~Xy
iB]|&et[Pڥ,?zo3E+<kN-tEPsO5+1=}~̟]r4p*H)Y[k,,\O*%m̕T.av#N +
l!1v*ngu(<'GalMs:rJδOOgO>TG3D^V»*KmZbL +':x2 pՋRlEWX8픮gdӭ=Q +f5;Pܣ"7 /(nHکI>ԓ1^~D˛Kg%m@v>`IP+Q!_]?MoȩL
38|\_1 p&d!t%0 +1UH +Qe(b4[uhDO, +Ya*Gfs2/e^Y3wU<S +eQoQgyVK69͕ =ͷ
rj@"n5'qw( v4-̵5Z`1,9:qeUq~Pu0 ryz1s<txC:/2qwH
eCB5E +zj$0"QӴk^ +!10Qr(ŞMTW@mPhP݄hz{""5z^ȧ^i=f4,߮d[:ZPCp2j*N=`qN%\hP[gg.sy +endstream
endobj
564 0 obj
<</Filter[/FlateDecode]/Length 1451>>stream
+HWYoF~70C@B%'hE6&-l ɘһKۊ%)-%iTMiܙo.<)!J%!t!:gЇ,yDC"Ìe&g2]N1[آ"
e_ +7%iSD0:5m*CK-L
8,QV&6Mp',%=KoRbo$<EDhst-~]hoۊM; r<=9eR^f8 Y&[/O<|-Efߐ8 O<c{jiHTߖٲVn(~e[%I/sxarl0uWa*g\gEIQ.&Dc掳<
eNl}m}l|MEңtkԞQ(Yr-y=E#Lϻk`l- ݦ"
34{Ujfx5+E <Ȳ`wYvM +t~#`$^po16FĠ3:b=ń/VŭDm&U
uK\B|jFClL@Wۀ&IFv^_;?,o{ơ0hqhcQit(_7 h*^7R2φޅvL?d9tvQ+r:/;XUОtKݸc^(Տ~<GaSޙ[&s_PXޔ+Ս==QQepƲRYdpCbA\Y 2FVHJEj>wWܫA^yg%?EQ{EqSHrW;M8Suqv +%L^ZX7.-FtdYvk@V9v +endstream
endobj
565 0 obj
<</Filter[/FlateDecode]/Length 938>>stream
+HVn8}/ $7r,^-
H6f}Hi[TIͿQ{ `qșsfx($&RLQ{p̔L3.+fDe^Q8fii8\d*2gc<՚MyAjZzevMsBٴdkp/u5-g2Fq.|""AeV%9GGJM4g˕GIw zޓLο7y?=ӹ鞜$0etQS9?AD1.k?]9Js)ƍ^v\Q [F.|WI$1^&+kO~/}$~aw`'f[ ?nrFnB +c\9[dflp
jq\dܜ:O & J7L;Pq#R*;w1qa.&}:p.ᩈ˵5$cge`i9))Q|ӬE(jBrTβ
ZsbXNTjqV;)ciȉr ~Uɱ"7ϵ5U +U<h" Z])Kx(+n9|}4@;MXL +ETW{J;7ȅxP/A42tuqįv=G;xOۥ=4gDeX+7d!9Sn=A7.gCF&|p8+jŰI05]{]#F;I;'8l/HsY}JPT]٫onfh`/mol{h\CυF#T%CiuҚpgQ/eVZa06騬qoc\Us#^%A}?|U8y0}
+мv?Fp~دQLsrwcE3+8*y` +endstream
endobj
566 0 obj
<</Filter[/FlateDecode]/Length 847>>stream
+HN0{Tt'#(4@U8pHq8 lPĆ#M0E'g22<9βʾXMݽ=;ɜpxCƾ=TpH"4C'kk3ġCXɇ.lMDCqc3w<D/z +g(b:
='vլ"㌇G<Dp?"!2bKw$BWT#|oR {0h)q <F4X'HLojy*XqT +(16 +YB\lEh,t[TQ5qHC&Zq5h"O'̾PE.>ŢI@'I1^ϖfxVھj%KC!U-٣㨴^%B+tw9EXK1k %E W$@QڲAalJ3J' &z\^7~^ˍ +h#%Mxo:qJ9þme))_nRNŕYRrORÞJ-كV)O/Ɉ&X~(?G^{iM,sMw0GlCσf;C_-[ +endstream
endobj
231 0 obj
<</Limits[(Doc-Start)(page.29)]/Names[(Doc-Start)294 0 R(Hfootnote.1)295 0 R(Hfootnote.2)296 0 R(Item.1)297 0 R(Item.10)298 0 R(Item.11)299 0 R(Item.12)300 0 R(Item.13)301 0 R(Item.14)302 0 R(Item.15)303 0 R(Item.16)304 0 R(Item.17)305 0 R(Item.18)306 0 R(Item.19)307 0 R(Item.2)308 0 R(Item.20)309 0 R(Item.21)310 0 R(Item.22)311 0 R(Item.23)312 0 R(Item.24)313 0 R(Item.25)314 0 R(Item.26)315 0 R(Item.27)316 0 R(Item.28)317 0 R(Item.29)318 0 R(Item.3)319 0 R(Item.30)320 0 R(Item.31)321 0 R(Item.32)322 0 R(Item.33)323 0 R(Item.34)324 0 R(Item.35)325 0 R(Item.36)326 0 R(Item.37)327 0 R(Item.38)328 0 R(Item.39)329 0 R(Item.4)330 0 R(Item.5)331 0 R(Item.6)332 0 R(Item.7)333 0 R(Item.8)334 0 R(Item.9)335 0 R(page.1)336 0 R(page.10)337 0 R(page.11)338 0 R(page.12)339 0 R(page.13)340 0 R(page.14)341 0 R(page.15)342 0 R(page.16)343 0 R(page.17)344 0 R(page.18)345 0 R(page.19)346 0 R(page.2)347 0 R(page.20)348 0 R(page.21)349 0 R(page.22)350 0 R(page.23)351 0 R(page.24)352 0 R(page.25)353 0 R(page.26)354 0 R(page.27)355 0 R(page.28)356 0 R(page.29)357 0 R]>>
endobj
232 0 obj
<</Limits[(page.3)(webtoc)]/Names[(page.3)233 0 R(page.4)234 0 R(page.5)235 0 R(page.6)236 0 R(page.7)237 0 R(page.8)238 0 R(page.9)239 0 R(section*.1)240 0 R(section*.10)241 0 R(section*.11)242 0 R(section*.12)243 0 R(section*.13)244 0 R(section*.14)245 0 R(section*.15)246 0 R(section*.16)247 0 R(section*.17)248 0 R(section*.18)249 0 R(section*.19)250 0 R(section*.2)251 0 R(section*.20)252 0 R(section*.21)253 0 R(section*.22)254 0 R(section*.23)255 0 R(section*.3)256 0 R(section*.4)257 0 R(section*.5)258 0 R(section*.6)259 0 R(section*.7)260 0 R(section*.8)261 0 R(section*.9)262 0 R(section.1)263 0 R(section.2)264 0 R(section.3)265 0 R(section.4)266 0 R(section.5)267 0 R(section.6)268 0 R(section.7)269 0 R(shortquiz.1)270 0 R(shortquiz.2)271 0 R(shortquiz.3)272 0 R(shortquiz.4)273 0 R(shortquiz.5)274 0 R(sq1.1)275 0 R(subsection.2.1)276 0 R(subsection.2.2)277 0 R(subsection.5.1)278 0 R(subsection.5.2)279 0 R(subsection.5.3)280 0 R(subsection.5.4)281 0 R(subsection.5.5)282 0 R(subsection.5.6)283 0 R(subsection.5.7)284 0 R(subsection.5.8)285 0 R(subsection.5.9)286 0 R(subsection.7.1)287 0 R(subsection.7.2)288 0 R(subsubsection.5.8.1)289 0 R(subsubsection.5.8.2)290 0 R(subsubsection.5.8.3)291 0 R(toc.1)292 0 R(webtoc)293 0 R]>>
endobj
233 0 obj
<</D[28 0 R/XYZ null 776 null]>>
endobj
234 0 obj
<</D[47 0 R/XYZ null 776 null]>>
endobj
235 0 obj
<</D[56 0 R/XYZ null 776 null]>>
endobj
236 0 obj
<</D[59 0 R/XYZ null 776 null]>>
endobj
237 0 obj
<</D[62 0 R/XYZ null 776 null]>>
endobj
238 0 obj
<</D[65 0 R/XYZ null 776 null]>>
endobj
239 0 obj
<</D[68 0 R/XYZ null 776 null]>>
endobj
240 0 obj
<</D[370 0 R/XYZ null 679 null]>>
endobj
241 0 obj
<</D[74 0 R/XYZ null 408 null]>>
endobj
242 0 obj
<</D[82 0 R/XYZ null 676 null]>>
endobj
243 0 obj
<</D[85 0 R/XYZ null 637 null]>>
endobj
244 0 obj
<</D[85 0 R/XYZ null 308 null]>>
endobj
245 0 obj
<</D[88 0 R/XYZ null 638 null]>>
endobj
246 0 obj
<</D[88 0 R/XYZ null 538 null]>>
endobj
247 0 obj
<</D[91 0 R/XYZ null 726 null]>>
endobj
248 0 obj
<</D[91 0 R/XYZ null 425 null]>>
endobj
249 0 obj
<</D[94 0 R/XYZ null 299 null]>>
endobj
250 0 obj
<</D[97 0 R/XYZ null 726 null]>>
endobj
251 0 obj
<</D[370 0 R/XYZ null 615 null]>>
endobj
252 0 obj
<</D[106 0 R/XYZ null 646 null]>>
endobj
253 0 obj
<</D[112 0 R/XYZ null 637 null]>>
endobj
254 0 obj
<</D[112 0 R/XYZ null 460 null]>>
endobj
255 0 obj
<</D[155 0 R/XYZ null 726 null]>>
endobj
256 0 obj
<</D[370 0 R/XYZ null 391 null]>>
endobj
257 0 obj
<</D[1 0 R/XYZ null 726 null]>>
endobj
258 0 obj
<</D[59 0 R/XYZ null 652 null]>>
endobj
259 0 obj
<</D[62 0 R/XYZ null 354 null]>>
endobj
260 0 obj
<</D[62 0 R/XYZ null 271 null]>>
endobj
261 0 obj
<</D[65 0 R/XYZ null 490 null]>>
endobj
262 0 obj
<</D[71 0 R/XYZ null 534 null]>>
endobj
263 0 obj
<</D[28 0 R/XYZ null 738 null]>>
endobj
264 0 obj
<</D[47 0 R/XYZ null 624 null]>>
endobj
265 0 obj
<</D[47 0 R/XYZ null 338 null]>>
endobj
266 0 obj
<</D[56 0 R/XYZ null 738 null]>>
endobj
267 0 obj
<</D[56 0 R/XYZ null 556 null]>>
endobj
268 0 obj
<</D[109 0 R/XYZ null 640 null]>>
endobj
269 0 obj
<</D[112 0 R/XYZ null 617 null]>>
endobj
270 0 obj
<</D[28 0 R/XYZ null 468 null]>>
endobj
271 0 obj
<</D[116 0 R/XYZ null 726 null]>>
endobj
272 0 obj
<</D[123 0 R/XYZ null 620 null]>>
endobj
273 0 obj
<</D[136 0 R/XYZ null 522 null]>>
endobj
274 0 obj
<</D[145 0 R/XYZ null 479 null]>>
endobj
275 0 obj
<</D[155 0 R/XYZ null 705 null]>>
endobj
276 0 obj
<</D[47 0 R/XYZ null 557 null]>>
endobj
277 0 obj
<</D[47 0 R/XYZ null 405 null]>>
endobj
278 0 obj
<</D[59 0 R/XYZ null 738 null]>>
endobj
279 0 obj
<</D[65 0 R/XYZ null 574 null]>>
endobj
280 0 obj
<</D[74 0 R/XYZ null 493 null]>>
endobj
281 0 obj
<</D[85 0 R/XYZ null 738 null]>>
endobj
282 0 obj
<</D[88 0 R/XYZ null 738 null]>>
endobj
283 0 obj
<</D[88 0 R/XYZ null 287 null]>>
endobj
284 0 obj
<</D[94 0 R/XYZ null 400 null]>>
endobj
285 0 obj
<</D[97 0 R/XYZ null 344 null]>>
endobj
286 0 obj
<</D[106 0 R/XYZ null 493 null]>>
endobj
287 0 obj
<</D[112 0 R/XYZ null 429 null]>>
endobj
288 0 obj
<</D[145 0 R/XYZ null 575 null]>>
endobj
289 0 obj
<</D[97 0 R/XYZ null 287 null]>>
endobj
290 0 obj
<</D[100 0 R/XYZ null 512 null]>>
endobj
291 0 obj
<</D[103 0 R/XYZ null 326 null]>>
endobj
292 0 obj
<</D[1 0 R/XYZ null 738 null]>>
endobj
293 0 obj
<</D[1 0 R/XYZ null 738 null]>>
endobj
294 0 obj
<</D[370 0 R/XYZ null 738 null]>>
endobj
295 0 obj
<</D[47 0 R/XYZ null 268 null]>>
endobj
296 0 obj
<</D[123 0 R/XYZ null 191 null]>>
endobj
297 0 obj
<</D[28 0 R/XYZ null 445 null]>>
endobj
298 0 obj
<</D[62 0 R/XYZ null 628 null]>>
endobj
299 0 obj
<</D[62 0 R/XYZ null 561 null]>>
endobj
300 0 obj
<</D[62 0 R/XYZ null 508 null]>>
endobj
301 0 obj
<</D[65 0 R/XYZ null 225 null]>>
endobj
302 0 obj
<</D[65 0 R/XYZ null 206 null]>>
endobj
303 0 obj
<</D[68 0 R/XYZ null 654 null]>>
endobj
304 0 obj
<</D[68 0 R/XYZ null 541 null]>>
endobj
305 0 obj
<</D[68 0 R/XYZ null 496 null]>>
endobj
306 0 obj
<</D[68 0 R/XYZ null 435 null]>>
endobj
307 0 obj
<</D[71 0 R/XYZ null 527 null]>>
endobj
308 0 obj
<</D[28 0 R/XYZ null 445 null]>>
endobj
309 0 obj
<</D[71 0 R/XYZ null 460 null]>>
endobj
310 0 obj
<</D[71 0 R/XYZ null 372 null]>>
endobj
311 0 obj
<</D[71 0 R/XYZ null 235 null]>>
endobj
312 0 obj
<</D[74 0 R/XYZ null 738 null]>>
endobj
313 0 obj
<</D[74 0 R/XYZ null 678 null]>>
endobj
314 0 obj
<</D[82 0 R/XYZ null 669 null]>>
endobj
315 0 obj
<</D[82 0 R/XYZ null 569 null]>>
endobj
316 0 obj
<</D[82 0 R/XYZ null 511 null]>>
endobj
317 0 obj
<</D[82 0 R/XYZ null 453 null]>>
endobj
318 0 obj
<</D[85 0 R/XYZ null 301 null]>>
endobj
319 0 obj
<</D[28 0 R/XYZ null 356 null]>>
endobj
320 0 obj
<</D[85 0 R/XYZ null 247 null]>>
endobj
321 0 obj
<</D[91 0 R/XYZ null 418 null]>>
endobj
322 0 obj
<</D[91 0 R/XYZ null 351 null]>>
endobj
323 0 obj
<</D[94 0 R/XYZ null 662 null]>>
endobj
324 0 obj
<</D[97 0 R/XYZ null 720 null]>>
endobj
325 0 obj
<</D[97 0 R/XYZ null 545 null]>>
endobj
326 0 obj
<</D[116 0 R/XYZ null 679 null]>>
endobj
327 0 obj
<</D[123 0 R/XYZ null 550 null]>>
endobj
328 0 obj
<</D[136 0 R/XYZ null 285 null]>>
endobj
329 0 obj
<</D[145 0 R/XYZ null 327 null]>>
endobj
330 0 obj
<</D[28 0 R/XYZ null 317 null]>>
endobj
331 0 obj
<</D[28 0 R/XYZ null 216 null]>>
endobj
332 0 obj
<</D[47 0 R/XYZ null 738 null]>>
endobj
333 0 obj
<</D[47 0 R/XYZ null 503 null]>>
endobj
334 0 obj
<</D[47 0 R/XYZ null 478 null]>>
endobj
335 0 obj
<</D[47 0 R/XYZ null 454 null]>>
endobj
336 0 obj
<</D[370 0 R/XYZ null 776 null]>>
endobj
337 0 obj
<</D[71 0 R/XYZ null 776 null]>>
endobj
338 0 obj
<</D[74 0 R/XYZ null 776 null]>>
endobj
339 0 obj
<</D[79 0 R/XYZ null 776 null]>>
endobj
340 0 obj
<</D[82 0 R/XYZ null 776 null]>>
endobj
341 0 obj
<</D[85 0 R/XYZ null 776 null]>>
endobj
342 0 obj
<</D[88 0 R/XYZ null 776 null]>>
endobj
343 0 obj
<</D[91 0 R/XYZ null 776 null]>>
endobj
344 0 obj
<</D[94 0 R/XYZ null 776 null]>>
endobj
345 0 obj
<</D[97 0 R/XYZ null 776 null]>>
endobj
346 0 obj
<</D[100 0 R/XYZ null 776 null]>>
endobj
347 0 obj
<</D[1 0 R/XYZ null 776 null]>>
endobj
348 0 obj
<</D[103 0 R/XYZ null 776 null]>>
endobj
349 0 obj
<</D[106 0 R/XYZ null 776 null]>>
endobj
350 0 obj
<</D[109 0 R/XYZ null 776 null]>>
endobj
351 0 obj
<</D[112 0 R/XYZ null 776 null]>>
endobj
352 0 obj
<</D[116 0 R/XYZ null 776 null]>>
endobj
353 0 obj
<</D[123 0 R/XYZ null 776 null]>>
endobj
354 0 obj
<</D[136 0 R/XYZ null 776 null]>>
endobj
355 0 obj
<</D[145 0 R/XYZ null 776 null]>>
endobj
356 0 obj
<</D[152 0 R/XYZ null 776 null]>>
endobj
357 0 obj
<</D[155 0 R/XYZ null 776 null]>>
endobj
225 0 obj
[179 0 R]
endobj
228 0 obj
<</BaseFont/ZapfDingbats/Name/ZaDb/Subtype/Type1/Type/Font>>
endobj
567 0 obj
<</Author(D. P. Story)/CreationDate(D:20160220053446Z)/Creator(The AcroTeX eDucation Bundle)/Keywords()/ModDate(D:20160220053456-06'00')/Producer(Acrobat Distiller 15.0 \(Windows\))/Subject(Documentation for annot_pro from AcroTeX)/Title(The : Random Generation of Integer, Rational, and Real Numbers with Applications to the exercise, quiz, and shortquiz Environments of Exerquiz)>>
endobj
xref
+0 568
+0000000000 65535 f
+0000161010 00000 n
+0000177950 00000 n
+0000178075 00000 n
+0000178200 00000 n
+0000178330 00000 n
+0000178460 00000 n
+0000178585 00000 n
+0000178710 00000 n
+0000178835 00000 n
+0000178965 00000 n
+0000179095 00000 n
+0000179226 00000 n
+0000179357 00000 n
+0000179488 00000 n
+0000179619 00000 n
+0000179748 00000 n
+0000179879 00000 n
+0000180015 00000 n
+0000180151 00000 n
+0000180287 00000 n
+0000180418 00000 n
+0000180544 00000 n
+0000180670 00000 n
+0000180801 00000 n
+0000180932 00000 n
+0000000000 00000 f
+0000000000 00000 f
+0000082661 00000 n
+0000086783 00000 n
+0000087019 00000 n
+0000087571 00000 n
+0000081616 00000 n
+0000087937 00000 n
+0000088487 00000 n
+0000081825 00000 n
+0000088852 00000 n
+0000089374 00000 n
+0000082034 00000 n
+0000089785 00000 n
+0000090305 00000 n
+0000082243 00000 n
+0000090716 00000 n
+0000091270 00000 n
+0000082452 00000 n
+0000000000 00000 f
+0000000000 00000 f
+0000073961 00000 n
+0000079223 00000 n
+0000079779 00000 n
+0000080221 00000 n
+0000069315 00000 n
+0000080847 00000 n
+0000080975 00000 n
+0000000000 00000 f
+0000000000 00000 f
+0000161501 00000 n
+0000000000 00000 f
+0000000000 00000 f
+0000161851 00000 n
+0000000000 00000 f
+0000000000 00000 f
+0000162214 00000 n
+0000000000 00000 f
+0000000000 00000 f
+0000162551 00000 n
+0000000000 00000 f
+0000000000 00000 f
+0000162901 00000 n
+0000000000 00000 f
+0000000000 00000 f
+0000163198 00000 n
+0000000000 00000 f
+0000000000 00000 f
+0000136232 00000 n
+0000159504 00000 n
+0000159631 00000 n
+0000000000 00000 f
+0000000000 00000 f
+0000136617 00000 n
+0000000000 00000 f
+0000000000 00000 f
+0000136927 00000 n
+0000000000 00000 f
+0000000000 00000 f
+0000137211 00000 n
+0000000000 00000 f
+0000000000 00000 f
+0000137535 00000 n
+0000000000 00000 f
+0000000000 00000 f
+0000137872 00000 n
+0000000000 00000 f
+0000000000 00000 f
+0000138169 00000 n
+0000000000 00000 f
+0000000000 00000 f
+0000138506 00000 n
+0000000000 00000 f
+0000000000 00000 f
+0000138843 00000 n
+0000000000 00000 f
+0000000000 00000 f
+0000139168 00000 n
+0000000000 00000 f
+0000000000 00000 f
+0000005589 00000 n
+0000000000 00000 f
+0000000000 00000 f
+0000005953 00000 n
+0000000000 00000 f
+0000000000 00000 f
+0000006304 00000 n
+0000124847 00000 n
+0000000000 00000 f
+0000000000 00000 f
+0000006658 00000 n
+0000108172 00000 n
+0000098301 00000 n
+0000094391 00000 n
+0000105531 00000 n
+0000000000 00000 f
+0000000000 00000 f
+0000007010 00000 n
+0000117286 00000 n
+0000097222 00000 n
+0000093205 00000 n
+0000070207 00000 n
+0000117515 00000 n
+0000117643 00000 n
+0000000000 00000 f
+0000000000 00000 f
+0000114239 00000 n
+0000115022 00000 n
+0000114373 00000 n
+0000114653 00000 n
+0000007417 00000 n
+0000110903 00000 n
+0000111030 00000 n
+0000111157 00000 n
+0000096470 00000 n
+0000092047 00000 n
+0000071059 00000 n
+0000000000 00000 f
+0000000000 00000 f
+0000007811 00000 n
+0000067121 00000 n
+0000067348 00000 n
+0000067887 00000 n
+0000068308 00000 n
+0000000000 00000 f
+0000000000 00000 f
+0000008163 00000 n
+0000000000 00000 f
+0000000000 00000 f
+0000008488 00000 n
+0000059047 00000 n
+0000000000 00000 f
+0000000000 00000 f
+0000024046 00000 n
+0000029228 00000 n
+0000028890 00000 n
+0000028509 00000 n
+0000038327 00000 n
+0000025347 00000 n
+0000038802 00000 n
+0000039136 00000 n
+0000038489 00000 n
+0000028626 00000 n
+0000085818 00000 n
+0000086074 00000 n
+0000085555 00000 n
+0000076029 00000 n
+0000085724 00000 n
+0000076682 00000 n
+0000077136 00000 n
+0000077490 00000 n
+0000076829 00000 n
+0000027113 00000 n
+0000080430 00000 n
+0000027407 00000 n
+0000025728 00000 n
+0000026880 00000 n
+0000026821 00000 n
+0000061100 00000 n
+0000026113 00000 n
+0000061833 00000 n
+0000061451 00000 n
+0000025951 00000 n
+0000026188 00000 n
+0000026427 00000 n
+0000060897 00000 n
+0000060399 00000 n
+0000127141 00000 n
+0000127403 00000 n
+0000127775 00000 n
+0000128087 00000 n
+0000127501 00000 n
+0000113772 00000 n
+0000005019 00000 n
+0000182142 00000 n
+0000182229 00000 n
+0000182325 00000 n
+0000182468 00000 n
+0000182580 00000 n
+0000182699 00000 n
+0000182801 00000 n
+0000182940 00000 n
+0000183032 00000 n
+0000183150 00000 n
+0000183254 00000 n
+0000183355 00000 n
+0000183491 00000 n
+0000183600 00000 n
+0000183707 00000 n
+0000183808 00000 n
+0000183971 00000 n
+0000184072 00000 n
+0000184193 00000 n
+0000184298 00000 n
+0000184403 00000 n
+0000184508 00000 n
+0000184613 00000 n
+0000184718 00000 n
+0000184823 00000 n
+0000214955 00000 n
+0000000000 00000 f
+0000072303 00000 n
+0000214982 00000 n
+0000072395 00000 n
+0000184978 00000 n
+0000206327 00000 n
+0000207409 00000 n
+0000208672 00000 n
+0000208722 00000 n
+0000208772 00000 n
+0000208822 00000 n
+0000208872 00000 n
+0000208922 00000 n
+0000208972 00000 n
+0000209022 00000 n
+0000209073 00000 n
+0000209123 00000 n
+0000209173 00000 n
+0000209223 00000 n
+0000209273 00000 n
+0000209323 00000 n
+0000209373 00000 n
+0000209423 00000 n
+0000209473 00000 n
+0000209523 00000 n
+0000209573 00000 n
+0000209624 00000 n
+0000209675 00000 n
+0000209726 00000 n
+0000209777 00000 n
+0000209828 00000 n
+0000209879 00000 n
+0000209928 00000 n
+0000209978 00000 n
+0000210028 00000 n
+0000210078 00000 n
+0000210128 00000 n
+0000210178 00000 n
+0000210228 00000 n
+0000210278 00000 n
+0000210328 00000 n
+0000210378 00000 n
+0000210428 00000 n
+0000210479 00000 n
+0000210530 00000 n
+0000210580 00000 n
+0000210631 00000 n
+0000210682 00000 n
+0000210733 00000 n
+0000210784 00000 n
+0000210835 00000 n
+0000210885 00000 n
+0000210935 00000 n
+0000210985 00000 n
+0000211035 00000 n
+0000211085 00000 n
+0000211135 00000 n
+0000211185 00000 n
+0000211235 00000 n
+0000211285 00000 n
+0000211335 00000 n
+0000211386 00000 n
+0000211437 00000 n
+0000211488 00000 n
+0000211538 00000 n
+0000211589 00000 n
+0000211640 00000 n
+0000211689 00000 n
+0000211738 00000 n
+0000211789 00000 n
+0000211839 00000 n
+0000211890 00000 n
+0000211940 00000 n
+0000211990 00000 n
+0000212040 00000 n
+0000212090 00000 n
+0000212140 00000 n
+0000212190 00000 n
+0000212240 00000 n
+0000212290 00000 n
+0000212340 00000 n
+0000212390 00000 n
+0000212440 00000 n
+0000212490 00000 n
+0000212540 00000 n
+0000212590 00000 n
+0000212640 00000 n
+0000212690 00000 n
+0000212740 00000 n
+0000212790 00000 n
+0000212840 00000 n
+0000212890 00000 n
+0000212940 00000 n
+0000212990 00000 n
+0000213040 00000 n
+0000213090 00000 n
+0000213140 00000 n
+0000213190 00000 n
+0000213240 00000 n
+0000213290 00000 n
+0000213340 00000 n
+0000213391 00000 n
+0000213442 00000 n
+0000213493 00000 n
+0000213544 00000 n
+0000213594 00000 n
+0000213644 00000 n
+0000213694 00000 n
+0000213744 00000 n
+0000213794 00000 n
+0000213844 00000 n
+0000213895 00000 n
+0000213945 00000 n
+0000213995 00000 n
+0000214045 00000 n
+0000214095 00000 n
+0000214145 00000 n
+0000214195 00000 n
+0000214245 00000 n
+0000214295 00000 n
+0000214345 00000 n
+0000214396 00000 n
+0000214445 00000 n
+0000214496 00000 n
+0000214547 00000 n
+0000214598 00000 n
+0000214649 00000 n
+0000214700 00000 n
+0000214751 00000 n
+0000214802 00000 n
+0000214853 00000 n
+0000214904 00000 n
+0000005077 00000 n
+0000182116 00000 n
+0000005115 00000 n
+0000005187 00000 n
+0000005320 00000 n
+0000005455 00000 n
+0000000654 00000 n
+0000000000 00000 f
+0000000000 00000 f
+0000000016 00000 n
+0000000480 00000 n
+0000004964 00000 n
+0000159758 00000 n
+0000181818 00000 n
+0000181972 00000 n
+0000000000 00000 f
+0000023458 00000 n
+0000056317 00000 n
+0000056190 00000 n
+0000039993 00000 n
+0000040989 00000 n
+0000040232 00000 n
+0000040625 00000 n
+0000000000 00000 f
+0000122357 00000 n
+0000122743 00000 n
+0000123457 00000 n
+0000122852 00000 n
+0000123112 00000 n
+0000132612 00000 n
+0000132991 00000 n
+0000133797 00000 n
+0000133137 00000 n
+0000133440 00000 n
+0000022619 00000 n
+0000046757 00000 n
+0000048111 00000 n
+0000047170 00000 n
+0000047720 00000 n
+0000024768 00000 n
+0000031052 00000 n
+0000032413 00000 n
+0000031472 00000 n
+0000032045 00000 n
+0000056354 00000 n
+0000000000 00000 f
+0000008842 00000 n
+0000009624 00000 n
+0000018278 00000 n
+0000018333 00000 n
+0000018378 00000 n
+0000018484 00000 n
+0000018590 00000 n
+0000018627 00000 n
+0000019160 00000 n
+0000021831 00000 n
+0000022286 00000 n
+0000022308 00000 n
+0000022386 00000 n
+0000022463 00000 n
+0000056139 00000 n
+0000059172 00000 n
+0000064879 00000 n
+0000064930 00000 n
+0000067070 00000 n
+0000069146 00000 n
+0000069247 00000 n
+0000071910 00000 n
+0000073579 00000 n
+0000074356 00000 n
+0000079172 00000 n
+0000081149 00000 n
+0000081199 00000 n
+0000081476 00000 n
+0000081571 00000 n
+0000083118 00000 n
+0000086732 00000 n
+0000091710 00000 n
+0000091805 00000 n
+0000091873 00000 n
+0000091931 00000 n
+0000091989 00000 n
+0000092482 00000 n
+0000092862 00000 n
+0000093582 00000 n
+0000093954 00000 n
+0000094292 00000 n
+0000094714 00000 n
+0000095086 00000 n
+0000095424 00000 n
+0000095796 00000 n
+0000096134 00000 n
+0000096229 00000 n
+0000096296 00000 n
+0000096354 00000 n
+0000096412 00000 n
+0000097025 00000 n
+0000097753 00000 n
+0000097950 00000 n
+0000098564 00000 n
+0000098759 00000 n
+0000098956 00000 n
+0000099328 00000 n
+0000099666 00000 n
+0000099863 00000 n
+0000100235 00000 n
+0000100573 00000 n
+0000100770 00000 n
+0000101142 00000 n
+0000101480 00000 n
+0000101675 00000 n
+0000102047 00000 n
+0000102385 00000 n
+0000102580 00000 n
+0000102857 00000 n
+0000103134 00000 n
+0000103411 00000 n
+0000103688 00000 n
+0000103965 00000 n
+0000104242 00000 n
+0000104614 00000 n
+0000104952 00000 n
+0000105149 00000 n
+0000106339 00000 n
+0000106721 00000 n
+0000107103 00000 n
+0000107482 00000 n
+0000107826 00000 n
+0000108021 00000 n
+0000108316 00000 n
+0000110852 00000 n
+0000111384 00000 n
+0000117235 00000 n
+0000117828 00000 n
+0000120171 00000 n
+0000120222 00000 n
+0000124796 00000 n
+0000124974 00000 n
+0000130309 00000 n
+0000130360 00000 n
+0000136181 00000 n
+0000139506 00000 n
+0000141801 00000 n
+0000141852 00000 n
+0000144329 00000 n
+0000144380 00000 n
+0000145772 00000 n
+0000145823 00000 n
+0000147540 00000 n
+0000147591 00000 n
+0000149284 00000 n
+0000149335 00000 n
+0000151050 00000 n
+0000151101 00000 n
+0000153196 00000 n
+0000153247 00000 n
+0000154627 00000 n
+0000154678 00000 n
+0000157165 00000 n
+0000157216 00000 n
+0000159453 00000 n
+0000163508 00000 n
+0000165444 00000 n
+0000165495 00000 n
+0000167754 00000 n
+0000167805 00000 n
+0000170112 00000 n
+0000170163 00000 n
+0000172043 00000 n
+0000172094 00000 n
+0000174429 00000 n
+0000174480 00000 n
+0000176707 00000 n
+0000176758 00000 n
+0000177899 00000 n
+0000181060 00000 n
+0000181767 00000 n
+0000185022 00000 n
+0000185690 00000 n
+0000185736 00000 n
+0000185991 00000 n
+0000186037 00000 n
+0000186083 00000 n
+0000186129 00000 n
+0000186175 00000 n
+0000186221 00000 n
+0000186267 00000 n
+0000186313 00000 n
+0000186377 00000 n
+0000186437 00000 n
+0000186483 00000 n
+0000186650 00000 n
+0000186963 00000 n
+0000187009 00000 n
+0000187055 00000 n
+0000187101 00000 n
+0000187147 00000 n
+0000188524 00000 n
+0000189073 00000 n
+0000190099 00000 n
+0000191560 00000 n
+0000192480 00000 n
+0000193339 00000 n
+0000197799 00000 n
+0000198209 00000 n
+0000198971 00000 n
+0000202871 00000 n
+0000204396 00000 n
+0000205407 00000 n
+0000215060 00000 n
+trailer
+<</Size 568/Root 367 0 R/Info 567 0 R/ID[<EEE28D43EF289D22A5E5929EFF578194><1DDBB348F97C6945A42883A56B114D19>]>>
+startxref
+215462
+%%EOF
diff --git a/macros/latex/contrib/rangen/doc/rangen_man.tex b/macros/latex/contrib/rangen/doc/rangen_man.tex new file mode 100644 index 0000000000..cfecd31ecd --- /dev/null +++ b/macros/latex/contrib/rangen/doc/rangen_man.tex @@ -0,0 +1,1563 @@ +% makeindex < aebpro_man.idx > aebpro_man.ind +\documentclass[12pt]{article} +\usepackage[fleqn]{amsmath} +\usepackage[ + web={centertitlepage,designv,tight*,forcolorpaper, +% usesf, + latextoc,pro}, + aebxmp,exerquiz, + dljslib={equations,ImplMulti,indefIntegral,limitArith,nodec} +]{aeb_pro} +\usepackage{multicol} +\usepackage{array} +%\usepackage{myriadpro} %[usecmtt] +\usepackage[altbullet]{lucidbry} +\usepackage[quiet,testmode]{rangen} % testmode +%\usepackage[quiet,seed=98]{rangen} % 128 +%\usepackage[quiet,seed=135]{rangen} % + +\DeclareInitView +{% + layoutmag={mag=100}, +% windowoptions={fit} +} + + +%\usepackage{makeidx}\makeindex + +\usepackage{acroman} + +\usepackage[active]{srcltx} + +\def\expath{../examples} + +\urlstyle{tt} + +%\def\tutpath{doc/tutorial} +%\def\tutpathi{tutorial} + +\DeclareDocInfo +{ + university={\AcroTeX.Net}, + title={The \texorpdfstring{\pkg{rangen} Package\\[1em]}{: } + Random Generation of Integer, Rational, and Real Numbers with + Applications to the \texttt{exercise}, \texttt{quiz}, and \texttt{shortquiz} Environments of \textsf{Exerquiz}}, + author={D. P. Story}, + email={dpstory@acrotex.net}, + subject={Documentation for annot\textunderscore pro from AcroTeX}, + talksite={\url{www.acrotex.net}}, + version={1.4}, + copyrightStatus=True, + copyrightNotice={Copyright (C) \the\year, D. P. Story}, + copyrightInfoURL={http://www.acrotex.net} +} + +\def\anglemeta#1{\ensuremath{\langle\textit{\texttt{#1}}\rangle}} +\def\meta#1{\textit{\texttt{#1}}} +\let\meta\anglemeta +\def\darg#1{\texttt{\{#1\}}} +\def\takeMeasure{\bgroup\obeyspaces\takeMeasurei} +\def\takeMeasurei#1{\global\setbox\webtempboxi\hbox{\ttfamily#1}\egroup} +\def\bxSize{\wd\webtempboxi+2\fboxsep+2\fboxrule} +\let\pkg\textsf +\let\env\texttt +\let\opt\texttt +\let\app\textsf + +\let\amtIndent\leftmargini +\def\SUB#1{${}_{\text{#1}}$} + +\newdimen\aebdimen \aebdimen 0pt %\advance\aebdimen\partopsep +\newcommand\bVerb[1][]{\begingroup#1\vskip\aebdimen\parindent0pt}% +\def\eVerb{\vskip\aebdimen\endgroup\noindent} + +\makeatletter +\renewcommand{\paragraph} + {\@startsection{paragraph}{4}{0pt}{6pt}{-3pt}{\bfseries}} +\renewcommand*\l@subsection{\@dottedtocline{2}{1.5em}{2.5em}} +\renewcommand*\descriptionlabel[1]{\hspace\labelsep + \normalfont #1} +\newcommand{\aebDescriptionlabel}[1]{% + \setlength\dimen@{\amtIndent+\labelsep}% + {\hspace*{\dimen@}#1}} +\makeatother +\newenvironment{aebDescript} + {\begin{list}{}{\setlength{\labelwidth}{0pt}% + \setlength{\leftmargin}{\leftmargin}% + \setlength{\leftmargin}{\leftmargin+\amtIndent}% + \setlength\itemindent{-\leftmargin}% + \let\makelabel\aebDescriptionlabel + }}{\end{list}} + + +\def\dps{$\hbox{$\mathfrak D$\kern-.3em\hbox{$\mathfrak P$}% + \kern-.6em \hbox{$\mathcal S$}}$} + +\universityLayout{fontsize=Large} +\titleLayout{fontsize=LARGE} +\authorLayout{fontsize=Large} +\tocLayout{fontsize=Large,color=aeb} +\sectionLayout{indent=-62.5pt,fontsize=large,color=aeb} +\subsectionLayout{indent=-31.25pt,color=aeb} +\subsubsectionLayout{indent=0pt,color=aeb} +\subsubDefaultDing{\texorpdfstring{$\bullet$}{\textrm\textbullet}} + +\newenvironment{eqComments}[1][\strut]{\smallskip\leftskip-\labelwidth +\item[]\textbf{\textcolor{blue}{#1}}}{\par\smallskip} + +\renewcommand\nodecAlertMsg{% + "A decimal answer is not acceptable here. + Please express your answer using a fraction."} + +%\previewtrue + +%\pagestyle{empty} +%\parindent0pt\parskip\medskipamount + +\definePath\bgPath{"C:/Users/Public/Documents/% + ManualBGs/Manual_BG_Print_AeB.pdf"} +\begin{docassembly} +\addWatermarkFromFile({% + bOnTop: false, + cDIPath: \bgPath +}) +\executeSave() +\end{docassembly} + +\begin{document} + +\maketitle + +\selectColors{linkColor=black} +\tableofcontents +\selectColors{linkColor=webgreen} + +\section{Introduction}\label{s:intro} + +This is a package that I began back in the year 2000 AD; at that +time, I managed to obtain a working version up and running with many +bugs, then forgot about it. Now, in my retirement, I stumbled across +the work and decided to give it another go. + +The \pkg{rangen} package, as the title implies, can (pseudo-)randomly generate +integers, rationals, and real numbers. Generate said numbers using the +\cs{RandomZ}, \cs{RandomQ}, and \cs{RandomR} commands, respectively; in addition +to these, there is \cs{RandomL} for creating a list of numbers, from which one number +is selected at random, and \cs{RandomI} for generating a random index value that can +be used in conjunction with \cs{RandomL}. + +The \AcroTeX{} eDucation Bundle (AeB) contains a package called \textsf{exerquiz} +that is used to create exercises and quizzes. My goal in writing the +\pkg{rangen} package was to integrate it with the quiz system of \textsf{exerquiz} +so that quiz questions could be composed using the ``natural'' syntax of \pkg{rangen}, +each time the source file is {\LaTeX}ed, new random numbers populate the question. To get your +interest, here is an example, + + + +\begingroup\parskip0pt %\previewtrue + +\def\aftershortquizskip{} +\setlength{\multicolsep}{0pt} + +\begin{shortquiz}*[answer] \textbf{\textcolor{blue}{Arithmetic.}} +A simple arithmetic problem, I've created one problem, then copied it to make +two problems. + +\vskip6pt + +\begin{multicols}{2} +\begin{questions} + +% subtraction +\RandomQ{\a}[16]{1/8}{15/16}\RandomQ[ne=\a]{\b}[16]{1/8}{15/16} + +\item $\displaystyle \ds\a - \ds\b = + \RespBoxMath[\rectW{.5in}]{ (\nOf\a * \dOf\b - \nOf\b * \dOf\a )/( \dOf\a * \dOf\b ) }{2}{.0001}{[0,2]}[{priorParse: \Array(nodec,NoAddOrSub)}]$\hfill + \CorrAnsButton{rFrac( rEval( \nOf\a * \dOf\b - \nOf\b * \dOf\a )/rEval( \dOf\a * \dOf\b ) )}*{rngCorrAnsButton}\kern1bp\sqTallyBox + +% subtraction +\RandomQ{\a}[16]{1/8}{15/16}\RandomQ[ne=\a]{\b}[16]{1/8}{15/16} + +\item $\displaystyle \ds\a - \ds\b = + \RespBoxMath[\rectW{.5in}]{ (\nOf\a * \dOf\b - \nOf\b * \dOf\a )/( \dOf\a * \dOf\b ) }{2}{.0001}{[0,2]}[{priorParse: \Array(nodec,NoAddOrSub)}]$\hfill + \CorrAnsButton{rFrac( rEval( \nOf\a * \dOf\b - \nOf\b * \dOf\a )/rEval( \dOf\a * \dOf\b ) )}*{rngCorrAnsButton}\kern1bp\sqTallyBox +\pushquestions +\end{multicols} +\popquestions + +\vskip-6pt + +\begin{eqComments}[Indefinite Integration.] +There are two integration problems, again, the second question is a copy and paste of the first. +The parameters of the problem were, of course, populated by different random numbers. +\end{eqComments} + +\RandomQ{\a}{1/6}{3/2} +\RandomQ{\b}{1/6}{3/2} +\RandomZ{\c}{1}{3} + +\item $\displaystyle\int \cds\a x^2 + \cds\b x + \ds\c\,dx = + \RespBoxMath{(\a/3)x^3+(\b/2) x^2 + \c x}{3}{.0001}{[0,2]}$\hfill + \CorrAnsButton{(rFrac(rEval(\nOf\a)/rEval(3*\dOf\a))) x^3 + + (rFrac(rEval(\nOf\b)/rEval(2*\dOf\b))) x^2 + + \c x + C}*{rngCorrAnsButton}\kern1bp\sqTallyBox + +\RandomQ{\a}{1/6}{3/2} +\RandomQ{\b}{1/6}{3/2} +\RandomZ{\c}{1}{3} + +\item $\displaystyle\int \cds\a x^2 + \cds\b x + \ds\c\,dx = + \RespBoxMath{(\a/3)x^3+(\b/2) x^2 + \c x}{3}{.0001}{[0,2]}$\hfill + \CorrAnsButton{(rFrac(rEval(\nOf\a)/rEval(3*\dOf\a))) x^3 + + (rFrac(rEval(\nOf\b)/rEval(2*\dOf\b))) x^2 + + \c x + C}*{rngCorrAnsButton}\kern1bp\sqTallyBox + +%\vskip-6pt +\vskip-6pt + +\begin{eqComments} +Definite integration can also be posed, but is not illustrated here. +\end{eqComments} + +\vskip-6pt + +\begin{eqComments}[Analytic Geometry.] +Find the equation of the line that passes through $P$ and $Q$. +\end{eqComments} + +\RandomZ{\a}{-10}{9} +\RandomZ{\b}{-10}{9} +\RandomZ{\c}{\a*}{10} +\RandomZ{\d}{\b*}{10} +\defineDepQJS{\m}{\d - \b}{\c - \a}{rFrac(rEval(\nOf\m)/rEval(\dOf\m))} + +\item $P(\,\a, \b\,)$, $Q(\,\c, \d\,)$: + \RespBoxMath{y = \m*x + (\b - \a*\m) }(xy){3}{.0001}{[0,2]x[0,2]}*{ProcRespEq}\hfill + \CorrAnsButton{y = \js\m\space x + rFrac((rEval( \b * \dOf\m - \a*\nOf\m ))/(rEval(\dOf\m)))}*{rngCorrAnsButton}% + \kern1bp\sqTallyBox + +\RandomZ{\a}{-10}{9} +\RandomZ{\b}{-10}{9} +\RandomZ{\c}{\a*}{10} +\RandomZ{\d}{\b*}{10} +\defineDepQJS{\m} {\d - \b} {\c - \a} {rFrac(rEval(\nOf\m)/rEval(\dOf\m))} + +\item $P(\,\a, \b\,)$, $Q(\,\c, \d\,)$: + \RespBoxMath{y = \m*x + (\b - \a*\m) }(xy){3}{.0001}{[0,2]x[0,2]}*{ProcRespEq}\hfill + \CorrAnsButton{y = \js\m\space x + rFrac((rEval( \b * \dOf\m - \a*\nOf\m ))/(rEval(\dOf\m)))}*{rngCorrAnsButton}% + \kern1bp\sqTallyBox\par\kern2pt +\end{questions} +\end{shortquiz}\hfill\sqClearButton\kern1bp\sqTallyTotal +\par\endgroup +\newtopic\noindent +Each time the manual is compiled, a new set of problems of the same type is generated. +This package is pretty impressive, I'm sure you'll agree. \dps + +These examples were taken from the demo file \texttt{rangen\_tst.tex}. + +\section{Requirements} + +The requirements for your {\LaTeX} system, and well as any other +software, is highlighted in this section. + +\subsection{{\LaTeX} Package Requirements} + +The following packages, in addition to the standard {\LaTeX} +distribution, are required: +\begin{enumerate} + \item The \textsf{lcg} package (2008/09/10 v1.2) by Erich Janka. + \item The \textsf{hyperref} package, a recent version. + \item If you want to use \pkg{rangen} to create quizzes, then + \textsf{exerquiz} of \textcolor{blue}{AeB} is required.\footnote{AeB: \url{http://www.math.uakron.edu/~dpstory/webeq.html}} +\end{enumerate} + +\subsection{PDF Creator Requirements} + +The package works for all PDF creators: Acrobat Distiller, pdftex, and dvipdfm. + +\section{Installation} + +Unzip \texttt{rangen.zip} into your {\LaTeX} tree, the folder \texttt{rangen} is constructed +with to contain the installation. + +\section{Package Options} + +Currently, there is only one option, \opt{testmode}. Then this option is used, +each time the file is run, the random number generator of \pkg{lcd} is re-seeded +Normally, the seed is based on the time, the date and other factors; the clock +of the {\TeX} compiler gives the time to the nearest minute, so one must wait at least +a minute before getting a new seed, this is not acceptable when testing a package. +When \opt{testmode} is used, the initial seed is \texttt{seed=1}, and increments +by one thereafter; after the increment, this value is saved to the file +\cs{jobname.seed} and input back in on the next compile. + +Any other options that are passed to \pkg{rangen}, are passed on to the \textsf{lcg} package. +Useful options for \pkg{lcg} are \texttt{quiet} and \texttt{seed=\meta{number}}. + + +\section{Basic Commands} + +This package defines the commands \cs{RandomZ}, +\cs{RandomQ}, and \cs{RandomR}, \cs{RandomL}, and \cs{RandomI}. We describe +these commands in this section. + +For convenience of terminology, a number created by one of the above commands +will be referred to as a RV (random variable). + +\cs{RandomZ} and \cs{RandomQ} use the count registers, so there is a restriction +on the size of any RV generated by these two commands, we must have +\begin{equation*} + -2^{31}+1 \leq \text{RV} \leq 2^{31}-1\implies + -2147483647 \leq \text{RV} \leq 2147483647 +\end{equation*} +For simple applications envisioned for \pkg{rangen}, this range should be plenty +enough. + +The \cs{RandomR} command uses the dimension registers, so a RV generated by +\cs{RandomR} is restricted to +\begin{equation*} + -2^{14} < \text{RV} < 2^{14}\implies + -16384 < \text{RV} < 16384 +\end{equation*} +Again, this is not a package for making floating point calculations, it is a package +for generating integers, rationals, and decimal numbers with an eye towards application +to academic problem generation. Floating point arithmetic can be accomplished using +the \textsf{fp} package; \pkg{rangen} and \textsf{fp} seem to be compatible. + +\subsection{\texorpdfstring{\protect\cs{RandomZ}}{\CMD{RandomZ}}} + +The command \Com{RandomZ} defines a random integer, the syntax is + +\takeMeasure{\string\RandomZ[\meta{key-values}]\darg{\cs{\meta{name}}}\darg{\meta{zLEP}}\darg{\meta{zUEP}}} +\begin{dCmd*}[commandchars=!()]{\bxSize} +\RandomZ[!meta(key-values)]{!cs(!meta(name))}{!meta(zLEP)}{!meta(zUEP)} +\end{dCmd*} +\PD +\begin{description} +\item [\texttt{\meta{key-values}}] The key-value pairs that modify the choice of +the variable. The key-value pairs recognize are +\begin{description} + \item [\texttt{ne=\meta{value}}] Restrict the choice of the random integer by requiring + it \emph{not be equal} to another number, for example, \texttt{ne=0} or \texttt{ne=\cs{b}}. + In the latter case, \cs{b} is a number defined already by either an earlier + \cs{RandomZ} call, or by \Com{defineZ}, discussed later. Multiple restrictions can + be placed as well, for example, if \verb!ne={0,-1}!, \pkg{rangen} selects an integer + different from 0 or -1. +% \item \texttt{formatOne}: A Boolean formatting key for formatting the number 1; +% for example, instead of typesetting \texttt{1x} the correct syntax is to typeset \texttt{x}. +% To obtain this special formatting, you must use +% \cs{fmt} or \cs{ds}, for example \verb!\fmt\a!. Details are described below. +% \item \texttt{formatPMOne}: A Boolean formatting key for formatting the numbers 1 and -1; +% in addition to formatting of the number 1, if the random integer is -1 we want to +% typeset \texttt{-x} not \texttt{-1x}. To obtain this special formatting, you must use +% \cs{fmt} or \cs{ds}, for example \verb!\fmt\a!. Details are described below. +\end{description} +\item[\cs{\meta{name}}] The name of the random integer. For example, + \cs{a}, \cs{b}, etc. +\item [\meta{zLEP}] An integer that is the lower endpoint of the interval + from which the number is randomly selected. The lower endpoint may be + an integer previously calculated by an earlier \cs{RandomZ} call, for + example, \verb!\RandomZ{\b}{\a}{5}!, this will generate an integer + \cs{b} such that $\cs{a}\le\cs{b}\le5$. To get strict inequality, + append an asterisk (\texttt{*}), for example, if the syntax + \verb!\RandomZ{\b}{\a*}{5}! is used, then \pkg{rangen} attempts to + satisfy $\cs{a}<\cs{b}\le5$. The range of \cs{a} should be such that + the upper limit for \cs{a} is less than the upper limit of \cs{b}. When + the endpoint is a number, the \texttt{*} is ignored.\smallskip + + When the lower endpoint is a command created by the commands + \cs{Random\meta{\upshape{Z|Q|R|L}}} or by + \cs{define\meta{\upshape{Z|Q|R}}}, the endpoint is converted to a real + number. + +\item [\meta{zUEP}] An integer that is the upper endpoint of the interval + from which the number is randomly selected. The upper endpoint may be + an integer previously calculated by an earlier \cs{RandomZ} call, for + example, \verb!\RandomZ{\b}{-5}{\a}!, this will generate an integer + \cs{b} such that $-5\le\cs{b}\le\cs{a}$. To get strict inequality, use + the syntax $-5\le\cs{b}\le\cs{a}*$, then \pkg{rangen} attempts to + satisfy $-5\le\cs{b}<\cs{a}$. The range of \cs{a} should be such that + the lower limit for \cs{a} is greater than the lower limit of \cs{b}. + When the endpoint is a number, the \texttt{*} is ignored.\smallskip + + When the upper endpoint is a command created by the commands + \cs{Random\meta{\upshape{Z|Q|R|L}}} or by + \cs{define\meta{\upshape{Z|Q|R}}}, the endpoint is converted to a real + number. + +\end{description} + +\noindent +\textbf{Examples:} +\begin{enumerate} + \item \verb!\RandomZ{\a}{-5}{5}!: \RandomZ{\a}{-5}{5}\cs{a}=\a. To get another + random integer, we repeatedly execute \verb!\RandomZ{\a}{-5}{5}! followed by + \cs{a}, for example, we copy and paste \verb!\RandomZ{\a}{-5}{5}\a! three times to get + \RandomZ{\a}{-5}{5}\a, \RandomZ{\a}{-5}{5}\a, \RandomZ{\a}{-5}{5}\a. + + \item Illustrate \texttt{ne}: Consider + \verb!\RandomZ[ne={0,-1}]{\a}{-5}{5}\a!, copy and paste + repeatedly: \RandomZ[ne={0,-1}]{\a}{-5}{5}\a, + \RandomZ[ne={0,-1}]{\a}{-5}{5}\a, \RandomZ[ne={0,-1}]{\a}{-5}{5}\a, + \RandomZ[ne={0,-1}]{\a}{-5}{5}\a, and + \RandomZ[ne={0,-1}]{\a}{-5}{5}\a. If \pkg{rangen} worked as it + should, the list of five number should not contain a 0 or a -1, + does it? + \item Illustrate $\cs{a}\le\cs{b}$: We use the code +\begin{Verbatim} +\RandomZ{\a}{-5}{5}\RandomZ{\b}{\a}{10}$\a \le \b$ +\end{Verbatim} + We now copy and paste this code: \RandomZ{\a}{-5}{5}\RandomZ{\b}{\a}{10}$\a \le \b$, + \RandomZ{\a}{-5}{5}\RandomZ{\b}{\a}{10}$\a \le \b$. To get strict inequality we execute +\begin{Verbatim} +\RandomZ{\a}{-5}{5}\RandomZ{\b}{\a*}{10}$\a < \b$ +\end{Verbatim} + We now copy and paste this code: \RandomZ{\a}{-5}{5}\RandomZ{\b}{\a*}{10}$\a < \b$, + \RandomZ{\a}{-5}{5}\RandomZ{\b}{\a*}{10}$\a < \b$ +%\item\texttt{formatOne}: We execute the code +%\begin{Verbatim} +%\RandomZ[formatOne]{\a}{1}{3}$\fmt\a x$ +%\end{Verbatim} +% to get \RandomZ[formatOne]{\a}{1}{3}$\fmt\a x$, \RandomZ[formatOne]{\a}{1}{3}$\fmt\a x$, +% \RandomZ[formatOne]{\a}{1}{3}$\fmt\a x$, \RandomZ[formatOne]{\a}{1}{3}$\fmt\a x$. +% Notice the use of the command \cs{fmt}. When \cs{fmt} is present, the special formatting +% is used; there are times when you want the formatting, and other times when you don't it. For example, +% suppose we want \cs{a} to be a constant term, we want $ 1 + x $ not $\phantom{1}+x$, to get this +% we use create \cs{a} as before \verb!\RandomZ[formatOne]{\a}{1}{3}$\a+\fmt\a x$!, but do not use +% the \cs{fmt} on the first term. This gets us \RandomZ[formatOne]{\a}{1}{3}$\a+\fmt\a x$, +% \RandomZ[formatOne]{\a}{1}{3}$\a+\fmt\a x$, \RandomZ[formatOne]{\a}{1}{3}$\a+\fmt\a x$. +% +%\item\texttt{formatPMOne}: We execute the code +%\begin{Verbatim} +%\RandomZ[ne=0,formatPMOne]{\a}{-2}{2}$\fmt\a x$ +%\end{Verbatim} +%to obtain \RandomZ[ne=0,formatPMOne]{\a}{-2}{2}$\fmt\a x$, \RandomZ[ne=0,formatPMOne]{\a}{-2}{2}$\fmt\a x$, +%\RandomZ[ne=0,formatPMOne]{\a}{-2}{2}$\fmt\a x$, \RandomZ[ne=0,formatPMOne]{\a}{-2}{2}$\fmt\a x$. Let us hope +%we get a -1 in one of those generations. +\end{enumerate} + +\paragraph*{Data Type Properties.}\label{dtProperties}When a random number is created, there are several auxiliary commands that are defined. + +\takeMeasure{\string\nOf\darg{\cs{\meta{name}}}\quad\string\dOf\darg{\cs{\meta{name}}}} +\begin{dCmd*}[commandchars=!()]{\bxSize} +\nOf{!cs(!meta(name))}!quad\dOf{!cs(!meta(name))} +\fmt{!cs(!meta(name))}!quad\ds{!cs(!meta(name))} +\end{dCmd*} +\CmdDescription +\begin{description}\def\1{\hspace{-\labelsep}} + \item\1 \cs{nOf\darg{\cs{\meta{name}}}} is the numerator for the number + \cs{\meta{name}}. For an integer this is just \cs{\meta{name}}. This + function becomes important for rational numbers. If \cs{a} is the + rational number 2/3, then \verb!\nOf{\a}=2!. + + \item\1 \cs{dOf\darg{\cs{\meta{name}}}} is the denominator for the number + \cs{\meta{name}}. For an integer this is just \texttt{1}. This + function becomes important for rational numbers. If \cs{a} is the + rational number 2/3, then \verb!\dOf{\a}=3!. + + \item\1 \cs{fmt\darg{\cs{\meta{name}}}} allows for special formatting for + in-line numbers. Without one of the special formatting options, + \cs{fmt}\cs{a} is the same as \cs{a}. + + \item\1 \cs{ds\darg{\cs{\meta{name}}}} allows for special formatting for + display style number. \cs{ds} is relevant for rational numbers. If + \cs{a} represents the rational 1/2, the \cs{a} expanded is 1/2, while + \cs{ds}\cs{a} expanded is $\frac{1}{2}$. The \cs{ds} command also + obeys the formatting options. +\end{description} + + +\subsection{\texorpdfstring{\protect\cs{RandomQ}}{\CMD{RandomQ}}} + +The command \Com{RandomQ} defines a random rational, the syntax is + +\takeMeasure{\small\string\RandomQ[\meta{key-values}]\darg{\cs{\meta{name}}}% +[\meta{max\_denom}]\darg{\meta{qLEP}}\darg{\meta{qUEP}}} +\begin{dCmd*}[commandchars=!(),fontsize=\small]{\bxSize} +\RandomQ[!meta(key-values)]{!cs(!meta(name))}[!meta(max_denom)]{!meta(qLEP)}{!meta(qUEP)} +\end{dCmd*} +\PD +\begin{description}\def\1{\hspace{-\labelsep}} +\item [\meta{key-values}] The key-value pairs that modify the choice of +the variable. The key-value pairs recognize are +\begin{description} + \item [\texttt{ne=\meta{value}}] Restrict the choice of the random rational by requiring + it \emph{not be equal} to another number, for example, \texttt{ne=0} or \texttt{ne=\cs{b}}. + In the latter case, \cs{b} is a number defined already by either an earlier + \cs{RandomQ} call, or by \Com{defineQ}, discussed later. Multiple restrictions can + be placed as well, for example, if \verb!ne={0,-1}!, \pkg{rangen} selects an integer + different from 0 or -1. +% \item \texttt{formatOne}: A Boolean formatting key for formatting the number 1; +% for example, instead of typesetting \texttt{1x} the correct syntax is to typeset \texttt{x}. +% To obtain this special formatting, you must use +% \cs{fmt} or \cs{ds}, for example \verb!\fmt\a!. Details are described below. +% \item \texttt{formatPMOne}: A Boolean formatting key for formatting the numbers 1 and -1; +% in addition to formatting of the number 1, if the random integer is -1 we want to +% typeset \texttt{-x} not \texttt{-1x}. To obtain this special formatting, you must use +% \cs{fmt} or \cs{ds}, for example \verb!\fmt\a!. Details are described below. +\end{description} +\item\1\cs{\meta{name}} is the name of the random rational. For example, +\cs{a}, \cs{b}, etc. + +\item\1\meta{max\_denom} is the largest denominator you want your random + rational to have. For example, \verb!\RandomQ{\a}[9]{1/2}{7/2}!: The + value of \cs{a} is a rational number between 1/2 and 7/2 having a + maximum denominator of 9. If this parameter is not specified, the least + common denominator is used; for the example, that would be 2. To + contrast the two, consider the following examples: +\begin{enumerate} + \item \verb!\RandomQ{\a}[9]{1/2}{7/2}\a!: \RandomQ{\a}[9]{1/2}{7/2}\a, \RandomQ{\a}[9]{1/2}{7/2}\a, + \RandomQ{\a}[9]{1/2}{7/2}\a, and \RandomQ{\a}[9]{1/2}{7/2}\a. + \item \verb!\RandomQ{\a}{1/2}{7/2}\a!: \RandomQ{\a}{1/2}{7/2}\a, \RandomQ{\a}{1/2}{7/2}\a, + \RandomQ{\a}{1/2}{7/2}\a, \RandomQ{\a}{1/2}{7/2}\a. +\end{enumerate} +The fractions are reduced to lowest terms, and represented as an integer if needed. + +Here is more detail on the algorithm used to generate a rational: We illustrate +using the example, \verb!\RandomQ{\a}[9]{1/2}{7/2}!, the details are simplified slightly. +\begin{enumerate} + \item Convert the range so that the endpoints have a denominator of~9. +\begin{alignat*}{2} + &\texttt{LEP}: \frac{1}{2}= \frac{9/2}{9}=\frac{4.5}{9}< \frac{5}{9}&&\quad\text{round up} \\[1em] + &\texttt{UEP}: \frac{7}{2}= \frac{63/2}{9}=\frac{31.5}{9}>\frac{31}{9}&&\quad\text{round down} +\end{alignat*} +\item We randomly choose an integer between 5 and 31, call it \cs{z}; our random +rational is then \texttt{\cs{z}/9}, unless there is an \texttt{*} affixed to one of +both endpoints. +\item If one or both endpoints is itself a random rational (or integer) and the \texttt{*} +character is used, then the lower end of the range is incremented (from 5 to 6) and/or +the upper end is decremented (from 31 to 30). +\item Reduce the fraction obtained in the previous step. +\end{enumerate} + +You can see from this example, there are a lot of choices for the random +integer, there are 27 possibilities between 5 and 32. + +\item\1 \meta{qLEP} is a rational (of the form a/b) that is the lower + endpoint of the interval from which the number is randomly selected. + The lower endpoint may be a rational (or integer) previously calculated + by an earlier \cs{RandomQ} call, for example, + \verb!\RandomQ{\b}{\a}{4/3}!, this will generate an integer \cs{b} such + that $\cs{a}\le\cs{b}\le4/3$. To get strict inequality, use the syntax + \verb!\RandomZ{\b}{\a*}{4/3}!, then \pkg{rangen} attempts to satisfy + $\cs{a}<\cs{b}\le4/3$. The range of \cs{a} should be such that the + upper limit for \cs{a} is less than the upper limit of \cs{b}. When the + endpoint is a number, the \texttt{*} is ignored.\smallskip + + When the lower endpoint is a command created by any of the commands + \cs{Random\meta{\upshape{Z|Q|R|L}}} or \cs{define\meta{\upshape{Z|Q|R}}}, + the endpoint is converted to a real number. + +\item\1\meta{qUEP} is a rational that is the upper endpoint of the interval + from which the number is randomly selected. The upper endpoint may be a + rational (or integer) previously calculated by an earlier \cs{RandomQ} + call, for example, \verb!\RandomQ{\b}{-4/3}{\a}!, this will generate an + integer \cs{b} such that $-4/3\le\cs{b}\le\cs{a}$. To get strict + inequality, use the syntax $-4/3\le\cs{b}\le\cs{a}*$, then \pkg{rangen} + attempts to satisfy $-4/3\le\cs{b}<\cs{a}$. The range of \cs{a} should + be such that the lower limit for \cs{a} is greater than the lower limit + of \cs{b}. When the endpoint is a number, the \texttt{*} is + ignored.\smallskip + + When the upper endpoint is a command created by any of the commands + \cs{Random\meta{\upshape{Z|Q|R|L}}} or \cs{define\meta{\upshape{Z|Q|R}}}, + the endpoint is converted to a real number. +\end{description} + +\paragraph*{Examples} +\begin{enumerate} + \item \verb!\RandomZ{\a}{-5}{5}!: \RandomZ{\a}{-5}{5}\cs{a}=\a. To get + another random integer, we repeatedly execute + \verb!\RandomZ{\a}{-5}{5}! followed by \cs{a}, for example, we copy + and paste \verb!\RandomZ{\a}{-5}{5}\a! three times to get + \RandomZ{\a}{-5}{5}\a, \RandomZ{\a}{-5}{5}\a, + \RandomZ{\a}{-5}{5}\a. + + \item Illustrate \texttt{ne}: Copy and paste +\begin{Verbatim} +\RandomZ[ne={0,-1}]{\a}{-5}{5}\a +\end{Verbatim} + repeatedly to obtain: + \RandomZ[ne={0,-1}]{\a}{-5}{5}\a, \RandomZ[ne={0,-1}]{\a}{-5}{5}\a, + \RandomZ[ne={0,-1}]{\a}{-5}{5}\a, \RandomZ[ne={0,-1}]{\a}{-5}{5}\a, + and \RandomZ[ne={0,-1}]{\a}{-5}{5}\a. If \pkg{rangen} worked as it + should, the list of five number should not contain a 0 or a -1, + does it? + \item Illustrate $\cs{a}\le\cs{b}$: We use the code +\begin{Verbatim} +\RandomZ{\a}{-5}{5}\RandomZ{\b}{\a}{10}$\a \le \b$ +\end{Verbatim} + We now copy and paste this code: \RandomZ{\a}{-5}{5}\RandomZ{\b}{\a}{10}$\a \le \b$, + \RandomZ{\a}{-5}{5}\RandomZ{\b}{\a}{10}$\a \le \b$. To get strict inequality we execute +\begin{Verbatim} +\RandomZ{\a}{-5}{5}\RandomZ{\b}{\a*}{10}$\a < \b$ +\end{Verbatim} + We now copy and paste this code: + \RandomZ{\a}{-5}{5}\RandomZ{\b}{\a*}{10}$\a < \b$, + \RandomZ{\a}{-5}{5}\RandomZ{\b}{\a*}{10}$\a < \b$ +%\item\texttt{formatOne}: We execute the code +%\begin{Verbatim} +%\RandomZ[formatOne]{\a}{1}{3}$\fmt\a x$ +%\end{Verbatim} +% to get \RandomZ[formatOne]{\a}{1}{3}$\fmt\a x$, \RandomZ[formatOne]{\a}{1}{3}$\fmt\a x$, +% \RandomZ[formatOne]{\a}{1}{3}$\fmt\a x$, \RandomZ[formatOne]{\a}{1}{3}$\fmt\a x$. +% Notice the use of the command \cs{fmt}. When \cs{fmt} is present, the special formatting +% is used; there are times when you want the formatting, and other times when you don't it. For example, +% suppose we want \cs{a} to be a constant term, we want $ 1 + x $ not $\phantom{1}+x$, to get this +% we use create \cs{a} as before \verb!\RandomZ[formatOne]{\a}{1}{3}$\a+\fmt\a x$!, but do not use +% the \cs{fmt} on the first term. This gets us \RandomZ[formatOne]{\a}{1}{3}$\a+\fmt\a x$, +% \RandomZ[formatOne]{\a}{1}{3}$\a+\fmt\a x$, \RandomZ[formatOne]{\a}{1}{3}$\a+\fmt\a x$. +% +%\item\texttt{formatPMOne}: We execute the code +%\begin{Verbatim} +%\RandomZ[ne=0,formatPMOne]{\a}{-2}{2}$\fmt\a x$ +%\end{Verbatim} +%to obtain \RandomZ[ne=0,formatPMOne]{\a}{-2}{2}$\fmt\a x$, \RandomZ[ne=0,formatPMOne]{\a}{-2}{2}$\fmt\a x$, +%\RandomZ[ne=0,formatPMOne]{\a}{-2}{2}$\fmt\a x$, \RandomZ[ne=0,formatPMOne]{\a}{-2}{2}$\fmt\a x$. Let us hope +%we get a -1 in one of those generations. + + \item \verb!\RandomQ{\a}{-5/2}{5/2}!: \RandomQ{\a}{-5/2}{5/2}\cs{a}=\a. + We repeatedly copy and paste \verb!\RandomQ{\a}{-5/2}{5/2}\a! three + times to get \RandomQ{\a}{-5/2}{5/2}\a, \RandomQ{\a}{-5/2}{5/2}\a, + \RandomQ{\a}{-5/2}{5/2}\a. + + \item Illustrate \texttt{ne}: + \verb!\RandomQ[ne={0,-1}]{\a}{-5/2}{5/2}\a!, copy and paste this + code repeatedly: \RandomQ[ne={0,-1}]{\a}{-5/2}{5/2}\a, + \RandomQ[ne={0,-1}]{\a}{-5/2}{5/2}\a, + \RandomQ[ne={0,-1}]{\a}{-5/2}{5/2}\a, + \RandomQ[ne={0,-1}]{\a}{-5/2}{5/2}\a, and + \RandomQ[ne={0,-1}]{\a}{-5/2}{5/2}\a. If \pkg{rangen} worked as it + should, the list of five number should not contain a 0 or a -1, + does it? + + \item Illustrate $\cs{a}\le\cs{b}$: We use the code +\begin{Verbatim}[fontsize=\small] +\RandomQ{\a}{-5/2}{5/2}\RandomQ{\b}[4]{\a}{10}$\a \le \b$ +\end{Verbatim} + and copy and paste: \RandomQ{\a}{-5/2}{5/2}\RandomQ{\b}[4]{\a}{10}$\a \le \b$, + \RandomQ{\a}{-5/2}{5/2}\RandomQ{\b}[4]{\a}{10}$\a \le \b$. To get strict inequality we execute +\begin{Verbatim}[fontsize=\small] +\RandomQ{\a}{-5/2}{5/2}\RandomQ{\b}[4]{\a*}{10}$\a < \b$ +\end{Verbatim} + to get \RandomQ{\a}{-5/2}{5/2}\RandomQ{\b}[4]{\a*}{10}$\a < \b$, + \RandomQ{\a}{-5/2}{5/2}\RandomQ{\b}[4]{\a*}{10}$\a < \b$ +%\item\texttt{formatOne}: We execute the code +%\begin{Verbatim} +%\RandomQ[formatOne]{\a}{2/3}{4/3}$\ds\a x$ +%\end{Verbatim} +% to get \RandomQ[formatOne]{\a}{2/3}{4/3}$\ds\a x$, \RandomQ[formatOne]{\a}{2/3}{4/3}$\ds\a x$, +% \RandomQ[formatOne]{\a}{2/3}{4/3}$\ds\a x$, \RandomQ[formatOne]{\a}{2/3}{4/3}$\ds\a x$. +% Notice the use of the command \cs{ds}. When \cs{ds} is present, the special formatting +% is used; there are times when you want the formatting, and other times when you don't it. For example, +% suppose we want \cs{a} to be a constant term, we want $ 1 + x $ not $\phantom{1}+x$, to get this +% we use create \cs{a} as before\\[3pt] +% \verb!\RandomQ[formatOne]{\a}{2/3}{4/3}$\a+\ds\a x$!,\\[3pt] +% but do not use +% the \cs{ds} on the first term. This gets us \RandomQ[formatOne]{\a}{2/3}{4/3}$\a+\ds\a x$, +% \RandomQ[formatOne]{\a}{2/3}{4/3}$\a+\ds\a x$, \RandomQ[formatOne]{\a}{2/3}{4/3}$\a+\ds\a x$. +% +%\item\texttt{formatPMOne}: We execute the code +%\begin{Verbatim} +%\RandomQ[formatPMOne]{\a}{-6/5}{-4/5}$\ds\a x$ +%\end{Verbatim} +%to obtain \RandomQ[formatPMOne]{\a}{-6/5}{-4/5}$\ds\a x$, \RandomQ[formatPMOne]{\a}{-6/5}{-4/5}$\ds\a x$, +%\RandomQ[formatPMOne]{\a}{-6/5}{-4/5}$\ds\a x$, \RandomQ[formatPMOne]{\a}{-6/5}{-4/5}$\ds\a x$. Let us hope +%we get a -1 in one of those generations. +\end{enumerate} +For a rational number, the commands \cs{nOf}, \cs{dOf}, \cs{fmt}, and \cs{ds} are +also defined, see \Nameref{dtProperties}. + +\subsection{\texorpdfstring{\protect\cs{RandomR}}{\CMD{RandomR}}} + +The command \Com{RandomR} defines a random real number, the syntax is + +\takeMeasure{\string\RandomR[\meta{key-values}]\darg{\cs{\meta{name}}}% +\darg{\meta{rLEP}}\darg{\meta{rUEP}}} +\begin{dCmd*}[commandchars=!()]{\bxSize} +\RandomR[!meta(key-values)]{!cs(!meta(name))}{!meta(rLEP)}{!meta(rUEP)} +\end{dCmd*} +\PD +\begin{description}\def\1{\hspace{-\labelsep}} +\item [\meta{key-values}] The key-value pairs that modify the choice of +the variable. The key-value pairs recognize are +\begin{description} + \item [\texttt{round=\meta{value}}] Round the generated real number so + that number of decimal places equals the \meta{value}, the value of + the \texttt{round} key; for example, \texttt{round=2} rounds the + result to 2 decimal places. + + \item [\texttt{showzeros=\meta{\upshape{true|false}}}] Show trailing + zeros, only valid when the \texttt{round} key is used. For example, + \texttt{round=4,showzeros} might yield a result of 3.2300, whereas + without the \texttt{showzeros} key (or with + \texttt{showzeros=false}), the same result would be 3.23. + + \item [\texttt{ne=\meta{value}}] Restrict the choice of the random real + by requiring it \emph{not be equal} to another number real, for + example, \texttt{ne=-1} or \texttt{ne=\cs{b}}. In the latter case, + \cs{b} is a number defined already by either an earlier + \cs{RandomR} call, or by \Com{defineR}, discussed later. Multiple + restrictions can be placed as well, for example, if + \verb!ne={0,-1}!, \pkg{rangen} selects an integer different from 0 + or -1.\smallskip + + Note, comparisons are made \emph{after} rounding. + +\end{description} + +\item\1\cs{\meta{name}} is the name of the random rational. For example, +\cs{a}, \cs{b}, etc. + +\item\1 \meta{rLEP} is a real number (or integer) that is the lower + endpoint of the interval from which the number is randomly selected. + The lower endpoint may be a number previously calculated by an earlier + \cs{RandomR} call, for example, \verb!\RandomR{\b}{\a}{1.3}!, this will + generate an integer \cs{b} such that $\cs{a}\le\cs{b}\le1.3$. To get + strict inequality, use the syntax \verb!\RandomZ{\b}{\a*}{1.3}!, then + \pkg{rangen} attempts to satisfy $\cs{a}<\cs{b}\le4/3$. The range of + \cs{a} should be such that the upper limit for \cs{a} is less than the + upper limit of \cs{b}. When the endpoint is a number, the \texttt{*} is + ignored.\smallskip + + When the lower endpoint is a command created by ant if the command + \cs{Random\meta{\upshape{Z|Q|R|L}}}, or by + \cs{define\meta{\upshape{Z|Q|R}}}, the endpoint is converted to a real + number. + +\item\1 \meta{rUEP} is a real number that is the upper endpoint of the + interval from which the number is randomly selected. The upper endpoint + may be a number previously calculated by an earlier \cs{RandomR} call, + for example, \verb!\RandomR{\b}{-1.3}{\a}!, this will generate an + integer \cs{b} such that $-1.3\le\cs{b}\le\cs{a}$. To get strict + inequality, use the syntax $-1.3\le\cs{b}\le\cs{a}*$, then \pkg{rangen} + attempts to satisfy $-1.3\le\cs{b}<\cs{a}$. The range of \cs{a} should + be such that the lower limit for \cs{a} is greater than the lower limit + of \cs{b}. When the endpoint is a number, the \texttt{*} is + ignored.\smallskip + + When the upper endpoint is a command created by ant if the command + \cs{Random\meta{\upshape{Z|Q|R|L}}}, or by + \cs{define\meta{\upshape{Z|Q|R}}}, the endpoint is converted to a real + number. +\end{description} +The \cs{RandomR} command divides range ($\meta{rUEP}-\meta{rLEP}$) into equal +sub-intervals, and randomly chooses node (an endpoint of one of the +sub-intervals). The number of subdivisions is determined by +\cs{RNGpowerOfTen}, and can be set by \cs{nDivisionsPowerOfTen}. This latter +command takes an integer argument, $n$, $1\le n\le 4$, the number of +subdivisions is then $10^n$. Strictly speaking \cs{RNGpowerOfTen} does not +have to be a power of 10, you can make the definition +\verb!\def\RNGpowerOfTen{16}!, and that should work as well. The default is +\verb!\nDivisionsPowerOfTen{2}!, that is, divide the range into 100 equal +subdivisions. + +\paragraph*{Examples:} + +\begin{enumerate} + \item \verb!\RandomR{\a}{-2.3}{2.3}!: \RandomR{\a}{-2.3}{2.3}\cs{a}=\a. + To obtain more random real numbers, repeatedly execute + \verb!\RandomR{\a}{-2.3}{2.3}! followed by \cs{a}; for example, + \verb!\RandomR{\a}{-2.3}{2.3}\a! repeated three times yields the following: +\begin{equation*} + \RandomR{\a}{-2.3}{2.3}\a,\ \RandomR{\a}{-2.3}{2.3}\a,\ \RandomR{\a}{-2.3}{2.3}\a +\end{equation*} + + \item \texttt{round}: We use \verb!\RandomR[round=4]{\a}{-2}{2}\a! to get +\begin{equation*} + \RandomR[round=4]{\a}{-2}{2}\a,\ \RandomR[round=4]{\a}{-2}{2}\a,\ + \RandomR[round=4]{\a}{-2}{2}\a +\end{equation*} + + \item \texttt{showzeros}: \verb!\RandomR[round=4,showzeros]{\a}{-2}{2}\a!: +\begin{equation*} + \RandomR[round=4,showzeros]{\a}{-2}{2}\a,\ \RandomR[round=4,showzeros]{\a}{-2}{2}\a,\ + \RandomR[round=4,showzeros]{\a}{-2}{2}\a,\ \RandomR[round=4,showzeros]{\a}{-2}{2}\a,\ + \RandomR[round=4,showzeros]{\a}{-2}{2}\a +\end{equation*} + + \item Illustrate $\cs{a}\le\cs{b}$: We use the code +\begin{Verbatim} +\RandomR{\a}{-5}{5}\RandomR{\b}{\a}{10}$\a \le \b$ +\end{Verbatim} + We now copy and paste this code twice: +\begin{equation*} + \RandomR{\a}{-5}{5}\RandomR{\b}{\a}{10}\a \le \b,\ + \RandomR{\a}{-5}{5}\RandomR{\b}{\a}{10}\a \le \b +\end{equation*} +To get strict inequality we execute +\begin{Verbatim} +\RandomR{\a}{-5}{5}\RandomR{\b}{\a*}{10}$\a < \b$ +\end{Verbatim} + We now copy and paste this code a couple of times: +\begin{equation*} + \RandomR{\a}{-5}{5}\RandomR{\b}{\a*}{10} \a < \b,\ + \RandomR{\a}{-5}{5}\RandomR{\b}{\a*}{10} \a < \b +\end{equation*} +For real numbers, there is little chance the two values are equal, but just in case, strict +inequality may be specified in this way. +\end{enumerate} + +\subsection{\texorpdfstring{\protect\cs{RandomL}}{\CMD{RandomL}}} + +The command \Com{RandomL} defines a list of numbers (integer, rational, decimal), +and randomly selects a number from the list. + +\takeMeasure{\string\RandomR[\meta{key-values}]\darg{\cs{\meta{name}}}% +\darg{\meta{n\SUB{1},n\SUB{2},n\SUB{3},...}}}% +\begin{dCmd*}[commandchars=!()]{\bxSize} +\RandomL[!meta(key-values)]{!cs(!meta(name))}{!meta(n!SUB(1),n!SUB(2),n!SUB(3),...)} +\end{dCmd*} + +\PD +\begin{description}\def\1{\hspace{-\labelsep}} +\item [\texttt{\meta{key-values}}] The only key-value pairs recognized is + \texttt{index=\meta{posZ}}. The index is a base-1 index, thus \texttt{index=1} + references the first number in the list. + + The \texttt{index} key can be used to retrieve a particular number from + this list; for example, declaring + \verb!\RandomL[index=2]{\a}{17,1/2,1.3}!, the value of \cs{a} is 1/2. + + The value of \texttt{index} can be any positive integer, even one generated + using \cs{RandomI}. If the value of \texttt{index} is greater than the + number of items in the list, modular arithmetic is performed to put the + index back into the proper range. + + When the \texttt{index} key is not present, a number is randomly selected + from the list. + +\item\1\cs{\meta{name}} is the name of the number generated. The number + generated will be defined as integer, rational, or real; consequently + \cs{nOf}, \cs{dOf}, \cs{fmt}, and \cs{ds} are defined. + +\item \meta{n\SUB{1},n\SUB{2},n\SUB{3},...} A (possibly mixed) list of + numbers. The numbers can be literal (12, 1.2, 3/4), or control + sequences of numbers (commands) defined earlier by \cs{Random\meta{\upshape{Z|Q|R|L}}} + or by \cs{define\meta{\upshape{Z|Q|R}}}. +\end{description} + +\paragraph*{Examples} + +\begin{enumerate} + \item After declaring \verb!\RandomL{\a}{17,3.14,88,3/4,1/2}!, the value + of \cs{a} is \RandomL{\a}{17,3.14,88,3/4,1/2}\texttt{\cs{a} = \a}, + Select a number from this list at random + \RandomL{\a}{17,3.14,88,3/4,1/2}\texttt{\string\a=\a}, again + \RandomL{\a}{17,3.14,88,3/4,1/2}\texttt{\string\a=\a}, and again + \RandomL{\a}{17,3.14,88,3/4,1/2}\texttt{\string\a=\a}. + \item \verb!\RandomL[index=3]{\a}{17,3.14,88,3/4,1/2}\a!, + \RandomL[index=3]{\a}{17,3.14,88,3/4,1/2}\texttt{\string\a=\a}. +\end{enumerate} + +\subsection{\texorpdfstring{\protect\cs{RandomI}}{\CMD{RandomI}}} + +The command \Com{RandomI} defines a list of integers, \verb!{1,2,3...n}! +and randomly selects an integer, thought of as an index value, from the list. + +\takeMeasure{\string\RandomI\darg{\cs{\meta{name}}}\darg{\meta{n}}}% +\begin{dCmd*}[commandchars=!()]{\bxSize} +\RandomI{!cs(!meta(name))}{!meta(n)} +\end{dCmd*} +\PD +\begin{description}\def\1{\hspace{-\labelsep}} + +\item\1\cs{\meta{name}} is the name of the number generated, the number +will be defined as an integer number. + +\item\1 \meta{n} is a positive number greater than 1. The list + \verb!{1,2,3...n}! is implicitly created. +\end{description} + +\paragraph*{Example:} \verb!\RandomI{\indx}{20}\indx! yields \RandomI{\indx}{20}\indx, +\RandomI{\indx}{20}\indx, \RandomI{\indx}{20}\indx, \RandomI{\indx}{20}\indx, when copied +and pasted four times. + +\newtopic\noindent +My thought in creating \cs{RandomI} is to use it in conjunction with +\cs{RandomL} (using the \texttt{index} key). For example, +\begin{Verbatim} + \RandomI{\indx}{4} + \RandomL[index=\indx]{\a}{1/2,1/3,1/4,1/5} + \RandomL[index=\indx]{\b}{5/3,6/5,7/2,5/6} +\begin{equation*} + (\a)+(\b) = +\end{equation*} +\end{Verbatim} + + \RandomI{\indx}{4} + \RandomL[index=\indx]{\a}{1/2,1/3,1/4,1/5} + \RandomL[index=\indx]{\b}{5/3,6/5,7/2,5/6} + +\noindent +This code results in the following arithmetic problem: +\begin{equation*} + (\a)+(\b) = +\end{equation*} +This is probably not a good example of the usage of \cs{RandomI}. See the next section +on \cs{RandomP}. + +\subsection{\texorpdfstring{\protect\cs{RandomP}}{\CMD{RandomP}}} + +The command \Com{RandomP} defines a list of strings (literal expressions), +and randomly selects one from the list. (The ``P'' in \cs{RandomP} stands +for ``Problem.'') + +\takeMeasure{\string\RandomP[\meta{key-values}]\darg{\cs{\meta{name}}}\darg{\meta{list of literals}}}% +\begin{dCmd*}[commandchars=!()]{\bxSize} +\RandomP[!meta(key-values)]{!cs(!meta(name))}{!meta(list of literals)} +\end{dCmd*} + +\PD +\begin{description}\def\1{\hspace{-\labelsep}} + +\item [\texttt{\meta{key-values}}] The only key-value pairs recognized is + \texttt{index=\meta{posZ}}. The index is a base-1 index, thus index=1 + references the first number in the list. + + The \texttt{index} key can be used to retrieve a particular literal from + this list; for example, by executing \verb!\RandomP[index=2]{\a}{d,p,s}!, + the value of \cs{a} is \texttt{p}. + + The value of \texttt{index} can be any positive integer, even one generated + using \cs{RandomI}, or by another list. If the value of \texttt{index} is + greater than the number of items in the list, modular arithmetic is + performed to put the index back into the proper range. + + When the \texttt{index} key is not present, a number is randomly selected + from the list. + +\item\1\cs{\meta{name}} is the name of the literal generated. + +\item\1\meta{list of literals} is a comma-delimited list of literal + strings, selected literal is not interpreted as a number, but is passed + into the definition of \cs{\meta{name}}. +\end{description} + +\paragraph*{Examples} + +\begin{enumerate} + \item Executing \verb!\RandomP{\a}{1+16,\cos(\pi),%!\\ + \verb! \frac{d}{dx}\frac{1}{2}x^2,{\int \cos(x)\,dx}}!\\ + \verb!$\texttt{\string\a} = \a$!, we get + \RandomP[index=5]{\a}{1+16,\cos(\pi),\frac{d}{dx}\frac{1}{2}x^2}% + $\texttt{\string\a} = \a $, and then again, + \RandomP{\a}{1+16,\cos(\pi),\frac{d}{dx}\frac{1}{2}x^2}% + $ \texttt{\string\a} = \a $. + \item Use \cs{RandomI} with \cs{RandomP}. You can create a series + of questions and answers using these two: +\begin{Verbatim}[fontsize=\small] +\RandomI{\indx}{5} +\RandomP[index=\indx]{\q}{1+16,\cos(\pi),\pi\sin(\pi),% + \frac{d}{dx}\frac{1}{2}x^2,{\int \cos(x)\,dx}} +\RandomP[index=\indx]{\a}{17,-1,0,x,\sin(x)+C} +\begin{equation*} + \q = \a +\end{equation*} +\end{Verbatim} + +\RandomI{\indx}{5} +%\typeout{index=\iOf{\indx}}% +\RandomP[index=\indx]{\q}{1+16,\cos(\pi),\pi\sin(\pi),\frac{d}{dx}\frac{1}{2}x^2,{\int \cos(x)\,dx}} +\RandomP[index=\indx]{\a}{17,-1,0,x,\sin(x)+C} + +The execution of these lines becomes +\begin{equation*} + \q = \a +\end{equation*} +You can create a switch to include the answer or not. + +\item There is an alternate approach to this previous example. +Random lists (\cs{RandomL} and \cs{RandomP}) define a macro \cs{iOf}, +the value of which is the index of the item selected (at random). +We can use \cs{iOf} in the above problem as follows: +\begin{Verbatim}[fontsize=\small] +\RandomP{\q}{1+16,\cos(\pi),\pi\sin(\pi),% + \displaystyle\frac{d}{dx}\frac{1}{2}x^2,% + {\int \cos(x)\,dx}} +\RandomP[index=\iOf{\q}]{\a}{17,-1,0,x,\sin(x)+C} +\begin{equation*} + \q = \a +\end{equation*} +\end{Verbatim} +The execution of these lines gives the output\dots +\RandomP{\q}{1+16,\cos(\pi),\pi\sin(\pi),% + \displaystyle\frac{d}{dx}\frac{1}{2}x^2,{\int \cos(x)\,dx}} +\RandomP[index=\iOf{\q}]{\a}{17,-1,0,x,\sin(x)+C} +\begin{equation*} + \q = \a +\end{equation*} +Here, we select the answer to the randomly chosen question. +\end{enumerate} + +\subsection{\texorpdfstring{\protect\cs{RandomS}}{\CMD{RandomS}}} + +The command \cs{RandomS} generates a random sign, either \texttt{+} +or \texttt{-}. This may be useful for creating addition/subtraction +problems. + +\takeMeasure{\string\RandomS[\meta{dec}]\darg{\cs{\meta{name}}}}% +\begin{dCmd*}[commandchars=!()]{\bxSize} +\RandomS[!meta(dec)]{!cs(!meta(name))} +\end{dCmd*} + +\PD +\begin{description}\def\1{\hspace{-\labelsep}} + +\item\1\meta{dec} is a number between 0 and 1. This command generates a + \texttt{+} sign with probability \meta{dec}. The default value is + 0.5. + +\item\1\cs{\meta{name}} is the name that references the generated random sign. + +\end{description} + +\paragraph*{Examples} + +\begin{enumerate} + \item Random addition problem: +\begin{Verbatim} +\RandomZ{\a}{1}{20}\RandomZ{\b}{1}{20}\RandomS{\s} +\begin{equation*} + \a \s \b +\end{equation*} +\end{Verbatim} + +\RandomZ{\a}{1}{20}\RandomZ{\b}{1}{20}\RandomS{\s} + +This code expands to +\begin{equation*} + \a \s \b +\end{equation*} +Whether we add or subtract the summands is determined by the command \cs{s}. + +\item Random Differentiation problem: +\begin{Verbatim} +\RandomQ{\a}[8]{1}{2}\RandomQ{\b}[8]{2}{3} +\RandomZ{\n}{1}{6}\RandomS{\si}\RandomS{\sii} + +Differentiate +\begin{equation*} + \frac{d}{dx}(\bigl (\a) \si (\b) x^{\sii\n}\bigr) +\end{equation*} +\end{Verbatim} + +\RandomQ{\a}[8]{1}{2}\RandomQ{\b}[8]{2}{3} +\RandomZ{\n}{1}{6}\RandomS{\si}\RandomS{\sii} + +Differentiate +\begin{equation*} + \frac{d}{dx}\bigl( (\a) \si (\b) x^{\sii\n}\bigr) +\end{equation*} +\end{enumerate} + +\subsection{Commands that Operate on Numbers} + +Associated with each data type (integer, rational, and real) are several +useful commands \cs{nOf}, \cs{dOf}, \cs{iOf}, \cs{fmt}, and \cs{ds}. + +\subsubsection{\texorpdfstring{\protect\cs{nOf} and \protect\cs{dOf}}{\CMD{nOf} and \CMD{dOf}}} + +For integer, rational, and real numbers \cs{nOf} and \cs{dOf} are +the numerator and denominator, respectively. +\begin{itemize} + \item Integer: \cs{nOf} is the integer, and \cs{dOf} is 1; for example, + define an integer by \verb!\RandomZ{\a}{-5}{5}!,\RandomZ{\a}{-5}{5} \cs{a}=\a, + \verb!\nOf{\a}!=\nOf{\a}, \verb!\dOf{\a}!=\dOf{\a}, as advertised. + + \item Rational: \cs{nOf} is the numerator (an integer), and \cs{dOf} is the + denominator (an integer) of the reduced fraction. For example, define \cs{a} by + \verb!\RandomQ[ne=0]{\a}[9]{-3/2}{3/2}!,\RandomQ[ne=0]{\a}[9]{-3/2}{3/2} then + \begin{equation*} + \cs{a}=\a,\ \verb!\nOf{\a}!=\nOf{\a},\ \text{and}\ \verb!\dOf{\a}!=\dOf{\a}. + \end{equation*} + \item Real: \cs{nOf} is the numerator (an integer), and \cs{dOf} is the + denominator (an integer) of the reduced fraction, after the real is converted + into a rational number. For example, \verb!\RandomR{\a}{.25}{.75}!,\RandomR{\a}{.25}{.75} + then + \begin{equation*} + \cs{a}=\a,\ \verb!\nOf{\a}!=\nOf{\a},\ \text{and}\ \verb!\dOf{\a}!=\dOf{\a} + \end{equation*} + If we round using with \verb!\RandomR[round=2]{\a}{.25}{.75}!, we get + \begin{equation*} + \RandomR[round=2]{\a}{.25}{.75}\cs{a}=\a,\ \verb!\nOf{\a}!=\nOf{\a},\ \text{and}\ \verb!\dOf{\a}!=\dOf{\a} + \end{equation*} +% \cs{a}=\a, \verb!\nOf{\a}!=\nOf{\a}, and \verb!\dOf{\a}!=\dOf{\a} +\end{itemize} + + +\subsubsection{Special Formatting Commands: The \texorpdfstring{\protect\cs{ds}}{\CMD{ds}} +and \texorpdfstring{\protect\cs{fmt}}{\CMD{fmt}} families} + +When a RV, such as \cs{a}, is a rational number type, say \cs{a}=1/3, the command \cs{a} expands +to 1/3. To get a display style formatting of the rational use the \Com{ds} command. +The expansion of \texttt{\$\cs{ds}\cs{a}\$} is $\frac13$. + +We have seen in several examples in which the formatting was not always what we'd like. +Expressions like $x^{1}$ should be $x$, $1x$ should be $x$, $-1x$ should be $-x$. +The formatting commands \cs{cfmt} and \cs{efmt} (and their display style counterparts +\cs{cds} and \cs{eds}) attempt to format the special cases of 1 and -1, as they appear +in an exponent (the `e' variations) and as they appear as a coefficient (the `c' variations). + +All the formatting commands \cs{cfmt}, \cs{efmt}, \cs{ds}, \cs{cds}, and +\cs{eds} take a RV as its argument. +\cs{\meta{\upshape{c|e}}fmt}|\cs{\meta{\upshape{c|e}}ds}\cs{a} expands to +\cs{a} when \cs{a} is not 1 or -1. These cases are covered below. + +\begin{itemize} + \item For \cs{a}=1, + \cs{cfmt}\cs{a}=\cs{efmt}\cs{a}=\cs{cds}\cs{a}=\cs{eds}\cs{a}=\darg{}, + the empty string. Thus, \defineZ{\a}{1}if \cs{a}=\a, and we typeset + \verb!$\a x^{\a}$!, we get $\a x^{\a}$, which is not the standard + way of writing this expression, but if we typeset \verb!$\cfmt\a x^{\efmt\a}$! we get $\cfmt\a x^{\efmt\a}$, which is correct. + Notice that we used \cs{cfmt} on the baseline, and \cs{efmt} in the + exponent. It does not make any difference here, but it does if + \cs{a}=-1, see the next bullet point. + + \item \cs{a}=-1, then + \begin{align*} + &\cs{cfmt}\cs{a}=\cs{cds}\cs{a}=\texttt{-}\quad\text{(minus sign)}\\ + &\cs{efmt}\cs{a}=\cs{eds}\cs{a}=\texttt{-1}\quad\text{(minus one)} + \end{align*} + Returning to the same expression in the previous bullet, if + \defineZ{\a}{-1}\cs{a}=\a, and we typeset + \verb!$\a x^{\a}$!, we get $\a x^{\a}$, which is not the standard way + of writing this expression, but, on the other hand, if we typeset + \verb!$\cfmt\ax^{\efmt\a}$! we get $\cfmt\a x^{\efmt\a}$, which is correct. Notice + the difference cases if I had typeset \verb!$\cfmt\a x^{\cfmt\a}$!, I + would have gotten $\cfmt\a x^{\cfmt\a}$, not good. + + The `c'-variation is used for unitary signs, not binary signs. For example, + \defineZ{\a}{-1}, if \cs{a}=\a, and we typeset \verb!$2 + \cfmt\a x$!, we get + $2 + \cfmt\a x$, which may be fine is some situations, but most of the time + it is not. As a work around, make coefficients positive, and generate a random sign + using \cs{RandomS}; for example, after declaring +\begin{Verbatim} +\RandomS{\s}\RandomZ{\a}{1}{3} +\end{Verbatim} + and typeseting \verb!$2 \s \cfmt\a x$!, we get an addition half the + time and subtraction the other half: \RandomS{\s}\RandomZ{\a}{1}{3}$2 + \s \cfmt\a x$, \RandomS{\s}\RandomZ{\a}{1}{3}$2 \s \cfmt\a x$, + \RandomS{\s}\RandomZ{\a}{1}{3}$2 \s \cfmt\a x$, + \RandomS{\s}\RandomZ{\a}{1}{3}$2 \s \cfmt\a x$, + \RandomS{\s}\RandomZ{\a}{1}{3}$2 \s \cfmt\a x$, + \RandomS{\s}\RandomZ{\a}{1}{3}$2 \s \cfmt\a x$. + + Similarly, the `e'-variation is for unitary sign in the exponent, and + should be used when there is a need for these special format rules. + + \item Random Sign: The formatting commands are defined for a random sign + created by \cs{RandomS} and following the same definitions outline + above. These are of marginal value in this context. +% \item[] \verb!\RandomL{\a}{-1,1}\RandomS{\s}$\a \s x^{\efmt\s x}$! yields the +% expression \RandomL{\a}{-1,1}\RandomS{\s}$\a \s e^{\efmt\a x}$ +\end{itemize} + +\subsubsection{Getting the Data type with \texorpdfstring{\protect\cs{typeOf}}{\CMD{typeOf}}} + +There may be occasions where you want to know the data type of a RV. The \pkg{rangen} +does change the data type in special cases. For example, if \cs{a} is created by +\verb~\cs{RandomQ}{\a}[2]{1}{3}~, and its value happens to be an integer, \pkg{rangen} +changes its type of integer. You can determine the type of a RV with the \cs{typeOf} +command, which takes a RV as its argument, the value of \cs{typeOf} is a nonnegative integer. The following table gives +the values of \cs{typeOf}, and associated data types. +\begin{flushleft} +\hspace{\amtIndent}\begin{tabular}{lc} +Data type & \cs{typeOf}\\\hline +Integer & 0 \\ +Rational & 1 \\ +Real & 2 \\ +Literal & 3 +\end{tabular} +\end{flushleft} + +\paragraph*{A suggested application to \cs{typeOf}.} Suppose, \cs{a} is a rational RV +(for example, \verb!\RandomQ{\a}[2]{1}{3}!), and we want to typeset the +expression \verb!$\cfmt\a x$!. One instance might be +\defineQ{\a}{3}{2}$\cfmt\a x$, this is not good syntax; so we typeset +\verb!$(\cfmt\a) x$! to get $(\cfmt\a) x$, that's good. But if \cs{a} is an +integer, such as 1, 2, or 3, we get \defineQ{\a}{2}{1}$(\cfmt\a) x$, which +contains redundant parentheses. Now we come to the use of \cs{typeof}. We now +typeset the expression +\begin{Verbatim} +$ \ifnum\typeOf\a=0\relax\cfmt\a\else(\cfmt\a)\fi x $ +\end{Verbatim} +If \cs{a} is \emph{not an integer} we get, \defineQ{\a}{3}{2}for \cs{a}=\a, we obtain +$\ifnum\typeOf\a=0\relax\cfmt\a\else(\cfmt\a)\fi x$, but for +\defineQ{\a}{2}{1}for \cs{a}=\a, we get +$\ifnum\typeOf\a=0\relax\cfmt\a\else(\cfmt\a)\fi x$. + +\subsection{\texorpdfstring{\protect\cs{defineZ}}{\CMD{defineZ}}, +\texorpdfstring{\protect\cs{defineQ}}{\CMD{defineQ}}, and +\texorpdfstring{\protect\cs{defineR}}{\CMD{defineR}}} + +The \pkg{rangen} package internally uses \cs{defineZ}, \cs{defineQ}, +and \cs{defineR} to define an integer, a rational number, and a real (decimal) number. +These command may be used by the document author as well to create non-random variables. + +\takeMeasure{\string\defineQ\darg{\cs{\meta{name}}}\darg{\meta{zNumer}}\darg{\meta{zDenom}}}% +\begin{dCmd*}[commandchars=!()]{\bxSize} +\defineZ{!cs(!meta(name))}{!meta(zValue)} +\defineQ{!cs(!meta(name))}{!meta(zNumer)}{!meta(zDenom)} +\defineR{!cs(!meta(name))}{!meta(rValue)} +\end{dCmd*} +Thus, \verb!\defineZ{\a}{17}!\defineZ{\a}{17} defines \cs{a}=\a, \verb!\defineQ{\a}{-3}{2}! +\defineQ{\a}{-3}{2} defines \cs{a}=\a, and \verb!\defineR{\a}{17.88}!\defineR{\a}{17.88} defines +\cs{a}=\a. + +The various properties data types are created by \cs{defineZ}, \cs{defineQ}, +and \cs{defineR}; these are \cs{nOf}, \cs{dOf}, \cs{typeOf}, \cs{ds}, \cs{eds}, +\cs{cds}, \cs{efmt}, and \cs{cfmt}. + +\newtopic\noindent +The following are other important points to remember. +\begin{itemize} +\item \textbf{Positive Denominators.} Notice that if \verb!\defineQ{\a}{3}{-2}!,\defineQ{\a}{3}{-2} then \cs{a}=\a, and +\cs{nOf}\cs{a}=\nOf\a, and \cs{dOf}\cs{a}=\dOf\a. Thus, \pkg{rangen} does not allow a +negative denominator. + +\item \textbf{Automatic Reduction.} If we declare + \verb!\defineQ{\a}{6}{4}!,\defineQ{\a}{6}{4} then \cs{a}=\a, a rational + number is automatically reduced to lowest terms. + +\item \textbf{Re-classification.} If we make the definition \verb!\defineQ{\a}{6}{2}!,\defineQ{\a}{6}{2} then \cs{a}={\a} is reduced +to lowest terms and re-classified as an integer \cs{typeOf}\cs{a}=\typeOf\a~(an integer). +\end{itemize} + +\section{\textsf{rangen} and \textsf{fp}} + +After a little bit of testing, it appears that \textsf{fp} can work with the \texttt{rangen} package. +The \texttt{rangen} package does not provide any command for combining RVs using such operations +as addition, subtraction, multiplication, division, etc. + +The \texttt{rangen} package package does provide several useful commands that \textsf{fp} does not, +these are \cs{reduceFrac}, \cs{gcd}, and \cs{lcm}. + +\Com{reduceFrac} takes two arguments (numerator and denominator), both integers, and attempts to reduce the implied fraction +to lowest terms, and returns the result in two macros \cs{rfNumer} and \cs{rfDenom}. For example, +to reduce the fraction $4/12$, we execute \verb!\reduceFrac{4}{12}!, which returns\reduceFrac{4}{12} \cs{rfNumer}=\rfNumer, and +\cs{rfDenom}=\rfDenom, forming the reduced fraction $\rfNumer/\rfDenom$; thus, +$4/12 = \rfNumer/\rfDenom$. + +The \emph{greatest common divisor} command \cs{gcd} takes two integers as its arguments +and returns its result in the macro \cs{thegcd}. For example, the \verb!\gcd{4,8}! is +\gcd{4}{8}\thegcd, while the \verb!\gcd{4}{6}! is \gcd{4}{6}\thegcd. + +The \emph{least common multiple} command \cs{lcd} takes two integers as its arguments, +and returns its result in the macro \cs{thelcd}. For example, \verb!\lcm{4}{5}! is +\lcm{4}{5}\cs{thelcm}=\thelcm, while, \verb!\lcm{4}{6}! is \lcm{4}{6}\cs{thelcm}=\thelcm. + +The following example illustrates the use of the \texttt{rangen} and \texttt{fp} packages to pose a random +arithmetic problem, and present a detailed solution. +\begin{Verbatim}[fontsize=\footnotesize] +\RandomQ{\a}[6]{2}{4}\RandomQ{\b}[6]{2}{4} +\gcd{\dOf\a}{\dOf\b} +\FPeval\lcd{clip((\dOf\a)*(\dOf\b)/\thegcd)} +\FPeval\si{clip(\lcd/(\dOf\a))} +\FPeval\sii{clip(\lcd/(\dOf\b))} +\FPeval\finalnum{clip((\si)*(\nOf\a)+(\sii)*(\nOf\b))} +\defineQ{\ans}{\finalnum}{\lcd} +$$ + \ds\a \thisop \ds\b = \frac{(\si)(\nOf\a)+(\sii)(\nOf\b)}{\lcd} + = \frac{\finalnum}{\lcd}\ifnum\lcd=\dOf\ans\else =\ds\ans\fi +$$ +\end{Verbatim} +An instance of this code might look like this: +$$ + \frac{8}{3}+\frac{17}{6}=\frac{(2)(8)+(1)(17)}{6}=\frac{33}{6}=\frac{11}{2} +$$ +If there is any reduction of the fraction (brought on by the \cs{defineQ} command), +this additional expression is included. + +\paragraph*{Demo file.} +See the demo file \texttt{rangen\_fp.tex} for a complete example. + +\section{\textsf{rangen} and \textsf{exerquiz}} + +Developing a package for randomly generating numbers that could be +used as a basis for creating random quizzes (see the example back in +\hyperref[s:intro]{Section~\ref*{s:intro}}, page~\pageref*{s:intro}) +was my original motivation for writing the original package back in +the year 2000 AD. In this section, we introduce the techniques that +I've developed for creating random quizzes, and, more importantly, +how to grade them and to exhibit to the user the correct answer. +This system is not a computer algebra system, so, it is difficult, +but not impossible to also supply a solution (a opposed to just the +answer) to the problem as well. + +\paragraph*{Demo file.} Now, let's see how its done! Examples of this section were taken from the +demo file \texttt{rangen\_tst.tex}. + +\subsection{Creating Quizzes using \textsf{rangen}} + + +The \pkg{rangen} package provides three JavaScript functions that are used with \textsf{exerquiz} +quizzes, these are +\begin{itemize} + \item \texttt{rEval(str)}: The function \texttt{rEval} evaluates its + argument. The \texttt{rEval} function searches its argument for + \texttt{rEval} and \texttt{rFrac}, and executes any inner nested + functions first. + \item \texttt{rFrac(str)}: Evaluates a rational number by evaluating + the value of the numerator and denominator separately. The function + \texttt{rFrac} searches its argument for \texttt{rEval} and + \texttt{rFrac}, and executes any inner nested functions first. + \item \texttt{rngCorrAnsButton}: A function that is used to represent + the correct answer to the user. +\end{itemize} +The best way of illustrating these function is by discussing an example or two. + +\renewcommand\titleQuizfmt{\bfseries\color{red}} +\titleQuiz*{Example~1. } +\begin{shortquiz}*[sq1] We create two RVs, \cs{a} and \cs{b} that are rational numbers. We want to +add them, and present the answer as a rational number. +\begin{Verbatim}[fontsize=\small] +\RandomQ{\a}[16]{1/8}{15/16}\RandomQ[ne=\a]{\b}[16]{1/8}{15/16} +\end{Verbatim} +\begin{questions} +\RandomQ{\a}[16]{1/8}{15/16}\RandomQ[ne=\a]{\b}[16]{1/8}{15/16} + +\item $\displaystyle\ds\a - \ds\b = + \RespBoxMath[\rectW{.5in}]{ (\nOf\a * \dOf\b - \nOf\b * \dOf\a )/( \dOf\a * \dOf\b ) }{2}{.0001}{[0,2]}[{priorParse: \Array(nodec,NoAddOrSub)}]$\hfill + \CorrAnsButton{rFrac( rEval( \nOf\a * \dOf\b - \nOf\b * \dOf\a )/rEval( \dOf\a * \dOf\b ) )}*{rngCorrAnsButton}\kern1bp\sqClearButton +\end{questions} +\end{shortquiz} +\vskip-.5\baselineskip +The question is posed using \cs{RespBoxMath}. +\begin{Verbatim}[xleftmargin=20pt,numbers=left,fontsize=\small] +$\displaystyle\ds\a - \ds\b = +\RespBoxMath[\rectW{.5in}]{ + (\nOf\a*\dOf\b-\nOf\b*\dOf\a)/(\dOf\a*\dOf\b)} + {2}{.0001}{[0,2]} + [{priorParse: \Array(nodec,NoAddOrSub)}]$ +\end{Verbatim} +\textsf{Exerquiz} determines whether the user's answer is correct, it by evaluating +the author's answer at randomly selected points. Exerquiz uses the floating point arithmetic +of JavaScript to evaluate the user's answer. The author's correct answer is given +in line (1), and it is just the formula for combining two fractions \cs{a} and \cs{b}; +note the use of \cs{nOf} and \cs{dOf}. Line~(2) is standard parameters for \cs{RespBoxMath}, +the number of random points to use, the precision, and the interval from which to select the +points. Line~(3) specifies a couple of routines from the \textsf{dljslib} package, these +prevent the user from using decimals and rational arithmetic to answer the question. (The latter +function would, for example, prevent the user from copying the question and pasting it into the +answer.) + +Now comes the most interesting part, at least to me: The presentation of the correct +answer to the user. These is where the JavaScript functions \texttt{rEval} and \texttt{rFrac} are used. +The code for the answer button is shown below. +\begin{Verbatim}[xleftmargin=20pt,numbers=left,fontsize=\small] +\CorrAnsButton{rFrac( + rEval(\nOf\a*\dOf\b-\nOf\b*\dOf\a)/rEval(\dOf\a*\dOf\b) +)}*{rngCorrAnsButton} +\end{Verbatim} +Here, this code is broken across several lines to fit on the page. We direct the \cs{CorrAnsButton} +to use the function \texttt{rngCorrAnsButton}, as seen in line~(3). This is a special function +define by \pkg{rangen} to help in the presentation of the answer to the user. + +Keep in mind, the inner-most \texttt{rEval} and \texttt{rFrac} +functions are evaluated first; consequently, the two \texttt{rEval} +functions in line~(2) are evaluated first. These two evaluations +calculate the numerator and denominator separately, this results in +a numerical numerator and denominator. The function \texttt{rFrac} +is then executed on the resulting rational number, this function +reduces the fraction to lowers terms. This final calculation is what +the user sees when the correct answer button is pressed. + +The next example will illustrate a decimal presentation of the answer, and introduces +a new command, \Com{RNGprintf}. + +\titleQuiz*{Example~2. } +\begin{shortquiz}*[sq2] We create four RVs, \cs{a}, \cs{b}, \cs{c}, and \cs{n}, three rational and one integer. +The exponent of the power is rational, hence, we represent a decimal answer to the user. +\begin{Verbatim}[fontsize=\small] +\RandomQ{\a}[8]{1/4}{7/6}\RandomZ{\b}{1}{3} +\RandomQ{\n}[8]{1/2}{3/2}\RandomZ[ne=\zZero]{\c}{-3}{3} +\end{Verbatim} +\begin{questions}\setcounter{eqquestionnoi}{1} +\RandomQ{\a}[8]{1/4}{7/6} +\RandomZ{\b}{1}{3} +\RandomQ{\n}[8]{1/2}{3/2} +\RandomZ[ne=\zZero]{\c}{-3}{3} + +\item $\displaystyle\int_{\a}^{\b} \cfmt\c x^{\efmt\n}\,dx = + \RespBoxMath{\c((\b)^(\n+1)-(\a)^(\n+1))/(\n+1)}{3}{.0001}{[0,2]}$\hfill + \CorrAnsButton{rEval(\c((\b)^(\n+1)-(\a)^(\n+1))/(\n+1))}*{rngCorrAnsButton\RNGprintf{\%.4f}}\kern1bp\sqClearButton +\end{questions} +\end{shortquiz} +\vskip-.5\baselineskip +The question is posed using \cs{RespBoxMath}. +\begin{Verbatim}[xleftmargin=20pt,numbers=left,fontsize=\small] +$\displaystyle\int_{\a}^{\b} \cfmt\c x^{\efmt\n}\,dx = + \RespBoxMath{\c((\b)^(\n+1)-(\a)^(\n+1))/(\n+1)} + {3}{.0001}{[0,2]}$ +\end{Verbatim} +The correct answer is given on line~(2), and is based on the known form of the integrand; here, +we use standard integration formulas. + +The code for the correct answer button has a new element in it +\begin{Verbatim}[xleftmargin=20pt,numbers=left,fontsize=\small] +\CorrAnsButton{rEval( + \c((\b)^(\n+1)-(\a)^(\n+1))/(\n+1) +)}*{rngCorrAnsButton\RNGprintf{\%.4f}}}\kern1bp\sqTallyBox +\end{Verbatim} +The \texttt{rEval} function evaluates the expression on line~(2), the result +is a decimal number. As before, we use the \texttt{rngCorrAnsButton}, but we've +added the \Com{RNGprintf} command to the end of the function name. This is a kludge +that I've developed to be able to format a numerical answer. The \cs{RNGprintf} command +uses the Acrobat JavaScript function \texttt{util.printf}. The argument of \cs{RNGprintf} +is passed to \texttt{util.printf} as its formatting string. Here, we use +\verb!\%.4f!, so the number is presented as a floating point number with four decimal places. +See the documentation of \texttt{util.printf} in the \textsl{JavaScript for Acrobat API Reference.}\footnote +{\url{{http://livedocs.adobe.com/acrobat_sdk/9/Acrobat9_HTMLHelp}}} + + +The final example it the one seen in \Nameref{s:intro}, it uses another new command, +\Com{defineDepQJS}. This command is used to define a new RV as a rational function of other RVs, +and to define special JavaScript formatting, \cs{js}. The results of this command are used +exclusively for JavaScript, and are not meant to be typeset. + +\takeMeasure{\string\defineDepQJS\darg{\cs{\meta{name}}}% +\darg{\meta{numer}}\darg{\meta{denom}}\darg{\meta{script}}}% +\begin{dCmd*}[commandchars=!()]{\bxSize} +\defineDepQJS{!cs(!meta(name))}{!meta(numer)}{!meta(denom)}{!meta(script)} +\end{dCmd*} +\noindent This function defines \cs{\meta{name}} to be +\texttt{(\meta{numer})/(\meta{denom})}. The expression \meta{numer} and +\meta{denom} can be functions of RV defined earlier. The $4^{\text{th}}$ +argument is JavaScript for evaluating \cs{\meta{name}}; \meta{script} is +accessed by \cs{js\cs{\meta{name}}} and is used from within a +\cs{CorrAnsButton}. The $4^{\text{th}}$ argument can include such +commands as \cs{\meta{name}}, \cs{nOf}\cs{\meta{name}}, and +\cs{dOf}\cs{\meta{name}}. An example will perhaps illustrate. + +\titleQuiz*{Example~3. } +\begin{shortquiz}*[sq3] Find the equation of the line that passes through $P$ and $Q$. + +We begin by defining our variables: +\begin{Verbatim}[xleftmargin=20pt,numbers=left,fontsize=\small] +\RandomZ{\a}{-10}{9}\RandomZ{\b}{-10}{9} +\RandomZ{\c}{\a*}{10}\RandomZ{\d}{\b*}{10} +\defineDepQJS{\m}{\d - \b}{\c - \a} + {rFrac(rEval(\nOf\m)/rEval(\dOf\m))} +\defineDepQJS{\yIntercept}{\b - \a*\m}{1} + {rFrac((rEval(\b*\dOf\m-\a*\nOf\m))/(rEval(\dOf\m)))} +\end{Verbatim} +Our big problem is to compute the slope of the line, \cs{m}. I define \cs{m} +as using \cs{defineDepQJS}. The numerator and denominator are those in the +slope calculation, given two points. The expansion of \cs{m} is +\verb!(\d-\b)/(\c-\a)!, and the JavaScript will perform the arithmetic +operations. The expression that is accessed with the \cs{js} is the fourth +argument, line~(4); here, we calculate slope as a rational number. We make a +similar definition for the \cs{yIntercept} of the line. + +Below are the two points \verb!$P(\a, \b)$! and \verb!$Q(\c, \d)$!. +\begin{questions}\setcounter{eqquestionnoi}{2} +\RandomZ{\a}{-10}{9}\RandomZ{\b}{-10}{9} +\RandomZ{\c}{\a*}{10}\RandomZ{\d}{\b*}{10} +\defineDepQJS{\m}{\d - \b}{\c - \a}{rFrac(rEval(\nOf\m)/rEval(\dOf\m))} +\defineDepQJS{\yIntercept}{\b - \a*\m}{1}{rFrac((rEval( \b * \dOf\m - \a*\nOf\m ))/(rEval(\dOf\m)))} + +\item $P(\,\a, \b\,)$, $Q(\,\c, \d\,)$: + \RespBoxMath{y = \m*x + \yIntercept}(xy){3}{.0001}{[0,2]x[0,2]}*{ProcRespEq}\hfill + \CorrAnsButton{y = \js\m\space x + \js\yIntercept}*{rngCorrAnsButton}% + \kern1bp\sqClearButton +\end{questions} +\end{shortquiz} +\vskip-.5\baselineskip +The question is posed using \cs{RespBoxMath}. +\begin{Verbatim}[xleftmargin=20pt,numbers=left,fontsize=\small] +$P(\,\a, \b\,)$, $Q(\,\c, \d\,)$: + \RespBoxMath{y=\m*x + \yIntercept}(xy) + {3}{.0001}{[0,2]x[0,2]}*{ProcRespEq} +\end{Verbatim} +The answer is given in line~(2), and will be evaluated numerically, and compared numerically +with the user's response. + +The code for the correct answer button has a new element in it +\begin{Verbatim}[xleftmargin=20pt,numbers=left,fontsize=\small] +\CorrAnsButton{y = \js\m\space x + \js\yIntercept} + *{rngCorrAnsButton} +\end{Verbatim} +The display of the answer is done using \cs{js}\cs{m} and +\cs{js}\cs{yIntercept} to represent the slope and intercept as a rational +number. + +Think of \cs{defineDepQJS} a convenient way of defining (JavaScript) expressions +that will appear in \cs{RespBoxMath} and for \cs{CorrAnsButton}. + +\subsection{Creating Solutions to Random Quizzes} + +Writing a solution to a question that is based on a formula or template can be difficult. +{\LaTeX} is not a computer algebra system, so the possibilities are limited. Still, +\pkg{rangen} supplies the \texttt{writeRVsTo} environment to support a solution. + +\titleQuiz*{Example~4. } +\begin{shortquiz}*[sq1] We create two RVs, \cs{a} and \cs{b} that are rational numbers. We want to +add them, and present the answer as a rational number. +\begin{Verbatim}[fontsize=\small] +\begin{writeRVsTo}{quizzes} +\RandomQ{\a}[16]{1/8}{15/16}\RandomQ[ne=\a]{\b}[16]{1/8}{15/16} +\end{writeRVsTo} +\end{Verbatim} +We make that same definitions as in \textbf{\textcolor{red}{Example~1}}, but we enclose +these definitions within the \texttt{writeRVsTo}. This environment writes its contents +to the quiz solutions file, and also executes its contents. This way, the definitions are +make both here, and just before the solution to this problem in the solutions file. +\begin{questions}\setcounter{eqquestionnoi}{3} +\begin{writeRVsTo}{quizzes} +\RandomQ{\a}[16]{1/8}{15/16}\RandomQ[ne=\a]{\b}[16]{1/8}{15/16} +\end{writeRVsTo} + +\item $\displaystyle\ds\a + \ds\b = + \RespBoxMath[\rectW{.5in}]{ (\nOf\a * \dOf\b + \nOf\b * \dOf\a )/( \dOf\a * \dOf\b ) }*{2}{.0001}{[0,2]}[{priorParse: \Array(nodec,NoAddOrSub)}]$\hfill + \CorrAnsButton{rFrac( rEval( \nOf\a * \dOf\b + \nOf\b * \dOf\a )/rEval( \dOf\a * \dOf\b ) )}*{rngCorrAnsButton}\kern1bp\sqClearButton +\begin{solution}\relax\RNGadd\a\b\defineQ{\ans}{\rfNumer}{\rfDenom}% +The solution to this problem is +\begin{equation*} + \boxed{\ds\a + \ds\b = \ds\ans} +\end{equation*} +Did I forget to tell you that a simple command \cs{RNGadd} for adding two rational numbers +is defined by \pkg{rangen}. Sorry about that! \dps +\end{solution} +\end{questions} +\end{shortquiz} +\vskip-.5\baselineskip +The verbatim listing of this quiz is +\begin{Verbatim}[fontsize=\footnotesize] +\item $\displaystyle\ds\a + \ds\b = +\RespBoxMath[\rectW{.5in}]{ + (\nOf\a*\dOf\b+\nOf\b*\dOf\a)/(\dOf\a*\dOf\b)}*{2} + {.0001}{[0,2]}[{priorParse: \Array(nodec,NoAddOrSub)}]$\hfill +\CorrAnsButton{rFrac(rEval( + \nOf\a * \dOf\b + \nOf\b * \dOf\a)/rEval(\dOf\a * \dOf\b)) +}*{rngCorrAnsButton}\kern1bp\sqClearButton +\begin{solution}\relax\RNGadd\a\b\defineQ{\ans}{\rfNumer}{\rfDenom}% +The solution to this problem is +\begin{equation*} + \boxed{\ds\a - \ds\b = \ds\ans} +\end{equation*} +Did I forget to tell you that a simple command \cs{RNGadd} +for adding two rational numbers is defined by +\pkg{rangen}. Sorry about that! \dps +\end{solution} +\end{Verbatim} + +\newtopic\noindent +The \texttt{writeRVsTo} has the following syntax + +\takeMeasure{\string\begin\darg{writeRVsTo}\darg{quizzes|exercises}}% +\begin{dCmd*}[commandchars=!()]{\bxSize} +\begin{writeRVsTo}{quizzes|exercises} + !meta(rangen commands creating RVs) +\end{writeRVsTo} +\end{dCmd*} +The argument can be either the string \texttt{quizzes} or \texttt{exercises}. In the first case, +the content of the environment is written to the solutions file for quizzes, and in the latter case, +to the solutions file for the exercises. + +\bigskip + +That's all for now, I simply must get back to my retirement. \dps + +\end{document} diff --git a/macros/latex/contrib/rangen/examples/randomLIP.tex b/macros/latex/contrib/rangen/examples/randomLIP.tex new file mode 100644 index 0000000000..9917038150 --- /dev/null +++ b/macros/latex/contrib/rangen/examples/randomLIP.tex @@ -0,0 +1,53 @@ +\documentclass{article} +\usepackage[tight,designv]{web} +\usepackage{insdljs} +\usepackage[testmode,quiet]{rangen} +%\usepackage[seed=30,quiet]{rangen} + +\parindent0pt\parskip6pt + +\begin{document} + +\RandomL{\a}{1,-1}$\texttt{\string\a}=\a, \cfmt\a x$ + +\RandomP[index=5]{\a}{1,x,x^2,x^3}$\a$ + +\RandomI{\indx}{5} +\RandomP[index=\indx]{\q}{1+16,\cos(\pi),\pi\sin(\pi),\frac{d}{dx}\frac{1}{2}x^2,{\int \cos(x)\,dx}} + +$\displaystyle\q$ + +\RandomI{\i}{2}\i +\RandomP[index=\i]{\q}{1+16, \frac{d}{dx}\frac{1}{2}x^2} +\RandomP[index=\i]{\a}{17,x} + +$ \q = \a $ + +\RandomP{\q}{1+16,\frac{d}{dx}\frac{1}{2}x^2} +\RandomP[index=\iOf\q]{\a}{17,x} + +$\displaystyle\q = \a $ + +\RandomI{\i}{6}RandomI=\i + +\RandomL[index=1]{\a}{17,\rPI,3/4,\rE,88,1/2}\a\quad index=\iOf{\a} + +\RandomL[index=\i]{\a}{17,\rPI,3/4,\rE,88,1/2}\a\quad index=\iOf{\a} + +\RandomL{\a}{17,\rPI,3/4,\rE,88,1/2}\a\quad index=\iOf{\a} + +In practice, \verb!\RandomI! can be used to select one of n problems. Here, we have +selected the +\RandomI{\i}{6} +\ifcase\i\relax\or +first\or +second\or +third\or +fourth\or +fifth\or +sixth\fi\space problem. + + + + +\end{document} diff --git a/macros/latex/contrib/rangen/examples/randomQ.tex b/macros/latex/contrib/rangen/examples/randomQ.tex new file mode 100644 index 0000000000..ec2a9081a6 --- /dev/null +++ b/macros/latex/contrib/rangen/examples/randomQ.tex @@ -0,0 +1,27 @@ +\documentclass{article} +\usepackage[dvipsone]{insdljs} +\usepackage[testmode,quiet]{rangen} + + +\parindent0pt\parskip6pt + +\begin{document} + +\RandomQ{\a}[16]{1/8}{3/7}$ 1/8 \le \a \le 3/7 $ + +\RandomQ{\b}[7]{\a}{15/16}$\a \le \b$ + +\RandomQ[ne={0,-1}]{\n}{-3}{2/3}$x^{\efmt\n}$ + + +\defineQ{\a}{5}{3}\RandomQ{\b}[8]{\a*}{10}$ \a < \b $ + +\RandomQ{\a}[8]{1}{5}\RandomQ{\b}[8]{\a}{10}$ \a \le \b $ + +\RandomQ{\a}[8]{1}{5}\RandomQ{\b}[8]{1}{\a*}$ \a > \b $ + +\RandomQ{\a}[2]{1}{5}\RandomQ{\b}[8]{1}{\a}$ \a \ge \b $ + +\RandomQ{\a}[2]{1}{5}$\ifnum\typeOf\a=0\relax\cfmt\a\else(\cfmt\a)\fi x$ + +\end{document} diff --git a/macros/latex/contrib/rangen/examples/randomR.tex b/macros/latex/contrib/rangen/examples/randomR.tex new file mode 100644 index 0000000000..69f2f2ba1a --- /dev/null +++ b/macros/latex/contrib/rangen/examples/randomR.tex @@ -0,0 +1,44 @@ +\documentclass{article} +\usepackage[tight,designv]{web} +\usepackage{insdljs} +\usepackage[testmode,quiet]{rangen} + +\parindent0pt\parskip6pt + +\begin{document} + +\RandomR{\a}{-2.3}{2.3}\a + +\RandomL{\a}{17,\rPI,3/4,\rE,88,1/2} + +Choose at random a number from the list \verb!{17,\rPI,3/4,\rE,88,1/2}!: +The choice is $\texttt{\a}$ + +\rule{\linewidth}{.4pt} + + +\defineR{\a}{-4.5}\defineR{\b}{5.343} + +\RandomR[round=2,showzeros]{\c}{\a}{\b} + +Random Real from the interval \texttt{[\a, \b ]} is \texttt{\c} + +\RandomR[round=2]{\a}{0}{10}\RandomR[round=2]{\b}{0}{12} + +\RandomR[round=2]{\c}{\a}{\b} + +A random Real taken from a random interval \texttt{[\a, \b ]} is \texttt{\c} + + +\rule{\linewidth}{.4pt} + + +\RandomR[round=2,showzeros]{\b}{0}{9.5} +\RandomR[round=2]{\a}{-3}{\b} + +We require \verb!\b! to be greater than \texttt{\string\a}: +$ \texttt{\string\b=\b} > \texttt{\a=\string\a} $ + +$\texttt{\string\a}=\a\approx\nOf{\a}/\dOf{\a}$ + +\end{document} diff --git a/macros/latex/contrib/rangen/examples/randomZ.tex b/macros/latex/contrib/rangen/examples/randomZ.tex new file mode 100644 index 0000000000..233b8efd16 --- /dev/null +++ b/macros/latex/contrib/rangen/examples/randomZ.tex @@ -0,0 +1,38 @@ +\documentclass{article} +\usepackage[dvipsone]{insdljs} +\usepackage[testmode,quiet]{rangen} + + + +\parindent0pt\parskip6pt + +\begin{document} + +\RandomZ[ne={0,-1}]{\n}{-2}{2}$x^{\efmt\n}$ + +\RandomZ[ne=\zZero]{\b}{-1}{1} +The value of \texttt{\string\b=\b} and should be +different from zero. Is it? + +\RandomZ{\a}{1}{5}\RandomZ{\b}{\a*}{10}$ \a < \b $ + +\RandomZ{\a}{1}{5}\RandomZ{\b}{\a*}{10}$ \a \le \b $ + +\RandomZ{\a}{1}{5}\RandomZ{\b}{1}{\a*}$ \a > \b $ + +\RandomZ{\a}{1}{5}\RandomZ{\b}{1}{\a}$ \a \ge \b $ + +\RandomZ[ne=0]{\b}{-1}{1}Is \texttt{\string\b}=\b\space zero? + +\RandomL{\a}{-2,4,6,-12,9,5,17}Select a number from a list \texttt{\string\a=\a} + +\RandomS{\si}\RandomS{\sii} +\RandomZ[ne=0]{\a}{-5}{5} +\RandomZ[ne=0]{\b}{1}{5} +\RandomZ[ne=0]{\c}{1}{5} +\RandomZ[ne=0]{\n}{1}{5} + +$ \cfmt\a x^{\efmt\n} \si \cfmt\b x \sii \c $ + + +\end{document} diff --git a/macros/latex/contrib/rangen/examples/rangen_fp.tex b/macros/latex/contrib/rangen/examples/rangen_fp.tex new file mode 100644 index 0000000000..e7e4fcffda --- /dev/null +++ b/macros/latex/contrib/rangen/examples/rangen_fp.tex @@ -0,0 +1,24 @@ +\documentclass{article} +\usepackage[tight,dvipsone,designv,nodirectory]{web} +\usepackage{insdljs} +\usepackage[testmode,quiet]{rangen} +\usepackage{fp} + +\parindent0pt\parskip6pt + +\begin{document} + +\RandomQ{\a}[6]{2}{4}\RandomQ{\b}[6]{2}{4}\RandomS{\thisop} +\gcd{\dOf\a}{\dOf\b} +\FPeval\lcd{clip((\dOf\a)*(\dOf\b)/\thegcd)} +\FPeval\si{clip(\lcd/(\dOf\a))} +\FPeval\sii{clip(\lcd/(\dOf\b))}\def\thisop{+} +\if\thisop+\FPeval\finalnum{clip((\si)*(\nOf\a)+(\sii)*(\nOf\b))} +\else\FPeval\finalnum{clip((\si)*(\nOf\a)-(\sii)*(\nOf\b))}\fi +\defineQ{\ans}{\finalnum}{\lcd} +$$ +\ds\a \thisop \ds\b = \frac{(\si)(\nOf\a)+(\sii)(\nOf\b)}{\lcd} + = \frac{\finalnum}{\lcd}\ifnum\lcd=\dOf\ans\else =\ds\ans\fi +$$ + +\end{document} diff --git a/macros/latex/contrib/rangen/examples/rangen_tst.tex b/macros/latex/contrib/rangen/examples/rangen_tst.tex new file mode 100644 index 0000000000..c89a5964ce --- /dev/null +++ b/macros/latex/contrib/rangen/examples/rangen_tst.tex @@ -0,0 +1,280 @@ +\documentclass{article} +\usepackage[fleqn]{amsmath} +\usepackage[tight,designiii,usesf]{web} +\usepackage{exerquiz} +\usepackage[equations,ImplMulti,indefIntegral,limitArith,nodec]{dljslib} +\usepackage[quiet,testmode]{rangen} + +\title{Experiments in Creating Random Problems} +\author{D. P. Story} +\subject{Test file for the rangen Package} +\keywords{LaTeX, rangen, quizzes, random} + +\university{NORTHWEST FLORIDA STATE COLLEGE\\ + Department of Mathematics} +\email{dpstory@acrotex.net} +\version{1.0} + +%\nocopyright +\norevisionLabel +\makeatletter +\def\eq@textFont{/TiRo} +\makeatother + +\everyTextField{\BG{1 1 1}} +\everyCheckBox{\BG{1 1 1}} +\everyRespBoxMath{\rectW{1.9in}\textSize{0}} +\everyRespBoxTxt{\rectW{1.9in}\textSize{0}} + +\newcommand{\cs}[1]{\texttt{\char`\\#1}} + +\renewcommand\nodecAlertMsg{% + "A decimal answer is not acceptable here. + Please express your answer using a fraction."} +\newenvironment{eqComments}[1][\strut]{\smallskip\leftskip-\labelwidth +\item[]\textbf{\textcolor{blue}{#1}}}{\par\smallskip} + +\begin{document} + +\maketitle + +\begin{shortquiz}*[sq] Answer each of the following. Passing is 100\%. + +\begin{questions} + +\begin{eqComments}[Arithmetic]\end{eqComments} + +%% addition +\RandomQ{\a}[9]{1/8}{6/7}\RandomQ{\b}[8]{1/16}{15/16} + +\item $\displaystyle \ds\a + \ds\b = + \RespBoxMath{ (\nOf\a * \dOf\b + \nOf\b * \dOf\a )/( \dOf\a * \dOf\b ) }{2}{.0001}{[0,2]}[{priorParse: \Array(nodec,NoAddOrSub)}]$\hfill + \CorrAnsButton{rFrac( rEval( \nOf\a * \dOf\b + \nOf\b * \dOf\a )/rEval( \dOf\a * \dOf\b ))}*{rngCorrAnsButton}\kern1bp\sqTallyBox + +% subtraction +\RandomQ{\a}[16]{1/16}{15/16}\RandomQ[ne=\a]{\b}[16]{1/8}{15/16} + +\item $\displaystyle \ds\a - \ds\b = + \RespBoxMath{ (\nOf\a * \dOf\b - \nOf\b * \dOf\a )/( \dOf\a * \dOf\b ) }{2}{.0001}{[0,2]}[{priorParse: \Array(nodec,NoAddOrSub)}]$\hfill + \CorrAnsButton{rFrac( rEval( \nOf\a * \dOf\b - \nOf\b * \dOf\a )/rEval( \dOf\a * \dOf\b ) )}*{rngCorrAnsButton}\kern1bp\sqTallyBox + +% subtraction +\RandomQ{\a}[16]{1/8}{15/16}\RandomQ[ne=\a]{\b}[16]{1/8}{15/16} + +\item $\displaystyle \ds\a - \ds\b = + \RespBoxMath{ (\nOf\a * \dOf\b - \nOf\b * \dOf\a )/( \dOf\a * \dOf\b ) }{2}{.0001}{[0,2]}[{priorParse: \Array(nodec,NoAddOrSub)}]$\hfill + \CorrAnsButton{rFrac( rEval( \nOf\a * \dOf\b - \nOf\b * \dOf\a )/rEval( \dOf\a * \dOf\b ) )}*{rngCorrAnsButton}\kern1bp\sqTallyBox + +\begin{eqComments} +This next problem illustrates the use of \cs{RandomL} and \cs{RansomAS}. The summands are +determined from a list of rational numbers. Addition or subtraction of the summands is determined +by \cs{RandomAS}. +\end{eqComments} + +%% Random add/subtr using RandomL and RandomAS +\RandomL{\a}{1/2,2/3,5/3,2/5,6/5}\RandomL{\b}{4/3,3/4,8/7,3/2}\RandomS{\as} + +\item $\displaystyle \ds\a \as \ds\b = + \RespBoxMath{ (\nOf\a * \dOf\b \as \nOf\b * \dOf\a )/( \dOf\a * \dOf\b ) }{2}{.0001}{[0,2]}[{priorParse: \Array(nodec,NoAddOrSub)}]$\hfill + \CorrAnsButton{rFrac( rEval( \nOf\a * \dOf\b \as \nOf\b * \dOf\a )/rEval( \dOf\a * \dOf\b ) )}*{rngCorrAnsButton}\kern1bp\sqTallyBox + + +\begin{eqComments} +This next example illustrates how you can create a solution to a problem. This is a simple +addition problem using the built-in command \cs{qAdd}. Solutions to more advanced problems +might be obtained using the \textsf{fp} package. +\end{eqComments} + +\begin{writeRVsTo}{quizzes} +\RandomQ{\a}[9]{1/8}{6/7}\RandomQ{\b}[7]{1/16}{15/16} +\end{writeRVsTo} + +%% addition +\item $\displaystyle \ds\a + \ds\b = + \RespBoxMath{ (\nOf\a * \dOf\b + \nOf\b * \dOf\a )/( \dOf\a * \dOf\b ) }*{2}{.0001}{[0,2]}[{priorParse: \Array(nodec,NoAddOrSub)}]$\hfill + \CorrAnsButton{rFrac( rEval( \nOf\a * \dOf\b + \nOf\b * \dOf\a )/rEval( \dOf\a * \dOf\b ) )}*{rngCorrAnsButton}\kern1bp\sqTallyBox + +\begin{solution}\relax\RNGadd\a\b\defineQ{\ans}{\rfNumer}{\rfDenom}% +The solution to this problem is +\begin{equation*} + \boxed{\ds\a + \ds\b = \ds\ans} +\end{equation*} +\end{solution} + + +\newpage +\begin{eqComments}[Definite Integrals]\end{eqComments} + +\RandomQ{\a}[8]{1/4}{7/6} +\RandomZ{\b}{1}{3} +\RandomQ{\n}[8]{1/2}{3/2} +\RandomZ[ne=0]{\c}{-3}{3} + +\item $\displaystyle\int_{\a}^{\b} \cfmt\c x^{\efmt\n}\,dx = + \RespBoxMath{\c((\b)^(\n+1)-(\a)^(\n+1))/(\n+1)}{3}{.0001}{[0,2]}$\hfill + \CorrAnsButton{rEval(\c((\b)^(\n+1)-(\a)^(\n+1))/(\n+1))}*{rngCorrAnsButton}\kern1bp\sqTallyBox + + +\RandomQ{\a}{1/6}{2/9} +\RandomZ{\b}{1}{10} +\RandomQ[ne={0,-1}]{\n}[5]{-1}{1} +\RandomZ[ne=0]{\c}{-3}{3} + +\item $\displaystyle\int_{\a}^{\b} \cfmt\c x^{\efmt\n}\,dx = + \RespBoxMath{\c((\b)^(\n+1)-(\a)^(\n+1))/(\n+1)}{3}{.0001}{[0,2]}$\hfill + \CorrAnsButton{rEval(\c((\b)^(\n+1)-(\a)^(\n+1))/(\n+1))}*{rngCorrAnsButton}\kern1bp\sqTallyBox + +\RandomZ{\a}{1}{6} +\RandomZ{\b}{\a*}{8} +\RandomZ{\n}{1}{5} +\RandomZ[ne=0]{\c}{-3}{3} + +\item $\displaystyle\int_{\a}^{\b} \cfmt\c x^{\efmt\n}\,dx = + \RespBoxMath{\c((\b)^(\n+1)-(\a)^(\n+1))/(\n+1)}{3}{.0001}{[0,2]}$\hfill + \CorrAnsButton{rFrac(rEval(\c ( (\b)^(\n+1)-(\a)^(\n+1)))/rEval(\n+1))}*{rngCorrAnsButton}\kern1bp\sqTallyBox + +\RandomZ{\a}{1}{5} +\RandomZ{\b}{\a*}{10} +\RandomQ[ne={0,-1}]{\n}{-3}{2/3} +\RandomZ[ne=0]{\c}{-3}{3} + +\item $\displaystyle\int_{\a}^{\b} \cfmt\c x^{\efmt\n}\,dx = + \RespBoxMath{\c((\b)^(\n+1)-(\a)^(\n+1))/(\n+1)}{3}{.0001}{[0,2]}$\hfill + \CorrAnsButton{rEval(\c((\b)^(\n+1)-(\a)^(\n+1))/(\n+1))}*{rngCorrAnsButton}\kern1bp\sqTallyBox + +\RandomQ{\a}{1/4}{2/3} +\RandomQ{\b}{\a*}{7/6} +\RandomQ[ne={0,-1}]{\n}{-3}{2/3} +\RandomZ[ne=0]{\c}{-3}{3} + +\item $\displaystyle\int_{\a}^{\b} \cfmt\c x^{\efmt\n}\,dx = + \RespBoxMath{\c((\b)^(\n+1)-(\a)^(\n+1))/(\n+1)}{3}{.0001}{[0,2]}$\hfill + \CorrAnsButton{rEval(\c((\b)^(\n+1)-(\a)^(\n+1))/(\n+1))}*{rngCorrAnsButton}\kern1bp\sqTallyBox + +\begin{eqComments} +This next problem was created from random lists of values using \cs{RandomL}. +\end{eqComments} + +\RandomL{\c}{1/6,1/4,1/6,1/2} +\RandomL{\a}{1,2,3,4,5,6} +\ifnum\a=1 + \def\strAns{sin(PI/\dOf\c)} +\else + \def\strAns{(1/\a)(sin(\a*PI/\dOf\c))} +\fi + +\item $\displaystyle\int_0^{\pi/\dOf\c} \cos(\cfmt\a x) \,dx = + \RespBoxMath{(1/\a)(sin(\a*PI/\dOf\c))}{3}{.0001}{[0,2]}$\hfill + \CorrAnsButton{rEval(\strAns)}*{rngCorrAnsButton\RNGprintf{\%.4f}}\kern1bp\sqTallyBox + + +\newpage +\begin{eqComments}[Indefinite Integration]\end{eqComments} + +\RandomQ{\a}{1/6}{3/2} +\RandomQ{\b}{1/6}{3/2} +\RandomZ{\c}{1}{3} + +\item $\displaystyle\int \cds\a x^2 + \ds\b x + \c\,dx = + \RespBoxMath{(\a/3)x^3+(\b/2) x^2 + \c x}{3}{.0001}{[0,2]}$\hfill + \CorrAnsButton{(rFrac(rEval(\nOf\a)/rEval(3*\dOf\a))) x^3 + + (rFrac(rEval(\nOf\b)/rEval(2*\dOf\b))) x^2 + + \c x + C}*{rngCorrAnsButton}\kern1bp\sqTallyBox + +\RandomQ{\a}{1/3}{3} +\RandomQ{\b}{1/6}{3/2} +\RandomZ{\c}{1}{3} + +\item $\displaystyle\int \cds\a x^2 + \ds\b x + \c\,dx = + \RespBoxMath{(\a/3)x^3+(\b/2) x^2 + \c x}{3}{.0001}{[0,2]}$\hfill + \CorrAnsButton{(rFrac(rEval(\nOf\a)/rEval(3*\dOf\a))) x^3 + + (rFrac(rEval(\nOf\b)/rEval(2*\dOf\b))) x^2 + + \c x + C}*{rngCorrAnsButton}\kern1bp\sqTallyBox + +\newpage +\begin{eqComments}[Differentiation]\end{eqComments} + +\RandomQ[ne=0]{\c}[4]{-2}{2} +\RandomQ[ne=0]{\n}[1]{-3}{2} + +\item $\displaystyle \frac{d}{dx} \cds\c x^{\efmt\n} = + \ifnum\nOf\n=\dOf\n + \RespBoxMath{\c}{3}{.0001}{[0,2]}$\hfill + \CorrAnsButton{rFrac(\nOf\c/\dOf\c)}*{rngCorrAnsButton}% + \else + \RespBoxMath{\c*\n*x^(\n-1)}{3}{.0001}{[0,2]}$\hfill + \CorrAnsButton{rFrac(rEval(\nOf\c*\nOf\n)/rEval(\dOf\c*\dOf\n)) + x^(rFrac(rEval(\nOf\n-\dOf\n)/\dOf\n))}*{rngCorrAnsButton}% + \fi + \kern1bp\sqTallyBox + +\begin{eqComments} +This next problem uses a random sign, defined by \cs{RandomS}. +\end{eqComments} + +\RandomQ{\c}[4]{2}{3}\RandomS{\s} +\RandomQ[ne=0]{\n}[2]{-3}{2} + +\item $\displaystyle \frac{d}{dx} \cfmt\s\ds\c x^{\efmt\n} = + \ifnum\nOf\n=\dOf\n + \RespBoxMath{\s\c}{3}{.0001}{[0,2]}$\hfill + \CorrAnsButton{\s\nOf\c/\dOf\c}*{rngCorrAnsButton}% + \else + \RespBoxMath{\s\c*\n*x^(\n-1)}{3}{.0001}{[0,2]}$\hfill + \CorrAnsButton{rFrac(rEval(\s\nOf\c*\nOf\n)/rEval(\dOf\c*\dOf\n)) + x^(rFrac(rEval(\nOf\n-\dOf\n)/\dOf\n))}*{rngCorrAnsButton}% + \fi + \kern1bp\sqTallyBox + + +\RandomQ[ne=0]{\c}[4]{-2}{5} +\RandomQ{\n}[4]{2}{5} + +\item $\displaystyle \frac{d}{dx} \ds\c x^{\efmt\n} = + \ifnum\nOf\n=\dOf\n + \RespBoxMath{\c}{3}{.0001}{[0,2]}$\hfill + \CorrAnsButton{\nOf\c/\dOf\c}*{rngCorrAnsButton}% + \else + \RespBoxMath{\c*\n*x^(\n-1)}{3}{.0001}{[0,2]}$\hfill + \CorrAnsButton{rFrac(rEval(\nOf\c*\nOf\n)/rEval(\dOf\c*\dOf\n)) + x^(rFrac(rEval(\nOf\n-\dOf\n)/\dOf\n))}*{rngCorrAnsButton}% + \fi + \kern1bp\sqTallyBox + +\newpage + +\begin{eqComments}[Analytic Geometry]\end{eqComments} + +\RandomZ{\a}{-10}{9} +\RandomZ{\b}{-10}{9} +\RandomZ{\c}{\a*}{10} +\RandomZ{\d}{\b*}{10} +\defineDepQJS{\m}{\d - \b}{\c - \a}{rFrac(rEval(\nOf\m)/rEval(\dOf\m))} +\defineDepQJS{\yIntercept}{\b - \a*\m}{1}{rFrac((rEval( \b * \dOf\m - \a*\nOf\m ))/(rEval(\dOf\m)))} + + +\item Let $P(\,\a, \b\,)$ be a point and $Q(\,\c, \d\,)$ be a point. Find the equation of the line that + passes through $P$ and $Q$.\par\kern3pt + \RespBoxMath{y = \m*x + \yIntercept }(xy){3}{.0001}{[0,2]x[0,2]}*{ProcRespEq}\hfill + \CorrAnsButton{y = \js\m\space x + \js\yIntercept}*{rngCorrAnsButton}% + \kern1bp\sqTallyBox + +\RandomZ{\a}{-10}{9} +\RandomZ{\b}{-10}{9} +\RandomZ{\c}{\a*}{10} +\RandomZ{\d}{\b*}{10} +\defineDepQJS{\m}{\d - \b}{\c - \a}{rFrac(rEval(\nOf\m)/rEval(\dOf\m))} +\defineDepQJS{\yIntercept}{\b - \a*\m}{1}{rFrac((rEval( \b * \dOf\m - \a*\nOf\m ))/(rEval(\dOf\m)))} + +\item Let $P(\,\a, \b\,)$ be a point and $Q(\,\c, \d\,)$ be a point. Find the equation of the line that + passes through $P$ and $Q$.\par\kern3pt + \RespBoxMath{y = \m*x + (\b - \a*\m) }(xy){3}{.0001}{[0,2]x[0,2]}*{ProcRespEq}\hfill + \CorrAnsButton{y = \js\m\space x + \js\yIntercept}*{rngCorrAnsButton}% + \kern1bp\sqTallyBox + +\end{questions} +\end{shortquiz} +\begin{flushright} +\sqClearButton\kern1bp\sqTallyTotal +\end{flushright} +\end{document} diff --git a/macros/latex/contrib/rangen/rangen.dtx b/macros/latex/contrib/rangen/rangen.dtx new file mode 100644 index 0000000000..637775f9c3 --- /dev/null +++ b/macros/latex/contrib/rangen/rangen.dtx @@ -0,0 +1,1988 @@ +%\iffalse +%<*copyright> +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Rangen.sty package, 2016-02-19 %% +%% Copyright (C) 1999-2016 D. P. Story %% +%% dpstory@uakron.edu %% +%% %% +%% This program can redistributed and/or modified under %% +%% the terms of the LaTeX Project Public License %% +%% Distributed from CTAN archives in directory %% +%% macros/latex/base/lppl.txt; either version 1 of the %% +%% License, or (at your option) any later version. %% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%</copyright> +%<package>\NeedsTeXFormat{LaTeX2e}[1997/12/01] +%<package>\ProvidesPackage{rangen} +%<package> [2014/10/17 v1.4 Rangen: Generate Random Questions (dps)] +%<*driver> +\documentclass{ltxdoc} +\usepackage[colorlinks,hyperindex]{hyperref} +%\pdfstringdefDisableCommands{\let\\\textbackslash} +%\EnableCrossrefs \CodelineIndex +\begin{document} + \GetFileInfo{rangen.sty} +% \settowidth{\oddsidemargin}{0pt}% +% \setlength{\evensidemargin}{0pt} +% \setlength{\marginparsep}{0pt} +% \setlength{\marginparwidth}{0pt} +% \setlength\textwidth{6in} +% \hoffset=.5in +% \hsize = 6in + \title{\textsf{Rangen}\texorpdfstring{\\}{:} Random Generation of Integer, Rational, and Real Numbers with + Applications to the \texttt{exercise}, \texttt{quiz}, and \texttt{shortquiz} environments of \textsf{Exerquiz}} + \author{D. P. Story\\ + Email: \texttt{dpstory@uakron.edu}} + \date{processed \today} + \maketitle + \tableofcontents + \let\Email\texttt + \DocInput{rangen.dtx} + \PrintIndex +\end{document} +%</driver> +% \fi +% \MakeShortVerb{|} +% \StopEventually{} +% +% \DoNotIndex{\def,\edef,\gdef,\xdef,\global,\long,\let} +% \DoNotIndex{\expandafter,\string,\the,\ifx,\else,\fi} +% \DoNotIndex{\csname,\endcsname,\relax,\begingroup,\endgroup} +% \DoNotIndex{\DeclareTextCommand,\DeclareTextCompositeCommand} +% \DoNotIndex{\space,\@empty,\special} +% +% \begin{macrocode} +%<*package> +% \end{macrocode} +% \section{Introduction} +% +% This package provides some commands for creating randomly generated integers, rational, +% and real numbers. There are options for specifying constraints on the generation of the numbers. +% Companion JavaScript functions are developed to use these random numbers as part of a +% question in a \texttt{shortquiz} or \texttt{quiz}. The syntax of this package can be used +% to pose number-related questions, the JavaScript can be used to create the answer to the +% question based on a formula. You'll have to see it to believe it. +% +% \section{The Main Code} +% +% \subsection{Declare Options} +% +% This package has one option, other options are passed to the really nice \textsf{lcg} Package, +% by Erich Janka (\texttt{janka@utanet.at}). +% \begin{macrocode} +\newcount\seedCnt +\DeclareOption{testmode}{% + \InputIfFileExists{\jobname.seed}{}{\def\thisseed{1}}% + \PassOptionsToPackage{seed=\thisseed}{lcg}% + \AtEndOfPackage{\reseedEachRun}% +} +\def\reseedEachRun{% + \seedCnt=\thisseed + \advance\seedCnt1\relax + \newwrite \rngWrite + \immediate\openout\rngWrite \jobname.seed + \immediate\write\rngWrite{\string\def\string\thisseed{\the\seedCnt}} + \immediate\closeout\rngWrite +} +\def\RNG@Dec{.} +\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{lcg}} +\ProcessOptions +\RequirePackage{lcg}[2008/09/10] +% \end{macrocode} +% Save the seed value so we can reproduce the same pseudo-random number sequence. +% \begin{macrocode} +\edef\rng@saveSeed{\the\cr@nd} +% \end{macrocode} +% There are three data types: Integer, Rational, and Real. The following macros +% gives each of these types a numerical value, 0, 1 and 2, respectively. +% \begin{macrocode} +\newcount\loopCnt +\def\maxLoopLimit{10} +\def\typeCodeForz{0} +\def\typeCodeForq{1} +\def\typeCodeForr{2} +% \end{macrocode} +% Some scratch count registers +% \begin{macrocode} +\newcount\rng@cnta +\newcount\rng@cntb +% \end{macrocode} +% A random variable is specified using a control sequence, e.g. \cs{a}. The following macro +% extracts the underlying name of the command, e.g. \verb+\@gtVarName{\a}+ expands to \texttt{a}, +% and returns the name as the expansion of the macro \cs{@varName}. +% \begin{macrocode} +\def\@getVarName#1{% + \edef\@varName{\expandafter\@gobble\string#1}% +} +% \end{macrocode} +% The command \cs{@getVarType} takes one argument, a random variable, e.g., \cs{a}. This +% command defines a macro \cs{varType} which expands to the data type the random variable is. +% \begin{macrocode} +\def\@getVarType#1{% + \@getVarName{#1}\edef\varType{\csname typeof@\@varName\endcsname}} +% \end{macrocode} +% \subsection{GCD and Rational Reduction Commands} +% \begin{macro}{\gcd} +% Here we use Euclid's Algorithm to find the greatest common divisor of two integers. +% \begin{macrocode} +\def\gcd#1#2{{% #1 = a, #2 = b + \ifnum#2=0 \edef\next{#1}\else + \@tempcnta=#1 \@tempcntb=#2 \divide\@tempcnta by\@tempcntb + \multiply\@tempcnta by\@tempcntb % q*b + \@tempcntb=#1 + \advance\@tempcntb by-\@tempcnta % remainder in \@tempcntb + \ifnum\@tempcntb=0 + \@tempcnta=#2 + \ifnum\@tempcnta < 0 \@tempcnta=-\@tempcnta\fi + \xdef\gcd@next{\noexpand% + \def\noexpand\thegcd{\the\@tempcnta}}% + \else + \xdef\gcd@next{\noexpand\gcd{#2}{\the\@tempcntb}}% + \fi + \fi}\gcd@next +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\lcm} +% Now compute the least common multiple +% \begin{macrocode} +\def\lcm#1#2{% #1 = a, #2 = b + \gcd{#1}{#2}% + {\@tempcnta=#1 + \multiply\@tempcnta by#2 + \divide\@tempcnta by\thegcd + \xdef\thelcm{\the\@tempcnta}}% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\amodb} +% Modular arithmetic \texttt{a mod b}, returns its results +% as a macro \cs{retnmod}. +% \begin{macrocode} +\def\amodb#1#2{% #1 = a, #2 = b + {\@tempcnta=#1 + \divide\@tempcnta by#2 + \multiply\@tempcnta by#2 + \@tempcntb=#1 + \advance\@tempcntb by-\@tempcnta + \xdef\retnmod{\the\@tempcntb}}% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\reduceFrac} +% Reduce a fraction to lowest terms. The first argument is the numerator and the second +% argument is the denominator. This command computes the \texttt{gcd} of the two integers, +% divides each by the \texttt{gcd}, and returns the results in the two scratch count +% registers \cs{@tempcnta} and \cs{@tempcntb}. +% \begin{macrocode} +\newcommand\reduceFrac[2] +{% + \gcd{#1}{#2}{\@tempcnta=#1 \divide\@tempcnta by\thegcd + \@tempcntb=#2 \divide\@tempcntb by\thegcd + \ifnum\@tempcntb<0\relax +% \end{macrocode} +% Always have the denominator as positive. +% \begin{macrocode} + \@tempcntb=-\@tempcntb + \@tempcnta=-\@tempcnta + \fi + \xdef\rfNumer{\the\@tempcnta}\xdef\rfDenom{\the\@tempcntb}}% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\convertRatTo} +% Converts a fraction \texttt{a/b} (\texttt{\#1/\#2}) to a denominator of \texttt{\#3}. Will return +% new numerator in \cs{rnd@Cnta} register. This will be exact if +% \texttt{\#2} divides \texttt{\#3}. +% \begin{macrocode} +\def\convertRatTo#1#2#3{{% + \@tempcnta=#3 + \multiply\@tempcnta by#1 + \divide\@tempcnta by#2 + \xdef\rng@retn@num{\the\@tempcnta}% +}} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\RNGadd} +% This is the support for rational arithmetic (addition and subtraction). +% Adds two rational numbers, \texttt{\#1} and \texttt{\#2} together. These two rational numbers must have been defined +% already, possibly by \cs{defineQ}. Usage: \verb+\RNGadd\a\b+. This macro returns a rational number: +% the numerator in the \cs{rfNumer} command, and the denominator in the \cs{rfDenom} command. +% For example, +%\begin{verbatim} +%\defineQ\a{1}{3}\defineQ\b{3}{5}\RNGadd\a\b +%\makeatletter +%The sum of $\frac{\nOf\a}{\dOf\a} + \frac{\nOf\b}{\dOf\b} +% = \frac{\rfNumer}{\rfDenom}$ +%\makeatother +%\end{verbatim} +%This code typesets as $\frac{1}{3}+\frac{3}{5}=\frac{14}{15}$. +% \begin{macrocode} +\newcommand\RNGadd[2]{% + \rng@cnta=\nOf#1 \multiply\rng@cnta by\dOf#2 + \rng@cntb=\nOf#2 \multiply\rng@cntb by\dOf#1 + \advance\rng@cnta by\the\rng@cntb + \rng@cntb=\dOf#1 \multiply\rng@cntb by\dOf#2 + \reduceFrac{\the\rng@cnta}{\the\rng@cntb} +} +% \end{macrocode} +% \end{macro} +% This is a simple macro for detecting if the argument \texttt{\#1} +% is a macro or not. Used when interval definitions of the +% \cs{RandomZ/Q/R} macros. +% \begin{macrocode} +\def\rng@isControl#1{\@ifundefined{\expandafter\@gobble\string#1}% + {\let\rng@isC@ntrol=0}{\let\rng@isC@ntrol=1}} +% \end{macrocode} +% This command determines if its argument has an \texttt{*} +% prefixed or post-fixed to its argument. +% If \cs{rng@isStariii} equals \texttt{*}, then an \texttt{*} exists. +% \begin{itemize} +% \item If there is no \texttt{*}, then the argument is \texttt{\#1} +% \item \cs{rng@isStariii} equals \texttt{*}, there is \texttt{*}, +% If the argument has the form \cs{*a}, then \cs{rng@isStari} is \cs{@empty} +% and the argument, stripped of the \texttt{*}, is given as \cs{rng@isStarii} +% \item \cs{rng@isStariii} equals \texttt{*}, there is \texttt{*}, +% If the argument has the form \cs{a*}, then \cs{rng@isStarii} is \cs{@empty} +% and the argument, stripped of the \texttt{*}, is given as \cs{rng@isStari} +%\end{itemize} +% \begin{macrocode} +\def\rng@existStar#1{\rng@existSt@r#1**\@nil} +\def\rng@existSt@r#1*#2*#3\@nil{\def\rng@isStari{#1}% + \def\rng@isStarii{#2}\def\rng@isStariii{#3}% +} +\def\rng@NameEndpoint#1{% + \ifx\rng@isStari\@empty + \edef#1{\expandafter\noexpand\rng@isStarii}% + \else\ifx\rng@isStarii\@empty + \edef#1{\expandafter\noexpand\rng@isStari}% + \fi\fi +} +% \end{macrocode} +% \subsection{Define an Integer and a Rational} +% \begin{macro}{\defineZ} +% Define a integer for use in other macros. +% \begin{macrocode} +\newcommand\defineZ[2] +{% + \@getVarName#1\relax + \expandafter\def\csname typeof@\@varName\endcsname{0}% + \expandafter\edef\csname n@\@varName\endcsname{#2}% + \expandafter\edef\csname d@\@varName\endcsname{1}% + \edef\display@TeXfmt{#2}\edef\inline@TeXfmt{#2}% + \ifnum#2=1\relax\rng@makeOneFmtDefns + \else\ifnum#2=-1\relax\rng@makeMinusOneFmtDefns + \else\rng@makeOtherFmtDefns\fi\fi + \expandafter\let\csname\@varName*\endcsname\display@TeXfmt + \expandafter\let\csname\@varName!\endcsname\inline@TeXfmt + \expandafter\edef\csname\@varName\endcsname{#2}% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\defineQ} +% The following macro defines a rational number. Usage +% \verb+\defineQ\a{1}{2}+. This defines the rational number 1/2 and +% gives it a name, \cs{a}. +% \begin{macrocode} +\newcommand\defineQ[3] +{% + \@getVarName#1\relax + \expandafter\def\csname typeof@\@varName\endcsname{1}% + \expandafter\edef\csname n@\@varName\endcsname{#2}% + \expandafter\edef\csname d@\@varName\endcsname{#3}% + \edef\display@TeXfmt{\frac{#2}{#3}}\edef\inline@TeXfmt{#2/#3}% + \ifnum#2=#3\relax\rng@makeOneFmtDefns + \else\ifnum#2=-#3\relax\rng@makeMinusOneFmtDefns + \else\rng@makeOtherFmtDefns\fi\fi + \expandafter\let\csname\@varName*\endcsname\display@TeXfmt + \expandafter\let\csname\@varName!\endcsname\inline@TeXfmt + \expandafter\edef\csname\@varName\endcsname{#2/#3}% + \simplifyCurrentQ +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\defineR} +% This macro computes: (1) \cs{rng@intpart}; (2) \cs{rng@fracpart}; +% (3) \cs{rndnDec} (the number of decimals of the fractional part); +% (4) \cs{rndPower} (the power of ten determined by \cs{rndnDec}). +% \begin{macrocode} +\newcommand{\defineR}[2]{% + \@getVarName{#1}\RNGparseDec{#2}% + \expandafter\def\csname typeof@\@varName\endcsname{2}% + \reduceFrac{\rng@intpart\rng@fracpart}{\rndPower}% + \expandafter\edef\csname n@\@varName\endcsname{\rfNumer}% + \expandafter\edef\csname d@\@varName\endcsname{\rfDenom}% + \edef\display@TeXfmt{#2}\edef\inline@TeXfmt{#2}% + \ifnum\rfNumer=1\relax\rng@makeOneFmtDefns + \else\ifnum\rfNumer=-1\relax\rng@makeMinusOneFmtDefns + \else\rng@makeOtherFmtDefns\fi\fi + \expandafter\let\csname\@varName*\endcsname\display@TeXfmt + \expandafter\let\csname\@varName!\endcsname\inline@TeXfmt + \expandafter\edef\csname\@varName\endcsname{#2}% + \simplifyCurrentR +} +\newcommand{\simplifyCurrentR}{% + \ifnum\csname d@\@varName\endcsname=1 + \expandafter\defineZ + \csname\@varName\endcsname{\csname n@\@varName\endcsname}\fi +} +% \end{macrocode} +% \end{macro} +% \begin{macrocode} +\def\rng@makeOneFmtDefns{% +% inline + \expandafter\def\csname\@varName!e\endcsname{}% + \expandafter\def\csname\@varName!c\endcsname{}% +% display + \expandafter\def\csname\@varName*e\endcsname{}% + \expandafter\def\csname\@varName*c\endcsname{}% +} +\def\rng@makeMinusOneFmtDefns{% +% inline + \expandafter\def\csname\@varName!e\endcsname{-1}% + \expandafter\def\csname\@varName!c\endcsname{-}% +% display + \expandafter\def\csname\@varName*e\endcsname{-1}% + \expandafter\def\csname\@varName*c\endcsname{-}% +} +\def\rng@makeOtherFmtDefns{% +% inline + \expandafter\let\csname\@varName!e\endcsname\inline@TeXfmt + \expandafter\let\csname\@varName!c\endcsname\inline@TeXfmt +% display + \expandafter\let\csname\@varName*e\endcsname\display@TeXfmt + \expandafter\let\csname\@varName*c\endcsname\display@TeXfmt +} +% \end{macrocode} +% +% \subsection{Parse a Number} +% +% \subsubsection{Parsing a Rational} +% +% \begin{macro}{\RNGparseRat} +% \begin{macrocode} +\def\RNGparseRat#1{\expandafter\@chkslash#1//\@nil} +\def\@chkslash#1/#2/#3\@nil{% + \def\rng@num{#1}\def\rng@denom{#2}% + \def\rng@parseQ@iii{#3}% + \ifx\rng@denom\@empty\def\rng@denom{1}\fi +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Parsing a Real} +% +% \begin{macro}{\RNGparseDec} +% The argument \texttt{\#1} is a decimal number (or integer) +% This macro computes: (1) \cs{rng@intpart}; (2) \cs{rng@fracpart}; +% (3) \cs{rndnDec} (the number of decimals of the fractional part); +% (4) \cs{rndPower} (the power of ten determined by \cs{rndnDec}). +% These variables will be overwritten the next time this command +% is executed. +% \begin{macrocode} +\newcommand{\RNGparseDec}[1]{\edef\parse@argi{#1}% + \expandafter\@chkdec\parse@argi..\@nil} +\def\@chkdec#1.#2.#3\@nil{% + \def\rng@intpart{#1}\def\rng@fracpart{#2}% + \def\rng@parseR@iii{#3}\rng@getnDec} +\def\rng@getnDec{% + \begingroup + \ifx\rng@fracpart\@empty\gdef\rndnDec{0}\gdef\rndPower{1}\else + \count0=0\relax\count2=1\relax + \expandafter\cntNumDec\rng@fracpart\end\fi + \endgroup} +\def\cntNumDec#1#2\end{% + \advance\count0by1 + \def\rng@arg{#2}% + \ifx\rng@arg\@empty + \xdef\rndnDec{\the\count0}% + \xdef\rndPower{1\@nameuse{rng@tz\the\count0}}% + \let\rng@next\relax + \else + \def\rng@next{\cntNumDec#2\end}% + \fi\rng@next +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\nDivisionsPowerOfTen} +% This is a control of how many nodes to create in an interval +% of real numbers, as defined by \cs{RandomR}. The argument is +% an integer between 1 and 4 inclusive. +% \begin{macrocode} +\newcommand{\nDivisionsPowerOfTen}[1]{% + \begingroup + \count0=#1\relax + \ifnum\count0>4\relax + \PackageError{rangen}{Number of subdivisions too large}% + {Reduce the argument of \string\nDivisionsPowerOfTen.}% + \else + \ifnum\count0<1\relax + \PackageError{rangen}{Number of subdivisions too large}% + {Increase the argument of \string\nDivisionsPowerOfTen.}% + \fi\fi + \xdef\RNGpowerOfTen{1\@nameuse{rng@tz#1}}% + \endgroup +} +\nDivisionsPowerOfTen{2} +% \end{macrocode} +% \end{macro} +%\subsection{Creating Random Things} +%\subsubsection{Random Integer} +% \begin{macro}{\RandomZ} +% Randomly generates an integer in the specified range of values. +%\begin{verbatim} +%[#1] Optional parameter to modify the variable. +% #2 The random variable being defined, e.g., \a +% #3 lower limit of random integer +% #4 upper limit of random integer +%\end{verbatim} +% \begin{macrocode} +\newcommand\RandomZ[4][] +{% + \def\rng@ne@values{}% + \setkeys{rangen}{ne,#1}% +% \end{macrocode} +% Now see if there is an \texttt{*}, and get un-stripped +% argument. +% +% The \cs{rng@isControl} lets \cs{rng@isC@ntrol} to 0 if the arg is undefined, +% and lets \cs{rng@isC@ntrol} to 1 if it is defined. +% Check the left endpoint: +% \begin{macrocode} + \let\rng@CtrlLEP=0\let\rng@CtrlUEP=0% + \let\rng@makeLEPStrict=0\let\rng@makeUEPStrict=0% +% \end{macrocode} +% \paragraph*{Left endpoint.} +% \begin{macrocode} + \rng@existStar{#3}\rng@NameEndpoint{\rng@LEP}% + \if\rng@isStariii*\edef\tmp@exp{% + \noexpand\rng@isControl{\expandafter\noexpand\rng@LEP}}\tmp@exp + \if\rng@isC@ntrol1% a control sequence + \let\rng@CtrlLEP=1\let\rng@makeLEPStrict=1% +% \end{macrocode} +% The LEP is a control sequence with a star, we need to increment the value +% of \cs{rng@LEP} to the next largest integer. +% \begin{macrocode} + \edef\tmp@exp{\noexpand% + \@getVarType{\expandafter\noexpand\rng@LEP}}\tmp@exp + \ifcase\varType % integer + \rng@cnta=\rng@LEP + \or % rational + \rng@dima=\expandafter\nOf\rng@LEP pt + \divide\rng@dima by\expandafter\dOf\rng@LEP + \defineR{\rng@LEP}{\strip@pt\rng@dima}% + \RNGparseDec{\rng@LEP}% + \rng@cnta=\rng@intpart + \or % real + \defineR{\rng@LEP}{\rng@LEP}% + \RNGparseDec{\rng@LEP}% + \rng@cnta=\rng@intpart + \fi + \advance\rng@cnta by1\relax + \defineZ{\rng@LEP}{\the\rng@cnta}% + \else +% \end{macrocode} +% Not a control sequence but has a star +% \begin{macrocode} + \defineZ{\rng@LEP}{\rng@LEP}% + \fi + \else +% \end{macrocode} +% No star, control sequence or not? +% \begin{macrocode} + \rng@isControl{#3}% + \if\rng@isC@ntrol1% control sequence + \let\rng@CtrlLEP=1% + \def\rng@LEP{#3}% + \@getVarType{#3}% + \ifcase\varType % integer + \defineZ{\rng@LEP}{#3}% + \or % rational + \rng@dima=\nOf{#3}pt + \divide\rng@dima by\dOf{#3}% + \defineR{\rng@LEP}{\strip@pt\rng@dima}% + \RNGparseDec{\rng@LEP}% + \defineZ{\rng@LEP}{\rng@intpart}% + \or % real + \defineR{\rng@LEP}{\rng@LEP}% + \RNGparseDec{\rng@LEP}% + \defineZ{\rng@LEP}{\rng@intpart}% + \fi + \else +% \end{macrocode} +% A number, no star +% \begin{macrocode} + \defineZ{\rng@LEP}{#3}% + \fi + \fi +% \end{macrocode} +% \paragraph*{Right endpoint.} +% \begin{macrocode} + \rng@existStar{#4}\rng@NameEndpoint{\rng@UEP}% + \if\rng@isStariii*\edef\tmp@exp{% + \noexpand\rng@isControl{\expandafter\noexpand\rng@UEP}}\tmp@exp + \if\rng@isC@ntrol1% a control sequence + \let\rng@CtrlUEP=1\let\rng@makeUEPStrict=1% +% \end{macrocode} +% The UEP is a control sequence with a star, we need to increment the value +% of \cs{rng@UEP} to the next largest integer. +% \begin{macrocode} + \edef\tmp@exp{\noexpand% + \@getVarType{\expandafter\noexpand\rng@UEP}}\tmp@exp + \ifcase\varType % integer + \rng@cnta=\rng@UEP + \or % rational + \rng@dima=\expandafter\nOf\rng@UEP pt + \divide\rng@dima by\expandafter\dOf\rng@UEP + \defineR{\rng@UEP}{\strip@pt\rng@dima}% + \RNGparseDec{\rng@UEP}% + \rng@cnta=\rng@intpart + \or % real + \defineR{\rng@UEP}{\rng@UEP}% + \RNGparseDec{\rng@UEP}% + \rng@cnta=\rng@intpart + \fi + \advance\rng@cnta by-1\relax + \defineZ{\rng@UEP}{\the\rng@cnta}% + \else +% \end{macrocode} +% Not a control sequence but has a star +% \begin{macrocode} + \defineZ{\rng@UEP}{\rng@UEP}% + \fi + \else +% \end{macrocode} +% No star, control sequence or not? +% \begin{macrocode} + \rng@isControl{#4}% + \if\rng@isC@ntrol1% control sequence + \let\rng@CtrlUEP=1% + \def\rng@UEP{#4}% + \@getVarType{#4}% + \ifcase\varType % integer + \defineZ{\rng@UEP}{#4}% + \or % rational + \rng@dima=\nOf{#4}pt + \divide\rng@dima by\dOf{#4}% + \defineR{\rng@UEP}{\strip@pt\rng@dima}% + \RNGparseDec{\rng@UEP}% + \defineZ{\rng@UEP}{\rng@intpart}% + \or % real + \defineR{\rng@UEP}{\rng@UEP}% + \RNGparseDec{\rng@UEP}% + \defineZ{\rng@UEP}{\rng@intpart}% + \fi + \else +% \end{macrocode} +% A number, no star, assume it is an integer +% \begin{macrocode} + \defineZ{\rng@UEP}{#4}% + \fi + \fi +% \end{macrocode} +% \textbf{To Do.} Check if LEP is less than UEP, if not, notify user. +% Save the random variable, e.g., \cs{a} +% \begin{macrocode} + \def\@currentName{#2}% +% \end{macrocode} +% Record the variable type +% \begin{macrocode} + \@getVarName{#2}% + \expandafter\def\csname typeof@\@varName\endcsname{0}% +% \end{macrocode} +% Save the range of this variable +% \begin{macrocode} + \expandafter\edef\csname first@\@varName\endcsname{\rng@LEP}% + \expandafter\edef\csname last@\@varName\endcsname{\rng@UEP}% +% \end{macrocode} +% Now get a value for the variable using \cs{rand}, defined in \texttt{lcg} +% \begin{macrocode} + \rng@chgrand[first=\rng@LEP,last=\rng@UEP]\rand +% \end{macrocode} +% Now define the integer. +% \begin{macrocode} + \defineZ{#2}{\arabic{rand}}% +% \end{macrocode} +% \paragraph*{Constraints} +% We have a random Z, we now try to satisfy the \texttt{ne} condition. +% +% The macro \cs{rangen@ne} can be of the form \verb!{1,3,4,5}!. We try to +% satisfy all the conditions specified by \cs{rangen@ne} +% \begin{macrocode} + \ifx\rangen@ne\@empty\else\loopCnt=0\relax +% \end{macrocode} +% We will try a total number of \cs{maxLoopLimit} to meet the required +% conditions. +% \begin{macrocode} + \@whilenum\loopCnt<\maxLoopLimit\do{% +% \end{macrocode} +% Set \cs{rng@cnta=1}, if \cs{rng@cnta} is still 1 at the end of this +% loop, the condition is satisfied. +% conditions. +% \begin{macrocode} + \rng@cnta=1\relax +% \end{macrocode} +% We use a \cs{@for} loop to run through all the NE values +% \begin{macrocode} + \@for\ne@@tmp:=\rangen@ne\do{% +% \end{macrocode} +% If the current RV is equal to the current NE value, we fail, so we +% ``and'' a zero into the \cs{rng@cnta} register. +% \begin{macrocode} + \ifnum\value{rand}=\ne@@tmp\relax + \multiply\rng@cnta0\relax + \else +% \end{macrocode} +% \dots otherwise, we ``and'' a one. +% \begin{macrocode} + \multiply\rng@cnta1\relax + \fi + }% +% \end{macrocode} +% If \cs{rng@cnt} is still equal to 1, all conditions have been met, +% in this case we set \verb!\loopCnt=\maxLoopLimit! so we can exit the outer loop. +% \begin{macrocode} + \ifnum\rng@cnta=1\relax % all conditions met + \loopCnt=\maxLoopLimit + \else % if \rng@cnta \ne 1, try again +% \end{macrocode} +% Otherwise, we increment the loop, see if we have gone the limit, if +% not, loop back with a new random choice. +% \begin{macrocode} + \advance\loopCnt1\relax + \ifnum\loopCnt=\maxLoopLimit + \PackageWarning{rangen}{Not all conditions met + after \maxLoopLimit\space tries}% + \else + \rng@chgrand[first=\rng@LEP,last=\rng@UEP]\rand + \fi + \fi + }% + \fi +% \end{macrocode} +% Whether we fail or succeed, we'll go with the last RV. Hopefully, the +% author is aware of the log file, and re-compile, possibly with a +% wider range for the variable, or with a larger value of \cs{maxLoopLimit}. +% +% \begin{macrocode} + \defineZ{#2}{\arabic{rand}}% +} +% \end{macrocode} +% \end{macro} +% \begin{macrocode} +\def\updateZ#1#2{% + \@getVarName#1\relax + \expandafter\edef\csname\@varName\endcsname{#2}% + \expandafter\edef\csname n@\@varName\endcsname{#2}% + \expandafter\edef\csname d@\@varName\endcsname{1}% +} +% \end{macrocode} +%\subsubsection{Random Rational} +% \begin{macro}{\RandomQ} +% Randomly generate a rational number. The parameters for \cs{RandomQ} are +%\begin{verbatim} +%[#1] Optional parameter to modify the variable. +% #2 The random variable being defined, e.g., \a +%[#3] maximum denominator permitted (optional) +% #4 rational number for lower endpoint of range +% #5 rational number for upper endpoint of range +%\end{verbatim} +% Here, it is assume that the first rational number is less than the second. This macro +% will randomly generate a rational number between rat1 and rat2, with a maximum denominator +% specified in \texttt{\#3}. +% +% \medskip\noindent\textbf{Note: }To allow for random endpoints, if one or both are real numbers, we convert +% them to rational numbers in \cs{@RandomQ}. +% +% We begin by getting the first two parameters: +%\begin{verbatim} +%[#1] Optional parameter to modify the variable. +% #2 The random variable being defined, e.g., \a +%\end{verbatim} +% \begin{macrocode} +\newcommand{\RandomQ}[2][] +{% + \setkeys{rangen}{ne,#1}% + \def\rq@currentName{#2}% + \@RandomQ +} +% \end{macrocode} +% We use \cs{@RandomQ} to get the last three parameters of \cs{RandomQ}. +% If the endpoints are not rational, they are converted to rationals. +%\begin{verbatim} +%[#1] maximum denominator permitted (optional) +% #2 rational number for lower endpoint of range +% #3 rational number for upper endpoint of range +%\end{verbatim} +% \begin{macrocode} +\newcommand{\@RandomQ}[3][] +{% +% \end{macrocode} +% Now see if there is an \texttt{*}, and get un-stripped +% argument. +% +% The \cs{rng@isControl} lets \cs{rng@isC@ntrol} to 0 if the arg is undefined, +% and lets \cs{rng@isC@ntrol} to 1 if it is defined. +% Check the left endpoint: +% \begin{macrocode} + \let\rng@CtrlLEP=0\let\rng@CtrlUEP=0% + \let\rng@makeLEPStrict=0\let\rng@makeUEPStrict=0% +% \end{macrocode} +% \paragraph*{Left endpoint} +% \begin{macrocode} + \rng@existStar{#2}\rng@NameEndpoint{\rng@LEP}% + \if\rng@isStariii*\edef\tmp@exp{\noexpand% + \rng@isControl{\expandafter\noexpand\rng@LEP}}\tmp@exp + \if\rng@isC@ntrol1% a control sequence + \let\rng@CtrlLEP=1\let\rng@makeLEPStrict=1% +% \end{macrocode} +% The LEP is a control sequence we get its type and convert to rational +% \begin{macrocode} + \edef\tmp@exp{\noexpand% + \@getVarType{\expandafter\noexpand\rng@LEP}}\tmp@exp + \ifcase\varType % integer + \defineQ{\rng@LEP}{\rng@LEP}{1}% + \or % rational + \edef\tmp@exp{\noexpand% + \defineQ{\noexpand\rng@LEP}{\expandafter\nOf\rng@LEP}% + {\expandafter\dOf\rng@LEP}}\tmp@exp + \or % real + \defineR{\rng@LEP}{\rng@LEP}% + \RNGparseDec{\rng@LEP}% + \defineQ{\rng@LEP}{\rng@intpart}{\rng@fracpart}% + \fi + \else +% \end{macrocode} +% Not a control sequence but has a star, a number, we assume rational +% \begin{macrocode} + \RNGparseRat{\rng@LEP}% + \defineQ{\rng@UEP}{\rng@intpart}{\rng@fracpart}% + \fi + \else +% \end{macrocode} +% No star, is it a control sequence or not? +% \begin{macrocode} + \rng@isControl{#2}% + \if\rng@isC@ntrol1% a control sequence + \@getVarType{#2}% + \ifcase\varType % integer + \defineQ{\rng@LEP}{#2}{1}% + \or % rational + \defineQ{\rng@LEP}{\nOf{#2}}{\dOf{#2}}% + \or % real + \defineR{\rng@LEP}{#2}% + \RNGparseDec{\rng@LEP}% + \defineQ{\rng@LEP}{\rng@intpart}{\rng@fracpart}% + \fi + \else % a number, required to be rational + \RNGparseRat{#2}% + \defineQ{\rng@LEP}{\rng@num}{\rng@denom}% + \fi + \fi +% \end{macrocode} +% \paragraph*{Right endpoint} +% \begin{macrocode} + \rng@existStar{#3}\rng@NameEndpoint{\rng@UEP}%% + \if\rng@isStariii*% + \edef\tmp@exp{\noexpand% + \rng@isControl{\expandafter\noexpand\rng@UEP}}\tmp@exp + \if\rng@isC@ntrol1% a control sequence + \let\rng@CtrlUEP=1\let\rng@makeUEPStrict=1% +% \end{macrocode} +% The UEP is a control sequence we get its type and convert to rational +% \begin{macrocode} + \edef\tmp@exp{\noexpand% + \@getVarType{\expandafter\noexpand\rng@UEP}}\tmp@exp + \ifcase\varType % integer + \defineQ{\rng@UEP}{\rng@UEP}{1}% + \or % rational + \edef\tmp@exp{\noexpand% + \defineQ{\noexpand\rng@UEP}{\expandafter\nOf\rng@UEP}% + {\expandafter\dOf\rng@UEP}}\tmp@exp + \or % real + \defineR{\rng@UEP}{\rng@UEP}% + \RNGparseDec{\rng@UEP}% + \defineQ{\rng@UEP}{\rng@intpart}{\rng@fracpart}% + \fi + \else +% \end{macrocode} +% Not a control sequence but has a star, a number, we assume rational +% \begin{macrocode} + \RNGparseRat{\rng@UEP}% + \defineQ{\rng@UEP}{\rng@intpart}{\rng@fracpart}% + \fi + \else +% \end{macrocode} +% No star, is it a control sequence or not? +% \begin{macrocode} + \rng@isControl{#3}% + \if\rng@isC@ntrol1% a control sequence + \@getVarType{#3}% + \ifcase\varType % integer + \defineQ{\rng@UEP}{#3}{1}% + \or % rational + \defineQ{\rng@UEP}{\nOf{#3}}{\dOf{#3}}% + \or % real + \defineR{\rng@UEP}{#3}% + \RNGparseDec{\rng@UEP}% + \defineQ{\rng@UEP}{\rng@intpart}{\rng@fracpart}% + \fi + \else % a number, required to be rational + \RNGparseRat{#3}% + \defineQ{\rng@UEP}{\rng@num}{\rng@denom}% + \fi + \fi + \@@RandomQ{#1}{\nOf{\rng@LEP}}{\dOf{\rng@LEP}}% + {\nOf{\rng@UEP}}{\dOf{\rng@UEP}}% +} +% \end{macrocode} +% Once all the parameters have been acquired, and +% any needed conversions are made, we call \cs{@@RandomQ} which +% actually generates the random rational. +%\begin{verbatim} +% #1 maximum denominator permitted +% #2 numerator of first rational +% #3 denominator of first rational +% #4 numerator of second rational +% #5 denominator of second rational +%\end{verbatim} +% \begin{macrocode} +\newcommand{\@@RandomQ}[5] +{% +% \end{macrocode} +% Now take parameters \texttt{\#2}--\texttt{\#5}, and make into two rationals +% \begin{macrocode} + \updateQ\@rqi{#2}{#3}\updateQ\@rqii{#4}{#5}% +% \end{macrocode} +% Find least common multiple between \texttt{\#3}, \texttt{\#5} and \texttt{\#1} +% \begin{macrocode} + \lcm{#3}{#5}\edef\@thelcm{\thelcm}% + \def\@maxDenom{#1}% + \ifx\@maxDenom\@empty\edef\@maxDenom{\@thelcm}\else + \lcm{\@thelcm}{#1}\edef\@thelcm{\thelcm}\fi +% \end{macrocode} +% Now convert all rationals to have a denominator of \cs{@thelcm} +% \begin{macrocode} + \convertRatTo{\nOf\@rqi}{\dOf\@rqi}{\@thelcm}% + \updateQ\@@rqi{\rng@retn@num}{\@thelcm}% + \convertRatTo{\nOf\@rqii}{\dOf\@rqii}{\@thelcm}% + \updateQ\@@rqii{\rng@retn@num}{\@thelcm}% +% \end{macrocode} +% get divisor +% \begin{macrocode} + \rng@cnta=\@thelcm \divide\rng@cnta by\@maxDenom + \edef\@divisor{\the\rng@cnta}% +% \end{macrocode} +% Round up lower limit +% \begin{macrocode} + \rng@cnta=\nOf\@@rqi + \divide\rng@cnta by\@divisor + \advance\rng@cnta by1 +% \end{macrocode} +% Round down the upper limit +% \begin{macrocode} + \rng@cntb=\nOf\@@rqii\divide\rng@cntb by\@divisor +% \end{macrocode} +% If a strict inequality is requested, we creep in a little. +% \begin{macrocode} + \if\rng@makeLEPStrict1\advance\rng@cnta1\relax\fi + \if\rng@makeUEPStrict1\advance\rng@cntb-1\relax\fi +% \end{macrocode} +% construct numerator +% \begin{macrocode} + \expandafter\@getVarName\rq@currentName + \let\save@varName\@varName + \expandafter\edef\csname first@n@\@varName\endcsname{\the\rng@cnta}% + \expandafter\edef\csname last@n@\@varName\endcsname{\the\rng@cntb}% + \expandafter\edef\csname first@d@\@varName\endcsname{\@maxDenom}% + \expandafter\edef\csname last@d@\@varName\endcsname{\@maxDenom}% + \edef\rng@LEP{\csname first@n@\@varName\endcsname}% + \edef\rng@UEP{\csname last@n@\@varName\endcsname}% +%\typeout{\@varName: first=\rng@LEP,last=\rng@UEP}% + \rng@chgrand[first=\rng@LEP,last=\rng@UEP]\rand +% \end{macrocode} +% Record the random variable name, e.g., \cs{a}, ... +% \begin{macrocode} + \let\@currentName\rq@currentName + \expandafter\@getVarName\rq@currentName + \expandafter\defineQ\@currentName{\arabic{rand}}{\@maxDenom}% + \simplifyCurrentQ + \expandafter\defineQ\@currentName{\expandafter\nOf\@currentName}% + {\expandafter\dOf\@currentName}% +% \end{macrocode} +% +% \paragraph*{Constraints} +% +% We now attempt to satisfy the NE constraints. +% \begin{macrocode} + \ifx\rangen@ne\@empty\else\loopCnt=0\relax + \@whilenum\loopCnt<\maxLoopLimit\do{% + \rng@cnta=1\relax + \@for\ne@@tmp:=\rangen@ne\do{% +% \end{macrocode} +% Define a rational by the name of \cs{cmp@Name}, then make it have +% the same denominator as \cs{@currentName}. +% \begin{macrocode} + \let\save@currentName\rq@currentName + \RNGparseRat{\ne@@tmp}% + \defineQ{\cmp@Name}{\rng@num}{\rng@denom}% + \let\@varName\save@varName + \syncronizeQs{\@varName}% + \ifnum\csname n@\@varName\endcsname=\n@cmp@Name + \multiply\rng@cnta0\relax + \else + \multiply\rng@cnta1\relax + \fi + }% + \ifnum\rng@cnta=1\relax % all conditions met + \loopCnt=\maxLoopLimit + \else % if \rng@cnta \ne 1, try again + \advance\loopCnt1\relax + \ifnum\loopCnt=\maxLoopLimit + \PackageWarning{rangen}{Not all conditions met + after \maxLoopLimit\space tries}% + \else + \rng@chgrand[first=\rng@LEP,last=\rng@UEP]\rand + \expandafter\@getVarName\rq@currentName + \expandafter\defineQ\@currentName{\arabic{rand}}% + {\@maxDenom}% + \fi + \fi + }% + \fi + \simplifyCurrentQ + \expandafter\defineQ\@currentName{\expandafter\nOf\@currentName}% + {\expandafter\dOf\@currentName}% +% \end{macrocode} +% If the denominator is equal to 1, let's change the data type to an integer. +% \begin{macrocode} + \let\@currentName\rq@currentName + \expandafter\@getVarName\rq@currentName + \ifnum\csname d@\@varName\endcsname=1\relax\expandafter + \defineZ\@currentName{\expandafter\nOf\@currentName}% + \fi + \simplifyCurrentQ +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\updateQ} +% Updates the value of a rational number, its numerator and denominator +% without changing any of the format macros. +% \begin{macrocode} +\newcommand\updateQ[3] +{% + \@getVarName#1\relax + \expandafter\edef\csname\@varName\endcsname{#2/#3}% + \expandafter\edef\csname n@\@varName\endcsname{#2}% + \expandafter\edef\csname d@\@varName\endcsname{#3}% +} +% \end{macrocode} +% \end{macro} +% A macro for performing routine adjustments on a rational number. +% \begin{macrocode} +\def\simplifyCurrentQ +{% +% \end{macrocode} +% Reduce fraction: Reduce the fraction to its lowest terms. +% \begin{macrocode} + \reduceFrac{\csname n@\@varName\endcsname}% + {\csname d@\@varName\endcsname}% +% \end{macrocode} +% \cs{reduceFrac} returns results in \cs{@tempcnta} and \cs{@tempcntb}, now +% update the numerator and denominator +% \begin{macrocode} + \expandafter\edef\csname n@\@varName\endcsname{\rfNumer}% + \expandafter\edef\csname d@\@varName\endcsname{\rfDenom}% +% \end{macrocode} +% If the numerator is zero, then zero out \cs{@varName} and special format +% \begin{macrocode} + \ifnum\csname n@\@varName\endcsname=0 + \expandafter\edef\csname\@varName\endcsname{0}% + \edef\display@TeXfmt{0}\edef\inline@TeXfmt{0}% + \else +% \end{macrocode} +% If numerator equals denominator, just replace by 1 +% \begin{macrocode} + \ifnum\csname n@\@varName\endcsname=\csname d@\@varName\endcsname + \expandafter\defineZ\csname\@varName\endcsname{1}% + \else +% \end{macrocode} +% If numerator equals -denominator, just replace by -1 +% \begin{macrocode} + \ifnum\csname n@\@varName\endcsname + =-\csname d@\@varName\endcsname + \expandafter\defineZ\csname\@varName\endcsname{-1}% + \else +% \end{macrocode} +% If denominator equals 1, modify value; otherwise, ok. +% \begin{macrocode} + \ifnum\csname d@\@varName\endcsname=1 + \expandafter\defineZ\csname\@varName\endcsname + {\csname n@\@varName\endcsname}% + \else + \expandafter\edef\csname \@varName\endcsname{% + \csname n@\@varName\endcsname/% + \csname d@\@varName\endcsname}% + \edef\display@TeXfmt{% + \frac{\csname n@\@varName\endcsname} + {\csname d@\@varName\endcsname}}% + \edef\inline@TeXfmt{% + \csname n@\@varName\endcsname/% + \csname d@\@varName\endcsname}% + \expandafter\let + \csname\@varName*\endcsname\display@TeXfmt + \fi + \fi + \fi + \fi +} +% \end{macrocode} +% \begin{macro}{\nOf} +% \begin{macro}{\dOf} +% \begin{macro}{\iOf} +% \begin{macro}{\typeOf} +% User access to numerator and denominator of random variables. +% \begin{macrocode} +\newcommand\nOf[1]{\csname n@\expandafter\@gobble\string#1\endcsname} +\newcommand\dOf[1]{\csname d@\expandafter\@gobble\string#1\endcsname} +% \end{macrocode} +% For a variable created by \cs{RandomL}, the index of the number chosen (1-based) +% can be accessed through the \cs{iOf} command. +% \begin{macrocode} +\newcommand{\iOf}[1]{\csname i@\expandafter\@gobble\string#1\endcsname} +% \end{macrocode} +% Get the type of a RV, \cs{ifnum}\cs{typeOf}\cs{a}=0 (integer), 1 (rational), 2 (real), +% 3 (literal, created by \cs{RandomP}). +% \begin{macrocode} +\newcommand\typeOf[1]{% + \csname typeof@\expandafter\@gobble\string#1\endcsname} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +%\subsubsection{Random Real} +% +% We attempt to generate a random real number, in a given interval of real numbers. +% +% The following are some data and switches used by \cs{RandomReal}. +% \begin{macrocode} +\newif\iftrailingzeros\trailingzerosfalse +\@namedef{rng@tz1}{0} +\@namedef{rng@tz2}{00} +\@namedef{rng@tz3}{000} +\@namedef{rng@tz4}{0000} +\@namedef{rng@tz5}{00000} +\@namedef{rng@tz6}{000000} +\@namedef{rng@tz7}{0000000} +\@namedef{rng@tz8}{00000000} +\def\rng@true{true}\def\rng@false{false} +\newdimen\rng@dima +\newdimen\rng@dimb +\newdimen\rng@dimc +% \end{macrocode} +% \begin{macro}{\RandomR} +% Create a real number at random within the given interval. For example, +%\begin{verbatim} +% \RandomR[<key-values>]{\a}{3.45}{6.45} +%\end{verbatim} +% \begin{macro}{round} +% \begin{macro}{showzeros} +% The key-value pairs recognized by \cs{RandomZ|Q|R}. +% \begin{macrocode} +\define@key{rangen}{ne}[]{\edef\rangen@ne{#1}} +\define@key{rangen}{round}[]{\def\rangen@round{#1}} +\define@key{rangen}{showzeros}[]{\def\rangen@showzeros{#1}% + \ifx\rangen@showzeros\@empty\global\trailingzerostrue\else + \ifx\rangen@showzeros\rng@true\global\trailingzerostrue\else + \global\trailingzerosfalse\fi\fi} +\define@key{rangen}{index}[]{\edef\rangen@index{#1}} +% \end{macrocode} +% \end{macro} +% \end{macro} +%\begin{verbatim} +%[#1] = options +% #2 = name of real to correct +% #3 = lower endpoint of interval +% #4 = upper endpoint of interval +%\end{verbatim} +% \begin{macrocode} +\newcommand{\RandomR}[4][]{% + \setkeys{rangen}{ne,round,showzeros=false,#1}% +% \end{macrocode} +% Now see if there is an \texttt{*}, and get un-stripped +% argument. +% +% The \cs{rng@isControl} lets \cs{rng@isC@ntrol} to 0 if the arg is undefined, +% and lets \cs{rng@isC@ntrol} to 1 if it is defined. +% Check the left endpoint: +% \begin{macrocode} + \let\rng@CtrlLEP=0\let\rng@CtrlUEP=0% + \let\rng@makeLEPStrict=0\let\rng@makeUEPStrict=0% + \def\rng@lcg@first{0}\edef\rng@lcg@last{\RNGpowerOfTen}% +% \end{macrocode} +% \paragraph{Left endpoint.} Check the left endpoint: +% \begin{macrocode} + \rng@existStar{#3}\rng@NameEndpoint{\rng@LEP}% + \if\rng@isStariii*\edef\tmp@exp{\noexpand% + \rng@isControl{\expandafter\noexpand\rng@LEP}}\tmp@exp + \if\rng@isC@ntrol1% a control sequence + \let\rng@CtrlLEP=1\let\rng@makeLEPStrict=1% + \def\rng@lcg@first{1}% +% \end{macrocode} +% The LEP is a control sequence with a star. Convert LEP to a real +% number as needed. +% \begin{macrocode} + \edef\tmp@exp{\noexpand% + \@getVarType{\expandafter\noexpand\rng@LEP}}\tmp@exp + \ifcase\varType % integer + \defineR{\rng@LEP}{\rng@LEP\RNG@Dec}% + \or % rational + \rng@dima=\expandafter\nOf\rng@LEP pt + \divide\rng@dima by\expandafter\dOf\rng@LEP + \defineR{\rng@LEP}{\strip@pt\rng@dima}% + \or % real + \defineR{\rng@LEP}{\rng@LEP}% + \fi +% \end{macrocode} +% Not a control sequence, but has a star +% \begin{macrocode} + \else + \defineR{\rng@LEP}{\rng@LEP}% + \fi + \else +% \end{macrocode} +% No star, control sequence or not? +% \begin{macrocode} + \rng@isControl{#3}% + \if\rng@isC@ntrol1% control sequence + \let\rng@CtrlLEP=1\def\rng@LEP{#3}% + \@getVarType{#3}% + \ifcase\varType % integer + \defineR{\rng@LEP}{\rng@LEP\RNG@Dec}% + \or % rational + \rng@dima=\nOf{#3}pt + \divide\rng@dima by\dOf{#3}% + \defineR{\rng@LEP}{\strip@pt\rng@dima}% + \or % real + \defineR{\rng@LEP}{\rng@LEP}% + \fi + \else +% \end{macrocode} +% A number, no star, number is required to be real +% \begin{macrocode} + \defineR{\rng@LEP}{#3}% + \fi + \fi +% \end{macrocode} +% \paragraph{Right endpoint.} Check the right endpoint: +% \begin{macrocode} + \rng@existStar{#4}\rng@NameEndpoint{\rng@UEP}% + \if\rng@isStariii*\edef\tmp@exp{\noexpand% + \rng@isControl{\expandafter\noexpand\rng@UEP}}\tmp@exp + \if\rng@isC@ntrol1% a control sequence + \let\rng@CtrlUEP=1\let\rng@makeUEPStrict=1% + \rng@cnta=\rng@lcg@last\advance\rng@cnta-1\relax + \edef\rng@lcg@last{\the\rng@cnta}% +% \end{macrocode} +% The UEP is a control sequence with a star. Convert UEP to a real +% number as needed. +% \begin{macrocode} + \edef\tmp@exp{\noexpand% + \@getVarType{\expandafter\noexpand\rng@UEP}}\tmp@exp + \ifcase\varType % integer + \defineR{\rng@UEP}{\rng@UEP\RNG@Dec}% + \or % rational + \rng@dima=\expandafter\nOf\rng@UEP pt + \divide\rng@dima by\expandafter\dOf\rng@UEP + \defineR{\rng@UEP}{\strip@pt\rng@dima}% + \or % real + \defineR{\rng@UEP}{\rng@UEP}% + \fi +% \end{macrocode} +% Not a control sequence, but has a star +% \begin{macrocode} + \else + \defineR{\rng@UEP}{\rng@UEP}% + \fi + \else +% \end{macrocode} +% No star, control sequence or not? +% \begin{macrocode} + \rng@isControl{#4}% + \if\rng@isC@ntrol1% control sequence + \let\rng@CtrlUEP=1\def\rng@UEP{#4}% + \@getVarType{#4}% + \ifcase\varType % integer + \defineR{\rng@UEP}{\rng@UEP\RNG@Dec}% + \or % rational + \rng@dima=\nOf{#4}pt + \divide\rng@dima by\dOf{#4}% + \defineR{\rng@UEP}{\strip@pt\rng@dima}% + \or % real + \defineR{\rng@UEP}{\rng@UEP}% + \fi + \else +% \end{macrocode} +% A number, no star, number is required to be real +% \begin{macrocode} + \defineR{\rng@UEP}{#4}% + \fi + \fi +% \end{macrocode} +% Prepare to generate the random real +% \begin{macrocode} + \def\@currentName{#2}\@getVarName{#2}% +% \end{macrocode} +% Save upper and lower endpoints where they are expected to be. +% \begin{macrocode} + \expandafter\edef\csname first@\@varName\endcsname{\rng@LEP}% + \expandafter\edef\csname last@\@varName\endcsname{\rng@UEP}% +% \end{macrocode} +% Get a random real, and declare it to be a real number using \cs{defineR}. +% \begin{macrocode} + \rng@getRandomR + \defineR{#2}{\strip@pt\rng@dima}% +% \end{macrocode} +% Round and remove trailing zeros. +% \begin{macrocode} + \ifx\rangen@round\@empty\else + \RNGround{#2}{#2}{\rangen@round}% + \rng@dima=#2pt\relax + \defineR{#2}{\strip@pt\rng@dima}% + \fi +% \end{macrocode} +% \paragraph{Constraints.} Let's try to apply constraints. We only allow one constraint. +% \begin{macrocode} + \ifx\rangen@ne\@empty\else\loopCnt=0\relax + \@whilenum\loopCnt<\maxLoopLimit\do{% + \rng@cnta=1\relax + \@for\ne@@tmp:=\rangen@ne\do{% + \rng@dima=#2pt + \ifdim\rng@dima=\ne@@tmp pt\relax + \multiply\rng@cnta0\relax\else + \multiply\rng@cnta1\relax\fi + }% + \ifnum\rng@cnta=1\relax % all conditions met + \loopCnt=\maxLoopLimit + \else % if \rng@cnta \ne 1, try again + \advance\loopCnt1\relax + \ifnum\loopCnt=\maxLoopLimit + \PackageWarning{rangen}{Not all conditions met + after \maxLoopLimit\space tries}% + \else + \rng@getRandomR + \defineR{#2}{\strip@pt\rng@dima}% +% \end{macrocode} +% Round and remove trailing zeros. +% \begin{macrocode} + \ifx\rangen@round\@empty\else + \RNGround{#2}{#2}{\rangen@round}% + \rng@dima=#2pt\relax + \defineR{#2}{\strip@pt\rng@dima}% + \fi + \fi + \fi + }% + \fi +% \end{macrocode} +% \paragraph{Formatting.} Begin formatting of the real, keys recognized are +% \texttt{round} and \texttt{showzeros}. +% \begin{macrocode} + \rnd@ProcessRealFormat{#2}% +% \end{macrocode} +% We declare our number. +% \begin{macrocode} + \def\@currentName{#2}% + \defineR{#2}{#2}% +} +% \end{macrocode} +% Get a new random real and return it in the \cs{rng@dima} +% \begin{macrocode} +\def\rng@getRandomR{% +% \end{macrocode} +% Put the endpoints in dimension registers so we can subtract them. +% \begin{macrocode} + \rng@dima=\rng@LEP pt + \rng@dimb=\rng@UEP pt +% \end{macrocode} +% Compute the difference between upper and lower, then strip off the \texttt{pt}, +% to make it a decimal number. +% \begin{macrocode} + \advance\rng@dimb-\rng@dima +% \edef\r@getDiff{\strip@pt\rng@dimb}% +% \end{macrocode} +% Get a random integer from the interval 0 to \cs{RNGpowerOfTen}. +% the default value of the latter command is 100, and it can be changed +% using \cs{nDivisionsPowerOfTen}. The idea is to divide the interval +% from the lower bound to the upper bound into \cs{RNGpowerOfTen} nodes, +% and we choose one of these nodes are random. +% +% If the endpoints where strict, then we changed \cs{rng@lcg@first} +% from 0 to 1 (if the lower endpoint is strict); and changed +% \cs{rng@lcg@last} from \cs{RNGpowerOfTen} to \texttt{\string\RNGpowerOfTen-1} +% (if the upper end point is strict). +% \begin{macrocode} + \rng@chgrand[first=\rng@lcg@first,last=\rng@lcg@last]\rand +% \end{macrocode} +% Divide the length of the interval by \cs{RNGpowerOfTen}, +% and store the result in \cs{rng@dimb}, then multiply +% that by \verb!\arabic{rand}!. +% \begin{macrocode} + \divide\rng@dimb by\RNGpowerOfTen\relax + \rng@dimb=\arabic{rand}\rng@dimb +% \end{macrocode} +% Finally, the left-end point is still in \cs{rng@dima} +% we add the result in \cs{rng@dimb} to \cs{rng@dima} +% to compute our random rational. +% \begin{macrocode} + \advance\rng@dima by\rng@dimb +} +\def\rnd@ProcessRealFormat#1{% + \ifx\rangen@round\@empty + \rng@dima=#1pt\relax + \defineR{#1}{\strip@pt\rng@dima}% + \else + \RNGround{#1}{#1}{\rangen@round}% + \rng@dima=#1pt\relax + \defineR{#1}{\strip@pt\rng@dima}% + \iftrailingzeros + {\RNGparseDec{#1}\count0=\decPls\relax + \advance\count0-\rndnDec\relax + \ifnum\count0>0\relax\xdef#1{% + \rng@intpart\RNG@Dec\rng@fracpart% +\@nameuse{rng@tz\the\count0}}% + \fi}% + \defineR{#1}{#1}% + \fi + \fi +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Random Sign} +% \begin{macro}{\RandomS} +% We randomly generate a \texttt{+} or \texttt{-} sign +% for addition and subtraction. The first optional argument +% is a rational number between 0 and 1. The default is \texttt{1/2}. +% This number represents the probably of a \texttt{+} sign. +% \begin{macrocode} +\newcommand{\RandomS}[2][1/2]{% + \RNGparseRat{#1}% + \ifnum\rng@num<0\relax + \PackageError{rangen}{A positive numerator is required}% + {The rational number must be between 0 and 1}\fi + \ifnum\rng@denom<0\relax + \PackageError{rangen}{A positive denominator is required}% + {The rational number must be between 0 and 1}\fi + \ifnum\rng@num>\rng@denom\relax + \PackageError{rangen}{The rational must be between 0 and 1}% + {The rational number must be between 0 and 1}\fi + \rng@chgrand[first=1,last=\rng@denom]\rand + \@getVarName{#2}% + \ifnum\value{rand}>\rng@num\relax\def#2{-}% + \rng@makeMinusOneFmtDefns + \def\display@TeXfmt{-}\def\inline@TeXfmt{-}% + \else\def#2{+}\rng@makeOneFmtDefns + \def\display@TeXfmt{}\def\inline@TeXfmt{}\fi + \expandafter\let\csname\@varName*\endcsname\display@TeXfmt + \expandafter\let\csname\@varName!\endcsname\inline@TeXfmt +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Random Number from a List} +% +% \begin{macro}{\RandomL} +% Select a number of any type from a comma-delimited list. +%\begin{verbatim} +% \RandomL[key-values]{\RV}{<comma-delimited list>} +%\end{verbatim} +% Currently, the only key recognized is the \texttt{index} key. +% If the \texttt{index} key is specified, the number whose index is specified +% is retrieved from the list. +% \begin{macrocode} +\newcommand{\RandomL}[3][]{% + \let\rangen@index\@empty + \setkeys{rangen}{#1}% + \rng@cnta=0\relax\@for\@@tmp:=#3\do{% + \advance\rng@cnta1\relax}\edef\n@rng@listItems{\the\rng@cnta}% + \ifx\rangen@index\@empty + \rng@chgrand[first=1,last=\n@rng@listItems]\rand + \else + \rng@cnta=\rangen@index + \advance\rng@cnta-1\relax + \amodb{\rng@cnta}{\n@rng@listItems}% + \rng@cnta=\retnmod + \advance\rng@cnta1\relax + \value{rand}=\rng@cnta + \fi + \@getVarName{#2}% + \expandafter\edef\csname i@\@varName\endcsname{\arabic{rand}}% + \rng@cnta=0\relax\@for\@@tmp:=#3\do{% + \advance\rng@cnta1\relax\ifnum\rng@cnta=\arabic{rand}% + \edef\rng@choice{\@@tmp}\fi}% + \def\@currentName{#2}% +% \end{macrocode} +% Now, determine the type of this choice, and make appropriate +% data type definition. +% \begin{macrocode} + \RNGparseDec{\rng@choice}% + \if\rng@parseR@iii\RNG@Dec\defineR{#2}{\rng@choice}% + \else\RNGparseRat{\rng@choice}% + \if\rng@parseQ@iii/\defineQ{#2}{\rng@num}{\rng@denom}% + \else\defineZ{#2}{\rng@choice}\fi\fi +} +% \end{macrocode} +% \end{macro} + +% \subsubsection{Random Problem from a List} +% +% \begin{macro}{\RandomP} +% Select a literal from a comma-delimited list of literals. +%\begin{verbatim} +% \RandomP[key-values]{\RV}{<comma-delimited list>} +%\end{verbatim} +% Currently, the only key recognized is the \texttt{index} key. +% If the \texttt{index} key is specified, the number whose index is specified +% is retrieved from the list. +% \begin{macrocode} +\newcommand{\RandomP}[3][]{% + \let\rangen@index\@empty + \setkeys{rangen}{#1}% + \rng@cnta=0\relax\@for\@@tmp:=#3\do{% + \advance\rng@cnta1\relax}\edef\n@rng@listItems{\the\rng@cnta}% + \ifx\rangen@index\@empty + \rng@chgrand[first=1,last=\n@rng@listItems]\rand + \else + \rng@cnta=\rangen@index + \advance\rng@cnta-1\relax + \amodb{\rng@cnta}{\n@rng@listItems}% + \rng@cnta=\retnmod + \advance\rng@cnta1\relax + \value{rand}=\rng@cnta + \fi + \@getVarName{#2}% + \expandafter\edef\csname i@\@varName\endcsname{\arabic{rand}}% + \rng@cnta=0\relax\@for\@@tmp:=#3\do{% + \advance\rng@cnta1\relax\ifnum\rng@cnta=\arabic{rand}% + \rng@toks=\expandafter{\@@tmp}\edef#2{\the\rng@toks}% + \expandafter\def\csname typeof@\@varName\endcsname{3}\fi}% +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Random Index} +% +% \begin{macro}{\RandomI} +% This command creates an implied list of \verb!{1, 2, 3,...,n}!, +% and randomly selects a number from this list. The result is +% defined as an integer, and held in the macro \texttt{\#1}. +%\begin{verbatim} +% \Random{\i}{n} --> select \i from {1, 2, 3,...,n} at random +%\end{verbatim} +%A random index, \cs{i}, created by \cs{RandomI}, can be used +%in the \cs{RandomL} command; for example, +%\begin{verbatim} +% \RandomL[index=\i]{\a}{17,\rPI,3/4,\rE,88,1/2} +%\end{verbatim} +%The value of \cs{a} is determined by the index \cs{i}. +% \begin{macrocode} +\newcommand{\RandomI}[2]{% + \rng@chgrand[first=1,last=#2]\rand + \defineZ{#1}{\arabic{rand}}% + \expandafter\edef\csname i@\@varName\endcsname{\arabic{rand}}% +} +% \end{macrocode} +% \end{macro} +% +% \subsection{Some Constants} +% +% \begin{macro}{\zZero} +% \begin{macro}{\zOne} +% \begin{macro}{\zMinusOne} +% \begin{macro}{\rPI} +% \begin{macro}{\rE} +% Define three convenience integers corresponding to $0$, $1$, and $-1$. +% \begin{macrocode} +\defineZ{\zZero}{0} +\defineZ{\zOne}{1} +\defineZ{\zMinusOne}{-1} +\defineR{\rPI}{3.1415927} +\defineR{\rE}{2.7182818} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% This macro takes \cs{@varName} and \cs{cmp@Name} and converts to the same common +% denominator. This makes it easy to make comparisons between two rational numbers. +% \begin{macrocode} +\def\syncronizeQs#1{\edef\sync@arg{#1}% + \lcm{\csname d@\sync@arg\endcsname}{\d@cmp@Name}% + \edef\@thelcm{\thelcm}% + \convertRatTo{\n@cmp@Name}{\d@cmp@Name}{\@thelcm}% + \updateQ\cmp@Name{\rng@retn@num}{\@thelcm}% + \convertRatTo{\csname n@\sync@arg\endcsname}% + {\csname d@\sync@arg\endcsname}{\@thelcm}\expandafter + \defineQ\csname\sync@arg\endcsname{\rng@retn@num}{\@thelcm}% +} +% \end{macrocode} +% \subsection{Formatting Commands} +% \begin{macro}{\ds} +% \begin{macro}{\eds} +% \begin{macro}{\cds} +% Displays an alternate representation (\textbf display\textbf style) of the random variable. Usage \cs{ds}\cs{a}. +% This displays the contents of \cs{display@TeXfmt} for this variable. The value of \cs{display@TeXfmt} +% is effected by the formatting commands above. +% +% For a rational number \cs{a}, the expression \cs{ds}\cs{a} expands either to the special format representation, or +% to a rational of the form $\frac{p}{q}$. +% \begin{macrocode} +\newcommand\ds[1]{% + \expandafter\csname\expandafter\@gobble\string#1*\endcsname +} +\newcommand\eds[1]{% + \expandafter\csname\expandafter\@gobble\string#1*e\endcsname +} +\newcommand\cds[1]{% + \expandafter\csname\expandafter\@gobble\string#1*c\endcsname +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \begin{macro}{\fmt} +% \begin{macro}{\efmt} +% \begin{macro}{\cfmt} +% Displays a special format for the random variable. Usage \cs{ds}\cs{a}. +% This displays the contents of \cs{display@TeXfmt} for this variable. +% Same as \cs{ds}, but does not display a display style if there is not +% special formatting. +% +% For a rational number \cs{a}, the expression \cs{ds}\cs{a} expands either to the special format representation, or +% to a rational of the form $p/q$. +% \begin{macrocode} +\newcommand\fmt[1]{% + \expandafter\csname\expandafter\@gobble\string#1!\endcsname +} +\newcommand\efmt[1]{% + \expandafter\csname\expandafter\@gobble\string#1!e\endcsname +} +\newcommand\cfmt[1]{% + \expandafter\csname\expandafter\@gobble\string#1!c\endcsname +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \begin{macro}{\js} +% Used within \cs{CorrAnsButton} to get a more precise expansion of a variable. Used with variables +% that have been defined using \cs{defineDepVar}. When you say \verb+\js\m+, for example, +% the \cs{eval@JSfmt} is expanded. +% \par\medskip\noindent +% \textbf{Usage:} \verb+\CorrAnsButton*{y = \js\m\space x }+ +% \begin{macrocode} +\newcommand\js[1]{% + \expandafter\csname\expandafter\@gobble\string#1!*\endcsname +} +% \end{macrocode} +% \end{macro} +% +% \subsection{Commands specialized to Reals} + +% \begin{macro}{\RNGround} +% Round \texttt{\#1} to \texttt{\#3} decimal places, and leave result in \texttt{\#2}. +% \begin{macrocode} +\def\RNGround#1#2#3{% + \begingroup + \def\rng@ctrlName{#1}% + \def\rng@sourceName{#2}% + \def\rng@nDecPl{#3}% + \RNGparseDec{#2}% + \ifnum\rndnDec<#3\relax + \xdef\theseDigits{\rng@fracpart}% + \let\rng@next\relax + \else + \count0=0\relax + \gdef\theseDigits{}% + \def\rng@next{\expandafter\@rng@round\rng@fracpart\end}% + \fi + \rng@next + \xdef\decPls{\@ifundefined{save@rng@nDecPl}% + {\rng@nDecPl}{\save@rng@nDecPl}}% + \ifx\theseDigits\@empty + \xdef#1{\rng@intpart}\else + \xdef#1{\rng@intpart\RNG@Dec\theseDigits}\fi + \endgroup +} +\def\@rng@round#1{% + \ifx#1\end\let\rng@next\relax + \else + \ifnum\rng@nDecPl=0\relax + \ifnum#1>4\relax + \count0=\rng@intpart\relax + \ifnum\rng@intpart<0\relax + \advance\count0by-1\relax + \else + \advance\count0by1\relax + \fi + \xdef\rng@intpart{\the\count0}% + \fi + \gdef\theseDigits{}% + \let\rng@next\rng@gobbletoend + \else + \advance\count0by1\relax + \ifnum\count0=\rng@nDecPl\relax + \def\rng@next{\@@rng@round#1}% + \else + \xdef\theseDigits{\theseDigits#1}% + \let\rng@next\@rng@round + \fi + \fi + \fi + \rng@next +} +\def\rng@gobbletoend#1\end{} +\def\@@rng@round#1#2{% + \ifx#2\end% + \xdef\theseDigits{\theseDigits#1}% + \let\rng@next\relax + \else + \ifnum#2>4\relax\count2=#1\relax + \ifnum\count2=9\relax + \count0=\rng@nDecPl\relax + \ifnum\count0=1\relax + \count0=\rng@intpart\relax + \ifnum\rng@intpart<0\relax + \advance\count0by-1\relax + \else + \advance\count0by1\relax + \fi + \xdef\rng@intpart{\the\count0}% + \let\rng@next\rng@gobbletoend + \else + \advance\count0by-1\relax\expandafter + \xdef\rng@sourceName{% + \rng@intpart\RNG@Dec\theseDigits#1}% + \edef\save@rng@nDecPl{\rng@nDecPl}% + \edef\rng@next{\noexpand\RNGround{% + \expandafter\noexpand\rng@ctrlName}% + {\expandafter\noexpand\rng@sourceName}% + {\the\count0}\noexpand\rng@gobbletoend}% + \fi + \else + \advance\count2by1\relax + \xdef\theseDigits{\theseDigits\the\count2}% + \let\rng@next\rng@gobbletoend + \fi + \else % \ifnum#2<=4 + \xdef\theseDigits{\theseDigits#1}% + \let\rng@next\rng@gobbletoend + \fi + \fi + \rng@next +} +% \end{macrocode} +% \end{macro} +% Used with \cs{CorrAnsButton} and \texttt{rngCorrAnsButton}, like so, +%\begin{verbatim} +% \CorrAnsButton{rEval(\strAns)}*{rngCorrAnsButton\RNGprintf{\%.2f}} +%\end{verbatim} +% \begin{macrocode} +\def\RNGprintf#1{("#1",\@gobble} +% \end{macrocode} +% +% \subsection{User Defined Dependent Variables for JavaScript} +% \begin{macro}{\defineDepQJS} +% Define a rational as a function of other integers. This macro defines +% \cs{fmt} and \cs{ds} for the variable, but its primary use it +% for \cs{js}. This command is aimed at the JavaScript side of things +%\begin{verbatim} +%#1 = name of rational to be defined, e.g., \a +%#2 = numerator +%#3 = denominator +%#4 = \js expression for #1 +%\end{verbatim} +% Usage: +%\begin{verbatim} +% \defineDepQJS{\m}{\d-\b}{\c-\a} +% {rFrac(rEval(\nOf\m)/rEval(\dOf\m))} +% ... +% \CorrAnsButton{y = \js\m\space x}*{rngCorrAnsButton}% +%\end{verbatim} +% The above example would calculate equation of the line passing through +% the two points \verb!P(\a,\b)! and \verb!Q(\c,\d)!. The code is used +% in the \cs{CorrAnsButton} to have the answer appear. +% \begin{macrocode} +\newcommand\defineDepQJS[4]{% + \@getVarName#1 + \expandafter\edef\csname\@varName\endcsname{(#2)/(#3)}% + \expandafter\edef\csname n@\@varName\endcsname{(#2)}% + \expandafter\edef\csname d@\@varName\endcsname{(#3)}% + \edef\display@TeXfmt{\csname\@varName\endcsname}% + \edef\inline@TeXfmt{\csname\@varName\endcsname}% + \def\dv@argiv{#4}\ifx\dv@argiv\@empty + \edef\eval@JSfmt{\csname\@varName\endcsname}\else + \edef\eval@JSfmt{#4}\fi + \expandafter\let\csname\@varName!*\endcsname\eval@JSfmt +} +% \end{macrocode} +% \end{macro} +% +% \subsection{Writing RVs to Solution Files} +% \begin{macrocode} +\def\rng@writeCurrentSeed#1{\immediate\write#1{\string\makeatletter + \string\global\string\cr@nd=\the\cr@nd\string\relax + \string\makeatother}} +% \end{macrocode} +% Token register to hold the verbatim contents of the \texttt{writeRVsTo} environment. +% \begin{macrocode} +\newtoks\rng@toks +\def\wrv@ex@solns{exercises}% +\def\wrv@ex@quiz{quizzes}% +% \end{macrocode} +% \begin{environment}{writeRVsTo} +% This environment takes its environment contents and writes it to +% two files, one file is \cs{jobname\_rvs.cut} which is input back +% into the source file immediately. The second parameter +% accepts the string \texttt{exercises} or \texttt{quizzes}, or a write +% handle to write to an auxiliary file. The environment was designed for +% use with the \texttt{exercise}, \texttt{quiz}, and \texttt{shortquiz} environments +% of \textsf{exerquiz}. +% \begin{macrocode} +\newenvironment{writeRVsTo}[2][] +{% + \def\wrv@argii{#2}% + \ifx\wrv@argii\wrv@ex@quiz\let\wrv@out\quiz@solns + \else\ifx\wrv@argii\wrv@ex@solns\let\wrv@out\ex@solns\else + \let\wrv@out#2\fi\fi + \rng@writeCurrentSeed\wrv@out + \rng@toks={}% + \def\verbatim@processline{% + \xdef\rng@temp{\the\rng@toks\the\verbatim@line}% + \global\rng@toks=\expandafter{\rng@temp}}% + \let\do\@makeother\dospecials\catcode`\^^M\active + #1% + \verbatim@start +}{ \immediate\write\wrv@out{\the\rng@toks}% + \newwrite\rng@writeRVs + \immediate\openout\rng@writeRVs\jobname_rvs.cut + \immediate\write\rng@writeRVs{\the\rng@toks}% + \immediate\closeout\rng@writeRVs + \aftergroup\rng@Input@RVs +} +% \end{macrocode} +% \end{environment} +% After the \texttt{writeRVsTo} environment writes the RVs to +% \cs{jobname\_rvs.cut}. The environment executes +% \cs{rng@Input@RVs} to input the file back into the source file. +% \begin{macrocode} +\def\rng@Input@RVs{\InputIfFileExists{\jobname_rvs.cut}{}{}} +% \end{macrocode} +% \subsection{Redefine lcg Package Macro} +% \begin{macrocode} +\def\rng@p@stkeysr@nd{% + \@rderr@nd% last < first -> swap + \cutr@nger@nd% range too big -> cut +} % end of \def\p@stkeysr@nd +\def\rng@chgrand{\@ifnextchar[\rng@chgr@nd{\rng@chgr@nd[]}} +\def\rng@chgr@nd[#1]{% + \@tempcnta=\z@ + \@tempcntb=\z@ + \setkeys{Init}{#1}% + \rng@p@stkeysr@nd% + \@utputr@nd% +} % end of \def\rng@chgrand +% \end{macrocode} +% \subsection{DLJS Support} +% \begin{macrocode} +\begin{insDLJS}[partialExpand]{partial}{Rangen} +var partre = /rEval|rFrac/; +% \end{macrocode} +% The arguments for this function take two forms +% (1) \texttt{fieldname}, \texttt{theanswer} (the default); (2) +% \texttt{theformat}, \texttt{fieldname}, \texttt{theanswer}. The later case +% is created by using the \cs{RNGprintf} command that inserts allows the +% document author to insert a \texttt{printf} formatting template. For example, +%\begin{verbatim} +% \CorrAnsButton{rEval(\strAns)}*{rngCorrAnsButton\RNGprintf{\%.4f}} +%\end{verbatim} +% \begin{macrocode} +function rngCorrAnsButton() +{ + var theprecision,fieldname,theanswer; + if (arguments.length==4) { + var theformat=arguments[0]; + var fieldname=arguments[1]; + var theanswer=arguments[2]; + var thequiz=arguments[3]; + } else { + var fieldname=arguments[0]; + var theanswer=arguments[1]; + var thequiz=arguments[2]; + } + theanswer = partialExpand(0,theanswer); + if (arguments.length==4) + theanswer=util.printf(theformat,eval(theanswer)); + DisplayAnswer(fieldname,theanswer,thequiz); +} +% \end{macrocode} +% The JavaScript function \texttt{partialExpand} searches through \texttt{Ans} in search of +% \texttt{rEval} and \texttt{rFrac}. It calls itself recursively to search for the inner most +% appearances of these two functions. It evaluates these two functions starting with the inner +% most and working its way outward. +% \begin{macrocode} +function partialExpand(level,Ans) +{ + Ans = correctPlusMinus(Ans) + level += 1; +\db console.println("Enter level = " + level +": Ans: " + Ans);\db% + var n=0, m, bP, eP, subExp; + while ( true ) { +\db console.println("Searching a level " + level);\db% + try { m = Ans.match(partre); } + catch (e) { break; } + if ( m != null ) { + bP = m.index + m[0].length; + eP = FindBalP(Ans, bP, true); +\db console.println("bP = " + bP + " : eP = " + eP);\db% + var subExp = Ans.substring(bP+1, eP); +\db console.println("Found \'" + subExp% + + "\' at level = " + level);\db% +% subExp = partialExpand(level, subExp); + // n = beginning of "rEval", + // eP = beginning of balanced parens, + // bP = end of balanced parens + Ans = Ans.substring(0, m.index) + + eval(m[0]+"(level,subExp)") + Ans.substring(eP+1); +\db console.println("level = " + level% + +": New Ans: " + Ans);\db % + } else { + if ( level == 1 ) { +\db console.println("Level 1 break");\db % + break; + } + } + } +\db console.println("Return Ans: " + Ans);\db% + Ans = correctPlusMinus(Ans); + return Ans; +} +% \end{macrocode} +% Evaluates the value of \texttt{Ans}. +% \begin{macrocode} +function rEval(level, Ans) +{ + level += 1; +\db console.println("Enter rEval: level = "% + + level +": Ans: " + Ans);\db% + var n=0, m, bP, eP, subExp; + while ( true ) + { +\db console.println("Searching a level " + level);\db% + try { m = Ans.match(partre); } + catch (e) { break; } + if ( m != null ) { + bP = m.index + m[0].length; + eP = FindBalP(Ans, bP, true); +\db console.println("bP = " + bP + " : eP = " + eP);\db% + var subExp = Ans.substring(bP+1, eP); +\db console.println("Found \'" + subExp% + + "\' at level = " + level);\db% + // n = beginning of "rEval", + // eP = beginning of balanced parens, + // bP = end of balanced parens + Ans = Ans.substring(0, m.index) + +eval(m[0]+"(level,subExp)")+Ans.substring(eP+1); +\db console.println("level = "% + + level +": New Ans: " + Ans);\db % + } else { + Ans = ParseInput(Ans); +\db console.println("Ready to eval at level = "% + + level + ": Ans = " + Ans);\db% + with(Math) { Ans = eval( Ans ) }; +\db console.println("After eval at level = "% + + level + ": Ans = " + Ans);\db% + break; + } + } +\db console.println("Return Ans: " + Ans);\db% + return Ans; +} +% \end{macrocode} +% Evaluates an rational number by evaluating the value of the numerator and denominator separately. +% \begin{macrocode} +function rFrac(level, Ans) +{ + level += 1; +\db console.println("Enter rFrac level = "% + + level +": Ans: " + Ans);\db% + var n=0, m, bP, eP, subExp; + while ( true ) { +\db console.println("Searching a level " + level);\db% + try { m = Ans.match(partre); } + catch (e) { break; } + if ( m != null ) { + bP = m.index + m[0].length; + eP = FindBalP(Ans, bP, true); +\db console.println("bP = "% + + bP + " : eP = " + eP);\db% + var subExp = Ans.substring(bP+1, eP); +\db console.println("Found \'" + subExp% + + "\' at level = " + level);\db% + // n = beginning of "rEval", + // eP = beginning of balanced parens, + // bP = end of balanced parens + Ans = Ans.substring(0, m.index) + + eval(m[0]+"(level,subExp)") + Ans.substring(eP+1); +\db console.println("level = " + level% + +": New Ans: " + Ans);\db % + } else { + var numDenom = Ans.split("/"); + numDenom[0] = eval(numDenom[0]); + numDenom[1] = eval(numDenom[1]); + var g = gcd(numDenom[0], numDenom[1]); + numDenom[0] /= g; + numDenom[1] /= g; + if ( numDenom[1] == 1) + Ans = numDenom[0]; + else + Ans = numDenom.join("/"); +\db console.println("Reduce: " + numDenom.join("/"));\db% + break; + } + } +\db console.println("Return Ans: " + Ans);\db% + return Ans; +} +function correctPlusMinus(Ans) +{ + Ans = "" + Ans; + Ans = Ans.replace(/\s*([\+-])\s*\1\s*/g, " + "); + Ans = Ans.replace(/\s*\+\s*-\s*/g, " - "); +% Ans = Ans.replace(/\s*\+\s*\+\s*/g, " + "); +% Ans = Ans.replace(/\s*-\s*-\s*/g, " + "); + Ans = Ans.replace(/\s*-\s*\+\s*/g, " - "); + return Ans; +} +function gcd(a,b) +{ + var x = a, y = b, r; + while (true) + { + r = x \% y; + if ( r == 0 ) break; + x = y; + y = r; + } + return Math.abs(y); +} +function lcm (a,b) { return (a*b)/gcd(a,b); } +\end{insDLJS} +%</package> +% \end{macrocode} +\endinput diff --git a/macros/latex/contrib/rangen/rangen.ins b/macros/latex/contrib/rangen/rangen.ins new file mode 100644 index 0000000000..c9335e7f87 --- /dev/null +++ b/macros/latex/contrib/rangen/rangen.ins @@ -0,0 +1,64 @@ +%% +%% This file will generate fast loadable files and documentation +%% driver files from the doc files in this package when run through +%% LaTeX or TeX. +%% +%% Copyright 1999-2002 D. P. Story +%% +%% This file is part of the `Web and Exerquiz Distribution'. +%% ------------------------------------------- +%% +%% It may be distributed under the conditions of the LaTeX Project Public +%% License, either version 1.2 of this license or (at your option) any +%% later version. The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.2 or later is part of all distributions of LaTeX +%% version 1999/12/01 or later. +%% +%% --------------- start of docstrip commands ------------------ +%% +\def\filedate{2001/05/26} +\def\batchfile{rangen.ins} +% +% If you can assume that the target audience for the document all have +% Acrobat Reader 5.0 or later, then chance the following switch to true, +% else, leave it as false. + +\input docstrip +\ifx\generate\undefined + \Msg{**********************************************} + \Msg{*} + \Msg{* This installation requires docstrip} + \Msg{* version 2.4 or later.} + \Msg{*} + \Msg{* An older version of docstrip has been input} + \Msg{*} + \Msg{**********************************************} + \errhelp{Move or rename old docstrip.tex and get a newer one.} + \errmessage{Old docstrip in input path} + \batchmode + \csname @@end\endcsname\end +\fi + +\keepsilent +\askforoverwritefalse +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\preamble +\endpreamble + +\generate +{% + \file{rangen.sty}{\from{rangen.dtx}{copyright,package}} +} + +\Msg{***************************************************************} +\Msg{*} +\Msg{* \space To finish the installation you have to copy the files } +\Msg{*} +\Msg{* \space *.sty, *.cfg and *.def into a directory searched by TeX} +\Msg{*} +\Msg{***************************************************************} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\endinput |