Interschimbarea a doua variabile


Te-ai intrebat vreodata: „Oare cum pot interschimba continutul a doua variabile?” Pai, exista mai multe moduri prin care poti face asta. Prima si cea mai cunoscuta metoda este interschimbarea cu variabila auxiliara.

Ca si copii, ne puneam intrebarea de mai sus in felul urmator: „Oare cum pot interschimba continutul a doua pahare cu suc fara a le interschimba?”. Prin urmare, putem sa ne uitam la variabilele noastre ca la doua pahare cu suc. Hai sa luam, deci, cele doua „pahare” si sa incercam sa le interschimbam continutul. Paharul A este plin cu… limonada, iar paharul B este plin cu, sa zicem… suc de portocale. Daca vom incerca sa turnam pur si simplu continutul unuia dintre cele doua pahare in celalalt pahar le vom amesteca cu siguranta. Ce facem atunci? Cum evitam aceasta „eroare”? Daca te gandesti ca ar trebui sa luam un al treilea pahar gol, pe care sa il folosim… ai perfecta dreptate! Acest pahar C sa ii spunem este variabila noastra auxiliara. Acum, procesul se rezuma la 3 operatii simple chiar si pentru un copil.

  1. Turnam limonada in paharul gol. Acum paharul A este gol, paharul B e inca plin cu suc de portocale, iar paharul C contine limonada.
  2. Turnam sucul de portocale in paharul gol. Acum paharul A contine suc de portocale, paharul B este gol, iar paharul C este in continuare plin cu limonada.
  3. La final, turnam limonada in paharul gol. Acum paharul A este plin cu suc de portocale, paharul B contine limonada, iar paharul C este gol, exact ca la inceput.

Dupa cum poti observa, cele doua pahare au continuturile interschimbate si neamestecate. Pentru doua variabile, algoritmul ar arata cam asa:

Screenshot from 2018-07-25 12-31-42 (1)

Asteapta! Doar nu credeai ca am terminat, nu-i asa? Nu, de abia incepem. Hai sa-ti arat cum poti interschimba doua variabile fara o variabila auxiliara. Suna amuzant, nu? Sa te poti juca cu sucul fara sa murdaresti toate acele pahare. Totusi, ceea ce urmeaza sa iti arat nu prea functioneaza cu suc, deoarece vom folosi expresii algebrice si, dupa cum bine stii (sper), nu prea poti aduna si scadea suc, nu-i asa? 🙂

Trebuie, deci, sa privim acest algoritm intr-un mod mai abstract. Hai sa luam doua variabile a si b pe care le vom interschimba dupa cum urmeaza:

screen1

Putem de asemenea sa incepem cu o scadere:

screen2

Dar, hei, putem folosi inmultiri si impartiri pentru a scrie acest algoritm? Pai… da, insa este cel mai putin recomandat algoritm de interschimbare deoarece risti sa depasesti limita de memorie alocata din pricina marimii rezultatului unui produs. De asemenea, daca unul dintre numere este 0? Nu e bine. In orice caz, daca ti-a placut ce ai vazut pana acum, am o surpriza pentru tine. Esti pregatit? Uite ca vine.

Daca nu ai experienta in domeniul informaticii e foarte posibil sa nu fi auzit de urmatorul algoritm. Totusi, daca ai auzit, felicitari! Esti cu un pas inaintea multora. Sa incercam, deci, sa interschimbam doua variabile folosind disjunctia exclusiva pe biti (XOR). XOR este un operator binar ce compara doua propozitii. Daca exact una dintre ele este adevarata, rezultatul final este o valoare true. Altfel, rezultatul este o valoare false.

5BD15B4F4E1DA63B0BDEBF33BDAD27B1A2748E54_large (1)

Dupa cum stii, computerele folosesc un limbaj binar. Fiecare comanda pe care noi le-o furnizam, fiecare lucru pe care ele il afiseaza pe ecran e de fapt codat sub forma unui sir de 1 si 0. Deci cum poate acest operator, XOR, sa ne rezolve noua problema? Ei bine, variabilele noastre trebuie sa fie stocate undeva. Algoritmul nostru va accesa zonele de memorie in care sunt stocate variabilele si va interschimba continutul lor. Intr-un fel, putem asocia acest algoritm nu cu limonada si suc de portocale (care se pot amesteca), ci mai degraba cu ulei si apa (care nu se pot amesteca). Tinand cont de toate acestea, algoritmul nostru ar trebui sa arate cam asa:

screen3

Sper ca ti-a placut acest articol si ca ai invatat ceva nou. Nu uita: o minte sanatoasa e o minte care invata ceva nou, cat de mic, zilnic.

Lasă un răspuns

Completează mai jos detaliile tale sau dă clic pe un icon pentru a te autentifica:

Logo WordPress.com

Comentezi folosind contul tău WordPress.com. Dezautentificare /  Schimbă )

Poză Twitter

Comentezi folosind contul tău Twitter. Dezautentificare /  Schimbă )

Fotografie Facebook

Comentezi folosind contul tău Facebook. Dezautentificare /  Schimbă )

Conectare la %s

Acest site folosește Akismet pentru a reduce spamul. Află cum sunt procesate datele comentariilor tale.