2012-03-26 8 views
1

Ok, das war eine Zuweisung, die mir Punkte abgezogen wurde, weil die Ausgabe rückwärts angezeigt wurde. Ich sollte den Benutzer zur Eingabe auffordern und dann die Eingabe in absteigender Reihenfolge anzeigen, aber ich habe ein Problem mit der Anzeige. Ich habe zwei Arrays, ein Jahr [], um die Monate zu halten und ein month[totalMonths], um die Benutzereingabe zu halten. Wenn ich den Eingang sortiere und zeige, stimmt der year[] nicht mit den Monaten überein, es ist örtlich festgelegt. Wenn beispielsweise der Benutzer 1 für Jan, 2 für Feb und 3 für Mar eingibt, wäre die Anzeige; Jan: 3 Februar: 2 Mar: 1Sortiereingang arbeitet rückwärts

Alle Ideen, wie ich die Monate mit dem seinem richtigen Eingang für die Anzeige entsprechen erhalten kann? Hier ist die Art und Anzeigefunktion:

void sortArray(double month[], string year[], int totalMonths) 
{ 
    int temp; 
    bool swap; 
    do 
    { 
     swap = false; 
     for(int count = 0; count < totalMonths - 1; count++) 
     { 
      if(month[count] < month[count + 1]) 
      { 
       temp = month[count]; 
       month[count] = month[count + 1]; 
       month[count + 1] = temp; 
       swap = true; 
      } 
     } 
    } while(swap); 
    cout << "------------------------------------------------------------" << endl; 
    cout << "Here are the months rainfall statistics sorted from highest to lowest: " << endl; 

    for (int index = 0; index < totalMonths; index++) 
     cout << year[index] << "\t " << setw(5) << month[index] << endl; 
} 

Hier ist meine string year[] Definition:

string year[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", 
      "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; 
+0

suppost ich Ihr Jahr Array enthält ungefähr wie: { "Jan", "Februar", "mar", ...}? Können Sie Ihre Jahrtabellendefinition plz – grifos

+0

drucken Ich aktualisierte gerade meine Jahr [] Definition in meinem Beitrag. – Gmenfan83

+0

Dies bringt das größte Element an die Spitze; Wenn Sie tauschen, sollten Sie sowohl den Monat als auch das Jahr (und alle anderen Felder, die Sie miteinander verbunden haben) tauschen – Adrian

Antwort

1

Sind Sie das year Array neu zu ordnen erlaubt? In Ihrer Sortierroutine, in der Sie die Werte month vertauschen, können Sie die entsprechenden Werte im Array austauschen.

Wenn Sie das Array nicht mutieren möchten, können Sie einfach eine Indirektionsstufe hinzufügen. Definieren Sie ein Array von Indizes in den Arrays month und und sortieren Sie die Indizes.

int index[12] = { 0,1,2,3,4,5,6,7,8,9,10,11 }; 

// inside your sort routine... 

if(month[index[count]] < month[index[count + 1]]) 
{ 
    temp = index[count]; 
    index[count] = index[count + 1]; 
    index[count + 1] = temp; 
    swap = true; 
} 

// print the arrays... 

for (int count = 0; count < totalMonths; count++) 
    cout << year[index[count]] << "\t " << setw(5) << month[index[count]] << endl; 
+0

Vielen Dank! Das hat perfekt funktioniert. Danke an alle für Ihre Zeit und Hilfe, es ist sehr geschätzt! – Gmenfan83

2

Wie Blastfurnace wies darauf hin, Sie haben Ihr Jahr Array sortieren den Monat entsprechen. Oder wenn Sie nicht können, können Sie eine kleine Struktur erstellen, um Ihre Monatsdaten darzustellen. Wie folgt aus:

typedef struct _monthData{ 
    double data; 
    int monthIndex; 
} monthData; 

void sortArray(monthData month[], string year[], int totalMonths) 
{ 
    int temp; 
    bool swap; 
    do 
    { 
     swap = false; 
     for(int count = 0; count < totalMonths - 1; count++) 
     { 
      if(month[count].data < month[count + 1].data) 
      { 
       temp = month[count]; 
       month[count] = month[count + 1]; 
       month[count + 1] = temp; 
       swap = true; 
      } 
     } 
    } while(swap); 
    cout << "------------------------------------------------------------" << endl; 
    cout << "Here are the months rainfall statistics sorted from highest to lowest: " << endl; 

    for (int index = 0; index < totalMonths; index++) 
     cout << year[month[index].monthIndex] << "\t " << setw(5) << month[index] << endl; 
} 

Grüße

0

Das Einzige, was müssen Sie month[count] < month[count + 1]) zu month[count] > month[count + 1]) ändern. So Ihr vollständiger Code wird im folgenden gegeben:

#include<iostream> 
#include<string> 
#include<string.h> 
#include<iomanip> 

using namespace std; 

void sortArray(double month[], string year[], int totalMonths) 
{ 
    int temp; 
    bool swap; 
    do 
    { 
     swap = false; 
     for(int count = 0; count < totalMonths - 1; count++) 
     { 
      if(month[count] > month[count + 1]) 
      { 
       temp = month[count]; 
       month[count] = month[count + 1]; 
       month[count + 1] = temp; 
       swap = true; 
      } 
     } 
    } while(swap); 
    cout << "------------------------------------------------------------" << endl; 
    cout << "Here are the months rainfall statistics sorted from highest to lowest: " << endl; 

    for (int index = 0; index < totalMonths; index++) 
     cout << year[index] << "\t " << setw(5) << month[index] << endl; 
} 

int main() 
{ 
    string year[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", 
      "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; 
    double month[] = {12,11,10,9,8,7,6,5,4,3,2,1}; 
    sortArray(month,year,12); 
    return 0; 
}