Pagina se încarcă... vă rugăm așteptați!



Afișarea paginii întârzie? Clic aici
 
Pagina de start a forumului razvan.bocu.ro / forum.bocu.ro razvan.bocu.ro / forum.bocu.ro
IT si diverse
 
 AcasăAcasă   LinkuriLinkuri   FAQFAQ   CăutareCăutare   MembriMembri   GrupuriGrupuri   AlbumAlbum   ÎnregistrareÎnregistrare 
 ProfilProfil   SudokuSudoku    Mesaje privateMesaje private   Hartă Site(pseudo)Hartă Site(pseudo)    AutentificareAutentificare 

Interschimbare valori

 
Crează un subiect nou   Răspunde la subiect    Pagina de start a forumului razvan.bocu.ro / forum.bocu.ro -> Discutii cu specific IT -> Algoritmica
Subiectul anterior :: Subiectul următor  
Autor Mesaj
Sava Stan
Senior activ
Senior activ


Vârsta: 77
Data înscrierii: 16/Apr/2007
Mesaje: 141
Cuvinte scrise: 18,650
Sexul: Masculin
Locație: Buzau
ro.gif


MesajTrimis: Vin Sep 21, 2007 4:04 pm    Titlul subiectului: Interschimbare valori Răspunde cu citat (quote)

Există numeroase cazuri în programare când valorile a două variabile numerice trebuiesc inversate. Pentru aceasta, cel mai adesea, se folosește o variabilă auxiliară. De exemplu:

int a,b;
int aux;

a=1234;
b=5678;

//Inversăm a cu b
aux=a;
a=b;
b=aux

Există însă și posibilitatea de a inversa valorile a două variabile fără a folosi o variabilă auxiliară, tot în trei pași, și fără a folosi vreo eventuală funcţie specializată.

Cum ?
Sus
Sava Stan este deconectat Vezi profilul utilizatorului Trimite mesaj privat Trimite un mesaj Vizitează site-ul autorului
Sava Stan
Senior activ
Senior activ


Vârsta: 77
Data înscrierii: 16/Apr/2007
Mesaje: 141
Cuvinte scrise: 18,650
Sexul: Masculin
Locație: Buzau
ro.gif


MesajTrimis: Mar Sep 25, 2007 6:44 am    Titlul subiectului: Interschimbare valori Răspunde cu citat (quote)

Văd că nu se înghesuie nimeni cu un răspuns. Așa că n-o să mai prelungesc așteptarea. Ce părere aveți de:

a^=b;
b^=a;
a^=b;


?
Sus
Sava Stan este deconectat Vezi profilul utilizatorului Trimite mesaj privat Trimite un mesaj Vizitează site-ul autorului
nadiut
Junior
Junior


Vârsta: 38
Data înscrierii: 22/Mar/2007
Mesaje: 12
Cuvinte scrise: 1,684
Sexul: Feminin

ro.gif


MesajTrimis: Joi Sep 27, 2007 12:58 pm    Titlul subiectului: (Fără titlu) Răspunde cu citat (quote)

a=a XOR b;
b=b XOR a;
a=a XOR b;

dar are dezavantajul ca se poate face doar pt numere intregi si pot aparea pb cu semnele
Sus
nadiut este deconectat Vezi profilul utilizatorului Trimite mesaj privat
icarus86
Junior activ
Junior activ


Vârsta: 38
Data înscrierii: 02/Apr/2007
Mesaje: 33
Cuvinte scrise: 1,966
Sexul: Masculin
Locație: /dev/null
ro.gif


MesajTrimis: Lun Oct 01, 2007 11:51 pm    Titlul subiectului: (Fără titlu) Răspunde cu citat (quote)

Salut,

A = A - B
B = A + B
A = B - A

Merge cu orice Wink

Rares

_________________
0x2b | ~0x2b = ... 0xFF !
Sus
icarus86 este deconectat Vezi profilul utilizatorului Trimite mesaj privat
nadiut
Junior
Junior


Vârsta: 38
Data înscrierii: 22/Mar/2007
Mesaje: 12
Cuvinte scrise: 1,684
Sexul: Feminin

ro.gif


MesajTrimis: Mie Oct 03, 2007 8:18 pm    Titlul subiectului: (Fără titlu) Răspunde cu citat (quote)

merge cu orice, dar nu neaparat sa mearga si corect, depinde de limitele pe care le are tipul variabilelor. de ex. daca sunt in intervalul 0..65535, si A=65533 si B=65534, nu da bine
Sus
nadiut este deconectat Vezi profilul utilizatorului Trimite mesaj privat
benishor
Junior activ
Junior activ


Vârsta: 43
Data înscrierii: 31/Mar/2007
Mesaje: 35
Cuvinte scrise: 4,492
Sexul: Masculin
Locație: brasov
ro.gif


MesajTrimis: Mar Iul 08, 2008 4:21 pm    Titlul subiectului: (Fără titlu) Răspunde cu citat (quote)

