偏差値の出し方

perl ならこう。

#!/usr/local/bin/perl
# 1000人の偏差値を出すサンプル

use strict;
use warnings;

# 0〜100 点の点数を 1000 人分、ランダムで生成
my @scores = map { int( rand(101) ) } (1 .. 1000);

my $avg            = average(@scores);
my $standard_score = sqrt ( calc_variance($avg, \@scores) );

for my $score (@scores)
{
    # standard_socre が 0 なら、偏差値は全員 50 とする
    my $hensachi = $standard_score ? 
                   ( ($score - $avg) * 10 / $standard_score ) + 50 :
                   50;
    print "$score: $hensachi \n";
}

sub calc_variance
{
    my ($avg, $scores_ref) = @_;
    my $variance;
    my $score_num = scalar( @$scores_ref ) or return 0;

    for my $score ( @$scores_ref )
    {
        $variance += ( $score - $avg ) ** 2;
    }
    return $variance / $score_num ;
}

sub average
{
    my $sum;
    $sum += $_ for (@_);
    return $sum / scalar @_;
}