• Medlem
  • Varberg
  • 2011-06-22 21:55

Behöver lite hjälp att förstå vad jag skall skicka till min sorteringsfunktion.
Det som jag gjort nu är att jag skapat tre olika sorteringsfunktioner men jag antar att detta skulle kunna göras med bara en funktion om jag skickar vilket värde jag vill sortera på till funktionen.

Nu ser min funktion ut på detta viset "void sorteratTitel(CdSamling data[], int antal)" och här vill jag då sortera på strängen titel och antagligen kan jag skicka in det till funktionen vilket skulle innebära att jag bara ändrar det indatat i mina switch/case satser och skickar till samma funktion.

Tack på för hand!

PS! Programmet fungerar som tänkt nu men med lite för mycket kod, utskriften skall också hanteras som en funktion sedan, har inte gjort klart den bara.

#include <iostream>
using namespace std;

struct CdSamling {
    string titel;
    string artist;
    int antalLatar;
};
CdSamling nyCd();
void sorteratTitel(CdSamling data[], int antal);
void sorteratArtist(CdSamling data[], int antal);
void sorteratTracks(CdSamling data[], int antal);

int main (int argc, const char * argv[])
{
    const int ANTAL = 100;
    CdSamling minSamling[ANTAL];
    bool fortsatt = true;
    char val;
    char nySkiva = 'J';
    char antalPoster = 0;
    
    do {
    cout << "\\\\\\\\ MENY ////\n";
    cout << "1. Mata in skivdata. \n";
    cout << "2. Sortera på skivtitel. \n";
    cout << "3. Sortera på artist.\n";
    cout << "4. Sortera på antal spår. \n";
    cout << "0. Avsluta.\n";
    cin >> val;
    cin.ignore(1000, '\n');
    
    switch (val) {
        case '1':
            
                for (int i = antalPoster; i < ANTAL; i++) {
                    if (nySkiva == 'J' || nySkiva == 'j') {
                    cout << "Skiva " << i + 1 << endl ;
                    minSamling[i] = nyCd();
                    antalPoster++;
                    cout << "Ny skiva (J/N)?\n";
                    cin >> nySkiva;
                    cin.ignore(1000, '\n');                    }
                }
            nySkiva = 'J';
            break;
            
        case '2':
            sorteratTitel(minSamling, antalPoster);
            for (int i = 0; i < antalPoster; i++) {
                cout << minSamling[i].titel << endl ;
            }
            break;
            
        case '3':
            sorteratArtist(minSamling, antalPoster);
            for (int i = 0; i < antalPoster; i++) {
                cout << minSamling[i].artist << endl ;
            }
            break;
            
        case '4':
            sorteratTracks(minSamling, antalPoster);
            for (int i = 0; i < antalPoster; i++) {
                cout << minSamling[i].antalLatar << endl ;
            }
            break;
            
         case '0':   
            fortsatt = false;
            break;
            
        default:
            cout << "Felinmatning.";
            break;
    }
        } while (fortsatt == true);
    return 0;
}

CdSamling nyCd()
{
    CdSamling p;
    cout << "Skivtitel:\n";
    getline(cin, p.titel);
    cout << "Artist\n";
    getline(cin, p.artist);
    cout << "Antal spår\n";
    cin >> p.antalLatar;
    cin.ignore(1000, '\n');
    return p;
}

void sorteratTitel(CdSamling data[], int antal)
{
    for (int m = 1; m < antal; m++) {
        int pos = m;
        CdSamling temp = data[m];
        while (pos > 0 && data[pos-1].titel > temp.titel) {
            data[pos] = data[pos-1];
            pos--;
        }
        data[pos] = temp;
    }
}
void sorteratArtist(CdSamling data[], int antal)
{
    for (int m = 1; m < antal; m++) {
        int pos = m;
        CdSamling temp = data[m];
        while (pos > 0 && data[pos-1].artist > temp.artist) {
            data[pos] = data[pos-1];
            pos--;
        }
        data[pos] = temp;
    }
}
void sorteratTracks(CdSamling data[], int antal)
{
    for (int m = 1; m < antal; m++) {
        int pos = m;
        CdSamling temp = data[m];
        while (pos > 0 && data[pos-1].antalLatar > temp.antalLatar) {
            data[pos] = data[pos-1];
            pos--;
        }
        data[pos] = temp;
    }
}