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

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

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

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

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

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

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

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

usesCRT;

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.

Соседние файлы в папке suleiman