C-ben hogy kell elérni, hogy ne kelljen segédszám?
A probléma megoldható: (persze nem csak C-ben)
a = 5;
b = 8;
a = a + b; // a = 13, b = 8
b = a - b; // a = 13, b = 5
a = a - b; // b = 8, b = 5
természetesen az utolsó sor így néz ki:
a = a - b; // a = 8, b = 5
ohh...eszembe jutott, h mi kell neked... stacket kellene használni...
push parancs betolja a stackbe a cuccot, és arra lehet pakolni még., de olyan mint egy gödör, amit utoljára tettél bele az jön ki először (pop).
ezeket nézd át...
de amit az előttem író írt az is jó, csak sok fölösleges művelet, de tényleg nem használ fölösleges memóriát...
kinek mi a fontos...
Hogy egy kicsit védjem az álláspontomat :)
Ha megnézed csak 2 változót használtam (a, b)
A kommentek és a kezdő érték adás csak a jobb érthetőség kedvéért volt.
Ha végre hajtod az alábbi műveleteket a két változó (a, b) értéke felcserélődik (ezt akartad nem?):
a = a + b;
b = a - b;
a = a - b;
Mondjuk ha már a stack szóbakerült:
Én csak 3 műveletet csinálok, a stack-be íráshoz 4 kell (2 be, 2 ki), bár nem tudom melyik a gyorsabb. Ráadásul én fizikailag nem használok a változókon kívűl memóriát, a stack meg ugye igen (az más kérdés, hogy honnan).
A lényeg, hogy ha memóriát akarsz megtakarítani, akkor processor idővel fizetsz érte :)
Tegyük hozzá, hogy a stack-es változat *sokkal* jobb,
mert:
Példa 1:
a,b:word , a:=65000 , b:27000
Ekkor az 'ügyeskedős' változat elhasal.
Példa 2:
a,b:string
Ekkor az 'ügyeskedős' változat elhasal.
Az összeadós változat szellemes, de lényegét tekintve teljesen használhatatlan.
Szerintem ide az ügyeskedős változat kellett.
Ez ilyen elgondolkodtatós kérdésnek tűnik, mint a hogy lehet C ben megírni a hello world öt ; nélkül?
Na ezt tudja valaki?
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!