• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

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

AntonKos

Здравствуйте.Не подскажите как поступать,если в цикле 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);

В данном случае не всегда застревает,но по мере увеличения размерности матрицы происходит зацикливание.Можно ли как то вернуться на шаг назад,а именно начать рандомить элементы матрицы сначала?
 
E

European

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

AntonKos

Условие верно.
Когда остаются последние элементы в строчке,то нет дальнейшего решения.Может как то с помощью программного прерывания мона перезапустить последнее дейстивие.
 
E

European

Как вы не поймете, что пока условие верно, цикл выполняется. Не надо придумывать ничего нового, просто поменяйте условие

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!