***************** Tahlil ***************
unit Tahlil;
interface
USES
SysUtils, Dialogs;
TYPE
BinMat = array[0..100,0..100] of integer;
TestersMas = array[1..100] of string[255];
ParMat = array[1..4,1..100]of real;
KorMat = array[1..100,1..100]of real;
VAR
Matrix,Matrix1,Matrix2: BinMat;
NadMat: BinMat;
Matrix3:KorMat;
Testers: TestersMas;
Matrix4: ParMat;
CountOfQuestions, CountOfTesters:integer;
NN, MM, N2, N1, M1, M2: integer;
Sx2:Real;//äèñïåðñèÿ
Sx:Real;// ñòàíäàðòíîå îòêëîíåíèå
rt1,rt2,rt3:real;
Procedure GetBinMat(var Matrix: BinMat; var Testers: TestersMas);
Procedure GetRedBinMat(var Matrix1:BinMat; var Matrix2:BinMat;
var Matrix4: ParMat);
Procedure Disp(var Sx2:real;var Sx :real);
Procedure GetKorMat(var Matrix3:KorMat);
Procedure NadTest(var rt1,rt2,rt3:real; var NadMat: BinMat);
Procedure ShowResults;
implementation
Uses Unit1, Classes;
Procedure NadTest(var rt1,rt2,rt3:real; var NadMat: BinMat);
var
i,j,Chet,Nech,Chet2,Nech2,ChetNech:integer;
R1,pjqj:real;
begin
//NadMat
for i := 0 to NN do
for j := 0 to MM do
NadMat[i,j] := Matrix2[i,j];
for i := 1 to NN do
Begin
Chet := 0;
Nech := 0;
for j := 1 to (MM div 2)+1 do
begin
Chet := Chet + NadMat[i,2*j];
Nech := Nech + NadMat[i,2*j-1];
end;
NadMat[i,MM+1] := Chet;
NadMat[i,MM+2] := Nech;
NadMat[i,MM+3] := sqr(Chet);
NadMat[i,MM+4] := sqr(Nech);
End;
NadMat[NN+1,MM+1] := 0;
NadMat[NN+1,MM+2] := 0;
NadMat[NN+1,MM+3] := 0;
NadMat[NN+1,MM+4] := 0;
for i := 1 to NN do
begin
NadMat[NN+1,MM+1] := NadMat[NN+1,MM+1] + NadMat[i,MM+1];
NadMat[NN+1,MM+2] := NadMat[NN+1,MM+2] + NadMat[i,MM+2];
NadMat[NN+1,MM+3] := NadMat[NN+1,MM+3] + NadMat[i,MM+3];
NadMat[NN+1,MM+4] := NadMat[NN+1,MM+4] + NadMat[i,MM+4];
end;
//rt3
ChetNech := 0;
for i := 1 to NN do ChetNech := ChetNech + NadMat[i,MM+1]*NadMat[i,MM+2];
rt1 := (NN*ChetNech-NadMat[NN+1,MM+1]*NadMat[NN+1,MM+2])/
sqrt((NN*NadMat[NN+1,MM+3]-sqr(NadMat[NN+1,MM+1]))*
(NN*NadMat[NN+1,MM+4]-sqr(NadMat[NN+1,MM+2])));
rt1 := 2*rt1/(1+rt1);
//rt2
R1 := 0;
for j := 1 to MM do R1 := R1 + Matrix3[MM+2,j];
R1 := R1/MM;
rt2 := (MM*R1)/(1+(MM-1)*R1);
//rt3
pjqj := 0;
for j := 1 to MM do pjqj := pjqj + Matrix4[3,j];
rt3 := MM*(1-pjqj/sx2)/(MM-1);
end;
Procedure GetKorMat(var Matrix3:KorMat);
var
i,j,tt,Pij,n1,n0:integer;
SS,rpb,X1,X0 : real;
begin
for i := 1 to MM do
for j := 1 to MM do
begin
Pij := 0;
for tt := 1 to NN do if (Matrix2[tt,i] = 1)and(Matrix2[tt,j] = 1) then inc(Pij);
Matrix3[i,j] := (Pij/NN-Matrix4[1,i]*Matrix4[1,j])
/sqrt(Matrix4[3,i]*Matrix4[3,j]);
end;
//rpb
for j := 1 to MM do
Begin
n1 := 0; n0 := 0; X1 := 0; X0 := 0;
for i := 1 to NN do
if Matrix2[i,j] = 1 then
begin
inc(n1);
X1 := X1 + Matrix2[i,MM+1];
end
else
begin
inc(n0);
X0 := X0 + Matrix2[i,MM+1];
end;
X1 := X1/n1;
X0 := X0/n0;
Matrix3[j,MM+1] := (X1-X0)/sqrt((n1*n0)/((n0+n1)*(n1+n0-1)))/Sx;
End;
for j:=1 to MM+1 do
begin
SS := 0;
for i := 1 to MM do SS := SS + Matrix3[i,j];
Matrix3[MM+1,j] := SS;
Matrix3[MM+2,j] := SS/MM;
end;
end;
{------ ôîðìèðóåì áèíàðíóþ ìàòðèöó ðåçóëüòàòîâ òåñòèðîâàíèÿ-------}
{------ è Ô.È. òåñòèðóåìûõ-------}
Procedure GetBinMat(var Matrix: BinMat; var Testers: TestersMas);
var
i,j,i1,j1,j2:integer;
str1, cr : string;
crr : string[1];
begin
if (Form1.CheckBox2.Checked)and(Form1.CheckBox1.Checked = False) then
Begin
AssignFile(output,Form1.Edit3.Text);
reset(output);
readln(output,CountOfTesters,CountOfQuestions);
for i := 1 to CountOfTesters do
begin
for j := 1 to CountofQuestions do
begin
read(output,crr);
Matrix[i,j] := StrToInt(crr);
end;
readln(output);
end;
Close(output);
for i := 1 to CountOfTesters do Matrix[i,0] := i;
for j := 1 to CountOfQuestions do Matrix[0,j] := j;
for i := 1 to CountOfTesters do Testers[i] := IntToStr(i) + '_' + IntToStr(i);
End;
if (Form1.CheckBox1.Checked)and(Form1.CheckBox2.Checked = False) then
Begin
randomize;
CountOfQuestions := StrToInt(Form1.Edit2.text);
CountOfTesters := StrToInt(Form1.Edit1.text);
for i := 1 to CountOfTesters do Matrix[i,0] := i;
for j := 1 to CountOfQuestions do Matrix[0,j] := j;
for i := 1 to CountOfTesters do
for j := 1 to CountOfQuestions do
Matrix[i,j] := random(2);
for i := 1 to CountOfTesters do
Testers[i] := IntToStr(I) + '_' + IntToStr(I);
End;
{ CountOfQuestions := 9;
CountOfTesters := 11;
for i := 1 to CountOfTesters do Matrix[i,0] := i;
for j := 1 to CountOfQuestions do Matrix[0,j] := j;
for i := 1 to CountOfTesters do
for j := 1 to CountOfQuestions do Matrix[i,j] := 0;
Matrix[1,3]:=1;Matrix[1,5]:=1;Matrix[1,7]:=1;Matrix[1,8]:=1;Matrix[1,9]:=1;
Matrix[2,5]:=1;Matrix[2,8]:=1;Matrix[2,9]:=1;
Matrix[3,6]:=1;Matrix[3,8]:=1;
Matrix[4,5]:=1;Matrix[4,7]:=1;Matrix[4,8]:=1;Matrix[4,9]:=1;
Matrix[5,1]:=1;Matrix[5,5]:=1;Matrix[5,8]:=1;
Matrix[6,1]:=1;Matrix[6,2]:=1;Matrix[6,3]:=1;Matrix[6,7]:=1;Matrix[6,8]:=1;Matrix[6,9]:=1;
Matrix[7,1]:=1;Matrix[7,2]:=1;Matrix[7,3]:=1;Matrix[7,4]:=1;Matrix[7,5]:=1;Matrix[7,6]:=1;
Matrix[7,7]:=1;Matrix[7,8]:=1;Matrix[7,9]:=1;
Matrix[8,1]:=1;Matrix[8,3]:=1;Matrix[8,4]:=1;Matrix[8,6]:=1;
Matrix[8,7]:=1;Matrix[8,8]:=1;Matrix[8,9]:=1;
Matrix[9,7]:=1;Matrix[9,8]:=1;
Matrix[10,1]:=1;Matrix[10,3]:=1;Matrix[10,5]:=1;Matrix[10,6]:=1;
Matrix[10,7]:=1;Matrix[10,8]:=1;Matrix[10,9]:=1;
Matrix[11,1]:=1;Matrix[11,2]:=1;Matrix[11,3]:=1;Matrix[11,5]:=1;Matrix[11,6]:=1;
Matrix[11,7]:=1;Matrix[11,8]:=1;Matrix[11,9]:=1;
for i := 1 to CountOfTesters do
Testers[i] := IntToStr(I) + '_' + IntToStr(I);}
If (Form1.CheckBox1.Checked = False)and(Form1.CheckBox2.Checked = False) then
Begin
CountOfQuestions := Length(Form1.StringGrid1.Cells[9,1]);
CountOfTesters := Form1.StringGrid1.RowCount - 2;
for i := 1 to CountOfTesters do Matrix[i,0] := i;
for j := 1 to CountOfQuestions do Matrix[0,j] := j;
for i := 1 to CountOfTesters do
begin
Testers[i] := Form1.StringGrid1.Cells[1,i] + ' ' +
Form1.StringGrid1.Cells[2,i];
str1 := Form1.StringGrid1.Cells[8,i];
i1 := 1;
j1 := 1;
cr := '';
for j := 1 to CountOfQuestions do
Begin
j1 := 1;
while str1[i1+j1] <> ';' do inc(j1);
cr := copy(str1,i1,j1);
i1 := i1 + j1 + 1;
j2 := StrToInt(cr);
if Form1.StringGrid1.Cells[9,i][j] = Form1.StringGrid1.Cells[10,i][j] then
Matrix[i,j2] := 1 else Matrix[i,j2] := 0;
End;
end;
End;
{
AssignFile(output,ProgramDir + 'Analysis\'+'analysis.html');
rewrite(output);
writeln(output,'');
writeln(output,'');
writeln(output,'
Test natijalarining binar matritsasi
');
writeln(output,'');
for i := 0 to CountOfTesters do
begin
writeln(output,'');
for j := 0 to CountOfQuestions do
write(output,'',Matrix[i,j],' | ');
writeln(output,' ');
end;
writeln(output,' ');
writeln(output,' ');
{-------- Âûâîä áèíàðíîé ìàòðèöû ðåçóëüòàòîâ òåñòèðîâàíèÿ--------}
writeln(output,'
1–jadval. Test natijalarninig binar matritsasi
');
writeln(output,'');
writeln(output,'');
writeln(output,'¹ | ');
writeln(output,'F.I. | ');
for j := 1 to CountOfQuestions do writeln(output,'',j,' | ');
writeln(output,' ');
for i := 1 to CountOfTesters do
begin
writeln(output,'');
writeln(output,'',i,'. | ');
writeln(output,'',Testers[i],' | ');
for j := 1 to CountOfQuestions do
write(output,'',Matrix[i,j],' | ');
writeln(output,' ');
end;
writeln(output,' ');
{------- Áèíàðíàÿ óïîðÿäî÷åííàÿ ìàòðèöà ------------}
writeln(output,'
2-jadval. Xi va Rj bo`yicha tartiblangan binar matritsa Xi ',
'è ïî Rj
');
writeln(output,'');
writeln(output,'');
writeln(output,'¹ | ');
for j := 1 to CountOfQuestions do
writeln(output,'',Matrix1[0,j],' | ');
writeln(output,'Xi | ');
writeln(output,' ');
for i := 1 to CountOfTesters do
begin
writeln(output,'');
write(output,'',Matrix1[i,0],' | ');
for j := 1 to CountOfQuestions do
if Matrix1[i,j] = 0 then
write(output,'',Matrix1[i,j],' | ')
else write(output,'',Matrix1[i,j],' | ');
writeln(output,'',Matrix1[i,CountOfQuestions+1],' | ');
writeln(output,' ');
end;
writeln(output,'');
writeln(output,'Rj | ');
for j := 1 to CountOfQuestions + 1 do
write(output,'',Matrix1[CountOfTesters+1,j],' | ');
writeln(output,' ');
writeln(output,' ');
write(output,'BundaÕi - ishtirokchining bali, ');
write(output, ' – formulaga ko`ra hisoblanadi, ');
write(output,'à Rj - j–topshiriqqa berilgan to`g`ri javob,');
write(output, ' – formulaga ko`ra hisoblanadi.');
//Analiz
writeln(output,'
');
if (M1 > 1)or(M2 < CountOfQuestions) then
Begin
writeln(output,'3-jadval. Binar matritsaning statistik ma`lumotlari');
if M1 > 1 then
begin
writeln(output,'Topshiriq [ ');
for j := 1 to M1-1 do write(output,'¹ ',Matrix1[0,j]);
write(output,'] barcha ishtirokchilar 5 bajardilar. Bu topshiriqlar ',
' test topshiriqlaridan olib tashlanishi kerak, chunki ular juda oson.');
end;
if M2 < CountOfQuestions then
begin
writeln(output,'Íà çàäàíèÿ [');
for j := M2 to CountOfQuestions do write(output,' ¹',Matrix1[0,j]);
write(output,' ] birorta ham ishtirokchi topshiriqqa javob bera olmadi. Bu topshiriqlar ',
' test topshiriqlaridan olib tashlanishi kerak, chunki ular juda qiyin.');
end;
writeln(output,'Binar matritsanning o`chirilgan ustuni juda oson topshiriqlar',
'(barcha ishtirokchilar bu topshiriqlarga javob berishdi) va juda ham qiyin topshiriq (birorta ham ishtirokchi javob bera olmadi).');
End;
if (N1 > 1)or(N2 < CountOfTesters) then
Begin
if N1 > 1 then
begin
write(output,'Ishtirokchilar [');
for i := 1 to N1-1 do write(output,' ¹',Matrix1[i,0]);
write(output,' ] barcha topshiriqlarga yaxshi javob berishdi. ');
end;
if N2 < CountOfTesters then
begin
writeln(output,'Ishtirokchilardan [');
for i := N2 to CountOfTesters do write(output,' ¹',Matrix1[i,0]);
write(output,' ] topshriqga birorta ham ishtirokchi javob bera olmadi. ');
end;
writeln(output,'bu qatorlar jadvaldan o`chirib tashlanishi kerak.');
End;
writeln(output,'
');
{------- Ðåäóöèðîâàííàÿ áèíàðíàÿ ìàòðèöà ------------}
writeln(output,'
3-jadval. Binar matrisaning statistik ma`lumotilari
');
writeln(output,'');
writeln(output,'');
writeln(output,'¹ | ');
for j := 1 to MM do
writeln(output,'',Matrix2[0,j],' | ');
writeln(output,'Xi | ');
writeln(output,'Xi2 | ');
writeln(output,' ');
for i := 1 to NN do
begin
writeln(output,'');
write(output,'',Matrix2[i,0],' | ');
for j := 1 to MM do
if Matrix2[i,j] = 0 then
write(output,'',Matrix2[i,j],' | ')
else write(output,'',Matrix2[i,j],' | ');
writeln(output,'',Matrix2[i,MM+1],' | ');
writeln(output,'',Matrix2[i,MM+2],' | ');
writeln(output,' ');
end;
writeln(output,'');
writeln(output,'Rj | ');
for j := 1 to MM + 2 do
write(output,'',Matrix2[NN+1,j],' | ');
writeln(output,' ');
writeln(output,'');
writeln(output,'Wj | ');
for j := 1 to MM do
write(output,'',Matrix2[NN+2,j],' | ');
write(output,' | ');
write(output,' | ');
writeln(output,' ');
writeln(output,'');
writeln(output,'pj | ');
for j := 1 to MM do write(output,'',Matrix4[1,j]:3:2,' | ');
write(output,' | ');
write(output,' | ');
writeln(output,' ');
writeln(output,'');
writeln(output,'qj | ');
for j := 1 to MM do write(output,'',Matrix4[2,j]:3:2,' | ');
write(output,' | ');
write(output,' | ');
writeln(output,' ');
writeln(output,'');
writeln(output,'pj*qj | ');
for j := 1 to MM do write(output,'',Matrix4[3,j]:3:2,' | ');
write(output,' | ');
write(output,' | ');
writeln(output,' ');
writeln(output,' ');
writeln(output,'çäåñü Wj - j-topshiriqqa noto`g`ri javoblar soni, ');
writeln(output,'Wj=N-Rj,');
writeln(output,' pj va qj - mos ravishda to`g`ri va noto`g`ri javoblar salmog`i,, ');
writeln(output,'pj=Rj/N è qj=1-pj .');
{---------------- Äèñïåðñèÿ òåñòîâûõ áàëëîâ òåñòèðóåìûõ------------------}
writeln(output,'
Sinovdan o`tuvchilarning ballarini dispersiyasi
');
writeln(output,'
Sinovdan utuvchilarning ballarini dispersiyasining qiymati, test topshiriqlarining sinovdan utuvchilarni bilim',
'darajasini farqlay olish darajasini bildiradi. Yani, agar dispersiya qiymati juda kichik miqdor bulsa, ',
'test topshiriqlarining sinovdan utuvchilarni bilim darajasini farqlay olish darajasi pastligini bildiradi.',
'Agar, dispersiya qiymati juda katta miqdor bulasa, sinovdan utuvchilar guruhining bilim darajasi',
'bir-biridan keskin farq qilishini yoki test topshiriqlarining mazmunida yoki matnida',
'xatolik mavjudligini bildiradi. Agar test topshiriqlari optimal tuzilgan bulsa,',
'ularning taqsimoti normal taqsimotga yaqin buladi. ',
'Sinovdan utuvchilarning ballarini dispersiyasi quyidagicha hisoblanadi:
',
'
(1).
',
'
Dispersiya bilan yana bir muhim parametr-standart chetlashish bogliq:
',
'
(2).
',
'
Qaralayotgan binar matrisa uchun (1) va (2),formulalarning qiymati:
',
'
Do'stlaringiz bilan baham: |