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

interesantna ideja (kako kome ) mada verovatno nema resenja

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

Strane: 1 2

[ Pregleda: 2935 | Odgovora: 26 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

EArthquake
Aleksandar Nikolic
Novi Sad

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

Sajt: www.phearless.org


Profil

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



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
02.02.2005. u 18:07 

_alokiN_
strasbourg

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



Profil

icon Re: interesantna ideja (kako kome ) mada verovatno nema resenja02.02.2005. u 18:17
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..
02.02.2005. u 18:17 

Sundance

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

ICQ: 106979934


Profil

icon Re: interesantna ideja (kako kome ) mada verovatno nema resenja02.02.2005. u 18:19
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]
02.02.2005. u 18:19 

EArthquake
Aleksandar Nikolic
Novi Sad

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

Sajt: www.phearless.org


Profil

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


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 :))))))
02.02.2005. u 18:20 

3emyh
Vladimir Aleksić
Zemun

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

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


Profil

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

Bilo nekad u Racunarima u Dejanovim pitalicama
02.02.2005. u 18:23 

EArthquake
Aleksandar Nikolic
Novi Sad

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

Sajt: www.phearless.org


Profil

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


korisno nema sta
02.02.2005. u 18:24 

Sundance

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

ICQ: 106979934


Profil

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

Sundance

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

ICQ: 106979934


Profil

icon Re: interesantna ideja (kako kome ) mada verovatno nema resenja02.02.2005. u 18:34
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]
}


02.02.2005. u 18:34 

yooyo
Centroid / Technical director

Član broj: 4891
Poruke: 1101
217.26.66.*



Profil

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

yooyo
02.02.2005. u 23:44 

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
Citat:
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.
03.02.2005. u 07:56 

EArthquake
Aleksandar Nikolic
Novi Sad

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

Sajt: www.phearless.org


Profil

icon Re: interesantna ideja (kako kome ) mada verovatno nema resenja03.02.2005. u 10:31
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
03.02.2005. u 10:31 

Milos Stojanovic
Belgrade

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

ICQ: 282954730
Sajt: www.sietf.org


Profil

icon Re: interesantna ideja (kako kome ) mada verovatno nema resenja03.02.2005. u 14:05
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
♪♫♪
03.02.2005. u 14:05 

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

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

Sajt: dejan.lekic.org


Profil

icon Re: interesantna ideja (kako kome ) mada verovatno nema resenja03.02.2005. u 14:08
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
03.02.2005. u 14:08 

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

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

Sajt: dejan.lekic.org


Profil

icon Re: interesantna ideja (kako kome ) mada verovatno nema resenja03.02.2005. u 14:11
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
03.02.2005. u 14:11 

yooyo
Centroid / Technical director

Č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
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
03.02.2005. u 14:38 

dejandj

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



Profil

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


05.02.2005. u 19:05 

Sundance

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

ICQ: 106979934


Profil

icon Re: interesantna ideja (kako kome ) mada verovatno nema resenja17.06.2005. u 03:43
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 :)
17.06.2005. u 03:43 

itf
Zagreb

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

ICQ: 337738018


Profil

icon Re: interesantna ideja (kako kome ) mada verovatno nema resenja17.06.2005. u 17:51
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...
17.06.2005. u 17:51 

Sundance

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

ICQ: 106979934


Profil

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

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
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).
21.06.2005. u 07:48 

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

Strane: 1 2

[ Pregleda: 2935 | Odgovora: 26 ]

Postavi temu Odgovori

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