4.3BSD/usr/contrib/apl/lib/gradesys
n *.KB H number name id n { id nam
nam { 8Ynam,' '
n {(^/name= (Rname)Rnam)I1
}(n$1YRname)/ok
L{'name: ',nam,' not found'
} n { 0
ok: n { number[n]
score dstat dstat x;r;max;min;mean;var;sd;md;med;mode;v;m;n
n{Rx
r{(max{x[n])-min{(x{x[|Hx])[1]
sd{(var{(+/(|x-nRmean{(+/x)%n)*2)%n-1)*0.5
md{(+/|x-nRmean)%n
med{0.5X+/x[(Sn%2),1+Dn%2]
'sample size ';n
'maximum ';max
'minimum ';min
'range ';r
'mean ';mean
'variance ';var
'standard deviation ';sd
'mean deviation ';md
'median ';med
hist r { n hist d;v;t
t { Dd%n
v { +/(I1+S/t)J.=t+I1
r { O- (IS/v)J.$v
numc list number summary summary; i
L{' '
L{' score summary'
L{' '
L{ head list
L { name,Bnumc,score
lcr r { lcr fn ;t;n
t { Lcr fn
n { 1YRt
r { ((n,1)R'['),0 1U(B(n,1)R((In)-I1)),((n,3)R'] '),t
head r { head list
r { (((1URlist), 8)R' '),((3X1YRlist)R 0 1 0)\O\ list
drop drop ;idx;sid
ask: L{'student class id?'
} (0=sid {L)/0
idx { numberIsid
head list
name[idx;],B numc[idx;],score[idx;]
L{'ok ?'
}('y'#'L)/ask
mask { (Rnumber)R1
mask[idx]{0
name {mask/[1]name
numc {mask/[1]numc
number{mask/number
score { mask/[1]score
L{'dropped'
} ask
stat z{stat x;r;max;min;mean;var;sd;md;med;mode;v;m;n
n{Rx
r{(max{x[n])-min{(x{x[|Hx])[1]
sd{(var{(+/(|x-nRmean{(+/x)Pn)*2)Pn-1)*0.5
md{(+/|x-nRmean)Pn
med{0.5M+/x[(SnP2),1+DnP2]
z{n,r,max,min,mean,sd,med
scoremax statname P 8 number range maximum minimum mean std.dev.median newstat newstat data ;i
statscore { (7,1URdata)R0
i {1
next: statscore[;i]{stat data[;i]
} ((1URstatscore) & i{i+1)/next
statscore[1;]{+/[1]0#data
statsummary statsummary ;statscore
newstat score
L{' '
L{' statistics summary'
L{' '
L{head list
L{ statname,(7 3R' '),B D statscore
type , ass quiz test final
scoretype newscore newscore ;pos;i;mask;listn;p;it;tp
L{'current types are:'
L{ type
L'{'type ? '
p { type find it { L'
}(V/p)/oktype
L { 'type not found'
}0
oktype: tp { p/IRp
pos { (tp<scoretype)I1
mask {1,(Rscoretype)R1
mask[pos]{0
score { mask\score
scoremax { mask\scoremax
list { (1,mask)\[1]list
scoretype { mask\scoretype
scoretype [pos] { tp
L{'scoremax?'
scoremax[pos]{ L
listn { (B+/,scoretype=scoretype[pos]),' '
list[pos+1;] { (1URlist)Rit,listn
CJ now input new scores
i{1
next: pos update number[i]
}((Rnumber)&i{i+1)/next
L{' new score complete'
update col update idn;idx;ip
idx {numberIidn
L{name[idx;],(Bidn),' : ',list[1+col;],'old score ',Bscore[idx;col]
}(0> ip{L)/nc
score[idx;col]{ip
}0
nc: L{'no change'
newname newname ;nname
L{ 'names?'
next: } (0 = R nname{L')/done
name{ name,[1] 1 8 R nname,' '
number{ number,1+ `1 Y number
}next
done: numc { ((Rnumber),1)Rnumber
score{ score,[1] (((Rnumber)-1YRscore),1URscore)R0
'exit'
alpha alpha
name{ name[(H| 26 B O\ 0,name);]
analysis analysis; i; mk; av1; rank
tlist{ type,[1](1URtype)R'total '
means{ ((Rnumber),1+1YRtype)R0
i{1
next1: mk{ scoretype=i
}done XI 0=V/,mk
means[;i]{ 100X(+/mk/score) % +/mk/scoremax
done: }((1YRtype) >= i{ i+1 )/next1
means[;i]{ (+/(means[;Ii-1]X((Rnumber),Rweight)Rweight)) %+/weight
means{ (D 0.5+10Xmeans)%10
rank{ |V means[;i]
L{ 'ranking'
tlist{ ((1,1URtlist)R'rank '),[1]tlist
head tlist
L{ name[rank;],B(IRrank),means[rank;]
''
''
''
av1{ |H [1]|V [1]means
tlist{ 1 0Utlist
head tlist
L{ name,Bav1
weight 4 B B C B
histgm title histgm data ; i;h;m50
m50 { 51 > S/data
data { S data%2-m50
h {51R0
i{0
loop: h[i+1] { +/data =i
}loop XI 50 & i {i+1
''
' Histogram of ',title
''
i { S/h
loop2: ' *'[1+ h&i]
}loop2 XI 0< i{i-1
'|----|----|----|----|----|----|----|----|----|----|'
}m50/low
'0 10 20 30 40 50 60 70 80 90 100'
}0
low:'0 5 10 15 20 25 30 35 40 45 50'
find p { list find item
p { ^/list=(Rlist)R(1URlist)Y item,' '
printstat printstat colnam;data
}(0=Rdata{ getcol colnam)/0
dstat data
printstat0 printstat0 colnam;data
}(0=Rdata{ getcol colnam)/0
data { (0#data)/data
dstat data
getcol data { getcol colnam;p
p { 1U list find colnam
}(~V/p)/snf
data { ,p/score
}0
snf:p { tlist find colnam
}(~V/p)/nnf
data {,p/means
}0
nnf:'column name ',colnam,' not found'
data { 0R0
printhist printhist colnam;data
}(0=Rdata{ getcol colnam)/0
colnam histgm data
printhist0 printhist0 colnam;data
}(0=Rdata{ getcol colnam)/0
data { (0#data)/data
colnam histgm data
readnames readnames file ;nn;fd
fd { 260 Lopen file
name { 0 8 R' '
next: nn { Lrd fd
} exit XI0 = R nn
name { name,[1]8Ynn,' '
} next
exit: fd {Lclose fd
name { name[(H| 26 B O\ 0,name);]
numc { ((1YRname),1)R number { I1YRname
score {((Rnumber),0)R0
scoretype { 0R0
scoremax { 0R0
list { 1 8R'number '
setup setup ;i
L{ 'enter the types one per line'
type { 0 8 R' '
gettype: }next XI 0=Rtt { 'L
type { type,[1]8Ytt,' '
}gettype
next: L{ 'enter the weights for each type'
i { 1
weight { 0R0
nextweight: 'L { type[i;],' = '
weight { weight,L
}nextweight XI (1YRtype)&i { i+1
change nam change stype;idx;ip;idn;ic
idn { id nam
}(0=idn)/0
ic { list find stype
}(0#V/ic)/ok
L{'type not found'
}0
ok:col { `1 + ic I 1
idx {numberIidn
L{name[idx;],(Bidn),' : ',list[1+col;],'old score ',Bscore[idx;col]
}(0> ip{L)/nc
score[idx;col]{ip
}0
nc: L{'no change'
analstats analstats ;statscore ;tlist
newstat means
L {''
L {' analysis statistics'
L { ''
tlist { type,[1](1URtype)R'total '
head tlist
statname,B D statscore