По идеи, должно быть так: находим индекс минимального значения в массиве, производим некоторые операции, затем удаляем минимум из массива и ищем новый минимум в получившемся массиве. И так до тех пор когда z1 станет равно нулю или меньше нуля.
У меня получился вот такой код:
Код:
procedure TForm1.BitBtn2Click(Sender: TObject);
var
byteArray : Array of integer;
i:integer;
min1,x1,yy1,z1: Integer;
begin
SetLength(byteArray, 5);
for i := 0 to (Length(byteArray)-1) do
begin
byteArray[0] := StrToInt(Edit1.Text);
byteArray[1] := StrToInt(Edit2.Text);
byteArray[2] := StrToInt(Edit3.Text);
byteArray[3] := StrToInt(Edit4.Text);
byteArray[4] := StrToInt(Edit5.Text);
end;
z1:=0;
while z1 > 0 do
begin
min1:= 0;
for i := 1 to (Length(byteArray)-1) do if byteArray[i] < byteArray[min1] then min1 := i;
x1:= StrToInt(Edit21.Text);
if (min1 = 0) then
begin
Edit1.Color:=clLime;
yy1:= StrToInt(Edit16.text);
z1:=x1-yy1-z1;
end;
if (min1 = 1) then
begin
Edit2.Color:=clLime;
yy1:= StrToInt(Edit17.text);
z1:=x1-yy1-z1;
end;
if (min1 = 2) then
begin
Edit3.Color:=clLime;
yy1:= StrToInt(Edit18.text);
z1:=x1-yy1-z1;
end;
if (min1 = 3) then
begin
Edit4.Color:=clLime;
yy1:= StrToInt(Edit19.text);
z1:=x1-yy1-z1;
end;
if (min1 = 4) then
begin
Edit5.Color:=clLime;
yy1:= StrToInt(Edit20.text);
z1:=x1-yy1-z1;
end;
for i := min1 to Length(byteArray) - 2 do byteArray[i] := byteArray[i + 1];
SetLength(byteArray, Length(byteArray) - 1);
end;
Label16.Caption:= IntToStr(z1);
end;
Что в нем не так?