Annotation of 43BSD/contrib/apl/lib/ngradesys, revision 1.1.1.1

1.1       root        1: n��*.KB�&       H idn { id nam; sname; sum; n; v; index
                      2:   nam { ,nam
                      3:   sname {  ((1YRname),Rnam)Yname
                      4:   sum { +/v{^/sname=(Rsname)Rnam
                      5:   n { 0
                      6:   } (0=sum)/nfind
                      7:   } (1#sum)/mfind
                      8:   n { vI1
                      9:   } (^/((1URname)Ynam)=name[n;])/0
                     10:   L { ' ',' ','full name: ',name[n;]
                     11:   }0
                     12: nfind: L { 'name not found'
                     13:   } 0
                     14: mfind: L { 'ambiguous names'
                     15:   sname { v/[1]name
                     16:   } (0=^/^/((Rsname)Rsname[1;])=sname)/dfind
                     17:   L { ' ',(NJ(((1YRsname),1)R index { v/I1YRname)),':',' ',sname
                     18: getidx: n { 'Enter index of desired name: ' getnum '-'
                     19:   } (0=V/n=index,`1)/error
                     20:   } 0
                     21: dfind: L { ' ',' ',sname
                     22:   } 0
                     23: error: L { '*** illegal index, try again ***'
                     24:   } getidx
                     25:       dstatdstat x; z
                     26:   z { stat x
                     27: ' '
                     28: ' '
                     29:   'sample size          ';z[1]
                     30:   'maximum              ';z[2]
                     31:   'minimum              ';z[3]
                     32:   'range                ';z[4]
                     33:   'mean                 ';z[5]
                     34:   'variance             ';z[6]
                     35:   'standard deviation   ';z[7]
                     36:   'mean deviation       ';z[8]
                     37:   'median               ';z[9]
                     38: summarysummary; i
                     39: L{' '
                     40: L{'     score summary'
                     41: L{'  '
                     42: L { ((4+1URname),(`1+1YRlist)R4)fhead list
                     43: L { name,(5 0 NJ ((1YRname),1)RI1YRname),4 0NJ score
                     44: L { 3 1 R ' '
                     45: dropdrop ;nam;idx;mask
                     46: L { 'Enter names (one per line) end with an empty line.'
                     47: getname: L'{'name: '
                     48:   } (0=Rnam{L')/0
                     49:   idx { id nam
                     50:   } (0=idx)/getname
                     51:   L { ((4 + 1URname),(`1+1YRlist)R4)fhead list
                     52:   L { name[idx;],(5 0NJidx),4 0NJscore[idx;]
                     53:   L'{'ok? (y/n): '
                     54:   }('y'#'L)/nogo
                     55:   mask { (1YRname)R1
                     56:   mask[idx]{0
                     57:   name {mask/[1]name
                     58:   } ((`1YRssn)=0)/nossn
                     59:   ssn { mask/[1]ssn
                     60:   } ssnd
                     61: nossn: ssn { ((1YRname),0)R''
                     62: ssnd: } ((`1YRscore)=0)/noscore
                     63:   score { mask/[1]score
                     64:   } done
                     65: noscore: score { ((1YRname),0)R0
                     66: done: L{'drop completed'
                     67:   } getname
                     68: nogo: L { 'nobody dropped'
                     69:   } getname
                     70:       statz{stat x;r;max;min;mean;var;sd;md;med;mode;v;m;n
                     71: n{Rx
                     72: r{(max{x[n])-min{(x{x[|Hx])[1]
                     73: sd{(var{(+/(|x-nRmean{(+/x)%n)*2)%n-1)*0.5
                     74: md{(+/|x-nRmean)%n
                     75: med{0.5X+/x[(Sn%2),1+Dn%2]
                     76: z{n,max,min,r,mean,var,sd,md,med
                     77: &     statname`H number  maximum minimum range   mean    variancestd dev mean devmedian   newstatstatscore { newstat data ;i
                     78:  statscore { (9,1URdata)R0
                     79:  i {1
                     80: next: statscore[;i]{stat data[;i]
                     81:  } ((1URstatscore) & i{i+1)/next
                     82:  statscore[1;]{+/[1]0#data
                     83: statsummarystatsummary 
                     84: L{' '
                     85: L{'      statistics summary'
                     86: L{' '
                     87: L { (11,(`2+1YRlist)R4) fhead 1 0Ulist
                     88: L { statname,4 0 NJ D newstat score
                     89: L { 3 1 R ' '
                     90:      newscorenewscore ;pos;i;mask;listn;p;tp;it
                     91:   L { 'current types are:'
                     92:   L { type
                     93:   L' { 'type ? '
                     94:   p { type find it { L'
                     95:   }(V/p)/oktype
                     96:   L { 'type not found'
                     97:   }0
                     98: oktype: tp { p/IRp
                     99:   pos { (tp<scoretype)I1
                    100:   mask { 1,(Rscoretype)R1
                    101:   mask[pos] { 0
                    102:   score { mask\score
                    103:   scoremax { mask\scoremax
                    104:   list { (1,mask)\[1]list
                    105:   scoretype { mask\scoretype
                    106:   scoretype[pos] { tp
                    107:   scoremax[pos] { 'scoremax ? ' getnum '.'
                    108:   listn { 2 0NJ+/,scoretype=scoretype[pos]
                    109:   list[pos+1;] { (1URlist)Yit,listn
                    110: CJ now input new scores
                    111:   i { 1
                    112: next: score[i;pos] { (name[i;],': ') getnum '-.'
                    113:   }((1YRname)&i { i+1)/next
                    114:   L { 'new score complete'
                    115: newnamenewname; nname; nssn
                    116:   L { 'enter names (one per line) end with an empty line.'
                    117: getname: L' { 'name: '
                    118:   }(0=Rnname{L')/done
                    119:   name { name addrow nname
                    120:   nssn { ''
                    121:   } (~askedssn)/addssn
                    122:   L' { 'ssn : '
                    123:   nssn { L'
                    124: addssn: ssn { ssn addrow nssn
                    125:   } getname
                    126: done: score { ((1YRname),`1YRscore)Yscore
                    127:   L { 'newname complete'
                    128:      analysisanalysis; i; mk; n 
                    129: n { 1YRname
                    130: means{ (n,1+1YRtype)R0
                    131: i{1
                    132: next: mk{ scoretype=i
                    133:  }done XI 0=V/,mk
                    134: means[;i]{ 100X(+/mk/score) % +/mk/scoremax
                    135: done: }((1YRtype) >= i{ i+1 )/next
                    136: means[;i]{ (+/(means[;Ii-1]X(n,Rweight)Rweight)) %+/weight
                    137: 
                    138: histgm title histgm data ; i;h;m50
                    139: m50 { 51 > S/data
                    140: data { S data%2-m50
                    141: h {51R0
                    142: i{0
                    143: loop: h[i+1] { +/data =i
                    144: }loop XI 50 & i {i+1
                    145: ''
                    146: '              histogram of ',title
                    147: ''
                    148: i { S/h
                    149: loop2: ' *'[1+ h&i]
                    150: }loop2 XI 0< i{i-1
                    151: '|----|----|----|----|----|----|----|----|----|----|'
                    152: }m50/low
                    153: '0   10   20   30   40   50   60   70   80   90   100'
                    154: }0
                    155: low:'0    5   10   15   20   25   30   35   40   45   50'
                    156: 
                    157: findp { list find item
                    158: p { ^/list=(Rlist)R(1URlist)Y item,'        '
                    159:       
                    160: printstatprintstat colnam;data
                    161: }(0=Rdata{ getcol colnam)/0
                    162: dstat data
                    163:       printstat0printstat0 colnam;data
                    164: }(0=Rdata{ getcol colnam)/0
                    165: data { (0#data)/data
                    166: dstat data
                    167:       getcoldata { getcol colnam;p
                    168: p { 1U list find colnam
                    169: }(~V/p)/snf
                    170: data { ,p/score
                    171: }0
                    172: snf:p { tlist find colnam
                    173: }(~V/p)/nnf
                    174: data {,p/means
                    175: }0
                    176: nnf:'column name ',colnam,' not found'
                    177: data { 0R0
                    178:       
                    179: printhistprinthist colnam;data
                    180: }(0=Rdata{ getcol colnam)/0
                    181: colnam histgm data
                    182:       printhist0printhist0 colnam;data
                    183: }(0=Rdata{ getcol colnam)/0
                    184: data { (0#data)/data
                    185: colnam histgm data
                    186: setupsetup ;i;tt;nname;wt
                    187:   } askedsetup/exit
                    188:   L{ 'enter the score types (one per line) end with an empty line.'
                    189:   type { 0 0 R' '
                    190: gettype: L' { 'type: '
                    191:   }next XI 0=Rtt { 'L
                    192:   type { type addrow tt
                    193:   }gettype
                    194: next: L{ 'enter the weights for each type'
                    195:   list{(1,Rlist)Rlist { (6S3+1URtype)Y'number'
                    196:   i { 1
                    197:   weight { (1YRtype)R0
                    198: nextweight: weight[i] { (type[i;],' = ') getnum '.'
                    199:   }nextweight XI (1YRtype)&i { i+1
                    200:   name { 0 0 R' '
                    201:   L { 'enter names (one per line) end with an empty line.'
                    202: getname: L' { 'name: '
                    203:   } next2 XI 0=Rnname { L'
                    204:   name { name addrow nname
                    205:   } getname
                    206: next2: score { ((1YRname),0)R0
                    207:   scoretype { 0R0
                    208:   scoremax { 0R0
                    209:   ssn { 0 0R0
                    210:   askedssn { 0
                    211:   subs { 0
                    212:   L { 'setup complete'
                    213:   askedsetup { 1
                    214:   } 0
                    215: exit: L { 'setup previously completed'
                    216: changechange;nam;stype;idx;ip;ic
                    217:   L' { 'Enter the item to be changed: '
                    218:   stype { L',' '
                    219:   ic { list find stype
                    220:   newtype { nwscore
                    221:   }(0#V/ic)/ok
                    222:   newtype { nwname
                    223:   }(^/stype=(Rstype)Y'name          ')/ok
                    224:   newtype { nwssn
                    225:   }(^/stype=(Rstype)Y'ssn           ')/ok
                    226:   L{'type not found'
                    227:   }0
                    228: ok:col { `1 + ic I 1
                    229:   L { 'Enter names (one per line) end with an empty line.'
                    230: getname: L' { 'name: '
                    231:   nam { L'
                    232:   } (0=Rnam)/0
                    233:   idx { id nam
                    234:   }(0=idx)/getname
                    235:   } newtype
                    236: nwscore: L{name[idx;],' - ',list[1+col;],'old score ',Bscore[idx;col]
                    237:   }(1#R ip{'new score: ' getnum '-.')/nc
                    238:   }(0>ip)/nc
                    239:   score[idx;col]{ip
                    240:  L { 'score change complete'
                    241:   }getname
                    242: nwname: L' { 'new name: '
                    243:   } (0=Rnam{L')/nc
                    244:   name { name addrow nam
                    245:   name[idx;] { name[1YRname;]
                    246:   name { name[I`1+1YRname;]
                    247:   L { 'name change complete'
                    248:   }getname
                    249: nwssn: L { name[idx;],' -  old ssn = ',ssn[idx;]
                    250:   L' { 'new ssn: '
                    251:   } (0=Rsin{L')/nc
                    252:   ssn[idx;] { 9Y (~sinE' -')/sin
                    253:   L { 'ssn change complete'
                    254:   }getname
                    255: nc: L{'no change'
                    256:   }getname
                    257: 
                    258: analstatsanalstats 
                    259: L {''
                    260: L {'   analysis statistics'
                    261: L { ''
                    262: tlist { type,[1](1URtype)Y'total'
                    263: L{(11,(`1+1YRtlist)R4) fhead tlist
                    264: L { statname,4 0 NJD newstat means
                    265: L { 3 1 R ' '
                    266: 
                    267: analprintanalprint; rank ;tlist
                    268:   tlist { type,[1](1URtype)Y'total'
                    269:   rank {  |V ,means[;1URmeans]
                    270:   L { ' '
                    271:   L { '   ranking of score totals'
                    272:   L { ' '
                    273:   L { ((3+1URname),(1YRtlist)R5) fhead ((1,1URtlist)R'rank    '),[1]tlist
                    274:   L { name[rank;],(4 0NJ(((Rrank),1)RIRrank)),5 1NJmeans[rank;]
                    275:   L { 3 1 R' '
                    276: anal466anal466; i; mk; ds; dt; dm; scoret; low 
                    277: CJ assume types hw, test and final
                    278: means{ ((Rnumber),1+1YRtype)R0
                    279: scoret { tscore score
                    280:   i{1
                    281: CJ for each student
                    282: loop: ds{ scoret[i;]
                    283: CJ homework
                    284:   mk { scoretype=1
                    285:   dt { mk/ds
                    286:   dm { mk/scoremax
                    287: CJ drop lowest homework
                    288:   low { (dtID/dt)#IRdt
                    289:   means[i;1]{(+/low/dtXdm)%+/low/dm
                    290: CJ tests (skip if none)
                    291:   }l1 XI ~V/mk{scoretype=2
                    292:   dt { mk/ds
                    293:   dm { mk/scoremax
                    294:   low { dtID/dt
                    295:   dt[low] { means[i;3] { S/dt[low],(scoretype=3)/ds
                    296:   means[i;2]{(+/dtXdm)%+/dm
                    297:   }loop XI (1YRmeans)&i{i+1
                    298: l1: means[;4]{ (+/(means[;1 2 3]X((Rnumber),Rweight)Rweight)) %+/weight
                    299: analprint
                    300:       tscoreres { tscore data; i; dt; mn; sd
                    301: CJ tscore computes the tscores for a vector
                    302: CJ or matrix <data>.
                    303:   res { (Rdata)R0
                    304:   i{1
                    305:   }loop XI 2=RRdata
                    306:   dt { data
                    307:   }l1
                    308: loop: dt { data[;i]
                    309: l1: mn { (+/dt)%Rdt
                    310:   sd { ((+/(dt-mn)*2)%`1+Rdt)*.5
                    311:   dt { 50 + 10 X (dt-mn)%sd
                    312:   }end XI 1=RRdata
                    313:   res[;i]{dt
                    314:   }loop X (1URres)&i{i+1
                    315: end: res{dt
                    316:      tsummarytsummary
                    317: L{' '
                    318: L{'     t-score summary'
                    319: L{'  '
                    320: L { ((4+1URname),(`1+1YRlist)R4)fhead list
                    321: L { name,(5 0 NJ numc),4 0NJ D tscore score
                    322: 
                    323: fheadr { f fhead list
                    324: r{((I+/f)E+\f)\O\ list
                    325: 
                    326: addrowr { mx addrow row; l
                    327: CJ add a new row to a matrix
                    328: l { (Rrow)S1URmx
                    329: r { (((1YRmx),l)Ymx),[1]lYrow
                    330: lgradelgrade 
                    331: CJ compute lettergrade
                    332: L{'enter cutoff values'
                    333: L{'        a    b    c    d'
                    334: cut { L
                    335: letter { ((1YRmeans),1)R'fdcba'[1++/means[;1URmeans]J.>cut]
                    336: alphabetizealphabetize;cols;order;alphabet
                    337: CJ alphabetize the name list and reorder the scores
                    338:   alphabet { ' ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
                    339:   cols { I 10 D Rname[1;]
                    340:   order { |H +/ (alphabetIname[;cols])X((Rname[;1]),10 D Rname[1;])RO|((Ralphabet)*cols)
                    341:   name { name[order;]
                    342:   score { score[order;]
                    343:   ssn { ssn[order;]
                    344: askssnaskssn ;i;sin
                    345:   } askedssn/enter
                    346: CJ ask for a ssn for each person in the name list
                    347:   i { 1
                    348:   ssn { ((Rname[;1]),9)R ' '
                    349: loop: L' { name[i;],': '
                    350:   sin { L', ' '
                    351:   ssn[i;] { 9Y (~ sin E ' -')/sin
                    352:   } ((1YRssn) & i { i+1)/loop
                    353:   L { 'ssn entry complete'
                    354:   askedssn { 1
                    355:   } 0
                    356: enter: L { 'ssn previously completed.'
                    357:      analgrinanalgrin;i;means;mk;ds;dt;dm;low;n;w
                    358:   n { 1YRname
                    359:   w { Rweight
                    360:   scoret { tscore score
                    361:   rank { means { (n,1+1YRtype)R0
                    362:   i { 1
                    363:   } subs/loop2
                    364: loop1: }enter1 XI ~V/mk{scoretype=i
                    365:   dm { mk/scoremax
                    366:   means[;i] { \O(+/(mk/scoret)X((n,Rdm)Rdm))%+/dm
                    367:   rank[;i] { \O|H|Gmeans[;i]
                    368: enter1: }loop1 XI (w&i{i+1)
                    369:   rank[;1+w] { \O|H|G(+/means[;1 2 3]X(n,w)Rweight)%+/weight
                    370:   } 0
                    371: loop2: ds { scoret[i;]
                    372:   mk { scoretype=1
                    373:   dt { mk/ds
                    374:   dm { mk/scoremax
                    375:   low { (dtID/dt)#IRdt
                    376:   means[i;1]{(+/low/dtXdm)%+/low/dm
                    377:   }enter2 XI ~V/mk{scoretype=2
                    378:   dt { mk/ds
                    379:   dm { mk/scoremax
                    380:   low { dtID/dt
                    381:   dt[low] { means[i;3] { S/dt[low],(scoretype=3)/ds
                    382:   means[i;2] { (+/dtXdm)%+/dm
                    383:   }loop2 XI (1YRmeans)&i{i+1
                    384: enter2: means[;4] { (+/(means[;1 2 3]X(n,w)Rweight)%+/weight
                    385:   rank { |H[1]|G[1]means
                    386: gringrin;ss;n
                    387:   ss { 'L,' '
                    388:   ss { 9Y(ss#'-')/ss
                    389:   n { (^/ssn=(Rssn)Rss)I1
                    390:   } (n$1YRssn)/ok
                    391:   L { 'invalid student id: ',ss
                    392:   } 0
                    393: ok: L { (13,(`2+1YRlist)R4) fhead 1 0 U list
                    394:   'max score', 4 0 NJ scoremax
                    395:   'raw score', 4 0 NJ score[n;]
                    396:   ' t  score', 4 0 NJ scoret[n;]
                    397:   ''
                    398: } (subs)/enter
                    399:   'Based on T scores but without using the substitution'
                    400:   '  algorithm (i.e. - no scores have been droped or replaced yet)'
                    401: enter: 'The total number of students in class is ',(3 0NJ `1URssn),'.'
                    402:   ''
                    403:   '        homework  test   final   total'
                    404:   'rank ', 8 0NJ rank[n;]
                    405: &LlxK&  77'type ''describe'' for a description of this workspace'               ssnprintssnprint function ;name
                    406: name { ssn
                    407: BJ function
                    408: &askedsetup&  &
                    409: getnumnum { prompt getnum let;str
                    410: again: L' { prompt
                    411:   str { L'
                    412:   } (1<+/strE'.')/error
                    413:   } (1<+/strE'-')/error
                    414:   }goodnum XI ^/strElet,'0123456789'
                    415: error: L { '*** illegal number, try again. ***'
                    416:   }again
                    417: goodnum: num { BJ str
                    418:   } (1#R,num)/error
                    419: analizeanalize ;data;mean;didanal;tlist
                    420:   didanal { 0
                    421:   } ((RBN27)>1)/cont1
                    422:   L' { 'do you want names or ssn to be listed? (n/s): '
                    423:   } ('n'=1YL')/cont1
                    424:   ssnprint 'analize'
                    425:   }0
                    426: cont1: L' { 'do you want a score summary? (y/n): '
                    427:   } ('n'=1YL')/cont2
                    428:   summary
                    429: cont2:  L' { 'do you want raw score statistics? (y/n): '
                    430:   } ('n'=1YL')/cont3
                    431:   statsummary
                    432: cont3: L' { 'do you want a mean score summary? (y/n): '
                    433:   } ('n'=1YL')/cont7
                    434:   analysis
                    435:   analprint
                    436:   didanal { 1
                    437: cont7: L' { 'do you want individual score type rankings? (y/n): '
                    438:   } ('n'=1YL')/cont4
                    439:   } (didanal)/analcont2
                    440:   analysis
                    441:   didanal { 1
                    442: analcont2:  rankprint
                    443: cont4:  L' { 'do you want mean score statistics? (y/n): '
                    444:   } ('n'=1YL')/cont5
                    445:   } (didanal)/analcont1
                    446:   analysis
                    447:   didanal { 1
                    448: analcont1: analstats
                    449: cont5: L' { 'do you want histogram and statistics for any specific score? (y/n): '
                    450:   } ('n'=1YL')/0
                    451:   L { 'enter score types (one per line) end with an empty line.'
                    452: cont6: L' { 'type: '
                    453:   tp { L'
                    454:   } (0=Rtp)/0
                    455:   tlist { type,[1](1URtype)Y'total'
                    456:   data { (0#data)/data { getcol tp
                    457:   }(0=Rdata)/cont6
                    458:   tp histgm data
                    459:   L { 3 1 R' '
                    460:   L { (3R' '),'statistics of ',tp
                    461:   dstat data
                    462:   L { 3 1 R' '
                    463:   } cont6
                    464: 
                    465: rankprintrankprint;  av1; tlist
                    466:   tlist { type,[1](1URtype)Y'total'
                    467:   av1 { |H [1]|V [1]means
                    468:   L { ' '
                    469:   L { '   ranking for each score type'
                    470:   L { ' '
                    471:   L { ((3+1URname),(`1+1URav1)R4) fhead tlist
                    472:   L { name,4 0 NJav1
                    473:   L { 3 1 R' '
                    474: &     describe�&synnnew apl score system                                               spring 1982
                    475: 
                    476:      an apl workspace is available which is designed to maintain and perform
                    477: analysis on a set of class grades.  the system is interactive in nature
                    478: allowing each user to select the set of functions suitable for his or her
                    479: needs.
                    480: 
                    481:      to obtain a frech copy of this system, type ')load ngradesys' after
                    482: entering apl.
                    483: 
                    484: 
                    485: setting up the system:
                    486:      to set the system up for a new class, the function 'setup' is used.
                    487: 'setup' will respond by asking score types, score weights and student names.
                    488: names may be added or deleted at any time so an accurate name list is not
                    489: required to setup the system.
                    490: 
                    491:      the system is now setup.  save a copy of this setup workspace by typing
                    492: ')save xxx'.  the workspace will be saved in the file xxx and may be loaded
                    493: in the future with the load command.  it is advisable to keep several backup
                    494: copies of an active grade workspace.
                    495: 
                    496: 
                    497: alphabetizing the name list:
                    498:      to enter new scores into the system efficiently it is best to have the
                    499: names alphabetized both in the system and the stack of new scores.  to
                    500: alphabetize the name list, type 'alphabetize'.  this will also reorder the
                    501: previously entered scores and ssn.  this function may be called any time after
                    502: the system is setup, ussually the function is called just after setup and
                    503: then each time a list of new names is added to the system.
                    504: 
                    505: 
                    506: entering the social security numbers (ssn):
                    507:      social security numbers can be entered by typing 'askssn'.  the system
                    508: will then prompt with a name and ask for the corresponding ssn.  this
                    509: sequence will continue until all ssn are entered.
                    510: 
                    511: entering a new set of grades:
                    512:      to enter a new score, type 'newscore' and you will be promted for the
                    513: grade type and the maximum possible score.  you will then be prompted for a
                    514: grade for each student.
                    515: 
                    516: 
                    517: adding and dropping students:
                    518:      to add a list of students, type 'newname'.  you will then be prompted
                    519: for a list of names.  enter each on a new line and then terminate the list
                    520: with a null line.  note, any old scores for these new students must be
                    521: inserted with the 'change' function. (described later)
                    522: 
                    523:      to drop a list of students, type 'drop'.  you will then be prompted
                    524: for a list of names.  enter each on a new line and then terminate the list
                    525: with a null line.  for each name entered, the system will display all grades
                    526: recorded for that student and then request confirmation that you still want
                    527: to drop the student.
                    528: 
                    529: changing names, scores, ssn:
                    530:      to change the spelling of a name, change the grade of a student or
                    531: correct a students ssn, type 'change'.  the function will then prompted
                    532: for the type of change needed.  the available types include 'name', 'ssn',
                    533: or one of the previously entered score types.  example, if the score types
                    534: available are 'hw', 'test', and 'quiz' and you are wanting to change the
                    535: second homework score, then enter 'hw 2' when prompted.  next, the function
                    536: will prompt for a name, the function verifies the name exists and then
                    537: prompts for the new data (the name, score or ssn).
                    538: 
                    539: 
                    540: analizing the scores:
                    541:      to analize the scores, type 'analize'.  this function will guide the
                    542: user through the analysis sequence.  just answer 'y' or 'n' for each of
                    543: the questions asked.
                    544:      the following analysis functions are available:
                    545:         1) score summary - a list of raw scores for all score types and
                    546:                all students.  this is a convienent method of obtaining
                    547:                a hardcopy back up of all scores for the current class.
                    548:         2) statistics summary - this function computes simple statistics
                    549:                each set of scores and prints out the results.
                    550:         3) mean score summary - this computes the average percent grade
                    551:                for each grade type for each student and also the total
                    552:                percent grade based on the weights entered for the score
                    553:                types.
                    554:         4) individual score rankings - this functions lists the students
                    555:                ordered by their rank of the total and their ranking for
                    556:                each score type is also listed.
                    557:         5) mean score statistics - this function will compute simple
                    558:                statistics on the data generated by the mean score summary
                    559:                (function 3 above).
                    560:         6) histogram and statistics for any specific score - this will
                    561:                generate simple statistics and a histogram for and
                    562:                individual score or any score type.  example: if 'hw' is
                    563:                a score type then 'hw' would generate data for the
                    564:                combined homeworks and 'hw 2' would generate data for
                    565:                just homework #2.
                    566: 
                    567: 
                    568: ***** notes on using the system
                    569:      1) at no time should a function be interrupted midway through
                    570:        completion for this may cause inconsistencies in the workspace.
                    571:      2) the function which looks up names is able to look up a partial
                    572:        name and match it.  this implies that any time a name is required
                    573:        to be typed in, only the first few letters which unambiguously
                    574:        identify it are needed.  if a partial match is found, then the full
                    575:        name will be displayed so you can verify that the correct name was
                    576:        matched.  if you enter an ambiguous set of letters for a match,
                    577:        then the system will display all names which matched correctly.
                    578:      3) three digit scores and fractional scores upset the printing
                    579:        format of the score summary in analysis.  therefore it is best to
                    580:        limit maximum scores to 100.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.