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ählvariablefloat 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.