![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#31
|
||||
|
||||
|
А что в нем так? Вот что это такое?
Код:
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 |
|
#32
|
|||
|
|||
|
Я думаю что лучше всего здесь подойдет оператор цикла с постусловием (" repeat... until... ; "), как мне лучше прописать условие для этого цикла?
|
|
#33
|
||||
|
||||
|
Пробуй так:
Код:
while True do
begin
...
if z1 = 0 then Break;
end;
repeat
...
if z1 = 0 then Break;
until True; |
|
#34
|
|||
|
|||
|
Если использовать:
Код:
while True do
begin
...
if z1 = 0 then Break;
end;Код:
repeat
...
if z1 = 0 then Break;
until True; |
|
#35
|
|||
|
|||
|
возможно что то не так с телом цикла, а не с самим циклом? посмотрите, пожалуйста может найдете ошибку.
|
|
#36
|
||||
|
||||
|
Так не нужно копировать бездумно. Я не зря троеточие поставил, там должен выполняться твой код, а заодно изменяться значение z1.
|
|
#37
|
|||
|
|||
|
ну я так и делал...
|
|
#38
|
||||
|
||||
|
Код:
while True do
begin
min1 := 0;
for I := 1 to (Length(byteArray)-1) do
if byteArray[i] < byteArray[min1] then
min1 := i;
x1 := StrToInt(Edit21.Text);
case min1 of
0 :
begin
Edit1.Color := clLime;
yy1 := StrToInt(Edit16.text);
z1 := x1 - yy1 - z1;
end;
1 :
begin
Edit2.Color := clLime;
yy1 := StrToInt(Edit17.text);
z1 := x1 - yy1 - z1;
end;
2 :
begin
Edit3.Color := clLime;
yy1 := StrToInt(Edit18.text);
z1 := x1 - yy1 - z1;
end;
3 :
begin
Edit4.Color := clLime;
yy1 := StrToInt(Edit19.text);
z1 := x1 - yy1 - z1;
end;
4 :
begin
Edit5.Color := clLime;
yy1 := StrToInt(Edit20.text);
z1 := x1 - yy1 - z1;
end;
end;
for I := min1 to Length(byteArray) - 2 do
byteArray[i] := byteArray[I + 1];
SetLength(byteArray, Length(byteArray) - 1);
if z1 = 0 then
Break;
end; |
|
#39
|
|||
|
|||
|
ввел первоначальное значение z1 и даже в теле цикла все через case прописал. все равно ошибка......
|
|
#40
|
||||
|
||||
|
Ты издеваешься? Штатный телепат сейчас не в сети, а я не знаю, что там происходит в строке 17. Ой ошибся в 34, не... наверное в 45.
|
|
#41
|
|||
|
|||
|
вот что у меня получилось
Код:
procedure TForm1.BitBtn2Click(Sender: TObject);
var
byteArray : Array of integer;
i:integer;
min1,x1,yy1,z1: Integer;
begin
SetLength(byteArray, 5);
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);
z1:=0;
repeat
min1 := 0;
for I := 1 to (Length(byteArray)-1) do
if byteArray[i] < byteArray[min1] then
min1 := i;
x1 := StrToInt(Edit21.Text);
case min1 of
0 :
begin
Edit1.Color := clLime;
yy1 := StrToInt(Edit16.text);
z1 := x1 - yy1 - z1;
end;
1 :
begin
Edit2.Color := clLime;
yy1 := StrToInt(Edit17.text);
z1 := x1 - yy1 - z1;
end;
2 :
begin
Edit3.Color := clLime;
yy1 := StrToInt(Edit18.text);
z1 := x1 - yy1 - z1;
end;
3 :
begin
Edit4.Color := clLime;
yy1 := StrToInt(Edit19.text);
z1 := x1 - yy1 - z1;
end;
4 :
begin
Edit5.Color := clLime;
yy1 := StrToInt(Edit20.text);
z1 := x1 - yy1 - z1;
end;
end;
for I := min1 to Length(byteArray) - 2 do
byteArray[i] := byteArray[I + 1];
SetLength(byteArray, Length(byteArray) - 1);
if z1 <= 0 then Break;
until True;
Label16.Caption:= IntToStr(z1);
end; |
|
#42
|
||||
|
||||
|
Нужно тестировать в пошаговом режиме прервётся цикл или зациклится, дерзай.
|
|
#43
|
|||
|
|||
|
цикл прерывается. как избежать прирывания?
|
|
#44
|
||||
|
||||
|
Ну почему из тебя слова клещами вытаскивать нужно? Кому сдавать программу мне или тебе? Как, при каких услових прерывается? "шагать" пробовал?
|
|
#45
|
|||
|
|||
|
Код:
repeat
min1 := 0;
for I := 1 to (Length(byteArray)-1) do
if byteArray[i] < byteArray[min1] then min1 := i;
x1 := StrToInt(Edit21.Text);
case min1 of
0 :
begin
Edit1.Color := clLime;
yy1 := StrToInt(Edit16.text);
z1 := x1 - yy1 - z1;
end;
1 :
begin
Edit2.Color := clLime;
yy1 := StrToInt(Edit17.text);
z1 := x1 - yy1 - z1;
end;
2 :
begin
Edit3.Color := clLime;
yy1 := StrToInt(Edit18.text);
z1 := x1 - yy1 - z1;
end;
3 :
begin
Edit4.Color := clLime;
yy1 := StrToInt(Edit19.text);
z1 := x1 - yy1 - z1;
end;
4 :
begin
Edit5.Color := clLime;
yy1 := StrToInt(Edit20.text);
z1 := x1 - yy1 - z1;
end;
end;
for I := min1 to Length(byteArray) - 2 do
byteArray[i] := byteArray[I + 1];
SetLength(byteArray, Length(byteArray) - 1);
if z1 <= 0 then Break; //шагает отсюда
until True;
Label16.Caption:= IntToStr(z1); //сразу сюда, не затрагивая until
end; |