Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

interesantna ideja (kako kome ) mada verovatno nema resenja

[es] :: C/C++ programiranje :: interesantna ideja (kako kome ) mada verovatno nema resenja

Strane: 1 2

[ Pregleda: 6919 | Odgovora: 26 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

EArthquake

Član broj: 20684
Poruke: 884
*.dialup.neobee.net.



+67 Profil

icon interesantna ideja (kako kome ) mada verovatno nema resenja02.02.2005. u 18:07 - pre 192 meseci


moze li se u c-u zameniti vrednost dve varijable bez uvodjenja trece


dakle da se uradi sledece samo bez temp varijable

int a
int b
int temp

main()
{
a = 6;
b = 7;

printf("Vrednost a je %d ",a);
printf("Vrednost b je %d ",b);
temp = b;
b = a;
a = temp;
printf("Vrednost posle zamene a je %d ",a);
printf("Vrednost posle zamene b je %d ",b);
}



izvinjavam se ako ima gresaka u kodu nenaviknut sam na tastaturu koju trenutno kotristim pa mi se mozda omakla neka a mrzi me da isravljam

ovo mitanje me cisto zanima ima li nacina ne treba mi neto posebno

iako ja licno sumnjam da ima
 
Odgovor na temu

_alokiN_
strasbourg

Član broj: 22325
Poruke: 56
*.fbx.proxad.net.

Sajt: www.nadjidom.com


Profil

icon Re: interesantna ideja (kako kome ) mada verovatno nema resenja02.02.2005. u 18:17 - pre 192 meseci
Ima, znam da sam jednom bio naleteo na kod koji to radi :)) Ne znam vise tacno kako, ali je radjeno preko operacija sa bitovima (XOR). Ako slucajno nadjem, postovacu..
 
Odgovor na temu

Sundance

Član broj: 7510
Poruke: 2559
*.sava.sczg.hr.



Profil

icon Re: interesantna ideja (kako kome ) mada verovatno nema resenja02.02.2005. u 18:19 - pre 192 meseci
a = a ^ b
b = a ^ b [ = a ^ b ^ b = a ]
a = a ^ b [ = a ^ a ^ b = b ]

ili ljepše u asembleru:

xor eax, ebx
xor ebx, eax
xor eax, ebx

Mislim da ima verzija i sa + i - :>

[Ovu poruku je menjao Sundance dana 02.02.2005. u 19:20 GMT+1]
 
Odgovor na temu

EArthquake

Član broj: 20684
Poruke: 884
*.dialup.neobee.net.



+67 Profil

icon Re: interesantna ideja (kako kome ) mada verovatno nema resenja02.02.2005. u 18:20 - pre 192 meseci


to mi palo na pamet dok sam putovao busom u novi sad (4 sata traje voznja)
i dok sam razmisljao i obnavljano upravljanje memorijom u c-u

pa se moj stedljivi duh setio kako jos jedna varijabla zauzima vise prostora :))))))
 
Odgovor na temu

3emyh
Vladimir Aleksić
Zemun

Član broj: 6755
Poruke: 48
*.yubc.net.

Sajt: tesla.rcub.bg.ac.yu/~valt..


+2 Profil

icon Re: interesantna ideja (kako kome ) mada verovatno nema resenja02.02.2005. u 18:23 - pre 192 meseci
a=a+b;
b=a-b; /*Sad je b=a*/
a=a-b; /*a=b*/

Bilo nekad u Racunarima u Dejanovim pitalicama
 
Odgovor na temu

EArthquake

Član broj: 20684
Poruke: 884
*.dialup.neobee.net.



+67 Profil

icon Re: interesantna ideja (kako kome ) mada verovatno nema resenja02.02.2005. u 18:24 - pre 192 meseci
eto kako ustedeti 2 bajta :))))


korisno nema sta
 
Odgovor na temu

Sundance

Član broj: 7510
Poruke: 2559
*.sava.sczg.hr.



Profil

icon Re: interesantna ideja (kako kome ) mada verovatno nema resenja02.02.2005. u 18:25 - pre 192 meseci
Evo i sa + i -:
a = a - b
b = a + b [ = a - b + b = a]
a = b - a [ = a - a + b = b]
 
Odgovor na temu

Sundance

