Код:
program pro1;
uses ob,obrabotki;
begin
writeln();
vvod(sd);
podschet(sd);
sort(sd);
vivod(sd);
raznoe(sd);
konechny(sd);
end.
Код:
unit obrabotki;
interface
uses ob;
implementation
procedure vvod(var sd:product);
var
i: integer;
begin
for i := 1 to maxk do begin
Sd[i].name:=(i);
sd[i].kol := random(6) + 5;
sd[i].sebest := random(500) + 200;
sd[i].cena := random(1000) + 300;
sd[i].work := random(20) + 5;
end;
end;
procedure vivod(sd:product);
var
i: integer;
begin
writeln('---------------------------------------------------------------');
writeln('|','Товар':5,'|','Eдиницы':5,'|','Себестоимость':10,'|','Цена':5,'|','Рабочие':9,'|','Производительность':10,'|');
writeln('---------------------------------------------------------------');
for i:=1 to maxk do writeln('|',sd[i].name:4, '', sd[i].kol:6, ' ', sd[i].sebest, ' ', sd[i].cena, ' ', sd[i].work,' | ' ,sd[i].proiz,'|');
writeln('---------------------------------------------------------------');
end;
procedure podschet(var sd: product);
var
i: integer;
begin
for i := 1 to maxk do begin
sd[i].dohod:=abs(sd[i].kol * sd[i].cena-sd[i].kol * sd[i].sebest);
sd[i].proiz:=sd[i].dohod / sd[i].work;
end;
end;
function proizob(sd:product; d:integer): real;
var
i, count: integer;
begin
result := 0;
for i := d to maxk do
result := result + sd[i].proiz;
result := result / (maxk-(d-1));
end;
function pervelem(sd: product): integer;
var
i: integer;
flag: boolean;
begin
flag := false;
i := 1;
while (i <= maxk) or not flag do begin
result := i;
flag := true;
end;
inc(i);
end;
function minsort(sd: product): integer;
var
i: integer;
min: real;
begin
min := sd[pervelem(sd)].proiz;
for i := 1 to maxk do
if sd[i].proiz < min then begin
result := i;
min := sd[i].proiz;
end;
end;
procedure sort(var sd:product);
var
i, j: integer;
temp: tovar;
begin
for j := 1 to maxk do
for i := 1 to maxk - 1 do
if (sd[i].proiz > sd[i + 1].proiz) then begin
temp := sd[i];
sd[i] := sd[i + 1];
sd[i + 1] := temp;
end;
end;
procedure raznoe(var sd:product);
var
i: integer;
flag: boolean;
begin
flag := false;
i := maxk;
fp := proizob(sd,d);
while ((not flag) and (i > 1)) do begin
sd[minsort(sd)].field := true;
if (fp * 2 <= proizob(sd)) then flag := true;
dec(i);
end;
end;
procedure konechny(sd:product);
var
i: integer;
begin
writeln('------------------------------');
writeln('Производительность до: ', fp);
writeln('Производительность после: ', proizob(sd));
writeln('------------------------------');
for i := 1 to maxk do begin
if sd[i].field then write(Sd[i].name, ' ');
end;
end;
end.
Код:
unit ob;
interface
const maxk=3;
type
tovar = record
name : integer;
kol : integer;
sebest:real;
cena :real;
work :integer;
dohod:real;
proiz:real;
field:boolean;
end;
type
product = array[1..maxk] of tovar;
var
fp:real;
sd:product;
implementation
end.
Сама задача:Завод выпускает 20 наименований продукции. Про каждый вид продукции известно: сколько единиц этой продукции выпускает завод, себестоимость и отпускная цена единицы продукции, сколько человек занято на выпуске этой продукции. От каких видов продукции завод должен отказаться, чтобы общая производительность труда повысилась вдвое? ({производительность труда} = {доход от продажи продукции} / {количество человек, принимающих участие в ее производстве}).
Программа не работает, не могу разобраться в чем. Может кто сможет помочь. Может кто поможет отредактировать процедуру общего подсчета производительности function proizob(sd
roduct; d:integer): real;