Другие языки программирования и технологии
Delphi. Зависает при выполнении цикла
Можете объяснить в чём ошибка, прога зависает при выполнении конструкции ифов. Массив - шахматное поле, единицы - чёрные шашки, двойки - белые, нули - пустые клетки. procedure TForm1.Button1Click(Sender: TObject); var Mas:array [1..8,1..8] of byte;str,stol:byte; begin str:=0;stol:=0; Repeat begin str:=str+1; Repeat begin stol:=stol+1; if odd(str+stol) and (str<4) then Mas[str,stol]:=1 else Mas[str,stol]:=0; if odd(str+stol) and (str>5) then Mas[str,stol]:=2; end until stol=8; end; until str=8; end;
Зависает она у Вас, потому что Вы не обнуляете переменную stol перед перед началом внутреннего цикла.
Первый проход внешнего цикла идет нормально, т. к. stol была инициализирована нулем в начале, а на втором проходе перед началом внутреннего ее значение равно восьми.
После этого она увеличивается и никогда восьми равна уже не станет.
Товарищ Ishido Uruyu предложил типично индусское решение. Зависать программа перестанет, но работать все равно не будет.
И два совета на будущее.
1. В данной ситуации логичнее использовать цикл FOR:
for str := low(mas) to high(mas) do
for stol := low(mas[str]) to high(mas[str]) do
begin
// пишете здесь Ваши "ифы"
end;
2. ФОРМАТИРУЙТЕ КОД!! !
Читать невозможно.
Первый проход внешнего цикла идет нормально, т. к. stol была инициализирована нулем в начале, а на втором проходе перед началом внутреннего ее значение равно восьми.
После этого она увеличивается и никогда восьми равна уже не станет.
Товарищ Ishido Uruyu предложил типично индусское решение. Зависать программа перестанет, но работать все равно не будет.
И два совета на будущее.
1. В данной ситуации логичнее использовать цикл FOR:
for str := low(mas) to high(mas) do
for stol := low(mas[str]) to high(mas[str]) do
begin
// пишете здесь Ваши "ифы"
end;
2. ФОРМАТИРУЙТЕ КОД!! !
Читать невозможно.
stol:=0 должно быть там же, где str:=str+1.
Два цикла один вложен в другой! Почему для внутреннего цикла переменная stol не инициализируется заново нулём?
Она после 1-й итерации внешнего цикла переходя ко 2-й продолжает увеличиваться 9, 10 и т. д. Ох и долго придётся ждать когда она опять станет равной 8 :)
Она после 1-й итерации внешнего цикла переходя ко 2-й продолжает увеличиваться 9, 10 и т. д. Ох и долго придётся ждать когда она опять станет равной 8 :)
дебагером пользоваться не пробывали?
попробуйте так:
procedure TForm1.Button1Click(Sender: TObject);
var
Mas:array [1..8,1..8] of byte;str,stol:byte;
begin
str:=0;stol:=0;
Repeat
begin str:=str+1;
Repeat begin stol:=stol+1; if odd(str+stol) and (str<4) then Mas[str,stol]:=1
else Mas[str,stol]:=0;
if odd(str+stol) and (str>5) then Mas[str,stol]:=2;
end until stol>=8;
end;
until str>=8;
end;
если зависнет, пишите на почту
procedure TForm1.Button1Click(Sender: TObject);
var
Mas:array [1..8,1..8] of byte;str,stol:byte;
begin
str:=0;stol:=0;
Repeat
begin str:=str+1;
Repeat begin stol:=stol+1; if odd(str+stol) and (str<4) then Mas[str,stol]:=1
else Mas[str,stol]:=0;
if odd(str+stol) and (str>5) then Mas[str,stol]:=2;
end until stol>=8;
end;
until str>=8;
end;
если зависнет, пишите на почту
Nail Heyderov
То, что Вы предлагаете, называется "Лечить гангрену обзеболиванием"!
внешний цикл: увеличивать переменную пока она =8????может все таки НЕ РАВНА?
нескончаемый цикл
Похожие вопросы
- Delphi!? Repeat Unitl... бесконечный цикл (вся прога зависает)?
- С# , вопрос о выполнении цикла и массивах.
- C++, как сделать задержку выполнения цикла, например на 5 сек.
- Delphi, цикл
- Рекурсия поиск на Delphi в цикле WHILE - исправьте код ?
- Согласны с этим - Глубинные причины ненависти к Delphi/Pascal ?
- [ delphi] почему виснет Form вовремя выполнения задач в другом потоке?
- Delphi:Прочитал, что если при динамическом создании компонента если указать Name объекта, то в последующем можно ->
- Как в Delphi сделать справку?
- Помогите найти ошибку Delphi легкая программка