Předmět Autor Datum
Jo, pěkná hádanka :-).
marekdrtic 08.03.2011 13:13
marekdrtic
Chachá, dokážu :-D
Wikan 08.03.2011 13:32
Wikan
toto sú situácie, kedy si hovorím že by som sa mal venovať iným veciam než počítačom :(
deadhead 08.03.2011 14:01
deadhead
Až budeš řešit tisíci řádkové kódy, tak tě ty hádanky přejdou
Lorien 08.03.2011 15:17
Lorien
A ty jsi spolu-IP-majitel/ka nebo Helenka MaSová? :-D
marekdrtic 08.03.2011 15:23
marekdrtic
Co to? ::)
MaSo 08.03.2011 15:27
MaSo
No že z IP adresy 212.47.22.xxx je cca. 5 stránek příspěvků od tebe, tak nevim.
marekdrtic 08.03.2011 15:34
marekdrtic
Stejný provider, jako máme v robotě. Doufám, že to není nějaký kolega...:-D EDIT: Ta IP sedí úplně?
MaSo 08.03.2011 15:35
MaSo
Jo, sedí přesně, jen jsem ji nechtěl vytrubovat celou do světa.
marekdrtic 08.03.2011 15:38
marekdrtic
Ehm. Ty mě snad znáš? Já se programováním živím. A ty?
MaSo 08.03.2011 15:25
MaSo
::) Small Basic to asi nebude. Něchť a aj ať žije přehlednost kódu. ;-)
Tomix 08.03.2011 15:34
Tomix
V akom jazyku? Ak sa nemylim, C a C++ nema v tomto pripade presne definovany vysledok.
x22 08.03.2011 15:59
x22
Bude rozřešení?
Tomix nologin 08.03.2011 18:25
Tomix nologin
keby niekto napisal taky kod v realite do realneho SW tak by som ho poslal rovno na psychiatricke vy…
MM.. 08.03.2011 18:26
MM..
kedze sa pracuje s jednou premennou x tak je to jedno, kedze sa nakoniec vykonaju vsetky operacie na…
wam_Spider007 09.03.2011 16:57
wam_Spider007
Nebolo, to je to isté...:-)
MaSo 09.03.2011 17:01
MaSo
jj, sekol som sa...a = 0; i ked aj tak to nemusi byt to iste ak sa to posledne x++ vykona az po prir…
wam_Spider007 09.03.2011 17:02
wam_Spider007
Nemas pravdu, neni to jedno pretoze ++x znamena ze sa to ma urobit pred vsetkymi ostatnymi operaciam…
MM.. 09.03.2011 20:23
MM..
Ked urobim x=10; y= ++x; tak y by malo byt 11. x=10; y= x++; tak y by malo byt 10. v tomto sa zhod…
wam_Spider007 09.03.2011 22:18
wam_Spider007
Dal som tam smajl :) Ano mozne spravne vysledky su 32, 33, a 34. Cokolvek z toho compiler urobi je s… poslední
MM.. 09.03.2011 23:41
MM..
...jednoznacny vysledok by to davalo lebn vtedy keby bolo niekde jasne zadefinovane ze premenne vstu…
MM.. 09.03.2011 20:51
MM..
Java 1.6.0_22, Eclipse 3.6 package cz.technecium; public class Test { public static void main(Strin…
MaSo 09.03.2011 16:46
MaSo
PHP 5.3.0 <?php $a = 10; $a += ++$a + $a++; echo $a; ?> vysledek je 34 :-D
gd 09.03.2011 18:26
gd
To říká php, ne tvá hlava :) já měl za to, že ++$a bude 11 (páč $a je zatím 10 a inkrementuje se o…
diag 09.03.2011 18:45
diag
C# int x = 10; x += ++x + x++; // x = 32 x = 10; x = x + ++x + x++; // x = 32 x = 10; x = ++x + x++…
Wikan 09.03.2011 18:54
Wikan

toto sú situácie, kedy si hovorím že by som sa mal venovať iným veciam než počítačom :(

keby niekto napisal taky kod v realite do realneho SW tak by som ho poslal rovno na psychiatricke vysetrenie.
Vysledok asi moze zavisiet od compilera, myslim ale ze to bude 34 (alebo 33 ak to compiler parsuje zprava), ale moze byt iny je to dost nejednoznacny kod.

kedze sa pracuje s jednou premennou x tak je to jedno, kedze sa nakoniec vykonaju vsetky operacie nad touto premennou. scitaju su x+x a potom sa to este pripocita k povodnemu x a nakoniec 2x sa urobi inkrementacia o 1. Je jedno v akom poradi. Vysledok je vzdy rovnaky 32.
Inak keby si tam zakomponoval inu premennu, tak by to bolo tazsie:

a=10;
x=10;
a += ++x + x++;

a=??

Nemas pravdu, neni to jedno pretoze ++x znamena ze sa to ma urobit pred vsetkymi ostatnymi operaciami a teda vsetky ostatne operacie by mali pouzit 11 a nie 10 (takze 11+=11+11+1=34 alebo 10+=11+11+1=33). A otazka je jak to compiler pochopi. Evidentne kazdy kompiler to pochopi inac, preto by take nieco v realite pouzil len magor. P.S. a compiler ktory da v tomto pripade vysledok 32 povazujem ja osobne za zly compiler, ptz nerespektuje ++x :D)

Ked urobim
x=10;
y= ++x;
tak y by malo byt 11.

x=10;
y= x++;
tak y by malo byt 10.

Aspon tak to chapem ja, mozno to je zadefinovane v ANSI inac ale to by potom operacia ++x nemala ziaden zmysel keby to bolo stejne jak x++ a vobec by ju nemuseli definovat. A ze ++x neni to iste co x++ je kazdemu snad jasne.

Ked urobim
x=10;
y= ++x;
tak y by malo byt 11.

x=10;
y= x++;
tak y by malo byt 10.

v tomto sa zhodneme, ale nezhodnem sa asi v tom, ze kompilator, ktory da vysledok 32 je zly. Zle je len pouzitie, kedze takymto nejednoznacnym zapisom by sa mal kazdy vyhnut.

...jednoznacny vysledok by to davalo lebn vtedy keby bolo niekde jasne zadefinovane ze premenne vstupujuce do vzorca sa musia povinne bufferovat, t.j.
x += ++x + x++
by potom vyzeralo takto
buffer = x
x = x+1 //toto je ++x
x = buffer + (buffer+1) + buffer
x = x+1 //toto je x++

potom by vysledok bol jednoznacne definovany, presne 32. Ale ci to je takto v ANSI zadefinovane to zhlavy neviem, a pochybujem o tom ze to tam je (nedavalo by to moc zmysel ptz by to ciastocne negovalo efekt ++x)

Java 1.6.0_22, Eclipse 3.6

package cz.technecium;

public class Test {
	public static void main(String[] args) {
		int x = 10;
		x += ++x + x++;
		System.out.println(x);
	}
}

Vypisuje 32.

To říká php, ne tvá hlava :)
já měl za to, že

++$a bude 11 (páč $a je zatím 10 a inkrementuje se o jedno)
+ $a++ (zde se $a++ [tedy momentálně 11] inkrementuje zase o jedno, takže je 12)
ve výsledku tedy $a += 11 + 12 , což znamená 10 += 23.. takže 33

Píšu to sem, aby mi kdyžtak někdo osvětlil, kde v mém uvažování je chyba ;)

PS:: už to vidím.. jelikož se inkrementovalo $a dvakrát..takže 34 je správně a php má bod .)

Zpět do poradny Odpovědět na původní otázku Nahoru