FreeBasic
Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.

цыкл for ... next

Участников: 2

Перейти вниз

цыкл for ... next Empty цыкл for ... next

Сообщение  Eric-S Ср Авг 19, 2009 11:08 am

Делаем цикл или повторяем инструкцию определённое число раз.

конструкция for ./. next обеспечивает циклический повтор инструкций.

Код:

' переменная цыкла
dim i as integer

' начинаем цикл
for i = 1 to 3

' инструкции внутри цикла
print "xxx"

' завершаем цикл
next

Выполнит инструкцию
Код:

print "xxx"
Ровно три раза.

Код:

for {переменная цикла} = {начальное значение} to {конечное значение}
...
блок инструкций
...
next

Переменная цикла используеться для счёта от начального до конечного значения.

При входе в цикл, переменной цикла присваиваеться начальное значение.

После выполняеться блок инструкций.

Когда выполнение доходит до оператора next.
переменная увеличиваеться на единицу, Выполняеться проверка, если переменная цикла небольше конечного значения,блок инструкций повторяеться ещё раз.

Если же переменная цикла больше конечного значения, то цикл завершаеться и выполняеться инструкция следующая после next.

Код:

' переменная цыкла
dim i as integer
print "begin"

' цикл, считаем i от 1 до 3
for i = 1 to 3

' напечатаем значение
print i

next

' цикл завершон
print "end"

' посмотрим что содержит переменная цикла
print i

Эта програма выведет

begin
1
2
3
end
4

Возможно изменить шаг цикла. По умолчанию он равен 1, но с помощью ключевого слова step можно задать значение на которое будет увеличиваться переменная цикла.

Код:

' переменная цыкла
dim i as integer

' счёт для i от 1 до 7 с шагом в 3
for i = 1 to 7 step 3
print i
next

Эта програма выведет


1
4
7

Можно сделать и обратный отсчёт

Код:

dim i as integer

' счёт для i от 3 до 1 с обратным шагом на 1
for i = 3 to 1 step -1
print i
next

Эта програма выведет


3
2
1


Цикл можно прервать с помощью инструкции exit for.

Код:

' переменная цыкла
dim i as integer
for i = 1 to 9
if i * i = 25 then
exit for
end if
print i
next

Выведет


1
2
3
4

Использовать принудительный выход из цикла, оператором exit for не рекомендуеться, так как это затрудняет понимание кода.

Подумайте, возможно есть смысл использовать не цыкл а петлю где можно указать условие выхода?




Переменную цикла можно не только читать, но и изменять.
Код:

' переменная цыкла
dim i as integer

' считаем от 1 до 7
for i = 1 to 7

' пропускаем значения 3 и 4
if i = 3 then
  i = 5
end if

print i
next

Эта программа выведет

1
2
5
6
7


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

Подумайте, возможно есть смысл использовать не цыкл а петлю где можно указать условие выхода?


Оператор continue for пропускает оставшиеся инструкции. Он сразу делает следующий шаг, переходя на следующий заход.

Код:

' переменная цыкла
dim i as single = 0

' цыкл
for i = 1 to 20

if (int(i/2) +0.5)*2 = i then
  ' если нечётное число
  print "нечётное "; i
else
  ' переходим к началу петли
  continue for
end if

print "ok"
next

Программа выведет

нечётное 1
ok
нечётное 3
ok
нечётное 5
ok
нечётное 7
ok
нечётное 9
ok
нечётное 11
ok
нечётное 13
ok
нечётное 15
ok
нечётное 17
ok
нечётное 19
ok


Последний раз редактировалось: Eric-S (Вт Авг 25, 2009 7:00 pm), всего редактировалось 2 раз(а)

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 40
Откуда : Россия, Санкт-Петербург

http://eric50.narod.ru

Вернуться к началу Перейти вниз

цыкл for ... next Empty Re: цыкл for ... next

Сообщение  electrik Ср Авг 19, 2009 7:53 pm

eric пишет

Когда выполнение доходит до оператора next.
Выполняеться проверка, если переменная цикла не равна конечному значению, то переменная увеличиваеться на единицу, а блок инструкций повторяеться ещё раз.

правильней будет так:

Когда выполнение доходит до оператора next.
переменная увеличиваеться на единицу, Выполняеться проверка, если переменная цикла небольше конечного значения,блок инструкций повторяеться ещё раз.

посмотрим следующий код:

Код:

dim i as integer
for i=1 to 3
print i
next
print i
sleep

результат:
1
2
3
4

причем это не глюк FreeBasic. только что достал старый запыленный qbasic1.0rus, там такой же результат.

electrik

Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург

Вернуться к началу Перейти вниз

цыкл for ... next Empty Re: цыкл for ... next

Сообщение  Eric-S Чт Авг 20, 2009 12:22 am

Благодарю за поправку. Изменил главу.

Подобные тонкости в некоторых случаях могут быть критичны.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 40
Откуда : Россия, Санкт-Петербург

http://eric50.narod.ru

Вернуться к началу Перейти вниз

Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения