Kezdőoldal » Számítástechnika » Programozás » C-ben hogy kell elérni, hogy...

C-ben hogy kell elérni, hogy ne kelljen segédszám?

Figyelt kérdés
Például ha bekérek 20 számot, és sorrendbe akarom rendezni, akkor három helyet kell lefoglalni, egyet az 1. számnak, a másikat a vizsgálandó számnak, és a harmadikat a segédszámnak. Hogy lehet elérni hogy csak 2 hely kelljen?
2009. szept. 29. 19:18
 1/10 anonim ***** válasza:
Tudtommal nem lehet, egyszerre két számot nem tud egymás helyére írni. Ha spórolsz a változókkal, akkor pl. csinálhatsz dinamikus változókat, amelyekbe átmenetileg tárolod, aztán a változó helyét a memóriában felszabadíthatod.
2009. szept. 29. 19:27
Hasznos számodra ez a válasz?
 2/10 A kérdező kommentje:
Nekem azt mondták hogy lehet, de sehogy nem tudok rájönni hogy hogyan.
2009. szept. 29. 19:52
 3/10 anonim ***** válasza:
elvileg nem tudod megoldani, pythonban van olyan egyenlőség, h a két értékel felcseréli, de c-ben ez nem megy.. max van vmi függvény amit meg lehet hívni és megcsinálja, de az is tuti, h változóval dolgozik...vagy vmi spec proci utasítással..
2009. szept. 29. 20:06
Hasznos számodra ez a válasz?
 4/10 anonim válasza:

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

2009. szept. 30. 15:42
Hasznos számodra ez a válasz?
 5/10 anonim válasza:

természetesen az utolsó sor így néz ki:

a = a - b; // a = 8, b = 5

2009. szept. 30. 15:43
Hasznos számodra ez a válasz?
 6/10 A kérdező kommentje:
Ezt nem egészen értem, nem értettél félre? Úgy gondoltam, hogy ha két változót kell kicserélni, akkor elég legyen két lefoglalt hely. (mert alapból ugye úgy van, hogy az 1. számnak és a 2. számnak kell egy-egy lefoglalt hely, és ha ki akarja cserélni a számokat a program, akkor kell egy harmadik hely, ahova ideiglenesen áthelyezi az egyik számot, hogy ne vesszen el a felülírással.
2009. szept. 30. 19:55
 7/10 anonim ***** válasza:

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...

2009. okt. 1. 11:24
Hasznos számodra ez a válasz?
 8/10 anonim válasza:

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 :)

2009. okt. 16. 16:11
Hasznos számodra ez a válasz?
 9/10 anonim ***** válasza:

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.

2009. okt. 24. 02:05
Hasznos számodra ez a válasz?
 10/10 anonim ***** válasza:

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?

2009. nov. 9. 17:56
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!