4 Arrays gleichzeitig sortieren



  • Hi Leute hoffe mir kann jemand helfen

    habe die Aufgabe bekommen einen Mietflächenrechner zu basteln. Hat auch soweit geklappt allerdings verzweifle ich nun bei der sortierten Ausgabe und zwar soll es dem Typ nach aufsteigend sortiert sein. Und ich hab keine Ahnung wie ich den Bubblesort oder ähnliches so umsetzten kann das ich alle Arrays gleichwertig sortieren

    [/code][code="c"]
    #include <stdio.h>
    #include <stdlib.h>

    int main()
    {

    /* Initialisierung der Variablen () */

    int NA1 = 1; //NA1: Wohnräume, Küchen, Sanitärbereiche, Dielen, Flure, Treppen x 1
    int NA2 = 2; //NA2: unbeheizbare Flächen (Wintergärten, Schwimmbäder, usw.) x 0,5
    int NA3 = 3; //NA3: Balkone, Terrassen, Loggien, Dachgärten x 0.25
    int NA4 = 4; //NA4: Keller, Bodenräume, Abstellräume, Waschküchen, Trockenräume,Garagen, Heizungsräume, sonstige Außenflächen x 0
    int DH1 = 1; //DH1: >= 2,0 m x 1
    int DH2 = 2; //DH2: >= 1 m und < 2,0 m x 0,5
    int DH3 = 3; //DH3: < 1 m x 0
    float summe=0; //Errechnete Fleache
    int tl=0; //Anzahl der Teilflächen
    const int max=99; //Anzahl maximaler Teilflächen
    int i=0; //temporäre Zählvariable

    float flaeche[100]; //Array für die einzelnen flächen
    int art[100]; //Art der flächen
    int hoehe[100]; //Höhe der Decke
    float faktort[100]; //Faktor für den Typ
    float faktorh[100]; //Faktor für die Höhe
    float ergebnis[100];
    /* Abfrage der Eingabeparameter */

    printf("\t\tPDA-Testat - Mietflaechen Rechner\n");
    printf("\t\t=================================\n\n");

    // Abfrage der Teilflächen

    do {
    printf("\n Wie viele Teilflaechen? (max99) ");
    fflush(stdin);
    if ((1 != scanf("%d", &tl)) || (tl < 1) || (tl > max)) // => || ScanF > 2 zum Aussortieren von mehr als 2 Eingabeparametern
    printf("\n Eingabefehler! Bitte nur ganze Zahlen zwischen 1 und 99 eingeben\n");
    else break;
    } while (1);

    // Abfrage der Benötigten Parameter so oft bis die anzahl der Teilflächen erreicht ist

    for (i = 1; i <= tl; i++)
    {
    printf("\nBitte geben Sie die %d. Teilflaeche in Quadratmeter ein: ", i);
    fflush(stdin);
    if ((1 != scanf("%f", &flaeche[i]))|| (flaeche[i] < 1)||(flaeche[i] > 100000))
    {printf("\nFormatfehler!\n");
    i--;
    continue;}

    printf("\n Beschriebung der Typen:");
    printf("\n1: Wohnraeume, Kuechen, Sanitaerbereiche, Dielen, Flure, Treppen");
    printf("\n2: unbeheizbare Flaechen (Wintergaerten, Schwimmbaeder, usw.)");
    printf("\n3: Balkone, Terrassen, Loggien, Dachgaerten");
    printf("\n4: Keller, Bodenraeume, Abstellraeume, Waschkuechen, Trockenraeume,Garagen, Heizungsraeume, sonstige Aussenflaechen");
    printf("\nUm welchen Typ handelt es sich bei der %d. Flaeche: ",i);
    fflush(stdin);
    if ((1 != scanf("%d", &art[i]))|| (art[i] < 1)||(art[i] > 4))
    {printf("\nFormatfehler!\n");
    i--;
    continue;}
    printf("\n1: Deckenhoehe ueber 2 m");
    printf("\n2: Deckenhoehe zwischen 1 m und 2 m");
    printf("\n3: Deckenhoehe unter 1m");
    printf("\nUm welche Deckenhoehe handelt es sich bei der %d. Flaeche: ",i);
    fflush(stdin);
    if ((1 != scanf("%d", &hoehe[i]))|| (hoehe[i] < 1)||(hoehe[i] > 3))
    {printf("\nFormatfehler!\n");
    i--;
    continue;}
    };

    //Zuweisen der Faktoren des Raumtyps

    for (i=1; i <= tl; i++)
    {
    if (art[i]==NA1 )
    faktort[i]=1;
    else if (art[i]==NA2 )
    faktort[i]=0.5;
    else if (art[i]==NA3 )
    faktort[i]=0.25;
    else if (art[i]==NA4 )
    faktort[i]=0;
    };

    //Zuweisen der Faktoren der Deckenhöhe

    for (i=1; i <= tl; i++)
    {
    if (hoehe[i]==DH1 )
    faktorh[i]=1;
    else if (hoehe[i]==DH2 )
    faktorh[i]=0.5;
    else if (hoehe[i]==DH3 )
    faktorh[i]=0;
    };

    printf("\nNr:\tFlaeche: Art: Hoehe: Anrechenbare Flaeche:\t");
    for (i = 1; i <= tl; i++)
    {
    ergebnis[i]=flaeche[i]*faktorh[i]*faktort[i];

    printf("\n%02d\t%.2f\t %02d\t %02d\t %.2f",i,flaeche[i],art[i],hoehe[i],ergebnis[i]);

    summe += ergebnis[i] ;

    };
    printf("\n=======================================");
    printf("\n\t\t\t Summe: %.2f\n\n\n",summe);

    return 0;
    }



  • Wenn du das eine (mit dem Sortierkriterium) Array tauscht, musst du auch die anderen Arrays genauso tauschen.

    Allerdings wäre hier eine struct besser und auch einfacher zu handhaben.

    Das [/code] gehört ans Ende vom Code, nicht an den Anfang.
    Oder du markierst den Code mit der Maus und klickst auf den C-Button. Nutze die Vorschau.



  • Danke erstmal für den hinweis wegen dem code.

    Das ich alle Arrays sortieren muss dessen bin ich mir bewusst nur komme ich nicht drauf wie ich einen Sortieralgorithmus das ganze bewerkstelligen kann.

    Structs sollen wir ausdrücklich nicht verwenden.

    Meine Idee war es die Arrays in eine Matrix packe allerdings bin ich da auch noch nicht sonderlich weit gekommen



  • Wo sortierst du denn das (eine) Array?

    Da muss doch irgendwo ein swap sein (vertauschen von zwei Elementen).



  • Oder willst du erst nach Array1 sortieren und dann nach Array2, falls es dort gleiche Einträge gibt?

    Dann muss dein Vergleich entsprechend angepasst werden.



  • ich habe bislang noch überhaupt keine Sortierung drin es wird einfach in Eingabereihenfolge ausgegeben

    der aufgaben text lautet :

    Entwerfen Sie ein C Programm, welches die Teilfläche, je Teilfläche deren Nutzungsart sowie die Deckenhöhe
    als Benutzereingabe entgegennimmt. Es sollen mindestens 50 Teilflächen eingegeben und
    gespeichert werden können.
    Nach Ende der Eingabe wird die anrechenbare Fläche (Mietfläche) gemäß obiger Formel berechnet.
    Danach sollen die Teilflächen in tabellarischer Form und zwar nach Nutzungsart sortiert (in der Reihenfolge
    NA1, …, NA3) ausgegeben werden; am Ende der Tabelle folgt dann die anrechenbare Mietfläche.

    habe das ganze jetzt in eine Matrix gepackt und versuche nun die zeilen absteigend nach der 2. Spalte zu sortieren

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
    
    /* Initialisierung der Variablen () */
    
        int      NA1 = 1;           //NA1: Wohnräume, Küchen, Sanitärbereiche, Dielen, Flure, Treppen x 1
        int      NA2 = 2;           //NA2: unbeheizbare Flächen (Wintergärten, Schwimmbäder, usw.) x 0,5
        int      NA3 = 3;           //NA3: Balkone, Terrassen, Loggien, Dachgärten x 0.25
        int      NA4 = 4;           //NA4: Keller, Bodenräume, Abstellräume, Waschküchen, Trockenräume,Garagen, Heizungsräume, sonstige Außenflächen x 0
        int      DH1 = 1;           //DH1: >= 2,0 m x 1
        int      DH2 = 2;           //DH2: >= 1 m und < 2,0 m x 0,5
        int      DH3 = 3;           //DH3: < 1 m x 0
        float    summe=0;           //Errechnete Fleache
        int         tl=0;           //Anzahl der Teilflächen
        const int max=99;           //Anzahl maximaler Teilflächen
        int        i=0;           //temporäre Zählvariable
    
        float      matrix[100][7];
        float      flaeche[100];     //Array für die einzelnen flächen
        int        art[100];         //Art der flächen
        int        hoehe[100];       //Höhe der Decke
        float      faktort[100];     //Faktor für den Typ
        float      faktorh[100];     //Faktor für die Höhe
        float      ergebnis[100];
    /* Abfrage der Eingabeparameter */
    
        printf("\t\tPDA-Testat - Mietflaechen Rechner\n");
        printf("\t\t========================================\n\n");
    
        // Abfrage der Teilflächen
    
        do {
            printf("\n Wie viele Teilflaechen? (max99) ");
            fflush(stdin);
            if ((1 != scanf("%d", &tl)) || (tl  < 1) || (tl > max)) // => || ScanF > 2 zum Aussortieren von mehr als 2 Eingabeparametern
                    printf("\n Eingabefehler! Bitte nur ganze Zahlen zwischen 1 und 99 eingeben\n");
                    else break;
        } while (1);
    
      // Abfrage der Benötigten Parameter so oft bis die anzahl der Teilflächen erreicht ist
    
        for (i = 1; i <= tl; i++)
        {
            printf("\nBitte geben Sie die %d. Teilflaeche in Quadratmeter ein: ", i);
            fflush(stdin);
            if ((1 != scanf("%f", &matrix[i][1]))|| (matrix[i][1]  < 1)||(matrix[i][1] > 100000))
                {printf("\nFormatfehler!\n");
                  i--;
                  continue;}
    
            printf("\n   Beschriebung der Typen:");
            printf("\n1: Wohnraeume, Kuechen, Sanitaerbereiche, Dielen, Flure, Treppen");
            printf("\n2: unbeheizbare Flaechen (Wintergaerten, Schwimmbaeder, usw.)");
            printf("\n3: Balkone, Terrassen, Loggien, Dachgaerten");
            printf("\n4: Keller, Bodenraeume, Abstellraeume, Waschkuechen, Trockenraeume,Garagen, Heizungsraeume, sonstige Aussenflaechen");
            printf("\nUm welchen Typ handelt es sich bei der %d. Flaeche: ",i);
            fflush(stdin);
            if ((1 != scanf("%f", &matrix[i][2]))|| (matrix[i][2]< 1)||(matrix[i][2] > 4))
                {printf("\nFormatfehler!\n");
                  i--;
                  continue;}
            printf("\n1: Deckenhoehe ueber    2 m");
            printf("\n2: Deckenhoehe zwischen 1 m und 2 m");
            printf("\n3: Deckenhoehe unter    1m");
            printf("\nUm welche Deckenhoehe handelt es sich bei der %d. Flaeche: ",i);
            fflush(stdin);
            if ((1 != scanf("%f", &matrix[i][3]))|| (matrix[i][3]  < 1)||(matrix[i][3] > 3))
                {printf("\nFormatfehler!\n");
                  i--;
                  continue;}
        };
    
        //Zuweisen der Faktoren des Raumtyps
    
        for (i=1; i <= tl; i++)
            {
                if (matrix[i][2]==NA1 )
                   matrix[i][4]=1;
                else if (matrix[i][2]==NA2 )
                   matrix[i][4]=0.5;
                else if (matrix[i][2]==NA3 )
                   matrix[i][4]=0.25;
                else if (matrix[i][2]==NA4 )
                   matrix[i][4]=0;
    };
    
        //Zuweisen der Faktoren der Deckenhöhe
    
        for (i=1; i <= tl; i++)
            {
                if (matrix[i][3]==DH1 )
                   matrix[i][5]=1;
                else if (matrix[i][3]==DH2 )
                   matrix[i][5]=0.5;
                else if (matrix[i][3]==DH3 )
                   matrix[i][5]=0;
    };
    
    void BubbleSort(int a[], int n) {
    int x, i, j;
    for ( i= n-2; i > 0; i--) //Im Teilfeld a[0], ... a[i]
    //benachbarte Element vergleichen
    //und vertauschen
    for (j = 0; j<=i; j++)
    if ( a[j+1] < a[j] )
    {
    x = a[j]; // vertausche a[j] mit a[j+1]
    a[j] = a[j+1];
    a[j+1] = x;
    }
    }
    
    printf("\nNr:\tFlaeche:  Art:    Hoehe:  Anrechenbare Flaeche:\t");
    for (i = 1; i <= tl; i++)
    {
        matrix[i][6]=matrix[i][1]*matrix[i][4]* matrix[i][5];
    
        printf("\n%02d\t%.2f\t  %.f\t  %.f\t  %.2f",i,matrix[i][1],matrix[i][2],matrix[i][3],matrix[i][6]);
    
        summe += matrix[i][6] ;
    
    };
    
    printf("\n=======================================");
    printf("\n\t\t\t  Summe:  %.2f\n\n\n",summe);
    
    return 0;
    }
    


  • Wenn du alles in der matrix hast, brauchst du deine anderen Arrays nicht mehr.


Log in to reply