2016-04-13 24 views
0
ile iletişim kurma

Aşağıda yaptığım koddan da görebileceğiniz gibi, bunun nasıl yapılacağı hakkında genel bir fikrim var. Sahip olduğum tek sorun, değişim bölümünü bitirmek. Temel olarak, yapmaya çalıştığım şey en düşük değişkenin değerini 1. değişkene, ikinci orta değere 2. değişkene ve 3. değişkenden en büyük olanına taşımaktır.İşaretçiler ve C

Bildiğim kadarıyla bu değişimi ve temp kullanarak yapıyorum, ancak bunu nasıl tamamlarım, çünkü üç değer tempiyle bir şekilde kılınmış olur. Neyi kaçırıyorum? Yani a = 4.0, b = 7.0, c = 1.0, c (1.0) temel olarak a, a (4.0)'un b'a girmesi ve b (7.0)'un c'a girmesi gerekiyor. Teşekkürler!

#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 ^^^ 

} 

Yardımlarınız için teşekkürler!

+1

Sadece mini kabarcık sıralama yapmak z için en büyük değer. Daha sonra x'i y ile tekrar karşılaştırın ve en büyüğü y'ye taşıyın. – Unimportant

cevap

1

basit yoludur:

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 
2

şey gibi:, y önündeki en büyük değeri taşımak, y x Karşılaştırma z'ye y karşılaştırmak, taşımak:

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); 
} 
İlgili konular