Скачиваний:
25
Добавлен:
01.05.2014
Размер:
154 Кб
Скачать
  1. Описание программы

В ходе выполнения лабораторной работы, с целью автоматизации проведения необходимых расчетов, был разработан программный продукт lab4.exe, который выполняет следующие функции:

  • Генерация массивов данных с равномерным, экспоненциальным и релеевским законами распределения (представляют интервалы времени между нахождением ошибок).

  • Подсчет характеристик fm и gm для 60%, 80% и 100% элементов массивов

  • Вывод полученных результатов в виде таблиц в файл.

Реализуемые в программе массивы чисел представляют прототип массивов интервалов времени между обнаружением ошибок в какой – то программной системе. (Более подробные теоретические сведения см. предыдущий раздел). Далее программа для каждого массива рассчитывает значение первоначального числа ошибок в программной системе (при этом используются 60%, 80%, 100% сгенерированных массивов). Производится расчет характеристик fm и gm и их разности с целью дальнейшего анализа результатов и определения оценки B – числа первоначальных ошибок в программной системе. Подсчет fm и gm завершается при достижении их разности значения 0,0001. Считается, что такая точность достаточна для получения корректных результатов (при уменьшении данного значения последовательности fm и gm сходятся медленно, и m может достигать значений порядка нескольких тысяч).

Данный программный продукт полностью реализован на языке Pascal.

  1. Текст программы

uses CRT;

const

MAX = 30;

var

i:integer;

a_60, a_80, a_100:real;

f:Text;

procedure GenerateRandom(max, floor:integer; var aRandom_60, aRandom_80, aRandom_100:real);

var

i:integer;

x, sumR, sumIR:real;

begin

repeat

sumR := 0; sumIR := 0;

writeln(f);

for i := 1 to max do

begin

x := random(floor);

write(f, x:6:2);

sumR := sumR + x;

sumIR := sumIR + i*x;

if i = Round(max*0.6) then

aRandom_60 := sumIR/sumR;

if i = Round(max*0.8) then

aRandom_80 := sumIR/sumR;

if (i mod 10 = 0) then

writeln(f);

end;

aRandom_100 := sumIR/sumR;

writeln(f);

until ((aRandom_100 > (max + 1)/2) and

(aRandom_80 > (Round(max*0.8) + 1)/2) and

(aRandom_60 > (Round(max*0.6) + 1)/2));

end;

procedure GenerateExponential(max:integer; b:real; var aExp_60, aExp_80, aExp_100:real);

var

i:integer;

y,w:real;

sumE, sumIE:real;

begin

repeat

sumE := 0; sumIE := 0;

writeln(f);

for i := 1 to max do

begin

y := -ln(random)/b;

w := b*exp(-b*y);

write(f, w:6:2);

sumE := sumE + w;

sumIE := sumIE + i*w;

if i = Round(max*0.6) then

aExp_60 := sumIE/sumE;

if i = Round(max*0.8) then

aExp_80 := sumIE/sumE;

if (i mod 10 = 0) then

writeln(f);

end;

aExp_100 := sumIE/sumE;

writeln(f);

until ((aExp_100 > (max + 1)/2) and

(aExp_80 > (Round(max*0.8) + 1)/2) and

(aExp_60 > (Round(max*0.6) + 1)/2));

end;

procedure GenerateRelay(max:integer; c:real; var aRel_60, aRel_80, aRel_100:real);

var

i:integer;

y,w:real;

sumR, sumIR:real;

begin

repeat

sumR := 0; sumIR := 0;

writeln(f);

for i := 1 to max do

begin

y := c*sqrt(-2*ln(random));

w := y/sqr(c)*exp(-sqr(y)/(2*sqr(c)));

write(f, w:6:2);

sumR := sumR + w;

sumIR := sumIR + i*w;

if i = Round(max*0.6) then

aRel_60 := sumIR/sumR;

if i = Round(max*0.8) then

aRel_80 := sumIR/sumR;

if (i mod 10 = 0) then

writeln(f);

end;

aRel_100 := sumIR/sumR;

writeln(f);

until ((aRel_100 > (max + 1)/2) and

(aRel_80 > (Round(max*0.8) + 1)/2) and

(aRel_60 > (Round(max*0.6) + 1)/2));

end;

procedure CheckEstimations(max:integer; a:real);

const

MIN_VAL = 0.0001;

var

i,m : integer;

gm,fm,d, d_new : real;

begin

{A_100}

writeln(f);

writeln(f,'_________________________________');

writeln(f,'| m | Fm | Gm | Delta |');

writeln(f,'_________________________________');

m := max + 1;

d_new:= 32767;

repeat

gm := 0; fm := 0;

d:=d_new;

for i := 1 to max do

fm := fm + 1/(m-i);

gm := max/(m - a);

