русский
Germany.ruForen → Архив Досок→ Programmierung

Объйсните как работает этот цикл?

373  
asig коренной житель05.05.13 20:59
asig
05.05.13 20:59 
В школьной задаче задан такой цикл
$i=3.5;$i=$i-0.5;
while ($i>=-1)
{
echo $i--, "
"; $i=$i+0.5;
}
На экран выдаются значения в таком порядке
3
2,5
2
1,5
1 и т.д
Для начало хотелось бы понять как иначе можно записать вот это -> $i-- равно ли это этому -> $i=$i-1 ?
В книге есть такое , что $i-=0,5 равнозначно $i=i-0,5
и $i++ равнозначно $i=$i+1
Вот я и подумала, что $i-- равнозначно этому -> $i=$i-1 , но что-то подсказывает, что неправильно , так как на экран выдается первая цифра 3
#1 
Murr патриот05.05.13 21:17
Murr
NEW 05.05.13 21:17 
in Antwort asig 05.05.13 20:59
$i-- равно ли это этому -> $i=$i-1 ?
и $i++ равнозначно $i=$i+1
------
В данном варианте - да, общем случае - нет.
В книге есть такое , что $i-=0,5 равнозначно $i=i-0,5
-----
Да.
#2 
asig коренной житель05.05.13 21:24
asig
05.05.13 21:24 
in Antwort Murr 05.05.13 21:17
тогда не пойму каким образом программа выдает первую цифру 3
вначале i=3,5, затем i=3,5-0,5=3
затем цикл проверяет больше ли i чем -1 и должен вывести на экран i = 3-1=2, затем i=2+0,5=2,5 , которая опять проверяется в цикле
так почему же выдается первая цифра 3 , а не 2 ???
#3 
Murr патриот05.05.13 21:40
Murr
NEW 05.05.13 21:40 
in Antwort asig 05.05.13 21:24
почему же выдается первая цифра 3 , а не 2 ???
------
Читай внимательно по поводу ++/-- и специально по префиксному и постфиксному применению.
#4 
asig коренной житель05.05.13 22:07
asig
NEW 05.05.13 22:07 
in Antwort Murr 05.05.13 21:40
Единственное что я нашла
$i-- erniedrigt $i am Ende einer Anweisung
--$i - erniedrigt $i am Anfang einer Anweisung
но как это понять ?
Можете пример привести?
#5 
  Posmotrim постоялец05.05.13 22:37
Posmotrim
NEW 05.05.13 22:37 
in Antwort asig 05.05.13 22:07
В ответ на:
но как это понять ?

это два разный оператора : постфиксный и префиксный.
В ответ на:
Можете пример привести?

$i = 100;
echo $i; //выдаcт 100
echo $i++; // выдаст 100, после этого увеличит $i на 1. Тоесть $i станет 101
$i = 100; //сбросим $i
echo $i; //выдаcт 100
echo $++i; //увеличит $i на 1 и выдаст 101.


#6 
asig коренной житель05.05.13 23:28
asig
NEW 05.05.13 23:28 
in Antwort Posmotrim 05.05.13 22:37
Первое значение i всегда будет выдаваться то, которое оно до while имеет? Т.е. в моем случае это 3..... или я чего опять не поняла????
#7 
  Posmotrim постоялец05.05.13 23:32
Posmotrim
NEW 05.05.13 23:32 
in Antwort asig 05.05.13 23:28
так точно. а вот если бы была префиксная форма(--$i), то первое значение выданное было бы 2
#8 
compman знакомое лицо06.05.13 21:30
compman
NEW 06.05.13 21:30 
in Antwort asig 05.05.13 23:28, Zuletzt geändert 06.05.13 21:33 (compman)

Predecrement:
Decrement operator by one before the variable is used. -- Prefix --$a
$a = 3;
echo --$a; // 2
Postdecrement:
Decrement operand by one after the variable is used. -- Postfix $a--
$a = 3;
echo $a--; // 3


#9 
Besser посетитель10.05.13 00:59
Besser
NEW 10.05.13 00:59 
in Antwort compman 06.05.13 21:30
Хорошо это знать, но в принципе внутренние присвоения это зло. Так что лучше этого не знать :)
#10