Gå til innhold

bytte innholdet i to variabler


Anbefalte innlegg

Videoannonse
Annonse
Skrevet

jeg tror ikke det. For at dataen faktisk skal fortsette å eksistere MÅ den være oppbevart et sted. Men ser ikke problemet igrunn da det er vanlig å dra inn en tredje variabel. Det går forøvrig ann å bare bytte pekeren slik at dataen i seg selv ikke blir flyttet i minnet. Her trenger du alikevel en tredje variabel for å holde adressen hvis jeg ikke tar helt feil.

Skrevet

Du kan jo bytte innholdet av de to variablene via en funksjon, så blir den tredje variabelen lokal inne i funksjonen, dermed slipper du ekstra globale variabler. (Hvis det kunne tenkes å være grunnen til at du vil unngå den ekstra variabelen??)

Skrevet
Hei....

 

Er det noen som vet hvordan man kan bytte innholdet i to variabler uten å bruke en tredje?!?!?!?! :roll:

 

-Shila-

 

PSPSPS:

 

Det var læreren vår som gav oss denne opg.......

 

-shila-

Skrevet

Standardbiblioteket har en template funksjon som heter swap . Du kan bruke denne.

 

Slik ser den ut:


template <class Type>

void swap (Type& left_, Type& right_);

 

Og slik kan den brukes:


#include <algorithm>

//...

int i,j;

std::swap(i, j);

Skrevet
Hei....

 

Er det noen som vet hvordan man kan bytte innholdet i to variabler uten å bruke en tredje?!?!?!?! :roll:

 

-Shila-

 

PSPSPS:

 

Det var læreren vår som gav oss denne opg.......

 

-shila-

 

Hmm, tror jeg greide det allikevel 8) :

 

 

int a=3;

int b=17;

 

a=a+b; (a=3+17)

b=a-b; (b=20-17)

a=a-b; (a=20-3)

 

// b er nå 3

// a er nå 17

Skrevet
Hmm, tror jeg greide det allikevel :

 

 

int a=3;

int b=17;

 

a=a+b; (a=3+17)

b=a-b; (b=20-17)

a=a-b; (a=20-3)

 

// b er nå 3

// a er nå 17

 

Vel, eg er verken eit mattegeni eller ein c/c++ guru, men denne framgangsmåten vil vel berre virke på positive tal?

Til dømes:

a = 3

b = -25

 

a = a + b = 3 + (-25) = -22

b = a - b = 3 - (-25) = 28

a = a - b = -22 - 28 = -50

 

og med to negative tal:

 

a = -3

b = -25

 

a = a + b = -3 + (-25) = -27

b = a - b = -3 - (-25) = 22

a = a - b = -27 - 22 = -49

 

:shrug:

For å vere litt konstruktiv og;

trikser ein litt med if-tester og forteikn-vending, vil eg tru problemet er løyselig (Paddingtons formel fungerer for positive tal)...

Skrevet

Vel, eg er verken eit mattegeni eller ein c/c++ guru, men denne framgangsmåten vil vel berre virke på positive tal?

Til dømes:

a = 3

b = -25

 

a = a + b = 3 + (-25) = -22

b = a - b = 3 - (-25) = 28

a = a - b = -22 - 28 = -50

 

og med to negative tal:

 

a = -3

b = -25

 

a = a + b = -3 + (-25) = -27

b = a - b = -3 - (-25) = 22

a = a - b = -27 - 22 = -49

 

:shrug:

For å vere litt konstruktiv og;

trikser ein litt med if-tester og forteikn-vending, vil eg tru problemet er løyselig (Paddingtons formel fungerer for positive tal)...

 

Her har du nok regnet litt feil. Metoden vil virke uansett om du har positive eller negative tall. Men selv ville jeg fortsatt holdt meg til standardbibliotekets std::swap, selv om det kanskje ikke var det oppgaven fra læreren var ute etter :)

 

Rettelser:

 

a = 3

b = -25

 

a = a + b = 3 + (-25) = -22

b = a - b = -22 - (-25) = 3

a = a - b = -22 - 3 = -25

 

Det andre regnestykket ditt var også feil.

Skrevet

Kan få til mye med en bitvis XOR (^) da..

 

Typisk:

 

temp = a;

a = b;

b = temp;

 

Alternativt:

 

a ^= b;

b ^= a;

a ^= b;

 

Dette bør funke med andre verdier enn heltall også..

 

Ettersom strenger har litt fast størrelse, er det kanskje en fordel om de er like lange. Men går du gjennom hver char, en etter en, og tar bruker den metoden, vil du få swappet dem.

  • 1 måned senere...
Skrevet

hehe, ja jeg vet om en måte, men det er vel en liten hack :-) Om denne metoden er særlig portabel vet jeg ikke(da jeg kun har tilgang til gcc). her er i alle fall koden:

 

#define SWAP(a, B) ({__typeof__(a)__temp;__temp=(a);(a)=(B);(B)=__temp;})

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...