Kezdőoldal » Számítástechnika » Programozás » Hogyan lehet két változó...

Hogyan lehet két változó értékét megcserélni új változó bevezetése nélkül? (rejtvény)

Figyelt kérdés
2016. dec. 3. 09:54
❮❮ 1 2 3 4 5 6 7 8 9 10 ... ❯❯
 11/326 anonim ***** válasza:
100%

Két okból:


1. A változóknak van egy pontosságuk, nagy számoknál túlcsordulás miatt nem a szorzás valós eredmény kerül be a változóba: pl. ha 1 byte és pozitív egészről van szó, 17*16 = 272 lenne, de 1 byton ez: 16, ezután már hiába osztanál, nem kapnád vissza a 17-et


2. Ha az egyik változó értéke 0, akkor a szorzás eredménye is 0, abból pedig osztással nem lehet visszakapni más értéket

2016. dec. 3. 12:57
Hasznos számodra ez a válasz?
 12/326 A kérdező kommentje:
A második jogos, de az első az szerintem nem jogos mert az nem matematikai hanem csak hardverkorlát amit szerintem szoftveresen meg lehet kerülni. Olyan ez mintha azt mondanád, egy kézen csak ötig lehet elszámolni mert annyi ujjunk van. pedig szoftveresen ezt a problémát is meg lehet oldani.
2016. dec. 3. 13:02
 13/326 anonim ***** válasza:
100%

""Ezek közül egyik sem parancs."

Hanem?"

Ha nagyon szigorúak akatrunk lenni, értékadó utasítás, de szerintem a 8 bites mikrogépes (ZX81, Spektrum, C64,...) időszakból maradt "parancs" is helytálló (bár azt mostanság a paracssoros felületeken beírt dolgokra mondják).


"és ezek a parancsok hogy oldják meg?"

A Pythonos

a,b = b,a

létrehoz egy "tuple"-t (ez egyféle nem módosítható tömb), elhelyezi benne a változók értékeit fordított sorrendben (tehát a tuple 0. eleme a b értéke, az 1. eleme az a értéke), majd kiolvassa őket az eredeti változókba (az a változó a tuple 0. eleme, a b változó a tuple 1. eleme).


Szóval a Pythonos megoldás használ segédváltozót, de egy két lépéssel gyorsabb:

[link]

2016. dec. 3. 13:10
Hasznos számodra ez a válasz?
 14/326 A kérdező kommentje:

Akkor a pytonos megoldást sajnálom, de nem tudom elfogadni. A xoros megoldással meg az a gondom, hogy csak az lett leírva, hogy lehet, de az nem, hogy hogyan.


A parancs-utasítás kérdés szerintem halmazelméleti kérdés.

szerintem az utasítás az nem azonnal végrehajtandó parancs, tehát szintén parancs.

késleltetett parancsnak is nevezhetjük.

tehát míg a parancs az egyetlen azonnal végrehajtandó elemből áll, az utasítás az egymás mögött sorakozó parancsok egyike. illetve minden egymás mögött sorakozó parancs egyben utasítás is mert nem azonnal hajtódik végre hanem csak akkor ha rákerül a vezérlés.

kivétel ezalól a program első utasítása ami annak ellenére, hogy azonnal végrehajtódik, egyben utasítás is, a mögötte álló többi utasítás miatt.


az értékadás így - szerintem - szintén parancs, és ha egy program részeként szerepel akkor egyben utasítás is.

de javíts ki ha tévedek.

2016. dec. 3. 13:17
 15/326 anonim ***** válasza:
100%

#11: Igaz, csak azért írtam a szorzást, mert - megfelelő elővigyázatosság mellett - működik.


#14: A XOR-os cseréről:

[link]

[link]


Szóval:

x = 10; //Binárisan: 1010

y = 3; //Binárisan: 0011

x = x ^ y = 10 ^ 3 = 9; //Binárisan: 1010 ^ 0011 = 1001

y = x ^ y = 9 ^ 3 = 10; //Binárisan: 1001 ^ 0011 = 1010

x = x ^ y = 9 ^ 10 = 3; //Binárisan: 1001 ^ 1010 = 0011

2016. dec. 3. 13:41
Hasznos számodra ez a válasz?
 16/326 anonim ***** válasza:
100%

#12: Nem matematikai kérdést tettél fel, hanem programozóit.

A példád pedig azért rossz, mert te adtad meg feltételnek, hogy csak azt a két változót lehet használni, aminek a mérete adott. Hogyan oldanád meg szoftveresen, ha nem vezethetsz be új változókat? Sehogy.


Ha pedig a pythonos megoldást nézzük, akkor az is helyes, hiszen nincs több változó. A változó az, amire tudsz hivatkozni a kódból. Abban a megoldásban nincs más változó, függetlenül attól, hogy mi folyik a háttérben.

Vagy ennyi erővel az xor-os vagy összeadásos-kivonásos megoldást sem kellene elfogadnod, mert a logikád szerint a cpu hogy megvalósítsa az összeadást, legalább az egyik változó értékét be fogja tölteni az egyik regiszterébe, ami szintén változóként értelmezhető.

2016. dec. 3. 14:30
Hasznos számodra ez a válasz?
 17/326 A kérdező kommentje:

a programozás rovatban tettem fel, de nem kizárólagosan az összes hardveren futtatható programozási feladatot.

már csak azért se mert a softwerek jelentős része nem futtatható az összes létező hardveren.

A változó nem csak programozási hanem matematikai kifejezés is.

Az hogy egyes nyelveken vannak korlátok, az csakis a nyelv készítőjén múlik. meg lehet oldani programnyelben, hogy ne legyen ilyen korlát. nyilván ha olyan programnyelvet használunk, amiben van korlát akkor lesz korlát.

A gépben levő változóra pedig minden esetben lehet hivatkozni kivéve ha nem tudunk róla a tárolási módjáról, a nevéről eleget. ez azonban már szubjektív a kérdéses egyén tudásától függő kérdés.

2016. dec. 3. 14:44
 18/326 anonim ***** válasza:
100%
Valaki lőjön fejbe!
2016. dec. 3. 15:22
Hasznos számodra ez a válasz?
 19/326 A kérdező kommentje:
hát ha ennél komolyabb ellenérved nincs akkor a viszont látásra. nem kell olvasni ezt a kérdést.
2016. dec. 3. 15:32
 20/326 anonim ***** válasza:
100%
Csak egy példa: Tudod mekkora tárterület kell ahhoz, hogy eltárold lebegőpontos számábrázolásban a 0,3 szám pontos értékét? Végtelen nagy. Fixpontos számábrázolásban persze el tudjuk tárulni egyszerűen, elméleti szinten tetszőleges hosszú számokat, de ez a teljesítménynek alaposan a rovására menne. És ha beköpünk egy olyat, hogy 1/3, akkor az is megy a kukába. Mi legyen akkor? Használjunk szimbólumalapú számtípust, ami konkrét érték helyett helyettesítő szimbólumokat használ, és csak a végeredmény számolásakor helyettesíti be a közelítő értékét? Ez néhány esetben esetleg segíthet, de még lassabb számolást érünk el, hovatovább, nagyon sok esetben itt sem ússzuk meg a közelítőérték használatát. Sajnálom, de nincs mindennek "szoftveres" megkerülése. Számok gépi ábrázolása hibával rendelkezik, mindig is azzal fog rendelkezni. Ezt nem lehet megkerülni.
2016. dec. 3. 16:20
Hasznos számodra ez a válasz?
❮❮ 1 2 3 4 5 6 7 8 9 10 ... ❯❯

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, 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!