nadiut a scris:
dar are dezavantajul ca se poate face doar pt numere intregi si pot aparea pb cu semnele


De regula trick-ul asta se folosea in asm, laolalta cu inlocuirea unui imul cu suma de shifturi al caror total de cicluri era mai mic decat al unui singur imul. Acum insa nu prea mai castigi nimic.
Pe scurt, in asm se facea trickul de mai sus in cazul numerelor cu virgula mobila executand suita de xoruri asupra locatiei valorilor ( un pointer are de regula 32 biti, mai putin in cazul sistemelor prea noi sau mult prea vechi ).

_________________
trees don't hit cars unless in selfdefence
Sus
benishor este deconectat Vezi profilul utilizatorului Trimite mesaj privat Vizitează site-ul autorului Codul Yahoo Messenger
Sava Stan
Senior activ
Senior activ


Vârsta: 77
Data înscrierii: 16/Apr/2007
Mesaje: 141
Cuvinte scrise: 18,650
Sexul: Masculin
Locație: Buzau
ro.gif


MesajTrimis: Mar Iul 08, 2008 6:30 pm    Titlul subiectului: Interschimbare valori Răspunde cu citat (quote)

benishor a scris:
nadiut a scris:
dar are dezavantajul ca se poate face doar pt numere intregi si pot aparea pb cu semnele


De regula trick-ul asta se folosea in asm, laolalta cu inlocuirea unui imul cu suma de shifturi al caror total de cicluri era mai mic decat al unui singur imul. Acum insa nu prea mai castigi nimic.
Pe scurt, in asm se facea trickul de mai sus in cazul numerelor cu virgula mobila executand suita de xoruri asupra locatiei valorilor ( un pointer are de regula 32 biti, mai putin in cazul sistemelor prea noi sau mult prea vechi ).


Fara indoiala ca "inspiratia" provine din ASSEMBLER (ehei, ASSIRIS, MAC80, Z80, s.a.m.d.) unde il foloseam pentru inversarea continutului a doi registri fara utilizarea de memorie suplimentara. Cand folosesti limbajul de asamblare ai in vedere, de regula, obtinerea unui cod cat mai scurt si cat mai rapid. De unde si economia. Observatiile unor "forumisti" legate de reprezentarea datelor avute in vedere sunt juste.
Sus
Sava Stan este deconectat Vezi profilul utilizatorului Trimite mesaj privat Trimite un mesaj Vizitează site-ul autorului
absolutep0wer
Junior
Junior


Vârsta: 46
Data înscrierii: 11/Apr/2009
Mesaje: 14
Cuvinte scrise: 1,806
Sexul: Masculin


MesajTrimis: Mar Apr 14, 2009 5:35 pm    Titlul subiectului: (Fără titlu) Răspunde cu citat (quote)

Buna ziua,sunt nou pe forum si as vrea sa salut toti membrii.
Sus
absolutep0wer este deconectat Vezi profilul utilizatorului Trimite mesaj privat
absolutep0wer
Junior
Junior


Vârsta: 46
Data înscrierii: 11/Apr/2009
Mesaje: 14
Cuvinte scrise: 1,806
Sexul: Masculin


MesajTrimis: Joi Mai 21, 2009 10:59 pm    Titlul subiectului: (Fără titlu) Răspunde cu citat (quote)

La multi ani pentru toti cei cu numele Constantin si Elena !
Sus
absolutep0wer este deconectat Vezi profilul utilizatorului Trimite mesaj privat
Afișează mesajele pentru a le previzualiza:   
Crează un subiect nou   Răspunde la subiect    Pagina de start a forumului razvan.bocu.ro / forum.bocu.ro -> Discutii cu specific IT -> Algoritmica Ora este GMT + 2 ore
Pagina 1 din 1

 
Mergi direct la:  
Nu puteți crea un subiect nou în acest forum
Nu puteți răspunde în subiectele acestui forum
Nu puteți modifica mesajele proprii din acest forum
Nu puteți șterge mesajele proprii din acest forum
Nu puteți vota în chestionarele din acest forum
Nu puteți atașa fișiere în acest forum
Nu puteți descărca fișiere în acest forum
Referință subiect (Stil MLA)
"Interschimbare valori." Mesaj online. Vin Sep 21, 2007 4:04 pm. razvan.bocu.ro / forum.bocu.ro.
Sâm Apr 20, 2024 6:22 am. < http://forum.bocu.ro/viewtopic.php?t=1678 >.




Securitate forum

100275 Atacuri blocate

Powered by BOCU.ro © 2001, 2005 phpBB Group
Varianta în limba română: Romanian phpBB online community / Razvan Bocu <<< razvan@bocu.ro >>>

Uptime server: 60 zile, 7 ore, 18 minute | Încărcare medie: 2.91, 4.30, 4.36

Server uptime(last month)