Hogyan lehet két változó értékét megcserélni új változó bevezetése nélkül? (rejtvény)
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
""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:
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.
#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:
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
#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ő.
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.
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!