Зацикливание

  • Автор темы AntonKos
  • Дата начала
A

AntonKos

Гость
#1
Здравствуйте.Не подскажите как поступать,если в цикле While происходит зацикливание, т.е. условия получаются выбраны так что дальнейшего продолжения не может быть.

отрывок кода :
Код:
  for (k=1;k<10;k++)
{
A[1][k]=random(10);
while (A[1][k]==0||A[1][k]==A[1][k-1]||A[1][k]==A[1][k-2]||A[1][k]==A[1][k-3]||A[1][k]==A[1][k-4]||A[1][k]==A[1][k-5]||A[1][k]==A[1][k-6]||A[1][k]==A[1][k-7]||A[1][k]==A[1][k-8])
{
A[1][k]=random(10);
}
gotoxy(X+delX,Y+delY);
printf("%d",A[1][k]);

X=X+2;
gotoxy(X+delX,Y+delY);
}
X=1;
Y=Y+2;
gotoxy(X+delY,Y+delY);

for (k=1;k<10;k++)
{
A[2][k]=random(10);

if (k<4)
{
while (A[2][k]==0||A[2][k]==A[1][1]||A[2][k]==A[1][2]||A[2][k]==A[1][3]||A[2][k]==A[2][k-1]||A[2][k]==A[2][k-2]||A[2][k]==A[2][k-3]||A[2][k]==A[2][k-4]||A[2][k]==A[2][k-5]||A[2][k]==A[2][k-6]||A[2][k]==A[2][k-7]||A[2][k]==A[2][k-8])
{
A[2][k]=random(10);
}
}

if (k>=4&&k<7)
{
while (A[2][k]==0||A[2][k]==A[1][4]||A[2][k]==A[1][5]||A[2][k]==A[1][6]||A[2][k]==A[2][k-1]||A[2][k]==A[2][k-2]||A[2][k]==A[2][k-3]||A[2][k]==A[2][k-4]||A[2][k]==A[2][k-5]||A[2][k]==A[2][k-6]||A[2][k]==A[2][k-7]||A[2][k]==A[2][k-8])
{
A[2][k]=random(10);
}
}

if (k>=7&&k<10)
{
while (A[2][k]==0||A[2][k]==A[1][7]||A[2][k]==A[1][8]||A[2][k]==A[1][9]||A[2][k]==A[2][k-1]||A[2][k]==A[2][k-2]||A[2][k]==A[2][k-3]||A[2][k]==A[2][k-4]||A[2][k]==A[2][k-5]||A[2][k]==A[2][k-6]||A[2][k]==A[2][k-7]||A[2][k]==A[2][k-8])
{
A[2][k]=random(10);
}
}



gotoxy(X+delX,Y+delY);
printf("%d",A[2][k]);

X=X+2;
gotoxy(X+delX,Y+delY);
}

X=1;
Y=Y+2;
gotoxy(X+delY,Y+delY);
В данном случае не всегда застревает,но по мере увеличения размерности матрицы происходит зацикливание.Можно ли как то вернуться на шаг назад,а именно начать рандомить элементы матрицы сначала?
 
04.09.2006
2 566
2
#2
Не подскажите как поступать,если в цикле While происходит зацикливание, т.е. условия получаются выбраны так что дальнейшего продолжения не может быть.
Никак. Как можно поступить, если вы неправильно указываете условие в цикле.
 
A

AntonKos

Гость
#3
Условие верно.
Когда остаются последние элементы в строчке,то нет дальнейшего решения.Может как то с помощью программного прерывания мона перезапустить последнее дейстивие.
 
04.09.2006
2 566
2
#4
Как вы не поймете, что пока условие верно, цикл выполняется. Не надо придумывать ничего нового, просто поменяйте условие

Не можете поменять условие - добавьте действие, аналогичное последней итерации цикла