Član broj: 7510
Poruke: 2559
*.sava.sczg.hr.



Profil

icon Re: interesantna ideja (kako kome ) mada verovatno nema resenja02.02.2005. u 18:34 - pre 192 meseci
I još malo.. :)

a = a * b
b = a / b [ = a * b / b = a ]
a = a / b = [ = a * b / a = b]

a = a / b
b = a * b [ = a / b * b = a]
a = b / a [ = a / a * b = b]

__asm {
push [x]
push [y]
pop [x]
pop [y]
}


 
Odgovor na temu

yooyo

Član broj: 4891
Poruke: 1101
217.26.66.*



Profil

icon Re: interesantna ideja (kako kome ) mada verovatno nema resenja02.02.2005. u 23:44 - pre 192 meseci
a ^= b ^= a ^= b;

yooyo
 
Odgovor na temu

zvrba
The Lord of Chaos

Član broj: 31716
Poruke: 105
*.fina.hr.



Profil

icon Re: interesantna ideja (kako kome ) mada verovatno nema resenja03.02.2005. u 07:56 - pre 192 meseci
[quote]yooyo:
Code:
a ^= b ^= a ^= b;


Ovo nije ispravan C, tj. izaziva undefined behaviour. U istom izrazu vise puta mijenjas vrijednost varijable bez sequence pointa izmedju.

Ukratko: razni kompajleri mogu generirati razliciti kod koji nece napraviti ono sto bi trebao. Ispravno je sa 3 odvojene naredbe.
 
Odgovor na temu

EArthquake

Član broj: 20684
Poruke: 884
*.dialup.neobee.net.



+67 Profil

icon Re: interesantna ideja (kako kome ) mada verovatno nema resenja03.02.2005. u 10:31 - pre 192 meseci
stvarno mi ne ide u glavu kako mi nisu pale na pamet matematicke operacije


@sundance
dobro nemoj da preterujes vise

sad kad sam video princip....



mnogo sam se iznervirao


svojom nesposobnoscu naranvo
 
Odgovor na temu

Milos Stojanovic
Belgrade

Član broj: 10343
Poruke: 1864
*.nat-pool.bgd.sbb.co.yu.

ICQ: 282954730
Sajt: www.sietf.org


+7 Profil

icon Re: interesantna ideja (kako kome ) mada verovatno nema resenja03.02.2005. u 14:05 - pre 192 meseci
Mislim da je xor ipak najispravniji, jer kod ostalih rešenja može doći do prekoračenja. (mada onom sabiranju i oduzimanju to ne bi trebalo da smeta)
U svakom slučaju xor je najbrži od svih ponuđenih ;)
ex. trooper
Oh goody... it's my Illudium PU-36 Explosive Space Modulator!
Softversko Inženjerstvo
♪♫♪
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
..31.216.81.gus.vf.siwnet.net.

Sajt: dejan.lekic.org


+2 Profil

icon Re: interesantna ideja (kako kome ) mada verovatno nema resenja03.02.2005. u 14:08 - pre 192 meseci
Dobro, posto smo se nahvalili mozemo li poceti malo da kritikujemo ova resenja? Dakle u kakvim situacijama ova resenja rade, a u kakvim ne rade? :)
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
..31.216.81.gus.vf.siwnet.net.

Sajt: dejan.lekic.org


+2 Profil

icon Re: interesantna ideja (kako kome ) mada verovatno nema resenja03.02.2005. u 14:11 - pre 192 meseci
Citat:
ZVRBA: Ovo nije ispravan C, tj. izaziva undefined behaviour. U istom izrazu vise puta mijenjas vrijednost varijable bez sequence pointa izmedju.

Ukratko: razni kompajleri mogu generirati razliciti kod koji nece napraviti ono sto bi trebao. Ispravno je sa 3 odvojene naredbe.

zvrba, svaki C kompajler koji postuje standard bi trebalo bez problema to da kompajlira...
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

yooyo

Član broj: 4891
Poruke: 1101
*.nat-pool.bgd.sbb.co.yu.



Profil

icon Re: interesantna ideja (kako kome ) mada verovatno nema resenja03.02.2005. u 14:38 - pre 192 meseci
Citat:
zvrba:

