{TESTE DO INTERVALO (GAP TEST)} uses crt; {Se estiver usando o Turbo Pascal para Windows, usar uses wincrt;} Type Vetor = Array[0..10]of Longint; Vetor1 = Array[0..1000] of Longint; Vetor2 = Array[0..1000] of Real; Var semente: double; {Variavel utilizada pela RAND2} I, J, X, Alfa : Longint; U: Double; N, D, K, Cat, gl : Longint; SVobs, GVobs : Longint; Aux, SVesp, Quic, QuicT, SQuic, GVesp, Param : Real; A : Vetor; Gap : Vetor1; Vesp : Vetor2; {$I RAND2.PAS} {***************************************************} Begin Writeln('Quantidade de Numeros ?'); Readln(N); K := 0; Writeln('Qual a semente ? (1 - 2147483646) '); Readln(semente); Writeln('Escolha nivel de significancia (alfa) --> 1, 5 ou 10 %'); Readln(Alfa); If Alfa = 5 then Begin Param := 1.6449; end else Begin If Alfa = 1 then Begin Param := 2.3263; end else Begin If Alfa = 10 then Begin Param := 1.2816; end else Begin Writeln('Nivel de significancia ERRADO !'); Exit; end end end; Clrscr; For J := 0 to 1000 do Begin Gap[J] := 0; end; For I := 0 to 10 do Begin A[I] := 0; End; For I:= 1 to N do Begin U := Rand2; X := Trunc(U * 10.0); If X > 9 Then X := 9; If A[X] = 0 Then Begin A[X] := I; End Else Begin K := I - A[X] - 1; Gap[K] := Gap[K] + 1; A[X] := I; End; End; K := 0; For I:= 0 to 1000 do Begin K := K + Gap[I]; End; Aux := LN(0.9); For I := 0 to 1000 do Begin Vesp[I] := EXP(AUX * I) * 0.1 * K; If Vesp[I] < 0.001 Then Vesp[I] := 0.0; end; Cat := 1000; While (Vesp[Cat] = 0.0) do Begin Cat := Cat - 1; End; If Cat > (N - 2) then Cat := N - 2; SVesp := 0.0; SVobs := 0; Quic := 0.0; gl := 0; For I := 0 to Cat do Begin SVesp := SVesp + Vesp[I]; SVobs := SVobs + Gap[I]; if SVesp > 5.0 then Begin gl := gl + 1; SQuic := (SQR(SVobs - SVesp) / SVesp); GVesp := SVesp; GVobs := SVobs; Quic := Quic + SQuic; SVobs := 0; SVesp := 0.0; End; End; If SVesp <> 0 then Begin Quic := Quic - Squic; SVesp := SVesp + GVesp; SVobs := SVobs + GVobs; SQuic := (SQR(SVobs - SVesp) / SVesp); Quic := Quic + SQuic; End; gl := gl - 1; QuicT := 1.-(2./(9.*gl))+(Param*SQRT(2./(9.*gl))); QuicT := QuicT * QuicT * QuicT; QuicT := gl * QuicT + 0.005; Writeln('---------------------------------------'); Writeln('Quantidade de Numeros = ',N); Writeln('Alfa = ',Alfa,'%'); Writeln('Graus de Liberdade = ',gl); Writeln('QuiQuadrado Calc = ', Quic:8:2); Writeln('QuiQuadrado Tab Aprox = ', QuicT:8:2); Writeln('---------------------------------------'); End.