19.02.2014, 10:19 | #11 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
Впрочем, подозреваю, что препод Вам всё равно не поверит, а потому - вот вариант (редкостно тупой) без файла: Код:
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. |
|
19.02.2014, 10:19 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Проблемы часто повторяются и ваша не исключение, вот схожие темы Задача на Паскаль, одномерный массив Задача на Паскале про массив Задача на массив в С++ |
19.02.2014, 17:26 | #15 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
И на том спасибо. В общем, была программка компактная и прозрачная, стала разлапистая, тупая и непонятная. Но работает. Сами захотели.
Код:
Type Prod=Record N:Byte; Num,Prime,Price,Work:Integer; Productivity_Local:Real; End; Var Prd:Array[1..20] of Prod; Bad:Array[1..20] of Byte; Productivity_Initial,Min,Max,Productivity_Current:Real; i,m,Im,k:Integer; b:boolean; Function Productivity:Real; var j,p:Integer; Sum,Sum_Work:Real; b1:boolean; begin Sum:=0; Sum_Work:=0; for j:=1 to 20 do begin b1:=true; for p:=1 to 20 do if j=Bad[p] then b1:=false; If b1 then with Prd[j] do begin Sum:=Sum+(Price-Prime)*Num; Sum_Work:=Sum_Work+Work; end; end; Productivity:=Sum/Sum_Work; end; Begin for m:=1 to 20 do Bad[m]:=0; 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 begin b:=true; for m:=1 to 20 do if i=Bad[m] then b:=false; If b and (Prd[i].Productivity_Local<Min) then begin Min:=Prd[i].Productivity_Local; Im:=i; end; end; m:=0; Repeat Inc(m) Until (Bad[m]=0) or (m=20); If Bad[m]=0 then Bad[m]:=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 k do Write(Bad[i]:3); Writeln; Writeln('Inial productivity: ',Productivity_Initial:0:3); Writeln('Final productivity: ',Productivity_Current:0:3); Readln; End. |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
19.02.2014, 18:12 | #16 (permalink) |
Member
Регистрация: 16.11.2013
Сообщений: 22
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Спасибо
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|