Эволюция элитных групп в организационных системахРефераты >> Программирование и компьютеры >> Эволюция элитных групп в организационных системах
begin
a:=true; b:=true; i:=0; j:=0;
for k:=0 to Kol do begin
a:=a and (otb[x,k]*ran[2,k]>otb[y,k]*ran[2,k]);
b:=b and (otb[x,k]*ran[2,k]<otb[y,k]*ran[2,k]);
end;
if not(a or b) then begin
for k:=0 to Kol do begin
i:=i+otb[x,k]*ran[2,k];
j:=j+otb[y,k]*ran[2,k];
end;
a:=(i>j);
end;
if a then paret:=0 else
if b then paret:=1 else
paret:=-1;
end;
procedure elem(Kol,Num:word);
var i:word; {Kol - количество критериев
Num - номер элемента }
begin
for i:=0 to Kol do
otb[Num,i]:=random(ran[1,i]-ran[0,i])+ran[0,i];
end;
procedure SORT;
var i,j,k,l:word; pr:tbyte;
begin
for i:=0 to N do begin
k:=i;
for j:=i+1 to N do
if paret(M,k,j)=0 then k:=j;
for l:=0 to M do begin
pr:=otb[i,l];
otb[i,l]:=otb[k,l];
otb[k,l]:=pr;
end;
end;
end;
procedure Pretendent(Kol:word);{ Kol - количество критериев }
var num,num1:word; k:shortint;
begin num:=random(N+1);
{номер удаляемого элемента }
j:=0;
repeat
repeat
num1:=random(N+1); { номер рекомендателя }
until num<>num1;
elem(Kol,Num);
k:=paret(Kol,Num,Num1);
inc(j);
until (k=0) or (j>3*N);
end;
procedure Propolka(Num,Kol,typ:word);
{ Num - количество изымаемых элементов
Kol - количество критериев
typ=0 - прополка; typ=1 - сбор урожая;}
var i,m,j:word;
begin
SORT;
if typ=0 then begin m:=0; j:=Num; end
else begin m:=N-Num; j:=N; end;
for i:=m to j do
elem(Kol,i);
end;
procedure Delegation(Kol,Num,Kk:word);
{ Kol - количество элементов в делегирующей группе
Num - номер делегата в элитной группе }
var
i,j,mn,mx:word;
begin
for i:=0 to Kol do
elem(Kk,i+N);
mx:=0;
for i:=1 to kol do
if paret(Kk,i+N,mx+N)=0 then mx:=i;
for i:=0 to Kk do
otb[Num,i]:=otb[mx+N,i];
end;
procedure ShowQuality(typ,Kol,Num:word);
var i,j:word;S:tbyte;
f:extended;
begin
if typ=0 then begin
clrscr;
write(' Процедура ');
case Num of
2: writeln('"Претендент-рекомендатель"');
3: writeln('"Прополка"');
4: writeln('"Сбор урожая"');
5: writeln('"Делегирование"');
0:;
end;
writeln;
writeln('Среднее арифметическое показателей элитной группы');
writeln(' по различным критериям до и после моделирования.');
writeln('+—————————————————————+');
writeln('¦NN¦Начальные показатели¦ После отбора ¦');
writeln('+—+——————————+—————————¦');
end;
for i:=0 to Kol do begin
if typ=0 then begin
gotoxy(1,i+7);
write('¦',i+1:2,'¦ ','¦':19,'¦':22);
end;
gotoxy(6+typ*23,i+7);
s:=0;
for j:=0 to N do
S:=S+otb[j,i];
f:=S/(N+1);
write(f:9:6);
end;
writeln;
writeln('+—————————————————+');
if typ=1 then c:=readkey;
end;
procedure input(Num:byte);
var nm2,test:byte;
begin
test:=0;
repeat
nm2:=menu(2);
if (nm2<>6) and (nm2<>0) and (nm2<>4) then test:=1;
case nm2 of
1: begin
writeln('Введите количество критериев отбора(до 20): ');
readln(t);
if t>=20 then t:=20;
if t<1 then t:=1;
dec(t);
flag:=0; flag:=flag or 1;
end;
2: if (flag and 1)=1 then
for j:=0 to t do begin
writeln('Введите разброс значений ',(j+1):-3,' критерия ');
readln(ran[0,j],ran[1,j]);
writeln('Введите приоритет ',(j+1):-3,' критерия');
readln(ran[2,j]);
flag:=flag or 2;
end;
3: begin
writeln('Введите размер элитной группы(до 200)');
readln(N);
if N>=200 then n:=200;
if N<1 then n:=1;
dec(n);
if (num in [3,4]) then begin
writeln('Сколько элементов удалять на каждом шаге');
readln(z);
if z>n then z:=n-1;
if z<1 then z:=1;
end;
flag:=flag or 4;
end;
4: if Num=5 then begin
writeln('Введите размер делегирующей группы(до 400)');
readln(dl);
if dl>=400 then dl:=400;
if dl<1 then dl:=1;
end;
5: begin
writeln('Введите количество циклов жизни элитной группы (до 4000)');
readln(f);
if f>=4000 then f:=4000;
if f<1 then f:=1;
flag:=flag or 8;
end;
0,6: ;
end;
until (flag=15) and ((nm2=0) or (nm2=6));
if test=1 then begin
for i:=0 to n do elem(t,i);
for i:=0 to n do
for j:=0 to t do
otb[i+n+ck,j]:=otb[i,j];
end else
for i:=0 to n do
for j:=0 to t do
otb[i,j]:=otb[i+n+ck,j];
ShowQuality(0,t,Num);
for i:=1 to f do begin
case Num of
2: pretendent(t);
3: propolka(z,t,0);
4: propolka(z,t,1);
5: begin
j:=random(N); delegation(dl,j,t);
end;
end;
gotoxy(75,1);write(i:4);
if keypressed then
if readkey=#27 then break;
end;
Showquality(1,t,0);
end;
procedure help;
const attr=blue*16+Lightgreen;
begin
window(23,7,56,18);
highvideo;
FrameWin('Справка',DoubleFrame,Attr,Attr);
textbackground(blue);
textcolor(Lightgreen);
gotoxy(2,1);
clrscr;
writeln(' Эволюция элитных групп');
writeln;
writeln(' Создана студентами ');
writeln(' группы 6-19-2'); writeln;
writeln(' Авторы:');
writeln(' Григорьев Максим');
writeln(' Леонидович');
writeln(' Руденко Виталий Николаевич');
textbackground(black);
textcolor(white);
normvideo;
window(1,1,80,25);
readln;
end;
begin
clrscr; n:=0;b:=false;
repeat
nm:=menu(1);
case nm of
1: help;
2,3,4,5: input(nm);
0,6: b:=true;
end;
clrscr;
until b;
end.
ПРИЛОЖЕНИЕ 2. РЕЗУЛЬТАТЫ ТЕСТИРОВАНИЯ ПРОГРАММЫ
Выберите режим: |
Справка Претендент-рекомендатель Прополка Сбор урожая Делегирование Выход |
Справка |
Эволюция элитных групп Создана студентами группы 6-19-2 Авторы: Григорьев Максим Леонидович Руденко Виталий Николаевич |
Выберите режим: |
Справка Претендент-рекомендатель Прополка Сбор урожая Делегирование Выход |
Выберите режим: |
Критерии Значения Размер элитной группы Размер делег. Группы Количество циклов жизни Выход |