Jabba the Playa
Ensign
- Registriert
- Jan. 2008
- Beiträge
- 232
Guten Tag, ich würde mich über euren Rat freuen.
Ich musste wieder mal ein Programm schreiben, komm aber nicht so ganz mit der Straight-Sort-Selection zurecht.
Aufgabenstellung
Schreiben sie ein Programm, dass die Werte von 10 Schrauben aus einer Datei ausliest und je nach Aufforderung des Users nach Durchmesser, Länge oder Anzahl sortiert ausgibt.
Das Sortieren soll mit dem Straight-Selection-Algorithmus durchgeführt werden und in einem Unterprogramm statt finden.
Probleme
1. Ich weiß nicht, wie ich den Straight-Selection-Code zum laufen bringe
2. Ich weiß nicht, wie ich alles in nur einem Unterprogramm sortieren lassen kann
3. Aktuell sortiert er die Länge und die Anzahl nicht vollständig
Ich lese die Werte aus einer Textdatei aus, die sieht wie folgt aus:
Daraufhin hab ich mir mühsam einen Code zusammen geschrieben und das sortieren nach einem Vorbild abgekupfert. Der Sortiervorgang ist, mein ich, aber noch nicht der gewünschte Straight-Selection.
Hier einmal der Code:
Ich hoffe ihr könnt mir weiter helfen. Ich verzweifel da noch dran.
Ich musste wieder mal ein Programm schreiben, komm aber nicht so ganz mit der Straight-Sort-Selection zurecht.
Aufgabenstellung
Schreiben sie ein Programm, dass die Werte von 10 Schrauben aus einer Datei ausliest und je nach Aufforderung des Users nach Durchmesser, Länge oder Anzahl sortiert ausgibt.
Das Sortieren soll mit dem Straight-Selection-Algorithmus durchgeführt werden und in einem Unterprogramm statt finden.
Probleme
1. Ich weiß nicht, wie ich den Straight-Selection-Code zum laufen bringe
2. Ich weiß nicht, wie ich alles in nur einem Unterprogramm sortieren lassen kann
3. Aktuell sortiert er die Länge und die Anzahl nicht vollständig
Ich lese die Werte aus einer Textdatei aus, die sieht wie folgt aus:
Code:
12 50 32
36 150 50
16 75 45
8 25 5
42 130 31
10 60 132
24 50 105
10 45 73
16 80 23
6 15 2
Hier einmal der Code:
Code:
#include <stdio.h>
#include <string.h>
#define DATENSIZE 100
struct parameter
{
int durchmesser;
int laenge;
int anzahl;
};
void swap(parameter *a, parameter *b)
{
parameter t=*a; *a=*b; *b=t;
}
/*void straight-selection-sort(int *Array, int Size)
{
int MinPos = 0;
for(int i = 0; i < Size-1; i++)
{
MinPos = i;
for(int i2 = i+1; i2 < Size; i2++)
{
if(Array[MinPos] > Array[i2]) MinPos = i2;
}
swap(&Array[i], &Array[MinPos]);
}
}*/
void sort1(parameter arr[], int beg, int end)
{
if (end > beg + 1)
{
parameter piv = arr[beg];
int l = beg + 1, r = end;
while (l < r)
{
if (arr[l].durchmesser <= piv.durchmesser)
l++;
else
swap(&arr[l], &arr[--r]);
}
swap(&arr[--l], &arr[beg]);
sort1(arr, beg, l);
sort1(arr, r, end);
}
}
void sort2(parameter arr[], int beg, int end)
{
if (end > beg + 1)
{
parameter piv = arr[beg];
int l = beg + 1, r = end;
while (l < r)
{
if (arr[l].laenge <= piv.laenge)
l++;
else
swap(&arr[l], &arr[--r]);
}
swap(&arr[--l], &arr[beg]);
sort1(arr, beg, l);
sort1(arr, r, end);
}
}
void sort3(parameter arr[], int beg, int end)
{
if (end > beg + 1)
{
parameter piv = arr[beg];
int l = beg + 1, r = end;
while (l < r)
{
if (arr[l].anzahl <= piv.anzahl)
l++;
else
swap(&arr[l], &arr[--r]);
}
swap(&arr[--l], &arr[beg]);
sort1(arr, beg, l);
sort1(arr, r, end);
}
}
void main()
{
char abfrage='n';
do
{
//Lesen
FILE*Lese;
int auswahl,sortierer;
Lese=fopen ("schraubentabelle.txt","r");
if (Lese==NULL)
{
printf("Die Datei konnte nicht geoeffnet werden!\nBitte pruefen sie den Dateipfad!\n");
getchar();
return;
}
parameter daten[DATENSIZE] = {0};
int datensatz = 0;
printf("Durchmesser\tLaenge\tAnzahl\n");
rewind(Lese);
while(fscanf(Lese,"%d%d%d", &daten[datensatz].durchmesser, &daten[datensatz].laenge, &daten[datensatz].anzahl)!=EOF)
{
printf("M%d\t\t%dmm\t%d \n", daten[datensatz].durchmesser, daten[datensatz].laenge, daten[datensatz].anzahl);
++datensatz;
}
fclose(Lese);
//Sortieren
printf("\nDruecken Sie:\t1 um nach dem Durchmesser zu sotieren\n\t\t2 um nach der Laenge zu sortieren\n\t\t3 um nach der Anzahl zu sotieren\n");
do
{
scanf("%d",&auswahl);
if (auswahl == 1)
{
sort1(daten, 0, datensatz);
}
else if(auswahl == 2)
{
sort2(daten, 0, datensatz);
}
else if(auswahl == 3)
{
sort3(daten, 0, datensatz);
}
else
{
printf("Fehleingabe. Bitte geben Sie 1,2 oder 3 ein.");
}
}
while (auswahl >= 4 || auswahl <= 0);
//Áusgeben
printf("Durchmesser\tLaenge\tAnzahl\n");
datensatz = 0;
while(datensatz < DATENSIZE && daten[datensatz].durchmesser != 0)
{
printf("M%d\t\t%dmm\t%d \n", daten[datensatz].durchmesser, daten[datensatz].laenge, daten[datensatz].anzahl);
++datensatz;
}
fflush(stdin);
printf("Mit j laesst sich das Programm neustarten, jede andere Eingabe,\nsowie ein leeres Enter beenden das Programm.\nMoechten sie mit dem Programm fortfahren:");
abfrage=getchar();
}
while(abfrage=='j');
}
Ich hoffe ihr könnt mir weiter helfen. Ich verzweifel da noch dran.
Zuletzt bearbeitet: