user3247128
user3247128

Reputation: 359

Pointers and interchange with C

I have a general idea of how to do this, as you can see by the code I did below. The only problem I am having is finishing the interchange part. Basically, what I am trying to do is move the value of the lowest variable into the 1st variable, the second middle value to the 2nd variable, and the biggest to the 3rd variable.

I know I do this with the interchange and using temp somehow, but how would I complete that, because with three values temp would get overridden somehow. What am I missing? So basically a = 4.0, b = 7.0, c = 1.0, c (1.0) needs to go into a, a (4.0) needs to go into b, and b (7.0) needs to go into c. Thanks!

#include <stdio.h>
void interchange(double * x, double * y, double * z);

int main(void)
{
  double a = 4.0, b = 7.0, c = 1.0;

  printf_s("Originally a = %d, b = %d, and c = %d.\n", a, b, c);
  interchange(&a, &b, &c);
  printf_s("Now, a =  %d, b = %d, and c = %d.\n", a, b, c);

  return 0;

}

void interchange(double * x, double * y, double * z)
{
  double temp;

  temp = *z;
  *y = *z;
  * = temp 

    // what am I missing here? I cant get my head around this above ^^^

}

Thanks for the guidance!

Upvotes: 0

Views: 69

Answers (2)

Vasfed
Vasfed

Reputation: 18504

Something like:

void swap(double* first, double* last){
  double temp = *first;
  *first = *last;
  *last = temp;
}

void interchange(double * x, double * y, double * z){
  if(*x > *y) swap(x, y);
  if(*y > *z) swap(y, z);
  if(*x > *y) swap(x, y);
}

Upvotes: 2

Iłya Bursov
Iłya Bursov

Reputation: 24229

the simplest way is:

if (*x > *y) {
    temp = *x; // store value of x
    *x = *y; // overwrite x with y
    *y = temp; // overwrite y with x (which is in temp)
}
// now we sure that x <= y
if (*y > *z) {
    temp = *z;
    *z = *y;
    *y = temp;
}
// now we sure that x <= z and y <= z, but we don't know x/y relationships
if (*x > *y) {
    temp = *x;
    *x = *y;
    *y = temp;
}
// now x <= y <= z

Upvotes: 1

Related Questions