Vladimir_S |
19.02.2014 10:19 |
Цитата:
Сообщение от Тетрадь
(Сообщение 1006318)
Спасибо, вы использовали процедуру файл? просто мы еще не изучили, и такую задачу не примут
|
Сочувствую. Ну так распишите присвоение значений полей записей с консоли либо в явном виде. А лучше скажите преподавателю, что самостоятельно освоили файловые операции. И освойте.
Впрочем, подозреваю, что препод Вам всё равно не поверит, а потому - вот вариант (редкостно тупой) без файла:
Код:
Type
Prod=Record
N:Byte;
Num,Prime,Price,Work:Integer;
Productivity_Local:Real;
End;
Var
Prd:Array[1..20] of Prod;
Bad:Set of Byte;
Productivity_Initial,Min,Max,Productivity_Current:Real;
i,Im,k:Integer;
Function Productivity:Real;
var
j:Integer;
Sum,Sum_Work:Real;
begin
Sum:=0;
Sum_Work:=0;
for j:=1 to 20 do
with Prd[j] do
If Not(N in Bad) then
begin
Sum:=Sum+(Price-Prime)*Num;
Sum_Work:=Sum_Work+Work;
end;
Productivity:=Sum/Sum_Work;
end;
Begin
Bad:=[];
Prd[ 1].N:= 1; Prd[ 1].Num:= 30; Prd[ 1].Prime:= 120; Prd[ 1].Price:=190; Prd[ 1].Work:= 5;
Prd[ 2].N:= 2; Prd[ 2].Num:= 110; Prd[ 2].Prime:= 333; Prd[ 2].Price:=578; Prd[ 2].Work:= 25;
Prd[ 3].N:= 3; Prd[ 3].Num:= 65; Prd[ 3].Prime:= 99; Prd[ 3].Price:=181; Prd[ 3].Work:= 12;
Prd[ 4].N:= 4; Prd[ 4].Num:= 770; Prd[ 4].Prime:= 6; Prd[ 4].Price:= 14; Prd[ 4].Work:= 10;
Prd[ 5].N:= 5; Prd[ 5].Num:= 490; Prd[ 5].Prime:= 146; Prd[ 5].Price:=239; Prd[ 5].Work:= 58;
Prd[ 6].N:= 6; Prd[ 6].Num:= 200; Prd[ 6].Prime:= 33; Prd[ 6].Price:= 57; Prd[ 6].Work:= 37;
Prd[ 7].N:= 7; Prd[ 7].Num:= 44; Prd[ 7].Prime:= 56; Prd[ 7].Price:= 79; Prd[ 7].Work:= 95;
Prd[ 8].N:= 8; Prd[ 8].Num:= 410; Prd[ 8].Prime:= 11; Prd[ 8].Price:= 17; Prd[ 8].Work:= 28;
Prd[ 9].N:= 9; Prd[ 9].Num:= 690; Prd[ 9].Prime:= 7; Prd[ 9].Price:= 12; Prd[ 9].Work:= 55;
Prd[10].N:=10; Prd[10].Num:= 990; Prd[10].Prime:= 281; Prd[10].Price:=346; Prd[10].Work:= 48;
Prd[11].N:=11; Prd[11].Num:= 3; Prd[11].Prime:= 4; Prd[11].Price:= 7; Prd[11].Work:= 98;
Prd[12].N:=12; Prd[12].Num:= 77; Prd[12].Prime:= 19; Prd[12].Price:= 25; Prd[12].Work:= 45;
Prd[13].N:=13; Prd[13].Num:= 50; Prd[13].Prime:= 267; Prd[13].Price:=321; Prd[13].Work:= 62;
Prd[14].N:=14; Prd[14].Num:= 550; Prd[14].Prime:= 17; Prd[14].Price:= 29; Prd[14].Work:= 22;
Prd[15].N:=15; Prd[15].Num:= 8; Prd[15].Prime:= 270; Prd[15].Price:=320; Prd[15].Work:= 45;
Prd[16].N:=16; Prd[16].Num:= 14; Prd[16].Prime:= 68; Prd[16].Price:= 93; Prd[16].Work:= 72;
Prd[17].N:=17; Prd[17].Num:= 340; Prd[17].Prime:= 10; Prd[17].Price:= 28; Prd[17].Work:= 5;
Prd[18].N:=18; Prd[18].Num:= 870; Prd[18].Prime:= 2; Prd[18].Price:= 4; Prd[18].Work:= 11;
Prd[19].N:=19; Prd[19].Num:= 20; Prd[19].Prime:= 65; Prd[19].Price:= 83; Prd[19].Work:= 17;
Prd[20].N:=20; Prd[20].Num:= 390; Prd[20].Prime:= 7; Prd[20].Price:= 10; Prd[20].Work:= 50;
For i:=1 to 20 do
with Prd[i] do
Productivity_Local:=(Price-Prime)*Num/Work;
Productivity_Initial:=Productivity;
Max:=Prd[1].Productivity_Local;
For i:=2 to 20 do
If Prd[i].Productivity_Local>Max then Max:=Prd[i].Productivity_Local;
k:=0;
Repeat
Inc(k);
Min:=Max;
For i:=1 to 20 do
If Not(i in Bad) and (Prd[i].Productivity_Local<Min) then
begin
Min:=Prd[i].Productivity_Local;
Im:=i;
end;
Bad:=Bad+[Im];
Productivity_Current:=Productivity;
Until (Productivity_Current>=Productivity_Initial*2) or (k=20);
Write('The plant must refuse from the positions:');
For i:=1 to 20 do
if i in Bad then Write(i:3);
Writeln;
Writeln('Inial productivity: ',Productivity_Initial:0:3);
Writeln('Final productivity: ',Productivity_Current:0:3);
Readln;
End.
Интересно, что будет следующим номером программы? "Мы множества не проходили!"?
|