d_new := fm - gm;

writeln(f,'|',m:5,'|',fm:8:5,'|',gm:8:5,'|',d_new:7:5,'|');

m := m + 1;

until (abs(d) < abs(d_new));

writeln(f,'_________________________________');

end;

begin

clrscr;

randomize;

assign(f,'lab4.txt');

rewrite(f);

{равномерное распределение}

writeln(f,'------------Генерация ',MAX,' чисел (равномерное распределение)------------');

writeln('Генерация ',MAX,' чисел (равномерное распределение)...');

GenerateRandom(MAX, 20, a_60, a_80, a_100);

writeln(f,'100% - A = ',a_100:6:3,', (n+1)/2 = ',(MAX+1)/2:6:3);

writeln(f,'80% - A = ',a_80:6:3,', (n+1)/2 = ',(Round(MAX*0.8)+1)/2:6:3);

writeln(f,'60% - A = ',a_60:6:3,', (n+1)/2 = ',(Round(MAX*0.6)+1)/2:6:3);

writeln(f);

writeln(f,'------------Вычисление оценок для ',MAX ,' чисел------------');

writeln('Вычисление оценок для ',MAX ,' чисел...');

CheckEstimations(MAX, a_100);

writeln(f);

writeln(f,'------------Вычисление оценок для ',Round(MAX*0.8) ,' чисел------------');

writeln('Вычисление оценок для ',Round(MAX*0.8) ,' чисел..');

CheckEstimations(Round(MAX*0.8), a_80);

writeln(f);

writeln(f,'------------Вычисление оценок для ',Round(MAX*0.6) ,' чисел------------');

writeln('Вычисление оценок для ',Round(MAX*0.6) ,' чисел...');

CheckEstimations(Round(MAX*0.6), a_60);

{экспоненциальное распределение}

writeln(f);

writeln;

writeln(f,'------------Генерация ',MAX,' чисел(экспоненциальное распределение)------------');

writeln('Генерация ',MAX,' чисел(экспоненциальное распределение)...');

GenerateExponential(MAX, 0.1, a_60, a_80, a_100);

writeln(f,'100% - A = ',a_100:6:3,', (n+1)/2 = ',(MAX+1)/2:6:3);

writeln(f,'80% - A = ',a_80:6:3,', (n+1)/2 = ',(Round(MAX*0.8)+1)/2:6:3);

writeln(f,'60% - A = ',a_60:6:3,', (n+1)/2 = ',(Round(MAX*0.6)+1)/2:6:3);

writeln(f);

writeln(f,'------------Вычисление оценок для ',MAX ,' чисел------------');

writeln('Вычисление оценок для ',MAX ,' чисел...');

CheckEstimations(MAX, a_100);

writeln(f);

writeln(f,'------------Вычисление оценок для ',Round(MAX*0.8) ,' чисел------------');

writeln('Вычисление оценок для ',Round(MAX*0.8) ,' чисел..');

CheckEstimations(Round(MAX*0.8), a_80);

writeln(f);

writeln(f,'------------Вычисление оценок для ',Round(MAX*0.6) ,' чисел------------');

writeln('Вычисление оценок для ',Round(MAX*0.6) ,' чисел...');

CheckEstimations(Round(MAX*0.6), a_60);

{релеевское распределение}

writeln(f);

writeln;

writeln(f,'------------Генерация ',MAX,' чисел (релеевское распределение)------------');

writeln('Генерация ',MAX,' чисел (релеевское распределение)...');

GenerateRelay(MAX, 8, a_60, a_80, a_100);

writeln(f,'100% - A = ',a_100:6:3,', (n+1)/2 = ',(MAX+1)/2:6:3);

writeln(f,'80% - A = ',a_80:6:3,', (n+1)/2 = ',(Round(MAX*0.8)+1)/2:6:3);

writeln(f,'60% - A = ',a_60:6:3,', (n+1)/2 = ',(Round(MAX*0.6)+1)/2:6:3);

writeln(f);

writeln(f,'------------Вычисление оценок для ',MAX ,' чисел------------');

writeln('Вычисление оценок для ',MAX ,' чисел...');

CheckEstimations(MAX, a_100);

writeln(f);

writeln(f,'------------Вычисление оценок для ',Round(MAX*0.8) ,' чисел------------');

writeln('Вычисление оценок для ',Round(MAX*0.8) ,' чисел..');

CheckEstimations(Round(MAX*0.8), a_80);

writeln(f);

writeln(f,'------------Вычисление оценок для ',Round(MAX*0.6) ,' чисел------------');

writeln('Вычисление оценок для ',Round(MAX*0.6) ,' чисел...');

CheckEstimations(Round(MAX*0.6), a_60);

close(f);

end.

Соседние файлы в папке Лабораторные работы 1-4