2016-04-27 13 views
2

Ich bin mit einer Übung meines Programmierkurses festgefahren. Ich möchte eigentlich nicht den Code, den ich mehr von einem Hinweis möchte.Finde die größte Fraktion in einem Array

Ich habe ein Array von Brüchen und ich muss den größten Bruch in der Anordnung finden. Außerdem habe ich eine Funktion decimal(), die den Bruch in Dezimal konvertiert. Meine Idee war so:

struct fraction &greatestFraction(struct fraction fractionArray[], int arrayLength){ 
    double greatestValue = 0.0; 

    for (int i = 0; i < arrayLength; i++) { 
     if (decimal(fractionArray[i]) > greastestValue) { 
      greatestValue = i; 
     } 
    } 
    return fractionArray[]; 
} 

Konvertieren Sie den Bruch in Dezimal, aber ich muss eine Struktur zurückgeben. Ich bin ratlos.

+0

Sie nicht wollen greatestValue = dezimal (fractionArray [i]); ? Und fügen Sie einen Index hinzu, um zu speichern, welcher Bruchteil Sie am größten hat (greatestind = i;)? – steiner

+3

Es gibt 'std :: max_element' in' '. – Jarod42

+1

Sie verwechseln Wert und Index irgendwann. – Jarod42

Antwort

0

Versuchen Sie folgendes:

struct fraction& greatestFraction(struct fraction fractionArray[], int arrayLength) 
{ 
    double greatestValue = decimal(fractionArray[0]); 
    int greatestValueIndex = 0; 

    for (int i=1; i<arrayLength; i++) 
    { 
     double value = decimal(fractionArray[i]); 
     if (greastestValue < value) 
     { 
      greastestValue = value; 
      greatestValueIndex = i; 
     } 
    } 

    return fractionArray[greatestValueIndex]; 
} 
2

Sie sollten das erste Element als größten Wert auswählen, denn wenn alle Elemente im Array negativ sind, ist Ihre Auflösung falsch.

struct fraction &greatestFraction(struct fraction fractionArray[], int arrayLength){ 
    double greatestValue = fractionArray[0].numer/(double) fractionArray[0].denumer; 
    size_t maxIndex = 0; 

    for (size_t i = 1; i < arrayLength; ++i) { 
     double tmpVal = fractionArray[i].numer/(double) fractionArray[i].denumer; 
     if (tmpVal > greatestValue) { 
      maxIndex = i; 
     } 
    } 
    return fractionArray[maxIndex]; 
} 

Wenn Sie genauer Vergleich benötigen, können Sie so etwas tun:

bool greater(struct fraction& a, struct fraction& b) { 
    return a.numer * b.denumer > a.denumer * b.numer; 
} 

struct fraction &greatestFraction(struct fraction fractionArray[], int arrayLength){ 
    double greatestValue = fractionArray[0]; 
    size_t maxIndex = 0; 

    for (size_t i = 1; i < arrayLength; ++i) { 
     if (greater(fractionArray[i], greatestValue)) { 
      maxIndex = i; 
     } 
    } 
    return fractionArray[maxIndex]; 
} 
Verwandte Themen