2014-05-14 2 views
0
for {set i 0} {$i < 5} {incr i} { 
    puts "I inside first loop: $i" 
} 

Можно ли увеличить i на .5 вместо 1?Как увеличивать переменную на 2 при использовании для цикла?

Теперь приведенный выше код обеспечивает ниже выхода:

  • я внутри первого цикла: 0
  • я внутри первого цикла: 1
  • я внутри первого цикла: 2
  • я внутри первого цикла : 3
  • я внутри первого цикла: 4

, но мне нужно что-то как это:

  • I внутри первого цикла: 0
  • I внутри первого цикла: 0,5
  • I внутри первого цикла: 1

... так далее

ответ

3

По по умолчанию, incr увеличивается на единицу, если не указано никакого конкретного номера.

incr i 2 

увеличит i по 2 на каждой итерации.

incr i -1 

будет уменьшаться i по 1 на каждой итерации.

Таким образом, вы можете изменить число, чтобы быть тем, что вам нужно.

Единственная проблема заключается в том, что вы можете увеличивать число на целое число. Таким образом, вам придется использовать что-то еще для 0,5. Вы можете использовать expr?

for {set i 0} {$i < 5} {set i [expr {$i+0.5}]} { 
    puts "I inside first loop: $i" 
} 

EDIT: На самом деле, ответ Донал является лучше, так как он не имеет ошибки округления :)

+0

Как увеличить на 0,5? – user3016320

+0

@ user3016320 Я редактировал это в :) – Jerry

+0

Спасибо большое .. Его работающий штраф – user3016320

3

команда на Tcl incr обрабатывает только целые значения. Рекомендуемый способом получения значения цикла, что шаги по некоторому дробному значению является использование счетчика целого числа петель, а затем вычислить дробное значение из него:

for {set i_int 0} {$i_int < 5} {incr i_int} { 
    set i [expr {$i_int * 0.5}] 
    puts "I inside first loop: $i" 
} 

Это важно, когда дробный шаг не является простым кратным сила двух; в то время как 0.5 могут быть представлены точно в двоичной арифметики с плавающей точкой (это 2 -1 в конце концов) 0.1 не может (так же, как/не могут быть записаны точно в конечное число знаков после запятой).

Смежные вопросы