Also ich soll in das teil da unten ne Funktion einbauen womit man die Struct nach jedem x beliebigen Element sortieren kann!
Mein Problem ich MUSS mit qsort arbeiten und bekomm es zum verrecken nicht ans laufen! Ich weiß das der quellcode recht bescheiden ist und oft rum getrickst wurde aber ich kanns nicht besser. Ich habe mir das ganze WE die Finger wund getipt. Es kommt mir nicht auf verbesserungen jedes details an aber kann mir vlt einer sagen wie ich das qsort ans laufen bekomme. Den text den ich eingebunden hab hab ich ausem internet von irgentwo her weil ich absolut 0 von sortieren weiß.
Alles anzeigen
:oops: :oops: :oops:
Mein Problem ich MUSS mit qsort arbeiten und bekomm es zum verrecken nicht ans laufen! Ich weiß das der quellcode recht bescheiden ist und oft rum getrickst wurde aber ich kanns nicht besser. Ich habe mir das ganze WE die Finger wund getipt. Es kommt mir nicht auf verbesserungen jedes details an aber kann mir vlt einer sagen wie ich das qsort ans laufen bekomme. Den text den ich eingebunden hab hab ich ausem internet von irgentwo her weil ich absolut 0 von sortieren weiß.
Quellcode
- // Header Dateien
- #include <stdio.h>
- #include <stdlib.h>
- #include <conio.h>
- #include <string>
- #include <iostream.h>
- using namespace std;
- // Deklaration der globalen Variablen
- // Variablen fuer den Dateizugriff
- FILE *fp1;
- char filename[30];
- FILE *fp2;
- char filenamer[3];
- // Deklaration der allgemeinen Struktur
- struct myStruct
- {
- //damit der Name nicht verändert wird
- char leer[3];
- char vorname[100];
- //char wegen der 0 bei der vorwahl die führt zu fehlern
- char tel[100];
- char name[100];
- char ort[100];
- int nr;
- char email[100];
- int plz;
- char geb[100];
- char str[100];
- };
- // Deklaration der konkrten Struktur
- myStruct test[100];
- // Prototyping eigener Funktionen
- void structload(int &);
- void newitems(int &);
- void showall(int);
- void structsave(int &);
- void edit(int);
- void delte(int &);
- void sorte(char*,int,int);
- void read(char);
- // Hauptprogramm
- void main()
- // Dargestellt wird das Hauptmenu
- // von hier aus wird in die einzelnen Aktionen verzweigt
- {
- int ausw,eintrag=0;
- char feld[100];
- do
- {
- system("cls");
- cout<<"Testprogramm zum Lesen und Schreiben von Strukturen\n\n";
- cout<<"1. vorhandene Struktur laden\n";
- cout<<"2. neue Eintraege vornehmen\n";
- cout<<"3. alle Eintraege anzeigen\n";
- cout<<"4. Struktur speichern\n";
- cout<<"5. Editieren von Eintraegen\n";
- cout<<"6. Eintrag entfernen\n";
- cout<<"7. Sortiert nach Alphabet ausgeben\n";
- cout<<"8. Programm beenden\n\n";
- cout<<"Ihre Auswahl: --> ";
- cin >>ausw;
- switch(ausw)
- {
- case 1:
- structload(eintrag);
- break;
- case 2:
- newitems(eintrag);
- break;
- case 3:
- showall(eintrag);
- break;
- case 4:
- structsave(eintrag);
- break;
- case 5:
- edit(eintrag);
- break;
- case 6:
- delte(eintrag);
- break;
- case 7:
- read(feld[100]);
- sorte(feld,0,eintrag-1);
- break;
- case 8:
- break;
- default:
- cout<<"Falsche Auswahl! Bitte korrigieren!\n";
- cout<<"Weiter mit beliebiger Taste";
- getch();
- }
- }
- while(ausw!=8);
- }
- // eigene Funktion zum Lesen der Struktur (komplett) von einer Datei
- void structload(int &eintrag)
- {
- int i;
- cout<<"\n\nBitte geben Sie den Namen einer bestehenden Datei an: --> ";
- cin >>filename;
- fp1 = fopen(filename,"r");
- fp2 = fopen(filename,"r");
- if(fp1!=NULL)
- {
- fscanf(fp2,"%i",&eintrag);
- for(i=1;i<=eintrag;i++)
- {
- fread(&test[i], sizeof(myStruct), 1, fp1);
- }
- fclose(fp1);
- fclose(fp2);
- cout<<"Lesen erfolgreich\n\n";
- }
- else
- {
- cout<<"Fehler beim Oeffnen von: %s\n\n",filename;
- }
- cout<<"Weiter mit beliebiger Taste";
- getch();
- }
- // eigene Funktion zum Schreiben der Struktur (komplett) auf eine Datei
- void structsave(int &eintrag)
- {
- int i;
- cout<<"\n\nBitte geben Sie den Namen fuer die zu speichernde Datei an: --> ";
- cin >>filename;
- fp1 = fopen(filename,"w");
- fp2 = fopen(filename,"w");
- for(i=1;i<=eintrag;i++)
- {
- fwrite(&test[i], sizeof(myStruct), 1, fp1);
- }
- fprintf(fp2,"%i",eintrag);
- fclose(fp1);
- fclose(fp2);
- cout<<"Schreiben erfolgreich\n\n";
- cout<<"Weiter mit beliebiger Taste";
- getch();
- }
- // eigene Funktion zum Erfassen aller Strukturelemente
- void newitems(int &eintrag)
- {
- int i=eintrag;
- char abbruch;
- system("cls");
- do
- {
- i=i+1;
- eintrag=eintrag+1;
- cout<<"\nBitte Eintrag vornehmen fuer Position "<<i<<"\n\n";
- cout<<"Bitte Vorname eigeben: --> ";
- cin >>test[i].vorname;
- cout<<"Bitte Nachname eingeben: --> ";
- cin >>test[i].name;
- cout<<"Bitte Geburtstag eingeben: --> ";
- cin >>test[i].geb;
- cout<<"Bitte Postleitzahl: -->";
- cin>>test[i].plz;
- cout<<"Bitte Wohnort eingeben: -->";
- cin>>test[i].ort;
- cout<<"Bitte Strasse eingeben: -->";
- cin>>test[i].str;
- cout<<"Bitte Hausnummer eingeben: -->";
- cin>>test[i].nr;
- cout<<"Bitte Telefon eingeben: -->";
- cin>>test[i].tel;
- cout<<"Bitte Email eingeben: -->";
- cin>>test[i].email;
- cout<<"Wollen sie weitere Einträge machen?(j/n)";
- cin>>abbruch;
- }
- while (abbruch=='j');
- }
- // eigene Funktion zum Anzeigen aller Strukturelemente
- void showall(int eintrag)
- {
- int i;
- system("cls");
- for (i=1;i<=eintrag;i++)
- {
- cout<<"Eintrag-Nr.: "<<i<<"\n";
- cout<<"Vorname : "<<test[i].vorname<<"\n";
- cout<<"Nachname : "<<test[i].name<<"\n";
- cout<<"Plz : "<<test[i].plz<<"\n";
- cout<<"Ort : "<<test[i].ort<<"\n";
- cout<<"Strasse : "<<test[i].str<<"\n";
- cout<<"Hausnummer : "<<test[i].nr<<"\n";
- cout<<"Tel. : "<<test[i].tel<<"\n";
- cout<<"Geburtstag : "<<test[i].geb<<"\n" ;
- cout<<"Email : "<<test[i].email<<"\n\n";
- }
- cout<<"\n\nWeiter mit Enter";
- getch();
- }
- //Funktion zum editieren
- void edit(int eintrag)
- {
- int wahl,edition;
- char best='n';
- do
- {
- cout<<"Geben sie den zu editierenden Eintrag an:";
- cin>>wahl;
- cout<<"Eintrag-Nr.: "<<wahl<<"\n";
- cout<<"Vorname : "<<test[wahl].vorname<<"\n";
- cout<<"Nachname : "<<test[wahl].name<<"\n";
- cout<<"Plz : "<<test[wahl].plz<<"\n";
- cout<<"Ort : "<<test[wahl].ort<<"\n";
- cout<<"Strasse : "<<test[wahl].str<<"\n";
- cout<<"Hausnummer : "<<test[wahl].nr<<"\n";
- cout<<"Tel. : "<<test[wahl].tel<<"\n";
- cout<<"Geburtstag : "<<test[wahl].geb<<"\n" ;
- cout<<"Email : "<<test[wahl].email<<"\n\n";
- cout<<"Wollen sie diesen Eintrag bearbeiten?(j/n)";
- cin>>best;
- }
- while (best=='n');
- cout<<"Was möchten sie editieren?\n1.Vorname\n2.Nachname\n3.Plz\n4.Ort\n5.Strasse";
- cout<<"\n6.Hausnummer\n7.Tel.\n8.Geburtstag\n9.Email\n10.zurueck ins Menue\nEingabe:";
- cin>>edition;
- switch(edition)
- {
- case 1:
- cout<<"Vorname: -->";
- cin>>test[wahl].vorname;
- break;
- case 2:
- cout<<"Nachname: -->";
- cin>>test[wahl].name;
- break;
- case 3:
- cout<<"Plz: -->";
- cin>>test[wahl].plz;
- break;
- case 4:
- cout<<"Ort: -->";
- cin>>test[wahl].ort;
- break;
- case 5:
- cout<<"Strasse: -->";
- cin>>test[wahl].str;
- break;
- case 6:
- cout<<"Hausnummer: -->";
- cin>>test[wahl].nr;
- break;
- case 7:
- cout<<"Telefon: -->";
- cin>>test[wahl].tel;
- break;
- case 8:
- cout<<"Geburtstag: -->";
- cin>>test[wahl].geb;
- break;
- case 9:
- cout<<"Email: -->";
- cin>>test[wahl].email;
- break;
- case 10:
- break;
- }
- cout<<"Weiter mit Eingabe!";
- getch();
- }
- //Löschfunktion
- void delte(int &eintrag)
- {
- int wahl,i;
- char best='n';
- do
- {
- cout<<"Geben sie den zu loeschende Eintrag an:";
- cin>>wahl;
- cout<<"Eintrag-Nr.: "<<wahl<<"\n";
- cout<<"Vorname : "<<test[wahl].vorname<<"\n";
- cout<<"Nachname : "<<test[wahl].name<<"\n";
- cout<<"Plz : "<<test[wahl].plz<<"\n";
- cout<<"Ort : "<<test[wahl].ort<<"\n";
- cout<<"Strasse : "<<test[wahl].str<<"\n";
- cout<<"Hausnummer : "<<test[wahl].nr<<"\n";
- cout<<"Tel. : "<<test[wahl].tel<<"\n";
- cout<<"Geburtstag : "<<test[wahl].geb<<"\n" ;
- cout<<"Email : "<<test[wahl].email<<"\n\n";
- cout<<"Wollen sie diesen Eintrag loeschen?(j/n)";
- cin>>best;
- }
- while(best=='n');
- for(i=wahl;i<=eintrag;i++)
- {
- test[i]=test[i+1];
- }
- eintrag=eintrag-1;
- cout<<"Loeschen erfolgreich!\nVergessen sie nicht zu speichern\nWeiter mit Eingabe!";
- getch();
- }
- void read(char *feld[])
- {
- int i;
- char *ptr;
- char puffer[151];
- i = 0;
- do
- {
- ptr = fgets(puffer,150,stdin);
- if (ptr!=NULL)
- {
- feld[i] = (char *) malloc(strlen(puffer)+1);
- strcpy(feld[i],puffer);
- i++;
- }
- }
- while(ptr!=NULL);
- }
- //Sortierfunktion
- void sorte(char *feld[],int links, int rechts)
- {
- int i,j;
- char *x,*y;
- i = links;
- j = rechts;
- x = feld[(i+j)/2];
- do
- {
- while (strcmp(feld[i],x) < 0&&i<rechts)i++;
- while (strcmp(feld[i],x)>0&&j>links)j--;
- if (i <= j)
- {
- y = feld[i];
- feld[i] = feld[j];
- feld[j] = y;
- i++;
- j--;
- }
- }
- while (i<=j);
- if (links < j) sorte(feld,links,j);
- if (rechts > i) sorte(feld,i,rechts);
- }
:oops: :oops: :oops: