Annotation of capa/capa51/Manual/s-functions.tex, revision 1.1
1.1 ! albertel 1: \hrule
! 2: \vskip 0.2in
! 3: \section{\capa{} Functions}
! 4:
! 5: \vskip 0.2in
! 6: \hrule
! 7: \vskip 0.2in
! 8: %>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
! 9: All of the examples and descriptions used below are for
! 10: student submissions of answers through a Web or telnet session.
! 11: There are some changes and additions to the {\sl set$x$.qz} code when using
! 12: \capa\ for machine scored exams. Please see the next section for those
! 13: examples.
! 14:
! 15: \subsection{\bf Question source text}
! 16: \capa\ assumes that any characters in the
! 17: {\sl set$x$.qz} without a special command at the beginning of a line will be
! 18: displayed as text for the student. The following are those special commands: \\
! 19: {\tt /LET, \ /BEG, \ /DIS, \ /IMP, \ //, \ /HIN, \ /EXP, \ /MAP, \ /RMAP, \
! 20: /IF, \ /ELSE, \ /ENDIF, \ /WHILE, \ /ENDWHILE, \ /ANS, \ /AND, \ /OR, \ /SUBJECTIVE, \ /VERB, \ /ENDVERB, \ /START,} and \ {\tt /END}.\\
! 21: Text (excluding white space) preceding the forward slash will disable the all
! 22: of the commands except {\tt //} and {\tt /DIS}. Variables must be defined
! 23: before use.
! 24:
! 25: \subsection{\bf Variable Definitions and Expressions ({\tt /LET}\index{/LET} and
! 26: {\tt /BEG}\index{/BEG} )}
! 27:
! 28: \begin{itemize}
! 29: \item Definitions are specified in the form: \\
! 30: \fbox{\tt /LET VariableName=expression}
! 31: \item Variable definitions and expressions begin on a single line with a {\tt /LET} command that is terminated by a carriage return.
! 32: Long entries will be line-wrapped by the editor and may appear to extend past one
! 33: line on the display. The line continuation symbol (\verb"\" followed by a carriage return)
! 34: can be used to break a long line into several lines and still be considered as
! 35: a single long line.
! 36: \item {\tt /BEG} is simply an alias for {\tt /LET}, and is used to indicate the beginning of each problem in the
! 37: following manner: \\
! 38: \fbox{{\tt /BEG prob\_val=3}}. \\
! 39: This sets the variable prob\_val which can
! 40: then be used to define the weight of the problem in the {\tt /ANS} specification the signals the end of the
! 41: problem.
! 42:
! 43: \item The \capa\ system does reserve variable names for certain
! 44: functions used in the system. They are listed in the {\bf Intrinsic Functions
! 45: Table}, and must not be used as variable names.
! 46: \normalsize
! 47:
! 48: \item {\bf List of Available Expressions}:
! 49: \begin{tabbing}
! 50: 1234567890123456789012345\= 12345678901234567890 \= \kill
! 51: {\it Integer} \> $\diamond $ An integer. \\
! 52: {\it Real number} \> $\diamond $ A real number. It could be of the form
! 53: \\{\it $$ } \> $$
! 54: 123.4, 1.234E+2, 1.234E+2, 1.234E+02, 1.234e+02. \\
! 55: {\it ``string''} \> $\diamond $ A string. It is specified in the
! 56: form \verb+"A block of text"+. \\
! 57: % \> Quotes may be imbedded in string by prefixing them
! 58: % with a `\verb"\\"'. \\
! 59: {\it Variable Name} \> $\diamond $ A variable previously defined. \\
! 60: {\it ( expression )} \> $\diamond $ Precedence, evaluate {\it expression}
! 61: first. \\
! 62: {\it - expression } \> $\diamond $ Negative of {\it expression}. \\
! 63: {\it function([expression, $\cdots$]) } \> $\diamond $ Call a function with
! 64: arguments. (see below) \\
! 65:
! 66: {\it expression $*$ expression } \> $\diamond $ Multiply expressions. \\
! 67: {\it expression $/$ expression } \> $\diamond $ Divide expresssions. \\
! 68: {\it expression $+$ expression } \> $\diamond $ Add expressions, concatenate
! 69: strings \\
! 70: {\it expression $-$ expression } \> $\diamond $ Subtract expressions. \\
! 71: {\it expression $==$ expression } \> $\diamond $ Logical; expressions equal?
! 72: Returns 0 {\small if false}, 1
! 73: {\small if true}\\
! 74: {\it expression $!=$ expression } \> $\diamond $ Logical; expressions
! 75: different? Returns 0 or 1\\
! 76: {\it expression $>=$ expression } \> $\diamond $ Logical; greater than or
! 77: equal? Returns 0 or 1\\
! 78: {\it expression $<=$ expression } \> $\diamond $ Logical; less than or equal?
! 79: Returns 0 or 1\\
! 80: {\it expression $>$ expression } \> $\diamond $ Logical; greater than? Returns
! 81: 0 or 1\\
! 82: {\it expression $<$ expression } \> $\diamond $ Logical; smaller than? Returns
! 83: 0 or 1\\
! 84: \end{tabbing}
! 85:
! 86: \item There are three types of variables: integer, real and string. The type
! 87: is not explicitly specified but rather is assigned by context at the time the
! 88: variable is defined.
! 89:
! 90: \item {\bf Note:} If you define a variable with an equation consisting
! 91: of only integer numbers, then the resulting answer will be an integer.
! 92: For example, we have the following code: \\
! 93: \fbox{\tt /LET variable1=1/2} \\
! 94: \fbox{\tt /LET variable2=35/12} \\
! 95: Then {\em variable1} will be assigned the value of ``0'' and {\em variable2} will be assigned the value of ``2''.
! 96: On the other hand, \\
! 97: \fbox{\tt /LET variable1=1.0/2.0} \\
! 98: will now be assigned the value of 0.5 because at least one real number was used
! 99: in the equation.
! 100:
! 101: \item The variable names must begin with a letter but may contain letters,
! 102: numbers, and underline characters.
! 103:
! 104: \item Variable names (and function names) {\bf are case sensitive}, and
! 105: there is no limit on the length of a variable name.
! 106:
! 107: \item Variables must be defined before they are used in any other expression.
! 108: \normalsize
! 109: \item {\bf Note:} Quotation marks indicate the beginning and end of strings. You must use a
! 110: backslash to display the quotation marks within a string. For example: \\
! 111: \fbox{\tt /LET string= ``I'll be back.'' } \\
! 112: will produce
! 113: the ouput ``I'll be back.''
! 114:
! 115: \item An expression may be be broken down into
! 116: several lines using the line continuation character \verb"\" followed
! 117: \underline{immediately} by a carriage return. This can help improve the legibility
! 118: of the code. Do not use the line continuation character \verb"\"
! 119: within a command, variable, or function name.
! 120: \begin{capacode}
! 121: /LET a_long_line = "This is a very, very, very long statement. It is convenient to \
! 122: divide it into two lines."
! 123: \end{capacode}
! 124:
! 125: \item Once defined, the same variable can be used at any subsequent point in
! 126: the entire problem set or alternatively it could be be redefined.
! 127: \end{itemize}
! 128:
! 129:
! 130:
! 131: \subsection{\bf Display of Variables \index{/DIS}( {\tt /DIS} )}
! 132: \begin{itemize}
! 133:
! 134: \item The {\em value} of a previously defined variable can be displayed in the displayed text
! 135: by placing the variable name in the {\tt /DIS()} command,
! 136: e.g. {\tt/DIS(}{\em variable}{\tt )}.
! 137: \item The format of the display of a numerical value can be controlled
! 138: using a colon and a format specification. For example, {\tt /DIS(LENGTH:3f)} means
! 139: display the variable {\em LENGTH} as a floating point number with three places
! 140: \underline{after} the decimal ({\em x}.{\em xxx}). {\tt /DIS(LENGTH:2E)} will
! 141: display the variable in scientific notation with two decimal places
! 142: ({\em x}.{\em xx}{\tt E}{\em x}). The colon is a delimiter indicating that
! 143: a format specification follows.
! 144:
! 145: \item {\sf Quizzer} shows a default line length of 80 characters. In the x-windows version, a greater line length can be obtained by resizing the window,
! 146: accomplished by dragging the lower right corner.
! 147:
! 148: \item {\tt /DIS(\index{stdline}stdline)} will display a short line that is used to
! 149: seperate problems. When you build sets
! 150: with {\sf Quizzer} using import, you have the option of displaying a ``standard line'' or a
! 151: {\tt webonlyline} (a line that appears on the web only) after the problem. When printing two sided,
! 152: you have the option of diplaying a {\tt stdlineOvr} which displays the word "Over" so students realize
! 153: that the set is two sided. All of these variables are defined in the {\sl /demolibrary/Tools/StdMacros} file.
! 154:
! 155: \item {\bf Note:} A total of 37 lines are available for telnet display for each question on the VT100 terminal.
! 156: These lines are separated onto two pages
! 157: with 20 lines available on the first page and 17 available on the second. Three lines are repeated for reading
! 158: consistency. Hints and explanations are displayed on separate screens, each of which can have up to 20 lines. There are no line limitations on the printed
! 159: or Web versions of the text.
! 160:
! 161: \end{itemize}
! 162:
! 163: %\item
! 164: \subsection{\bf The Import Function ( \index{/IMP}{\tt /IMP} )}
! 165:
! 166: \begin{itemize}
! 167: \item The {\tt /IMP} function calls and uses the contents of the
! 168: specified file, however the file's content is not displayed in the {\sl set$x$.qz}
! 169: file.
! 170: \item The /IMP command requires a string input, either the string
! 171: filename or a variable which provides the string filename.
! 172: \begin{enumerate}
! 173: \item For example:
! 174: \\ \fbox{\tt /IMP "HWTop"} \\
! 175: will import the {\sl HWTop} file from the local directory.
! 176: \item For files in other
! 177: directories, use either relative or absolute paths as part of the filename,
! 178: such as: \\
! 179: \fbox{\tt /IMP "/demolibrary/Tools/StdMacros"} \\
! 180: or: \\
! 181: \fbox{\tt /IMP "../mystuff"}. \\
! 182: {\bf Note} that if relative paths are used, the {\tt /IMP} command will not work unless it
! 183: is the appropriate directory and can cause errors if the file is moved.
! 184: \item The file may be selected
! 185: dynamically
! 186: from a set, for example,
! 187: \begin{capacode}
! 188: /LET integer=random(1,10,1)
! 189: /LET filename="File"+integer
! 190: /IMP filename
! 191: \end{capacode}
! 192: which will import a randomly selected {\sl File$x$} from {\sl File1, File2, ...File10}.
! 193: \end{enumerate}
! 194: {\bf Note:} Adding an integer to a string results in a concatenated
! 195: newstring. This can be used to provide even greater variety among
! 196: sets for students, since different problems or graphics on a given topic can be selected.
! 197: This feature may be especially useful for producing standardized tests.
! 198: With a large
! 199: enough problem base, students can be given a randomly selected set to prepare
! 200: for the test.
! 201: \end{itemize}
! 202:
! 203:
! 204: \subsection{\bf Comment Lines (\index{//} {\tt //} )}
! 205:
! 206: \begin{itemize}
! 207: \item Comments are any character strings after a double forward
! 208: slash, ({\tt //}).
! 209: For example:
! 210: \begin{capacode}
! 211: //A line of comments
! 212: //You can also put comments after code.
! 213: /LET number=random(1,4,1) // chooses a random number
! 214: \end{capacode}
! 215: \item The comments are only displayed by the {\sf Quizzer} module and are for
! 216: the benefit of the persons writing and reviewing the actual problem code.
! 217: \item Instructors are strongly encouraged to include comment lines in order to
! 218: indicate authorship and to describe the structure of the problems for future use.
! 219: \end{itemize}
! 220:
! 221:
! 222: \subsection{\bf Hints (\index{/HIN} {\tt /HIN} )}
! 223: \begin{itemize}
! 224: \item Hints are optional. There can only be one hint per problem.
! 225: The hint becomes available after a wrong answer is entered by the student.
! 226: The answer function has reserved syntax for changing the number of entries before displaying the hint. The notation {\tt /ANS(variable:2f, hint=6)}
! 227: would require that a student enter 6 incorrect answers hefore being presented with the hint.
! 228:
! 229: \item The text for hints contain character strings (no expressions) and can
! 230: display string variables defined before the hint to match a problems content,
! 231: and is specified as:
! 232:
! 233:
! 234: \begin{capacode}
! 235: /LET index=random(1,4)
! 236: /LET pronoun=choose(index,"he","she","she","he")
! 237: /LET ppronoun=choose(index,"his","her","her","his")
! 238: /LET person=choose(index,"son","daughter","niece","nephew")
! 239: /HIN While her /DIS(person) was being picked up, /DIS(pronoun)
! 240: /HIN accidently let /DIS(ppronoun) balloon escape.
! 241: \end{capacode}
! 242:
! 243: \normalsize
! 244: \item This hint has two lines and two carriage returns. The contents of both
! 245: lines are displayed simultaneously; it is not two separate hints.
! 246:
! 247: \item Content of all lines typed with a {\tt /HIN} at the
! 248: beginning are displayed as the hint. The relative ordering of the hint lines is
! 249: preserved, and the hint is displayed as a separate page on the
! 250: VT100 screen and below the answer box on the web version.
! 251:
! 252: \item Only one {\tt /HIN} is needed if the text is very long and uses the continuation character.
! 253: \begin{capacode}
! 254: /HIN A hint is often welcomed by students. It sometimes requires \
! 255: a large amount of text and might require several lines.
! 256: \end{capacode}
! 257: Or (no carriage return at all, line wraps automatically):
! 258: \begin{capacode}
! 259: /HIN A hint is often welcomed by students. It sometimes requires a large amount of text and
! 260: might require several lines.
! 261: \end{capacode}
! 262: \item Hints can also be viewed after a problem set's due date.
! 263: \end{itemize}
! 264: \subsection{\bf Explanations (\index{/EXP} {\tt /EXP} )}
! 265: \begin{itemize}
! 266: \item Lines of explanations begin with the {\tt /EXP} characters and are
! 267: displayed on the login-terminal only when requested after a problem set is
! 268: closed. The VT100 display offers the option to view a separate page containing
! 269: the explanation. The web version automatically displays the coded explanation
! 270: when the student views a closed problem set.
! 271: \item The syntax for coding explanations is very similar to hints. It is
! 272: useful to include a detailed explanation for some problems.
! 273: Students often review old problem sets at exam time and may not exactly
! 274: remember how to solve a specific problem.
! 275: \item The following are explanation examples:
! 276: \begin{capacode}
! 277: /EXP An explanation is often welcomed by students.
! 278: /EXP It sometimes requires a large amount of text
! 279: /EXP and might require several lines.
! 280: \end{capacode}
! 281: Or:
! 282: \begin{capacode}
! 283: /EXP An explanation is often welcomed by students. It sometimes requires \
! 284: a large amount of text and might require several lines.
! 285: \end{capacode}
! 286: Or (no carriage return at all, line wrap automatic):
! 287: \begin{capacode}
! 288: /EXP An explanation is often welcomed by students. It sometimes requires a large amount of
! 289: text and might require several lines.
! 290: \end{capacode}
! 291:
! 292: \end{itemize}
! 293:
! 294: %\item
! 295: \subsection{\bf The Mapping Function ( \index{/MAP}{\tt /MAP} and \index{/RMAP}
! 296: {\tt /RMAP} )}
! 297: \begin{itemize}
! 298: \item The {\tt /MAP} function is used to map and permute the assigned values
! 299: from a set of variables onto another set of variables according to a given
! 300: seed value.
! 301: \item For example:
! 302:
! 303: \begin{capacode}
! 304: /LET seed=random(1,3000,1)
! 305: /MAP(seed;M1,M2,M3;m,n,o)
! 306: \end{capacode}
! 307:
! 308: Assigns to the variables $M1$, $M2$, and $M3$ the values of the variables $m$, $n$, and $o$.
! 309: The correspondence (i.e. which of $m$, $n$, or $o$ is assigned to $M1$, etc....) is
! 310: determined by the value of the variable `seed', which in this example is
! 311: selected from 1 to 300.
! 312:
! 313: \item The arguments of the {\tt /MAP} function are divided into three portions
! 314: by a semicolon symbol (the seed, the variable set, and the defined variable
! 315: set). The value of the seed is used to setup a random number generator
! 316: which is needed to
! 317: select one value from the {\bf second} set of variables and assign it to one of the
! 318: variables in the {\tt first} set. In the above example, two random numbers will
! 319: be generated.
! 320: The first random number is then divided by three and the remainder is used to
! 321: determine the first value to be selected from the set of three values and
! 322: gets assigned to the first variable in the list. The second random number
! 323: is then divided by two and the remainder is used to determine the second
! 324: value from the remaining two values and
! 325: is mapped to the second variable. The very last value left is then
! 326: assigned to the last variable. Therefore, the number of variables in both sets
! 327: must be equal. If any of the variables that appear in the second variable set
! 328: were not previously assigned a value, a warning will be issued. Variables used in the
! 329: first variable set may contain no data at first, but all variables in the first
! 330: variable set will
! 331: receive some value after the {\tt /MAP} function is called.
! 332:
! 333:
! 334: \item The {\tt /MAP} function is used in all the auxiliary files of the multiple
! 335: choice templates prepared to facilitate coding of qualitative or conceptual
! 336: questions.
! 337:
! 338: \item The {\tt /RMAP} function does the reverse action of the {\tt /MAP} function.
! 339: The value of the seed is used to setup a random number generator
! 340: which is needed to
! 341: select one variable from the {\bf first} set of variables and map it with one of the
! 342: values from the {\tt first} set.
! 343: For example, we have the following code:
! 344: \begin{capacode}
! 345: /LET seed=random(1,300,1)
! 346: /LET w=1
! 347: /LET x=2
! 348: /LET y=3
! 349: /LET z=4
! 350: /MAP(seed;a,b,c,d;w,x,y,z)
! 351: /DIS(a), /DIS(b), /DIS(c), /DIS(d)
! 352:
! 353: output: 3, 1, 2, 4
! 354: \end{capacode}
! 355: The values of the the second set of variables were randomly assigned (dependent
! 356: on the seed value) to the first set variables.
! 357: See how the {\bf value} of {\em w} (the first of the four values in its value set) is
! 358: mapped to the {\bf variable} {\em b} (the second of the variables in its set).
! 359: If we used {\tt /RMAP} instead with
! 360: the same seed value used above in the code below, the resulting mapping is reversed.
! 361: Notice how the {\bf variable} {\em a} (the first of the four variables in its set) has the
! 362: {\bf value} of {\em x} (the second of the four values) mapped to it.
! 363: \begin{capacode}
! 364: /LET w=1
! 365: /LET x=2
! 366: /LET y=3
! 367: /LET z=4
! 368: /RMAP(seed;a,b,c,d;w,x,y,z)
! 369: /DIS(a), /DIS(b), /DIS(c), /DIS(d)
! 370:
! 371: output: 2, 3, 1, 4
! 372: \end{capacode}
! 373:
! 374: Therefore, {\tt /RMAP} can also be used to unscramble {\tt /MAP}:
! 375: \begin{capacode}
! 376: /LET seed=random(1,300,1)
! 377: /LET w=1
! 378: /LET x=2
! 379: /LET y=3
! 380: /LET z=4
! 381: /MAP(seed;a,b,c,d;w,x,y,z) //same seed as above - not redefined
! 382: /RMAP(seed;p,q,r,s;a,b,c,d)
! 383: /DIS(p), /DIS(q), /DIS(r), /DIS(s)
! 384:
! 385: output: 1, 2, 3, 4
! 386: \end{capacode}
! 387:
! 388: \item To view an example of both the {\tt /MAP} and {\tt /RMAP} see the second
! 389: problem in {\sl set19.qz} from the {\sl nsc121s9} class directory({\sl /demolibrary/type-other/OR-MAP-RMAP}).
! 390:
! 391: \end{itemize}
! 392:
! 393:
! 394: \subsection{\bf Conditional Statements ( \index{/IF}{\tt /IF}, \index{/ELSE}{\tt /ELSE},
! 395: and \index{/ENDIF}{\tt /ENDIF} )}
! 396: \begin{itemize}
! 397: \item {\tt /IF}, {\tt /ELSE}, and {\tt /ENDIF} are used to add conditions within the \capa\
! 398: coding.
! 399:
! 400: \item For example:
! 401: \begin{capacode}
! 402: //NOTE: Each /IF needs an /ENDIF
! 403: /LET choice=random(1,4,1)
! 404: /IF (choice==1)
! 405: If the statement within the parentheses is true, this text
! 406: will be printed for the student to read.
! 407: /ELSE
! 408: /IF (choice==2)
! 409: This line will be printed instead.
! 410: /ELSE
! 411: /IF (choice==3)
! 412: This line will be printed.
! 413: /ELSE
! 414: If all the conditions above are false, then this text
! 415: will be printed.
! 416: /ENDIF //ends the last /IF condition
! 417: /ENDIF //ends the second /IF condition
! 418: /ENDIF //ends the first /IF condition
! 419: \end{capacode}
! 420:
! 421: \item Other commands can be entered in the {\tt /IF} statement. For example,
! 422: you may have the following:
! 423: \begin{capacode}
! 424: /IF (choice!=1)
! 425: /ANS(5)
! 426: /ELSE
! 427: /ANS(0)
! 428: /ENDIF
! 429: \end{capacode}
! 430: Therefore, if the variable choice happens to {\bf not} equal the interger 1 then the
! 431: the answer is 5, otherwise the answer is 0. \\
! 432: \end{itemize}
! 433:
! 434: \subsection{\bf Loops ( \index{/WHILE}{\tt /WHILE} and \index{/ENDWHILE}{\tt /ENDWHILE} )}
! 435: \begin{itemize}
! 436:
! 437: \item Below is an example of the {\tt /WHILE} and {\tt /ENDWHILE} commands:
! 438: \begin{capacode}
! 439: Written below are the multiples of 5 up to 12:
! 440: /LET integer=0
! 441: /WHILE (integer <= 12)
! 442: /LET answer = 5*integer
! 443: /DIS(integer) * 5 = /DIS(answer) /DIS(web("","//",""))
! 444: //see the functions table to see how web() works
! 445: /LET integer=integer+1
! 446: /ENDWHILE
! 447:
! 448: The output will display:
! 449:
! 450: Written below are the multiples of 5 up to 12:
! 451: 0 * 5 = 0
! 452: 1 * 5 = 5
! 453: 2 * 5 = 10
! 454: 3 * 5 = 15
! 455: 4 * 5 = 20
! 456: 5 * 5 = 25
! 457: 6 * 5 = 30
! 458: 7 * 5 = 35
! 459: 8 * 5 = 40
! 460: 9 * 5 = 45
! 461: 10 * 5 = 50
! 462: 11 * 5 = 55
! 463: 12 * 5 = 60
! 464: \end{capacode}
! 465:
! 466: As long as the condition in the parentheses is true, the code between
! 467: the {\tt /WHILE} and {\tt /ENDWHILE} will be processed. When the condition
! 468: (in this case, the value of the variable {\em integer} is less than or equal
! 469: to 12) is false, control passes to the next line below the {\tt /ENDWHILE}.
! 470:
! 471: \item Every {\tt /WHILE} was must have a {\tt /ENDWHILE} to mark the end of the {\tt /WHILE} loop. \\
! 472: \end{itemize}
! 473:
! 474:
! 475: \subsection{\bf Answers (\index{/ANS()} {\tt /ANS} )}
! 476: \begin{itemize}
! 477: \item Each individual problem must be ended by an expression specifying the
! 478: answer. This answer expression consists of the keyword {\tt /ANS()}
! 479: starting on a new line.
! 480: \item The
! 481: answers are indicated specifically by the {\tt /ANS()} command, with the
! 482: parentheses containing the answer and the attributes of the answer.
! 483: The answers to problems can be previously defined variables.
! 484: There must be at least a variable, integer, real number, of string defining the answer within
! 485: the parentheses, ({\tt /ANS(variable), /ANS(5)}, etc.).
! 486: \item Several options are available to format the answer.
! 487: The attributes of the {\tt /ANS()} function are {\bf case insensitive}.
! 488: The available options for defining {\tt /ANS()} attributes are:
! 489:
! 490:
! 491:
! 492: %**********************************************
! 493: \item {\bf List of Available Expressions:}
! 494: \begin{tabbing}
! 495: 12345678901234567890123456789\= 12345678901234567890 \= \kill
! 496: {\tt wgt=} \> $\diamond $ problem weight \\
! 497: {\tt tries=} {\em or} {\tt try=} \> $\diamond $ number of allowed tries to input the answer\\
! 498: {\tt tol=} \> $\diamond $ answer tolerance \\
! 499: {\tt calc=fmt/unfmt} \> $\diamond $ sets tolerance to be calculated
! 500: from the \\
! 501: $$ \> $ $ \ formatted or unformatted answer. \\
! 502: {\tt sig=} \> $\diamond $ fixed number of significant digits. \\
! 503: {\tt sig=}{\em x} {\tt minus} {\em y} {\tt plus} {\em z}
! 504: \> $\diamond $ a range of significant digits from \\
! 505: $$ \> $ $ \ {\em x} minus {\em y} to {\em x} plus {\em z} \\
! 506: {\tt unit=} {\em or} {\tt units=} \> $\diamond $ units of answer (dimensions)\\
! 507: {\tt hint=} \> $\diamond $ number of wrong student entered
! 508: answers \\
! 509: $$ \> $ $ \ before the hint appears. \\
! 510: {\tt str=mc/cs/ci/fml} \> $\diamond $ different ways of accepting
! 511: a string answer \\
! 512: $$ \> $ $ \ with fml for math formula as answer. \\
! 513: {\tt hgr=on} \> $\diamond $ hand graded answer \\
! 514: {\tt pc=on} \> $\diamond $ partial credit \\
! 515: {\tt ansbox=on/off} \> $\diamond $ Web generated answer box \\
! 516: {\tt br=on/off} \> $\diamond $ Web line break \\
! 517: \end{tabbing}
! 518: \item {\bf More detailed explanations are found below:}
! 519: %**********************************************
! 520: \begin{enumerate}
! 521: %BEGIN DISCRIPTION OF ANSWER OPTIONS
! 522: %***********************************************PROBLEM WEIGHT
! 523: \item {\bf Problem Weight:\index{WGT=}} The problem point value (or weight)
! 524: is set by: \\
! 525: \fbox{\tt /ANS(variable, wgt=2)}\\
! 526: The problem value can
! 527: be an integer value between 0 and 9. A variable can be can be
! 528: defined at
! 529: the beginning of a problem by either of the following commands:
! 530: \\ \fbox{\tt /BEG prob\_val=3} \\
! 531: or \\
! 532: \fbox{\tt /LET prob\_val=3} \\
! 533: Then, this
! 534: value can be used in the {\tt /ANS()} function:\\
! 535: \fbox{\tt /ANS(variable, wgt=prob\_val, tries=20)}. \\
! 536: If the problem weight is not defined, the default value
! 537: of 1 point is used.
! 538: %******************************************TRIES
! 539: \item {\bf Tries:\index{TRY=}\index{TRIES=}} The number of attempts to enter an incorrect
! 540: answer can be limited to an integer value less than
! 541: or equal to 99.
! 542: \begin{itemize}
! 543: \item The format for setting the number of tries is: \\
! 544: \fbox{\tt /ANS(variable, tries=35)} \\
! 545: or \\
! 546: \fbox{\tt /ANS(variable, tries=try\_val)}
! 547: \item In the second example shown above, {\em try\_val} is assumed to be a previously defined
! 548: variable.
! 549: The student
! 550: receives a message near the answer field stating the number of
! 551: attempts and the total number of tries available for each
! 552: problem in which the {\tt tries=$x$} has been specified.
! 553: A warning message is displayed when only one try
! 554: remains.
! 555: Errors in either
! 556: significant figures or units will {\bf not} decrease the
! 557: number of remaining tries for the student. Both the
! 558: significant figure
! 559: and unit must be correct before
! 560: a ``Correct'' or ``Incorrect''
! 561: response to the numerical portion of the answer is given to
! 562: the student.
! 563: \item {\bf Note:} {\tt try=} is equivalent to {\tt tries=} \end{itemize}
! 564: %*********************************************TOLERANCE
! 565: \item {\bf Tolerance: \index{TOL=}}
! 566: The tolerance can be specified as (1) a numerical value, (2) as a percentage of the correct answer or as (3) a pre-defined variable.
! 567: \begin{enumerate}
! 568: \item The format for a set numerical value would be given by:\\
! 569: \fbox{\tt /ANS(variable:3f,tol=0.5)}
! 570: \item The format of a \% tolerance would be given by: \\
! 571: \fbox{\tt /ANS(variable:3f, tol=1.1\%)}. \\
! 572: This is specified if there is a possibility that the
! 573: answer will be calculated as equal to zero. The tolerance
! 574: is thus given a value rather than a percentage.
! 575: \item The format for a defined tolerance variable would be: \\
! 576: \fbox{\tt /ANS(variable:3f, tol=TolVar)}. \\
! 577: \item The format for a \% tolerance with a defined variable would be: \\
! 578: \fbox{\tt /ANS(variable:3f, tol=TolVar\%}
! 579: \end{enumerate}
! 580: {\em Note that the display of the answer can be formatted according to the same commands used
! 581: in /DIS.}
! 582: \begin{itemize}
! 583: \item {\bf Real answers:} A tolerance should be specified
! 584: for `real' answers. It can be
! 585: absolute or relative. An absolute tolerance can be a variable.
! 586: Answers with real values can be {\bf formatted} with
! 587: specifications {\tt :1E, :3E,
! 588: :2f,}
! 589: etc., where {\tt 1E} means exponential notation with one decimal place,
! 590: {\tt :3E} means exponential notation with three
! 591: decimal places, and {\tt :2f} means two floating decimals.
! 592: \begin{enumerate}
! 593: \item \fbox{\tt /ANS(variable:2E,tol=1.2\%,wgt=prob\_val,tries=try\_val)}
! 594: \\ When
! 595: an answer submitted by a student is within the relative
! 596: tolerance (1.2\% ) of the correct answer, the student receives
! 597: `correct'. {\bf Note:} The relative tolerances are based
! 598: on the {\bf unformatted} answer.
! 599: \item \fbox{\tt /ANS(variable:2E,tol=5.0,wgt=prob\_val,tries=try\_val)}
! 600: \\ An answer
! 601: submitted by a student within the absolute tolerance of 5.0,
! 602: would be graded `correct'. That is the answer must lie within the range {\em variable}-5
! 603: to {\em variable}+5.
! 604:
! 605: \item \fbox{\tt /ANS(variable:3E,tol=tol\_val,wgt=prob\_val, tries=try\_val)} \\
! 606: Here the tolerance is a previously defined quantity,
! 607: {\tt tol\_val}.
! 608: \item {\tt calc=fmt/unfmt}: Selects the application of the
! 609: tolerance range for the formatted or unformatted numerical
! 610: answer value. For example, say we have {\tt variable=2/3} for the following answer line: \\
! 611: \fbox{\tt /ANS(variable:3f,tol=.01,wgt=prob\_val, tries=try\_val)} \\
! 612: the error would be between two-thirds plus or minus .01. If we used this instead though: \\
! 613: \fbox{\tt /ANS(variable:3f,tol=.01,calc=fmt,wgt=prob\_val,tries=try\_val)} \\
! 614: the error would be between 0.667 plus or minus 0.01. The default value is unformatted.
! 615: \end{enumerate}
! 616: \item {\bf Integer answers:} You may not want a tolerance for an
! 617: integer answer. \\
! 618: \fbox{\tt /LET variable=34}
! 619: \begin{enumerate}
! 620: \item \fbox{\tt /ANS(variable, tol=0, wgt=prob\_val,tries=try\_val, hint=hint\_val)}\\
! 621: Only the number ``34'' will be
! 622: accepted as correct.
! 623: \item \fbox{\tt /ANS(variable, wgt=prob\_val, tries=try\_val, hint=hint\_val)}\\
! 624: Same as above. Only the number ``34'' will be accepted as
! 625: correct.
! 626: \item You can also use a percentage tolerance or a non-integer real
! 627: number as a tolerance, but then students can get a ``correct'' answer
! 628: by entering in an appropriate non-integer number. For example: \\ \fbox{\tt /ANS(variable, tol=4, wgt=prob\_val, tries=try\_val, hint=hint\_val)}
! 629: \\ Any answer within plus or
! 630: minus 4 units is accepted as correct. For example, the
! 631: real number, 36.5 will be accepted as ``correct''.
! 632: \end{enumerate}
! 633:
! 634: \item {\bf Note:} If you define your answer variable with an equation consisting
! 635: of only integer numbers, then the resulting answer will be an integer.
! 636: For example, we have the following code: \\
! 637: \fbox{\tt /LET variable1=1/2} \\
! 638: \fbox{\tt /LET variable2=35/12} \\
! 639: Then {\em variable1} will be assigned the value of ``0'' and {\em variable2} will be assigned the value of ``2''. On the other hand, \\
! 640: \fbox{\tt /LET variable1=1.0/2.0} \\
! 641: will now be assigned the value of 0.5 because at least one real number was used
! 642: in the equation.
! 643: \footnote{You may have noticed this text from the /LET section, but it is worth repeating because it can be
! 644: a major source of frustration to the instructor and students if real numbers and integer numbers are not
! 645: dealt with correctly.}
! 646: \end{itemize}
! 647: %************************************************SIGNIFICANT FIGURES
! 648: \item {\bf Significant Figures:\index{SIG=}}
! 649: If unspecified, significant figures are not checked and
! 650: any number of significant figures between 1 and 15 are
! 651: accepted provided the answer entered falls within the
! 652: specified numerical tolerance range. The number of acceptable
! 653: significant figures can be specified by the following format:
! 654: \begin{enumerate}
! 655: \item \fbox{\tt /ANS(variable, sig=4 plus 1 minus 1, tries=try\_val, wgt=prob\_val, hint=hint\_val)} \\
! 656: This will accept 3, 4, or 5 significant figures in the answer.
! 657: \item \fbox{\tt /ANS(variable, sig=3 plus 2, tries=try\_val, wgt=prob\_val, hint=hint\_val)} \\
! 658: This will accept 3, 4, or 5 significant figures in the answer.
! 659: \item \fbox{\tt /ANS(variable, sig=4 , tries=try\_val, wgt=prob\_val, hint=hint\_val)} \\
! 660: This will only accept 4 significant figures in the answer.
! 661: \end{enumerate}
! 662: Care must be exercised when limiting the significant figures
! 663: when a percentage tolerance is used. It is possible to create a situation where the student cannot enter a correct answer for a problem. For example, the server might calculate the unformatted {\em variable} to be equal to 0.409. The following answer format will create such a situation: \\
! 664: \fbox{\tt /ANS(variable:0f, sig=1, tol=1\%, wgt=prob\_val)} \\
! 665: The student will calculate this answer to be 4E-1 which is not within 1\% of the
! 666: answer.
! 667:
! 668: %********************************************UNITS
! 669: \item {\bf Units:\index{unit=}} A file in the class
! 670: directory named {\sl capa.config} lists all SI units and other
! 671: user defined acceptable units with
! 672: their relationships.
! 673: That file can be edited by the instructor.
! 674: Units are entered as strings.
! 675: \begin{itemize}
! 676: \item A typical format for
! 677: answers requiring a unit is: \\
! 678: \fbox{\tt /ANS(perimeter:3f,unit="cm",sig=4)}\\
! 679: or\\
! 680: \fbox{\tt /ANS(area:2f,unit="cm\^{}2")}
! 681: \item For a specially defined unit, one can use a variable, e.g.
! 682: \begin{capacode} /LET StringVar="dollar"
! 683: /ANS(cost:2f,unit=StringVar,tol=.005,wgt=2,tries=6,sig=4 plus 3)
! 684: \end{capacode}
! 685: \item {\sl /demolibrary/type03/msu-prob22.txt} and
! 686: {\sl /demolibrary/type03/msu-prob23.txt} \\ are two problems
! 687: included in the distribution
! 688: package which aid in teaching students the rules for entering
! 689: answers with units in a \capa\ session. These are useful for students in an initial \capa\ set.
! 690: \item {\bf Note:} {\tt units=} is equivalent to {\tt unit=}
! 691: \end{itemize}
! 692: %************************************************SHOW HINTS
! 693: \item {\bf Show Hints:\index{hint=}} The hint can be configured so that it
! 694: is available or displayed only after a certain number of tries.
! 695: This is achieved by setting {\tt hint=AnInteger} (e.g. {\tt hint=3})
! 696: in the answer format.
! 697: For example: \\
! 698: \fbox{\tt /ANS(variable, hint=3, tries=10, wgt=1)} \\
! 699: or \\
! 700: \fbox{\tt /ANS(variable, hint=hint\_val, tries=10, wgt=1)}\\
! 701: will both
! 702: (1) show the hint on a Web browser after 3 tries
! 703: and (2) allow it to be viewed on telnet after 3 or more tries
! 704: by entering :H which shows up on the menu lines.
! 705: %***********************************************STRING ANSWERS
! 706:
! 707:
! 708: \item {\bf String answers} can be exact comparisons, or have the order
! 709: and/or case disregarded.
! 710: \begin{enumerate}
! 711: \item \fbox{\tt /ANS(letters,str=ci,wgt=prob\_val,tries=20)} \\
! 712: {The command {\tt str=ci} is the default value, the order is checked but case insensitive.}
! 713: \item \fbox{\tt /ANS("KCl",wgt=prob\_val,tries=20)}\\
! 714: { The default is case insensitive. Therefore, answers such as ``kcl'' and
! 715: ``KcL'' are accepted as correct.}
! 716: \item \fbox{\tt /ANS(letters,wgt=prob\_val,tries=20)}\\
! 717: { {\em letters} is a string variable previously defined. This works
! 718: like the example above. (The order is essential, but
! 719: not case sensitive.)}
! 720: \item \fbox{\tt /ANS(letters,str=mc,wgt=prob\_val,tries=20)}\\
! 721: {The command
! 722: {\tt str=mc} accepts any order of the correct responses.
! 723: Hence, ``abc'' and ``acb'' are equivalent.}
! 724: \item \fbox{\tt /ANS(letters,str=cs,wgt=prob\_val,tries=20)} \\
! 725: {This is an exact string comparison. Both the order and
! 726: the case are required.}
! 727: \item {\bf Formula as string answer:}
! 728: \begin{capacode}
! 729: /ANS(fm1,str=fml,eval=<"x" @ pt1:pt2#20>,TOL=1E-3, tries=try_val,
! 730: wgt=prob_val,hint=hint_val) \end{capacode}
! 731: In this one-variable case, \capa\ will sample the student's input formula and the formula fm1, the string formula representing the correct answer. Comparison will be at 20 values of x between x = pt1 and x = pt2). All comparisons must fall with the tolerance, here 1E-3, for a correct answer.\\
! 732: {\em For examples, see the templates: \\{\tt /demolibrary/MCTools/equationA} and {\tt /demolibrary/MCTools/equationXY} }
! 733: \end{enumerate}
! 734: %********************************************HAND GRADING
! 735: \item {\bf Hand Grading:\index{hgr=}} A problem can be designated to be hand
! 736: graded. For this case students are not allowed to answer
! 737: via telnet or web sessions and the question is graded by the instructor using the {\sf Grader} application.
! 738: The format for this is: \\
! 739: {\tt /ANS(variable,hgr=on, tries=1, wgt=1)} \\
! 740: {\em (See /SUBJECTIVE for telnet or
! 741: Web submitted essay questions for hand grading.)}
! 742: %*******************************************PARTIAL CREDIT
! 743: \item {\bf Partial Credit:\index{pcr=}} A multiple point problem can be
! 744: specified to have partial credit. This attribute works like
! 745: {\tt hgr=on} in that students cannot login to
! 746: answer the question. The format for this is: \\
! 747: \fbox{\tt /ANS(variable, wgt=9, pcr=on, tries=1)}\\
! 748: This allows an instructor to
! 749: manually enter an integer point value from 0 to 9 through the
! 750: {\sf Grader} application.
! 751:
! 752:
! 753: %**********************************************MISCELLANEOUS ANSWER ATTRIBUTES
! 754:
! 755: \item {\bf Miscellaneous Answer Attributes}
! 756: \begin{enumerate}
! 757: \item {\tt br=on/off}: This starts/stops the generation of
! 758: $<$br$>$ (a line break) on the Web display. The default value is on.
! 759: \item {\tt ansbox=on/off}: Controls the generation and display
! 760: of the answer box for the Web. The default value is on.
! 761: \item {\tt Yes/no} is equivalent to {\tt on/off}.
! 762: \end{enumerate}
! 763: %*******************************************END OF ANSWER ATTRIBUTES
! 764: \end{enumerate}
! 765: \end{itemize}
! 766:
! 767: \subsection{\bf Multiple Answers ( \index{/AND}\index{/OR}{\tt /AND} and {\tt /OR} )}
! 768: \begin{itemize}
! 769: \item {\tt /AND} or {\tt /OR} after an answer specification requires another {\tt /ANS} statement be present.
! 770: In the case of {\tt /AND}, two successive answers will be required from the student. In the case of {\tt /OR},
! 771: the student will receive credit if either answer is supplied.
! 772: \item Below is an example for {\tt /AND}:
! 773: \begin{capacode}
! 774: /ANS(variable_1, wgt=prob_val, tries=try_value)
! 775: /AND
! 776: /ANS(variable_2, wgt=prob_val, tries=try_value)
! 777: \end{capacode}
! 778:
! 779: The above example requires two answers from the student.
! 780: During a telnet session the student will be prompted to enter the first
! 781: answer and then the second {\bf in the order that they are coded}.
! 782: During a web session, there will be multiple answer boxes labeled ``Answer 1''
! 783: and so on. Again, they must be entered in order by the student. It is
! 784: recommended that the problem text give instructions to the student to answer the questions in order.
! 785: Note that the problem is worth the number of points of the last defined {\tt wgt} specification, i.e. if in the
! 786: first answer {\tt wgt=3} and in the second answer {\tt wgt=1}, the student will only receive one point for
! 787: the total question.
! 788: \item Below is an example for {\tt /OR}:
! 789: \begin{capacode}
! 790: /ANS(variable_1, wgt=prob_val, tries=try_value)
! 791: /OR
! 792: /ANS(variable_2, wgt=prob_val, tries=try_value)
! 793: \end{capacode}
! 794:
! 795: The {\tt /OR} is suitable for questions such as asking the student to choose one
! 796: of the correct answers from a list.
! 797: \item Note that the variable {\em try\_val} was used in the examples above
! 798: to simplify the script. If the number of tries is different within the answer
! 799: specifications, the last defined
! 800: number of tries is given to the student for their amount of tries in that
! 801: problem.
! 802: \end{itemize}
! 803:
! 804:
! 805: \subsection{\bf Essay Questions (\index{/SUBJECTIVE} {\tt /SUBJECTIVE} )}
! 806: {\tt /SUBJECTIVE} is used instead of {\tt /ANS} when the instructor wants to allow students
! 807: to submit a short essay.
! 808: The student can type their essay in either
! 809: the telnet or web session. The instructor grades this essay with the
! 810: {\sf Grader} application and the score is recorded in the database.
! 811: {\tt hgr=on} must be specified when using {\tt /SUBJECTIVE}.
! 812: \begin{capacode} /SUBJECTIVE(wgt=prob_val, hgr=on, tries=try_val)
! 813: \end{capacode}
! 814: You may choose to set a number of tries also. The student will be allowed to rewrite their essay according
! 815: to the number of tries that the instructor allows.
! 816:
! 817: \subsection{\bf Displaying text verbatim (\index{/VERB} \index{/ENDVERB} {\tt /VERB} and {\tt /ENDVERB} )}
! 818: Used to display text verbatim:
! 819: \begin{capacode}
! 820: Enter the answer as in a calculator:
! 821: /VERB
! 822: Example: 4.567 + 2.431 * x^4 - 0.310 * x^2
! 823: /ENDVERB
! 824: \end{capacode}
! 825:
! 826:
! 827:
! 828: \subsection{\bf Displaying Information Before the Problem Set (\index{/START} {\tt /START} )}
! 829: All the material coded before {\tt /START} in a {\sl set$x$.qz} file is both printed
! 830: out and displayed on the Web for students to see. See {\sl set19.qz} in the
! 831: {\sl nsc121s9} class directory for an example (note the placement of the imported {\sl HWTop} file).
! 832:
! 833: \subsection{\bf Ending the Problem Set ( \index{/END}{\tt /END} )}
! 834: \begin{itemize}
! 835: \item {\tt /END()} or {\tt /END(\index{stdendline}stdendline)} causes the parser to stop and ignore all input
! 836: characters beyond that command. String variables can be defined and constructed and additional text
! 837: (such as instructions for students) may be displayed between the last {\tt /ANS()} and
! 838: {\tt /END}.
! 839:
! 840: \item All sets should include {\tt /END(stdendline)}, so that both on
! 841: paper and on the Web, the department is identified and the
! 842: copyright nature of the \capa\ software is indicated. The string for
! 843: {\tt stdendline} is created in the {\sl HWTop} file in the class directory and can be
! 844: edited by users, such as changing the Dept. ID for your particular class.
! 845:
! 846: \item The \capa\ system counts the number of problems in a problem set by
! 847: counting the number of {\bf proper} answer lines (lines containing {\tt /ANS} or {\tt /SUBJECTIVE}). If there is
! 848: an error in coding and the answer cannot be evaluated, that problem is not
! 849: counted by {\sf Quizzer}.
! 850: \end{itemize}
! 851: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 852: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 853: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 854: {\small
! 855: \begin{center}\begin{tabular}{|p{2.9cm}|p{14.2cm}|} \hline
! 856: \multicolumn{2}{|c|}{\bf Table of Intrinsic Functions: Names Are Case
! 857: Sensitive.}\\ \hline
! 858: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 859: { Functions}& Description, Sample quizzer input and output for printing \\ \hline
! 860: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 861: \index{sin()}\index{cos()}\index{tan()}{\tt sin(x), cos(x), tan(x)}& Trigonometric functions. x is in radians.
! 862: \begin{verbatim}/LET angle=60.0
! 863: /LET var1=sin(angle*3.141592654/180)
! 864: Sine of /DIS(angle:1f) degrees is /DIS(var1:3f).
! 865: \end{verbatim}
! 866: Output: {\tt Sine of 60.0 degrees is 0.866. }\\ \hline
! 867: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 868: \index{asin()}\index{acos()}\index{atan()}\index{atan2()}{\tt asin(x), acos(x), atan(x), atan2(y,x)}& Inverse trigonometric functions. Returns
! 869: radians. asin() computes the principal value of the arc sine of x, in the
! 870: interval [-pi/2,pi/2] radians. The value of x must be in the domain [-1,1].
! 871: acos() computes the principal value of the arc cosine of x, in
! 872: the interval [0,pi] radians. The value of x must be in the domain [-1,1].
! 873: atan2() computes the principal value of the arc tangent of y/x,
! 874: in the interval [-pi,pi] radians. The sign of atan2() is
! 875: determined by the sign of y.
! 876: \begin{verbatim}/IMP "demolibrary/Tools/StdConst"
! 877: //pi_c is a variable set to equal pi and is found in the imported file above.
! 878: /LET var1=-1.65
! 879: /LET var2r=atan(var1)
! 880: /LET var3d=atan(var1)*180.0/PI
! 881: The angle whose tangent is /DIS(var1:3f) can be expressed
! 882: as /DIS(var2r:3E) radians or as /DIS(var3d:3E) degrees.
! 883: \end{verbatim}
! 884: Output for telnet session:
! 885: {\tt The angle whose tangent is -1.650 can be expressed
! 886: as -1.026E+00 radians or as -5.878E+01 degrees.}
! 887: \\ \hline
! 888: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 889: \index{log()}\index{log10()}{\tt log(x), log10(x)}& Natural logarithm and base-10 logarithm. Note that the
! 890: the variables {\tt natlog} and {\tt tenlog} were defined to simplify the coding
! 891: of this problem by allowing complicated text (with subscripts and superscripts)
! 892: to be printed by displaying a variable.
! 893: \begin{verbatim}
! 894: /LET natlog=tex("$log_e$","log_e")
! 895: /LET tenlog=tex("$log_{10}$","log_10")
! 896: /LET x=2546.7
! 897: /LET var1=log(x)
! 898: /LET var2=log10(x)
! 899: /LET ratio=var1/var2
! 900: /LET var3=log(10.0)
! 901: The /DIS(natlog) of /DIS(x:1f) is /DIS(var1:3E) while its /DIS(tenlog)
! 902: is /DIS(var2:3E). Note that the ratio /DIS(natlog)//DIS(tenlog)
! 903: = /DIS(ratio:3f), which is just /DIS(natlog)(10), i.e. /DIS(var3:3E).
! 904: \end{verbatim}
! 905: Output for print out or Web:
! 906: The $log_e$ of 2546.7 is $7.843$ while its
! 907: $log_{10}$
! 908: is $3.406$. Note that the ratio $log_e$/$log_{10}$
! 909: = 2.303, which is just $log_e$(10), i.e. $2.303$.
! 910: \\ \hline
! 911: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 912: \index{exp()}\index{pow()}\index{sqrt()}{\tt exp(x), pow(x,y), sqrt(x)}& Exponential, power, and square root.
! 913: Compute $e^x$, $x^y$, and $\sqrt{x}$ respectively.
! 914: \begin{verbatim}/LET varx=1.526
! 915: /LET vary=0.5
! 916: /LET var1=exp(varx)
! 917: /LET var2=pow(varx,0.5)
! 918: /LET var3=pow(varx,vary)
! 919: /LET var4=sqrt(varx)
! 920: var1=/DIS(var1:2f); var2=/DIS(var2:2f); var3=/DIS(var3:2f);
! 921: var4=/DIS(var4:2f).
! 922:
! 923: \end{verbatim}
! 924: Output: {\tt var1 = 4.60; var2 = 1.24; var3 = 1.24; var4 =
! 925: 1.24.}
! 926: \\ \hline
! 927: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 928: \end{tabular}\end{center}}
! 929: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 930: {\small
! 931: \begin{center}\begin{tabular}{|p{2.9cm}|p{14.2cm}|} \hline
! 932: { Functions}& Description, sample quizzer code and output \\ \hline
! 933: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 934: \index{abs()}\index{sgn()}{\tt abs(x), sgn(x)}& {\tt abs(x)} returns the absolute value of $x$.
! 935: {\tt sgn(x)} returns $1$, $0$ or $-1$ depending on value
! 936: of $x$
! 937: \begin{verbatim}/LET xx=-2.5
! 938: /LET var1=abs(-4.5)
! 939: /LET var2=sgn(xx)
! 940: /LET var3=sgn(-4.5*xx)
! 941: var1=/DIS(var1:2f) var2=/DIS(var2) var2=/DIS(var2:2f) var3=/DIS(var3)
! 942: \end{verbatim}
! 943: Output: {\tt var1=4.50 var2=-1 var2=-1.00 var3=1
! 944: }\\ \hline
! 945: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 946: \index{erf()}\index{erfc()}{\tt erf(x), erfc(x)}& Error functions. ${erf}(x) = \frac{2}{\sqrt{\pi}}
! 947: \int_0^{x} e^{-t^2} dt$ and
! 948: ${erfc}(x) = 1.0 - {erf}(x)$.
! 949: \begin{verbatim}/LET varx=0.51
! 950: Evaluate the Normal Probability Integral from -/DIS(varx)
! 951: to /DIS(varx). /DIS(newline)
! 952: /LET prob = erf(varx/sqrt(2.0))
! 953: Probability = /DIS(prob:4f)
! 954: \end{verbatim}
! 955: Output: {\tt Evaluate the Normal Probability Integral from -0.51
! 956: to 0.51. }
! 957: \newline {\tt Probability = 0.3899}
! 958: \\ \hline
! 959: %$\mathrm{erfc}(x) = 1.0 - \mathrm{erf}(x)$.}\\ \hline
! 960: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 961: \index{ceil()}\index{floor()}{\tt ceil(x), floor(x)}& Ceiling and floor functions.
! 962: ${ceil}(x) = \lceil x \rceil$ and ${floor}(x) = \lfloor
! 963: %$\mathrm{ceil}(x) = \lceil x \rceil$ and $\mathrm{floor}(x) = \lfloor
! 964: x \rfloor$. The ceiling function returns an integer rounding x toward positive
! 965: infinity. The floor function rounds toward negative infinity.
! 966: \begin{verbatim}/LET varx=ceil(3.65)
! 967: /LET vary=floor(3.65)
! 968: /LET varz=ceil(-5.73)
! 969: /LET varw=floor(-5.73)
! 970: varx=/DIS(varx) vary=/DIS(vary) varz=/DIS(varz) varw=/DIS(varw)
! 971: \end{verbatim}
! 972: Output: {\tt varx=4 vary=3 varz=-5 varw=-6
! 973: }\\ \hline
! 974: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 975: \index{min()}\index{max()}{\tt min(...), max(...)}& Minimum and maximum functions, with indefinite number
! 976: of arguments.
! 977: Arguments must be of either all integer or real type. String comparison are
! 978: such that $A < a$. In other words,
! 979: lower case letters have a higher value than upper case letters.
! 980: \begin{verbatim}/LET a=min(23,45,12,7,9)
! 981: /LET b=max(23.1,45.3,12.6,7.1,9.0)
! 982: /LET c=min("a","ae","aeg","Aeg")
! 983: /LET d=max("a","ae","aeg","Aeg")
! 984: a=/DIS(a:2f) b=/DIS(b:2f) c=/DIS(c) d=/DIS(d)
! 985: \end{verbatim}
! 986: Output: {\tt a=7 b=45.30 c=Aeg d=aeg
! 987: }\\ \hline
! 988: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 989: \end{tabular}\end{center}}
! 990: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 991: {\small
! 992: \begin{center}\begin{tabular}{|p{2.9cm}|p{14.2cm}|} \hline
! 993: { Functions}& Description, sample quizzer code and output \\ \hline
! 994: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 995: \index{factorial()}{\tt factorial(n)}& Arguments must be an integer. Returns an integer if n is or
! 996: smaller, else or real value.
! 997: \begin{verbatim}/LET number=factorial(6)
! 998: /DIS("6!=")/DIS(number)/DIS(newline)
! 999: /DIS("0!=")/DIS(factorial(0))/DIS(newline)
! 1000: /LET number2=factorial(21)
! 1001: /DIS("21!=")/DIS(number2:3E)/DIS(newline) \end{verbatim}
! 1002: Output: {\tt
! 1003: 6!=720\newline
! 1004: 0!=1\newline
! 1005: 21!=$5.109 \times 10^{19}$
! 1006: }\\ \hline
! 1007: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 1008: \index{modulus operator, \%}
! 1009: {\tt N\% M}& N and M are integers, and the remainder of the integer ratio is
! 1010: returned.
! 1011: \begin{verbatim}
! 1012: /LET ratio = 98/5
! 1013: /DIS("ratio=")/DIS(ratio)/DIS(newline)
! 1014: /LET leftover=98%5
! 1015: /DIS("remainder=")/DIS(leftover) \end{verbatim}
! 1016:
! 1017: Output: {\tt
! 1018: ratio=19\newline
! 1019: remainder=3 }\\ \hline
! 1020: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 1021: \index{hyperbolic functions}
! 1022: {\tt sinh(x), cosh(x), tanh(x)} & Hyperbolic functions.\\ \hline
! 1023: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 1024: \index{hyperbolic functions, inverse}
! 1025: {\tt asinh(x), acosh(x), atanh(x)}& Inverse hyperbolic functions.\\ \hline
! 1026: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 1027: \index{roundto()}
! 1028: {\tt roundto(var1,n)} & Rounds the value of real variable `var1' to n places (fixed point notation).
! 1029: \begin{verbatim}
! 1030: /LET value=100.0/3.0
! 1031: Initial value = /DIS(value:5f)/DIS(newline)
! 1032: /LET value=roundto(value,2)
! 1033: The new value is now /DIS(value:5f) and can be used as
! 1034: /DIS(value:2f) with no rounding error. \end{verbatim}
! 1035:
! 1036: Output: {\tt Initial value =
! 1037: 33.33333
! 1038: The new value is now 33.33000 and can be used as 33.33 with no rounding
! 1039: error.}\\ \hline
! 1040: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 1041: \index{web()}{\tt web("a","b","c") or web(a,b,c) }& ASCII (a), tex(b) and html(c) strings or
! 1042: variables displayed respectively.
! 1043: \begin{verbatim}
! 1044: Example: \verb+{/DIS(web("M2","M$_2$","M<sub>2</sub>")) }+
! 1045:
! 1046: Output for telnet session: M2
! 1047: Output for printout or Web: M$_2$
! 1048: \end{verbatim}
! 1049: \\ \hline
! 1050: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 1051: \index{html()}{\tt html(a) or html("a")} & variable or string `a' parsed for Web browser only.
! 1052: \begin{verbatim}
! 1053: Example:
! 1054: /DIS(html("<br><a href=/nsc121s9/Links/webPulley.html> Motion of Masses \
! 1055: on a Pulley</a><p>"))
! 1056: \end {verbatim}
! 1057: Displays link "Motion of Masses on a Pulley"
! 1058: \\ \hline
! 1059: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 1060: \end{tabular}\end{center} }
! 1061: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 1062: {\small
! 1063: \begin{center}\begin{tabular}{|p{2.9cm}|p{14.2cm}|} \hline
! 1064: { Functions}& Description, sample quizzer code and output \\ \hline
! 1065: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 1066: {\tt \index{Bessel functions, jn() and yn()}jn(0,x), jn(1,x), jn(n,x)}& Bessel functions of the first kind, with orders
! 1067: $0$, $1$ and $n$ respectively. Note that the first argument is integer, the
! 1068: second real.
! 1069: \begin{verbatim}/LET aa=jn(0,3.0)
! 1070: /LET bb=jn(1,3.0)
! 1071: /LET cc=jn(2,3.0)
! 1072: aa=/DIS(aa:4f) bb=/DIS(bb:4f) cc=/DIS(cc:4f)
! 1073: \end{verbatim}
! 1074: Output: {\tt aa=-0.2601 bb=0.3391 cc=0.4861
! 1075: }\\ \hline
! 1076: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 1077: {\tt \index{yn()}yn(0,x), yn(1,x), yn(n,x)}& Bessel functions of the second kind, with
! 1078: orders $0$, $1$ and $n$ respectively. Note that the first argument is integer,
! 1079: the second real.
! 1080: \begin{verbatim}/LET dd=yn(1,3.0)
! 1081: dd=/DIS (dd:4f)
! 1082: \end{verbatim}
! 1083: Output: {\tt dd=0.3247
! 1084: }\\ \hline
! 1085: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 1086: {\tt \index{random()}random(l,u,d)}& Returns a uniformly distributed random number
! 1087: between $l$ and $u$ with steps of $d$. Note that all
! 1088: arguments must be the same type, integer or real. {\footnotesize [When real number are used, avoid having
! 1089: the step size such that the highest value lands on "u" as different machines may have different representations and accuracy.]}
! 1090: \begin{verbatim}/LET index=random(2,5,2) //returns integers 2 or 4
! 1091: /LET value=random(2.3,5.15 ,0.2 ) //returns 2.3, 2.5, 2.7,...., 5.1
! 1092: index=/DIS(index) value=/DIS(value:2f)
! 1093: \end{verbatim}
! 1094: Output: {\tt index=4 value=3.70
! 1095: }\\ \hline
! 1096: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 1097: \index{choose()}
! 1098: {\tt choose(i,...)}& Choose the $i$th item in the argument list. Integer $i$
! 1099: must be greater than zero and
! 1100: it's maximum possible value must not exceed the number of arguments following
! 1101: it.
! 1102: \begin{verbatim}/LET indx=3
! 1103: /LET realvar=choose(indx, 23.0,45.4,67.3) // will select 67.3
! 1104: /LET intvar=choose(indx, 23,45,67) // will select 67
! 1105: /LET stringvar=choose(indx,"No","Yes","Maybe") // will select "Maybe"
! 1106: realvar=/DIS(realvar:2f) intvar=/DIS(intvar) stringvar=/DIS(stringvar)
! 1107: \end{verbatim}
! 1108: Output: {\tt realvar=67.30 intvar=67 stringvar=Maybe
! 1109: }\\ \hline
! 1110: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 1111: \index{tex()}
! 1112: {\tt tex(a,b)}, {\tt tex("a","b")}& When in TeX mode, return the first argument
! 1113: $a$, and return the second argument $b$ in enscript mode (ASCII).
! 1114: \begin{verbatim}/DIS(tex("This, in the .tex file.","This, in the ASCII version."))
! 1115: /LET A=33
! 1116: /LET B=66
! 1117: /DIS(tex(A,B))
! 1118: \end{verbatim}
! 1119: Tex Output: This, in the .tex file. 33
! 1120: \\ \hline
! 1121: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 1122: {\tt var\_in\_tex(a)}& Equivalent to {\tt tex("a","")}
! 1123: \\ \hline
! 1124: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 1125: \end{tabular}\end{center}}
! 1126: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 1127: {\small
! 1128: \begin{center}\begin{tabular}{|p{2.9cm}|p{14.2cm}|} \hline
! 1129: { Functions}& Description, sample quizzer code and output \\ \hline
! 1130: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 1131: \index{to\_string()}{\tt to\_string(x)}, {\tt to\_string(x,y)}& If variable x is an integer,
! 1132: to\_string(x) returns a string. If x
! 1133: is real the format is given by y as follows:
! 1134: \begin{verbatim}
! 1135: /LET name1=to_string(34.56789)
! 1136: /LET name2=to_string(34.56789, ".3E")
! 1137: /LET name3=to_string(34.56789, ".3f")
! 1138:
! 1139: No format is /DIS(name1), with ".3E" format is /DIS(name2),
! 1140: and with ".3f" format is /DIS(name3)
! 1141: \end{verbatim}
! 1142: Output:
! 1143: No format is 34.56789, with ".3E" format is 3.457E+01,
! 1144: and with ".3f" format is 34.568
! 1145: \\ \hline
! 1146: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 1147: \index{capa\_id()}\index{class()}\index{section()}\index{set()}\index{problem()}
! 1148: {\tt capa\_id(), class(), section(), set(), problem()}& The \capa\ ID number,
! 1149: class name, section number, set number
! 1150: and problem number respectively. Variables can be assigned to their current values
! 1151: or they can be displayed directly as shown below.
! 1152: \begin{verbatim}/LET capaIDval=capa_id()
! 1153: Your CAPA ID is /DIS(capaIDval). /DIS(newline)
! 1154: The class name entered at login is /DIS(class()). /DIS(newline)
! 1155: Your section number is /DIS(section()). /DIS(newline)
! 1156: This is part of problem set /DIS(set()). /DIS(newline)
! 1157: The current problem number is /DIS(problem()). /DIS(newline)
! 1158:
! 1159: Output:
! 1160: Your CAPA ID is 8659.
! 1161: The class name entered at login is nsc121s9.
! 1162: Your section number is 1.
! 1163: This is part of problem set 2.
! 1164: The current problem number is 2.
! 1165: \end{verbatim}
! 1166: \\ \hline
! 1167: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 1168: \index{name()}\index{student\_number()}{\tt name(), {\tt student\_number()}}& student name and student number. The
! 1169: latter can be printed on quizzes when the student\_number is used for identification to
! 1170: resolve ambiguities.\begin{verbatim}
! 1171: /DIS(name()) /DIS(student_number())
! 1172: \end{verbatim}
! 1173: Output: Student, Jamie . A12345678
! 1174: \\ \hline
! 1175: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 1176: \index{open\_date()}\index{due\_date()}\index{answer\_date()}\index{due_day()}
! 1177: {\tt open\_date(), due\_date(), answer\_date()}& Problem set open date, due
! 1178: date, and answer date. \begin{verbatim}
! 1179: /DIS(open_date()) /DIS(newline)
! 1180: /DIS(due_date()) /DIS(newline)
! 1181: /DIS(answer_date()) /DIS(newline)
! 1182: /DIS(due_day()) /DIS(newline)
! 1183:
! 1184: Output:
! 1185: Mon, May 3, 1999 at 08:00. \newline
! 1186: Thr, May 6, 1999 at 08:00. \newline
! 1187: Fri, May 7, 1999 at 08:00. \newline
! 1188: Thr, May 6, 1999.
! 1189: \end{verbatim}
! 1190: \\ \hline
! 1191: %************************************
! 1192: \end{tabular}\end{center}}
! 1193: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 1194: {\small
! 1195: \begin{center}\begin{tabular}{|p{2.9cm}|p{14.2cm}|} \hline
! 1196: { Functions}& Description, sample quizzer code and output \\ \hline
! 1197: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 1198: \index{get\_seed()}\index{set\_seed()}{\tt get\_seed(), set\_seed()}
! 1199: & get\_seed() returns the value of the seed for the random number generator.
! 1200: set\_seed() allows resetting the value of the random number generated seed to
! 1201: an earlier value of the seed.
! 1202: \begin{verbatim}
! 1203: /LET seed1=get_seed()
! 1204: /LET number=random(1,1000,1)
! 1205: The current seed is: /DIS(seed1)
! 1206: The random number was: /DIS(number)
! 1207:
! 1208: /LET seed2=get_seed()
! 1209: /LET number=random(1,1000,1)
! 1210: The current seed is: /DIS(seed2)
! 1211: The random number was: /DIS(number)
! 1212:
! 1213: /LET any_variable=set_seed(seed1)
! 1214: /LET seed3=get_seed()
! 1215: /LET number=random(1,1000,1)
! 1216: The current seed is: /DIS(seed3)
! 1217: The random number was: /DIS(number)
! 1218:
! 1219: Output:
! 1220: The current seed is: 1516840802 1582785437
! 1221: The random number was: 727
! 1222: The current seed is: 539910159 1530382995
! 1223: The random number was: 671
! 1224: The current seed is: 1516840802 1582785437
! 1225: The random number was: 727
! 1226: \end{verbatim}
! 1227: Note: get\_seed() works like name(), i.e. /DIS(get\_seed()) displays the current seed. On the other hand, set\_seed() behaves like most other functions, i.e. seed=set\_seed(previous\_seed\_variable) which is similar to y=sin(x).
! 1228: \\ \hline
! 1229: %*************************************
! 1230: \index{sub\_string(a,b,c)}{\tt sub\_string(a,b,c)}
! 1231: & Allows instructor to retrieve part of a previously defined string (a=initial
! 1232: string, b=place of starting character, c=length of substring).
! 1233: \begin{verbatim}
! 1234: /LET string1="Have a nice day."
! 1235: /LET string2=sub_string(string1,8,4)
! 1236: /DIS(string2)
! 1237:
! 1238: Output: nice \end{verbatim}
! 1239: \\ \hline
! 1240: \end{tabular}\end{center}}
! 1241: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 1242: {\small
! 1243: \begin{center}\begin{tabular}{|p{3.1cm}|p{14.0cm}|} \hline
! 1244: { Functions}& Description, sample quizzer code and output \\ \hline
! 1245: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 1246: %*************************************
! 1247: \index{array[xx]}{\tt array[xx]}
! 1248: & "xx" can be a variable or a calculation. For example, for the array with name "NaMe":
! 1249: \begin{verbatim}
! 1250: /LET index=1
! 1251: /WHILE ( index<10 )
! 1252: /LET NaMe[index]=index*10.5
! 1253: /LET index=index+1
! 1254: /ENDWHILE
! 1255: The value of NaMe[7] is /DIS(NaMe[7]:1f)
! 1256:
! 1257: Output: The value of NaMe[7] is 73.5 \end{verbatim}
! 1258: \\ \hline
! 1259: %**************************************
! 1260: %*************************************
! 1261: \index{array\_max(Name)}{\tt array\_max(Name)},
! 1262: \index{array\_min(Name)}{\tt array\_min(Name)}
! 1263: & For example, for the array NaMe[xx] defined above:
! 1264: \begin{verbatim}
! 1265: maximum value of array element = /DIS(array_max(NaMe))
! 1266: minimum value of array element = /DIS(array_min(NaMe))
! 1267:
! 1268: Output: maximum value of array element = 94.5
! 1269: minimum value of array element = 10.5 \end{verbatim}
! 1270: \\ \hline
! 1271: %*************************************
! 1272: \index{array\_moments(B,A)}{\tt array\_moments(B,A)}
! 1273: & The moments of array A[] are put into array B[i] with i=0 to 4.
! 1274: B[0]=number of elements, B[1]=mean, B[2]=variance, B[3]= skewness, and B[4]=kurtosis. Note (standard deviation =square root of variance. Example (using NaMe[] array above]
! 1275: \begin{verbatim}
! 1276: /LET elements=array_moments(MMT,NaMe)
! 1277: Displaying the moments:
! 1278: number of elements=/DIS(MMT[0]:2f)
! 1279: mean=/DIS(MMT[1]:2f)
! 1280: variance=/DIS(MMT[2]:2f)
! 1281: skewness=/DIS(MMT[3]:2f)
! 1282: kurtosis=/DIS(MMT[4]:2f)
! 1283:
! 1284: Output: Displaying the moments:
! 1285: number of elements=9
! 1286: mean=52.50
! 1287: variance=826.87
! 1288: skewness=0.00
! 1289: kurtosis=-1.60 \end{verbatim}
! 1290: \\ \hline
! 1291: %*************************************
! 1292: \index{init\_array(Name)}{\tt init\_array(Name)}
! 1293: & Important to initialize when the same array name is used in more than 1 problem in a set. For example, for the array NaMe[xx] above:
! 1294: \begin{verbatim}
! 1295: Current value of NaMe[5] = /DIS(NaMe[5]:1f)
! 1296: /LET deletd=init_array(NaMe)
! 1297: New value of NaMe[5] = /DIS(NaMe[5]:1f)
! 1298: Number of array elements deleted = /DIS(deletd)
! 1299:
! 1300: Output: Current value of NaMe[5] = 52.5
! 1301: New value of NaMe[5] = VAR "NaMe[5]" NOT DEFINED!
! 1302: Number of array elements deleted = 9 \end{verbatim}
! 1303: \\ \hline
! 1304: %*************************************
! 1305: \end{tabular}\end{center}}
! 1306: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 1307: {\small
! 1308: \begin{center}\begin{tabular}{|p{4.9cm}|p{12.2cm}|} \hline
! 1309: { Functions}& Description, sample quizzer code and output \\ \hline
! 1310: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 1311: \index{random\_normal()}
! 1312: \index{random\_beta()}
! 1313: \index{random\_gamma()}
! 1314: \index{random\_exponential()}
! 1315: \index{random\_poisson()}
! 1316: \index{random\_chi()}
! 1317: \index{random\_noncentral\_chi()}
! 1318: \tt{random\_normal(,,,,)}
! 1319: \tt{random\_beta(,,,,)}
! 1320: \tt{random\_gamma(,,,,)}
! 1321: \tt{random\_exponential(,,,)}
! 1322: \tt{random\_poisson(,,,)}
! 1323: \tt{random\_chi(,,,)}
! 1324: \tt{random\_noncentral\_chi(,,,,)}
! 1325: &
! 1326: \tt{random\_normal(return\_array,item\_cnt,seed,av,std\_dev)} \newline
! 1327: \tt{random\_beta(return\_array,item\_cnt,seed,aa,bb)} \newline
! 1328: \tt{random\_gamma(return\_array,item\_cnt,seed,a,r)} \newline
! 1329: \tt{random\_exponential(return\_array,item\_cnt,seed,av)} \newline
! 1330: \tt{random\_poisson(return\_array,item\_cnt,seed,mu)} \newline
! 1331: \tt{random\_chi(return\_array,item\_cnt,seed,df)} \newline
! 1332: \tt{random\_noncentral\_chi(return\_array,item\_cnt,seed,df,xnonc)} \newline
! 1333:
! 1334: Generate item\_cnt of random numbers according to the particular distribution
! 1335: with the specified parameters and seed and store them in the array named return\_array.
! 1336: \\ \hline
! 1337: Sample Code&Sample Code for \tt{random\_poisson(,,,)} and \tt{random\_normal(,,,,)} is shown on the next page.
! 1338: \\ \hline
! 1339: %*************************************
! 1340: \end{tabular}\end{center}}
! 1341: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 1342: {\small
! 1343: \begin{center}\begin{tabular}{|p{3.3cm}|p{13.8cm}|} \hline
! 1344: %{ Functions}& Description, sample quizzer code and output \\ \hline
! 1345: %*************************************
! 1346: \index{random\_poisson(,,,)}{\tt random\_poisson(,,,)}
! 1347: & FORM: random\_poisson(return\_array,item\_cnt,seed,av) \\
! 1348: & Array name and 3 parameters needed. Below, the return\_array is called ``RET":
! 1349: \begin{verbatim}/LET dleted=init_array(RET) // initialize array "RET"
! 1350: /LET myseed=777 // could be = random(1,10000)
! 1351: /LET count=10
! 1352: /LET average=2.2
! 1353: /LET samples=random_poisson(RET,count,myseed,average)
! 1354: samples=/DIS(samples); Note `samples' it is the same as `count'
! 1355: /LET j=0
! 1356: /WHILE (j <10)
! 1357: RET[/DIS(j)] = /DIS(RET[j])
! 1358: /LET j=j+1
! 1359: /ENDWHILE
! 1360: OUTPUT: samples=15; Note `samples' it is the same as `count'
! 1361: RET[0] = 3 RET[1] = 0
! 1362: RET[2] = 3 RET[3] = 1
! 1363: RET[4] = 2 RET[5] = 4
! 1364: RET[6] = 2 RET[7] = 2
! 1365: RET[8] = 1 RET[9] = 2
! 1366: \end{verbatim}
! 1367: \\ \hline
! 1368: %**************************************
! 1369: %*************************************
! 1370: \index{random\_normal(,,,,)}{\tt random\_normal(,,,,)}
! 1371: & FORM: random\_normal(return\_array,item\_cnt,seed,av,std\_dev) \\
! 1372: & Array name and 4 parameters needed. (return\_array called ``RET")
! 1373: \begin{verbatim}/LET dleted=init_array(RET) // initialize array "RET"
! 1374: /LET myseed=555 // could be = random(1,10000)
! 1375: /LET count=10
! 1376: /LET average=6.2
! 1377: /LET stddev=2
! 1378: /LET samples=random_normal(RET,count,myseed,average,stddev)
! 1379: samples=/DIS(samples); Note `samples' it is the same as `count'
! 1380: /LET j=0
! 1381: /WHILE (j <10)
! 1382: /LET RETB[j] = roundto(RET[j],2) // This array is rounded to 2 places
! 1383: RET[/DIS(j)] = /DIS(RET[j]:4f) and RETB[/DIS(j)] = /DIS(RETB[j]:2f)
! 1384: /LET j=j+1
! 1385: /ENDWHILE
! 1386: OUTPUT: samples=15; Note `samples' it is the same as `count'
! 1387: RET[0] = 2.9195 and RETB[0] = 2.92
! 1388: RET[1] = 6.4934 and RETB[1] = 6.49
! 1389: RET[2] = 7.2427 and RETB[2] = 7.24
! 1390: RET[3] = 7.0054 and RETB[3] = 7.01
! 1391: RET[4] = 7.1111 and RETB[4] = 7.11
! 1392: RET[5] = 8.8491 and RETB[5] = 8.85
! 1393: RET[6] = 6.9555 and RETB[6] = 6.96
! 1394: RET[7] = 9.7349 and RETB[7] = 9.73
! 1395: RET[8] = 8.1034 and RETB[8] = 8.10
! 1396: RET[9] = 6.8346 and RETB[9] = 6.83 \end{verbatim}
! 1397: \\ \hline
! 1398: %**************************************
! 1399: %*************************************
! 1400: \end{tabular}\end{center}}
! 1401: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 1402: \clearpage
! 1403:
! 1404:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>