Ovo nije ispravan C, tj. izaziva undefined behaviour. U istom izrazu vise puta mijenjas vrijednost varijable bez sequence pointa izmedju.

Ukratko: razni kompajleri mogu generirati razliciti kod koji nece napraviti ono sto bi trebao. Ispravno je sa 3 odvojene naredbe.


Cudno... meni je ovo radilo i pod Turbo C-om...

Inace... probao sam gornji primer u MSVC 7.1 i evo rezultata:
Code:

void main (void)
{
 int a = 10, b = 20;
 printf("\n%d %d", a, b);
 a ^= b ^= a ^= b;
 printf("\n%d %d", a, b);
}

ASM izlaz izgleda ovako:

push 20
push 10
call printf

push 10
push 20
call printf



Kompajler je provalio da je u pitanju zamena vrednosti 2 broja i potpuno je izbacio code koji to radi!!!

yooyo
 
Odgovor na temu

dejandj

Član broj: 92
Poruke: 3620
*.rcub.bg.ac.yu.



Profil

icon Re: interesantna ideja (kako kome ) mada verovatno nema resenja05.02.2005. u 19:05 - pre 192 meseci
A stvar (na zalost) nije beskorisna, neki stariji win kompajleri (bcc5.5 npr) imaju limit broja variabli (odredjenog tipa, long int npr.)...


 
Odgovor na temu

Sundance

Član broj: 7510
Poruke: 2559
*.sava.sczg.hr.



Profil

icon Re: interesantna ideja (kako kome ) mada verovatno nema resenja17.06.2005. u 03:43 - pre 188 meseci
Naletjeh sl. na temu: http://www.elitesecurity.org/tema/36766/0 pa se sjetih ove :)

U biti je zvrba u pravu, gcc sa opcijom -Wsequence-point (odnosno -Wall) na gornji yooyo-ov program daje upozorenje:

Citat:
warning: operation on `a' may be undefined


dok MS VC++ 8.0b2 ne daje upozorenje čak ni sa /W4 :/

Premda oba daju točan (isti) output...

Ali kako netko reče...likove koji pišu ovakav kod bi trebalo bacit kroz prozor :)
 
Odgovor na temu

itf
Zagreb

Član broj: 59794
Poruke: 993
*.fsb.hr.



+9 Profil

icon Re: interesantna ideja (kako kome ) mada verovatno nema resenja17.06.2005. u 17:51 - pre 187 meseci
Hehehe... vidim da nitko nije mislio na overflow? Cast rjesenjima sa XOR-om, no pokusajte to sa vrijednostima poput 32000 i 32001, a nek se zamjenjuju podaci tipa integer :) Nije valjda da ne radi??? E pa stvarno...
 
Odgovor na temu

Sundance

Član broj: 7510
Poruke: 2559
*.sava.sczg.hr.



Profil

icon Re: interesantna ideja (kako kome ) mada verovatno nema resenja21.06.2005. u 06:11 - pre 187 meseci
Rješenje preko XOR-a je jedino od svih type-agnostic.
 
Odgovor na temu

zvrba
The Lord of Chaos

Član broj: 31716
Poruke: 105
*.ifi.uio.no.



Profil

icon Re: interesantna ideja (kako kome ) mada verovatno nema resenja21.06.2005. u 07:48 - pre 187 meseci
Citat:
Sundance: Rješenje preko XOR-a je jedino od svih type-agnostic.


Nije. ne radi sa floating-pointom. osim ako ne koristis ruzne castove.

Sto se tice +/- nad FP varijablama, rezultat "zamjene" ne mora biti identican pocetnim brojevima radi zaokruzivanja u FP aritmetici.

Sve skupa, IMO, ovo je zanimljiva matematicka mozgalica sa NULA primjene u praksi.

Bezveze narusava citljivost programa, a nije ni efikasno koliko bi moglo biti imajuci u vidu da mnogi procesori imaju instrukcije tipa XCHG koje atomicki zamjenjuju sadrzaj registra sa drugim registrom ili memorijskom lokacijom (ili cak ponekad memorija <-> memorija).
 
Odgovor na temu

[es] :: C/C++ programiranje :: interesantna ideja (kako kome ) mada verovatno nema resenja

Strane: 1 2

[ Pregleda: 6919 | Odgovora: 26 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.