*facepalm"

Feb 24, 2012 10:52


Вот только я умею в его день рождения разлить на гостей красное вино, а на 23 февраля разбить его любимый бокал...

Такую грацию ещё поискать!

P.S. Я только учусь... Вопрос к знатокам: в чем разница между i++ и i+1? Почему n=n*(i++) внутри цикла выдает иной результат, чем n=n*(i+1)?..

k = 5;
n = 1;
while (i=1; i < k; i++){
  n = n;
  n = n * (i+1);
  if (i ( Read more... )

Leave a comment

Comments 4

toropyggka February 24 2012, 08:35:11 UTC
Насколько помню, там вся тоноксть в том моменте, когда компилятор опрашивает переменную.
В одном случае он получит ее значение до операции ++
В другом - после.

Но нужно свериться с документацией.

Разлить на гостей вино - а чтобы знали! Льет, значит, любит!

Reply


ultranomad February 24 2012, 10:29:33 UTC
В первом случае значение самой переменной i остается без изменений, зато значение этого выражения равно i+1; во втором случае само i увеличивается на 1, но значение выражения равно "старому" i. Иными словами, n = n*(i++) эквивалентно { n = n*i; i = i+1 }. Есть еще третий вариант, ++i: n = n*(++i) эквивалентно { i = i+1; n = n*i } (т.е. сначала увеличивается само i, а потом вычисляется выражение).

Reply


dur_randir February 24 2012, 10:32:48 UTC
i++ - это "прочитать значение, вернуть его, потом увеличить на 1"
++i - "увеличить значение и вернуть уже новое"

Т.е. такой же результат, что и n*(i+1), выдаст ++i*n. Но это не эквивалентные выражения, т.к. оператор ++ меняет свой операнд, и у тебя поедет счётчик цикла. Если использовать именно его, то надо делать как-то так:

n=1;
for (i=1; i< 5; ){
n *= i++;
}
alert(n);

PS: сравнение - это оператор "==", не "=".

Reply


eugene_ivanov March 7 2012, 16:52:02 UTC
такие вещи запутывают n = n * (i+1);

лучше писать развёрнуто

i = i + 1;
n = n * i;

Reply


Leave a comment

Up