Umístnení souboru www.TrSek.com/zadania/friedman.pas{ FRIEDMAN.PAS Copyright (c) TrSek alias Zdeno Sekerak }
{ Program na vypocet Friedmanovho testu }
{ podla vzorca }
{ }
{ p 1 2 }
{ S = ä ( R - --- n (p + 1) ) }
{ i=1 i 2 }
{ }
{ Datum:04.02.2004 http://www.trsek.com }
program friedman;
uses crt,dos;
const max = 60;
statist = 'fried_s.dat';
var n,p:integer;
riad:integer; { pocet riadkov }
q:real;
s_file:string;
r:array[1..max,1..max] of real;
rj:array[1..max,1..max] of real;
s1,s5 : real; { chi parameter pre 1% a 5% }
procedure ReadKeyboard;
var x,y:integer;
s:string;
err:integer;
begin
WriteLn('Zadaj parametre n,p:');
ReadLn(n);
ReadLn(p);
WriteLn('Dalej zadavaj hodnoty pevnosti v tahu:');
for x:=1 to n do
for y:=1 to p do
begin
Write('Pec ',x,', faktor A',y,' = ');
ReadLn(s);
Val( s, r[x,y], err );
function SumRij(j:integer):real;
var x:integer;
sum:real;
begin
sum := 0;
for x:=1 to n do
sum := sum + rj[x,j];
SumRij := sum;
end;
function SumMocnina:real;
var y:integer;
sum:real;
sumr:real;
begin
sum := 0;
for y:=1 to p do
begin
sumr := SumRij(y);
sum := sum + ( sumr * sumr );
end;
SumMocnina := sum;
end;
procedure ChiKvantil(var s1,s5:real; p,n:byte);
var f:text;
i:byte;
s:string;
begin
{ existuje subor kvantily ? }
if( TestFile( statist )>0 )then
begin
WriteLn('Subor ', statist, ' neexistuje.');
Halt(1);
end;
assign( f, statist );
reset(f);
while( not(eof(f))) do
begin
ReadLn(f,s);
s := s+';';
if( NextInt(s) = p )then
if( NextInt(s) = n )then
begin
s1 := NextInt(s);
s5 := NextInt(s);
end;
end;
close(f);
end;
begin
ClrScr;
s_file := '';
riad := 0;
Uvod;
DivideArg;
ClearVar;
{ nacitavanie zo suboru }
if( length( s_file ) > 0 )then
begin
WriteLn('Vypocet podla suboru: ', s_file );
if( ReadFriedFile( s_file, riad )>0 )then
begin
WriteLn('Velke mnozstvo dat v subore.');
WriteLn('Maximalne ', max,' poloziek.');
Halt(2);
end;
{ hodnoty s1, s5 }
ChiKvantil( s1, s5, p, n );
end
else
{ Nacitanie z klavesnice }
ReadKeyboard;
q := SumMocnina - (n*n*p*(p+1)*(p+1))/4;
{ doplnok slovneho vyjadrenia vysledku }
WriteLn;
WriteLn('Testovacie kriterium je q=',q:0:6);
WriteLn('Prislusny chi-kvantil pro dany pocet vyberu je :');
WriteLn(' ',s1:0:3,' pro 1% hladinu a');
WriteLn(' ',s5:0:3,' pro 5% hladinu.');
Write('Z toho vyplyva, ze hypoteza ');
if q<=s1 then if q<=s5 then Write('plati ako')
else Write('plati')
else if q<=s5 then Write('neplati')
else Write('neplati ani');
Write(' pre 95% odhad, ');
if q<=s5 then if q<=s1 then Write('tak')
else Write('ale plati')
else if q<=s1 then Write('ale neplati')
else Write('ani');
Write(' pre 99% odhad.');