Sa se interschimbe continutul a doua variabile intregi. Valorile initiale se citesc de la tastatura.
Inregistrati-va pentru a beneficia de cunostintele comunitatii, a pune intrebari sau a a raspunde la intrebarilor celorlalti.
Suntem o comunitate care incurajeaza educatia si in care se intalnesc know-how-ul si experienta cu perspective inovative de abordare a problemelor.
Autentificati-va pentru a pune intrebari, a raspunde la intrebarilor celorlalti sau pentru a va conecta cu prietenii.
V-ati uitat parola ? Introduceti adresa de email si veti primi o noua parola.
Please briefly explain why you feel this question should be reported.
Va rugam explicate, pe scurt, de ce credeti ca aceasta intrebare trebuie raportata.
Motivul pentru care raportezi utilizatorul.
Exista doua posibilitati:
1: Interschimbarea valorii a doua variabile utilizand o variabila auxiliara:
2: Interschimbarea valorii a doua variabile fara a se utiliza o variabila auxiliara:
Aceasta ultima metoda este mult mai eficienta, daca se lucreaza la nivel inalt.
a si b sunt variabilele considerate.
sau pe biti : a^=b^=a^=b.
Chiar nu stiam chestia asta. Acel operator „^” se numeste xor?
Da. Iti poarta numele! E destul de rapid, ca si al tau cu adunari si scaderi fara parametru auxiliar, am observat ca in practica se comporta foarte bine.
Asta chiar poate fi considerata o optimizare pentru algoritmii de sortare.
Expresia asta nu are totusi un comportament nedefinit, din moment ce se modifica variabila „a” de doua ori, fara ca cele doua modificari sa fie separate de un sequence point ?
NU inteleg intrebarea. Vorbeste romaneste… sa ne putem intelege!
Spuneam ca expresia respectiva are un comportament nedefinit, conform standardului C++. Codul poate functiona pe un anumit compilator asa cum iti doresti, iar pe altul nu. Mai mult, este posibil ca chiar si pe acelasi compilator poate functiona diferit in functie de nivelul de optimizare ales.
Da ai dreptate. Are comportament ciudat eu unu` nu-mi explic acest lucru… totul ar tb sa fie ok dupa parerea mea dar am intalnit cazuri cand nu mi-a interschimbat valorile si mi-a dat altceva.
Deci tot varianta cu interschimbare fara variabila auxiliara ramane cea mai sigura.
Varianta de interschimbare folosind o variabila temporara ar trebui sa fie cea mai rapida, pe un sistem uzual. Compilatorul poate sa puna variabila temproara intr-un registru, iar transferul registru-memorie /memorie-registru e rapid. Celelalte metode pot fi mai eficiente doar in anumite cazuri, pe anumite sisteme embedded, specializate.
Implementarile STL folosesc varianta cu variabila temporara pentru std::swap.
LE: Daca vrei neaparat o varianta de interschimbare prin XOR:
Din cate stiu eu, exista un tip de data denumit register care aloca memoria din registrii. Mai exista acest tip in standardul actual?
register e un cuvant cheie in C++, nu un tip de date.
El specifica doar o indicatie data compilatorului sa aloce variabila in registru. Nu e obligatoriu ca compilatorul sa faca asta, e doar o indicatie.
register e depreciat in ultimul standard.