[1]D
"D
A*.FRM*.MACF
program
kurs;
uses
crt,dos;
type
mas= array [1..20,1..20] of real;
vek= array [1..20] of real;
vek1= array [1..20] of integer;
{*** Š ***}
var
h,h1 :vek; {.
}
{ ( H) }
f1
:vek; {
蠠 }
c,c1
:vek; {.
}
cc
:vek; { C~ }
b
:vek1; { }
o
:boolean;{ }
nn,n,n1,n2:integer;{ ߠ }
k,k1,dl
:integer;{
ɠ
}
otw
:char; {
}
kur
:integer;{ 堠 }
itr
:integer;{ 頠 }
id,id1
:integer;{ 堠 }
hh
:real; {
Fmin }
a,a1
:mas; {.
}
yv
:boolean;{ ࠠ }
procedure
muz(dl:integer);
{}
begin
sound(300);delay(dl);
sound(400);delay(dl);
sound(500);delay(dl);
nosound;
end;
function test0(c:vek):boolean;
{
}
var
l:integer;
begin
l:=0;
for k:=1 to n+n1 do
if c[k]>0 then l:=l+1;
if l>0 then test0:=false
else test0:=true;
end;
function testY(a:mas):boolean;
{
(Y) }
var
l:integer;
begin
l:=0;
for k:=1 to kur do
for k1:=(n+n1+1) to nn do
if A[k,k1]=1 then l:=l+1;
if l>0 then testy:=true
else testy:=false;
end;
procedure
indxY(aa:mas; var c1:vek);
{
, Y- }
var k2 : integer;
vr : mas;
l
: real;
begin
hh:=0;
for k:=1 to nn do
c1[k]:=0;
for k:=1 to kur do
for k1:=(n+n1+1) to nn do
if aa[k,k1]=1 then
begin
hh:=hh+h[k];
for k2:=1 to (n+n1) do
c1[k2]:=c1[k2]+aa[k,k2];
for k2:=(n+n1+1) to nn do
c1[k2]:=0;
end;
end;
procedure
indxX(aa:mas; var c1:vek);
{
}
begin
for k1:=1 to (n+n1) do
c1[k1]:=0;
for k:=1 to kur do
for k1:=1 to (n+n1) do
c1[k1]:=c1[k1]+cc[k]*aa[k,k1];
for k:=1 to (n+n1) do
c1[k]:=c1[k]-f1[k];
hh:=0;
for k:=1 to kur do
hh:=hh+cc[k]*h[k];
end;
procedure
maxSt (c1:vek; var id:integer);
{
}
var
maxi:real;
k :integer;
begin
id:=1;
maxi:=c1[1];
for k:=1 to n+n1 do
if (c1[k]>maxi) and (c1[k]>0) then
begin
id:=k;
maxi:=c1[k];
end;
end;
procedure
Str (id: integer;aa:mas; var id1:integer);
{
}
var
mini:real;
k
:integer;
begin
id1:=1;
mini:=aa[1,id];
for k:=2 to kur do
if (aa[k,id]>0) and ( (mini<=0) or
(h[k]/aa[k,id]<h[id1]/mini) ) then
begin
mini:=aa[k,id];
id1:=k;
end;
end;
{********************************************************************}
{* .
*}
{********************************************************************}
begin
textbackground(blue);
clrscr;
window(21,6,59,18);
textbackground(0);
clrscr;
window(20,5,57,17);
textbackground(7);
textcolor(4);
{*********
**********}
clrscr;
writeln('
Ŀ');
writeln(' ɠ
Ҡ ');
writeln(' :
');
writeln(' "
, ');
writeln('
,');
writeln(' - ." ');
writeln(' :
');
writeln(' " " ');
writeln(' :
');
writeln(' ..
.. ');
writeln(' () Ҡ
1995. ');
writeln(' ...
');
write
(' ');
repeat until keypressed;
window(1,1,80,24);
textbackground(blue);
clrscr;
for k:=1 to kur do
for k1:=1 to nn do
A[k,k1]:=0; { }
{ }
window(4,3,61,25);
textbackground(0);
clrscr;
window(3,2,59,24);
textbackground(3);
clrscr;
textcolor(0);
gotoxy(3,3);
write(' -
堠 :');
readln(kur);
gotoxy(3,5);
write(' -
蠠 :');
readln(n);
gotoxy(3,7);
write(' -
:');
readln(n1);
gotoxy(3,9);
write(' -
:');
readln(n2);
nn:=n+n1+n2;{nn- }
muz(50);
clrscr;
gotoxy(3,3);
writeln(' X , !');
for k:=1 to (n+n1) do
begin
write(' X',k,'= ');
readln(f1[k]);
end;
muz(50);
clrscr;
for k:=1 to kur do
begin
writeln(' ',k,' ');
readln(h[k]);
end;
for k:=1 to kur do
begin
muz(50);
clrscr;
writeln(' Y, N:',k);
for k1:=1 to nn do
begin
if k1<=n+n1 then write(' X',k1,'=')
else write(' Y',k1-(n+n1),'=');
readln(a[k,k1]);
end;
end;
{********************************************************************}
{* .
. *}
{********************************************************************}
yv
:=true;{ }
itr:=1; { }
o :=true;{ !}
repeat
{ }
begin
clrscr;
muz(100);
c1:=c;{ }
{ Y ?}
if testY(a) = true then indxY(a,c1)
{! . Y }
else indxX(a,c1);{!
. }
{ 堠 }
{ . ,
0 ?}
if test0(c1)=false then {!
}
begin
{****** ******}
writeln(' N:',itr);
writeln(' :');
writeln(' Fmin=',hh);
for k1:=1 to (n+n1) do
writeln(' X',k1,'=',c1[k1]);
writeln('
!!!');
write
(' (Y/N)?');
readln(otw);
{ ?}
if (otw='Y') or (otw='y') then {!
!}
begin
maxst(c1,id); { }
str(id,a,id1); { }
cc[id1]:=f1[id];{ C~
}
{ (X ) }
b[id1]:=id; { }
a1:=a;h1:=h;{
H}
{**** Ӡ ****}
{
}
for k:=1 to n+n1 do
a1[id1,k]:=a[id1,k]/a[id1,id];
{
}
for k:=1 to kur do
if k<>id1 then
for k1:=1 to n+n1 do
a1[k,k1]:=a[k,k1]-((a[id1,k1]*a[k,id])/a[id1,id]);
{ H}
for k:=1 to kur do
if k<>id1 then
h1[k]:=h[k]-((h[id1]*a[k,id])/a[id1,id]);
h1[id1]:=h[id1]/a[id1,id];
yv:=true;{ !}
a:=a1;h:=h1;c:=c1;{
}
itr:=itr+1;{ }
{ Y,
}
for k1:=(n+n1+1) to nn do
if a[id1,k1]=1 then a[id1,k1]:=0;
end
else
begin
yv:=false;{! !}
o :=false;
end;
end
else yv:=false;{! }
{
ࠠ }
end
until
(yv=false);{ . }
{
?}
if
o=true then {! !}
begin
{******
******}
muz(200);
textbackground(2);
textcolor(0);
clrscr;
writeln(' !!! !!!');
writeln(' ',itr,'-
!');
writeln(' :');
for k1:=1 to kur do
writeln(' X',b[k1],'=',h[k1]);
writeln('
Fmin=',hh);
writeln(' :');
for k1:=1 to (n+n1) do
writeln(' X',k1,'=',c1[k1]);
textcolor(16);
write('
!!!');
repeat until keypressed;
end;
end.
- 27 -
P 2