Zum Inhalt springen

Metalmind

Mitglieder
  • Gesamte Inhalte

    32
  • Benutzer seit

  • Letzter Besuch

  1. Danke, funktioniert alles wunderbar! Du bist ein Genie
  2. Danke! Ich habe deine Tipps eingefügt und der Bubblesort arbeitet jetzt einwandfrei! Der Quicksort macht noch einige Probleme, wenn ich das Array sortieren will stürzt das Programm ab. Ist Quicksort überhaupt für zweidimensionale Arrays geeignet? Das mit strcmp dürfte kein Problem sein, da alle Wörter groß geschrieben werden. Gruß und Danke für die schnelle Hilfe! Metalmind
  3. Moin, es ist mir echt unangenehm so viele Threads für ein Programm zu öffnen, aber ich weiß echt nicht mehr weiter... Ich möchte ein zweidimensionales char Array durch selbstgeschriebene Quicksort und Bubblesort-Funktionen sortieren lassen, leider funktioniert das ganze nicht wie geplant. Mein Code: int laenge; void swap2(char *array1, char *array2) //tauscht String1 und String2 { char tmp[100]; strcpy(tmp,array1); strcpy(array1,array2); strcpy(array2,tmp); free(tmp); return; } void LexBubblesort(char *array[]) //Bubblesort-Funktion für alphabetische Arrrays { int j; int i; for (i=0; i < laenge - 1; i++) { for (j=0; j<laenge - 1; j++) { if (strcmp(array[j], array[j+1]) > 0) { swap2(array[j],array[j+1]); } } } } scmp( void *sp1, void *sp2 ) //comparator-Argument für die Quicksort-Funktion (alphabetisch) { return( strcmp(*(char **)sp1, *(char **)sp2) ); } int i; int j; char Woerter[100][20]; //das zu sortierende Array int main (void) { laenge=0; do { error = fscanf(data1,"%s",Woerter[laenge]); //Daten werden dynamisch eingelesen laenge++; //um die Anzahl der Datensätze zu zählen, in meinem Fall =10 } while (error != EOF); //Bis die Datei am Ende ist laenge--; //Da der Durchlauf in dem festgestellt wird, dass die Datei zuende ist, ebenfalls mitgezählt wird Soweit wird das Array beschrieben und die Funktionen für Bubblesort und Quicksort sind erstellt, nun möchte ich das Array in die Funktionen einsetzen (die Compilerfehler treten alle hier auf): qsort(Woerter,laenge,sizeof(char),scmp); oder LexBubblesort(Woerter); Beim Bubblesort bekomme ich eine Compilerwarnung wegen inkompatiblen Zeigertypen und beim Quicksort bekomme ich eine Compilerwarnung in Argument 4. Nun habe ich schon einige Zeit daran rumgedoktort und komme einfach nicht darauf wo mein Fehler ist. Kann mir dabei jemand helfen und mir sagen was ihr von meinem Code haltet? Ich bin dankbar für jeden Tipp. Gruß und vielen lieben Dank! Metalmind
  4. So, ich habe jetzt char tmp[100]; daraus gemacht und es läuft besser als jemals zuvor, Danke für den Rat! Da habe ich wohl etwas falsch verstanden, ich dachte ich hätte 100 Zeichenketten mit 20 Zeichen...
  5. Ich lese grad deinen letzten Satz, wann genau muss man den Speicher denn wieder frei geben, sobald man den Zeiger das letzte mal beschrieben hat, das letzte mal ausgegeben hat oder ganz am Ende des Programms? Gruß Metalmind
  6. Ich habe das jetzt mit tmp = (char*) malloc(laenge*20*sizeof(char)); gelöst, danke für die Hilfe
  7. Müsste das nicht eigendlich egal sein? In der Zeile darunter wird tmp ja mit dem ersten Array beschrieben.
  8. Danke, aber wie würde dieses Array denn dann aussehen? Wenn ich sage "char *tmp[100][20]" oder einfach nur [100] funktioniert das Compilieren in den Zeilen mit tmp aufgrund von inkompatiblen Zeigertypen nicht
  9. Sorry, war mehr oder weniger "Reflex", natürlich heißt es überall char* diese Funktion versuche ich dann für das Array: char Name[100][20]; laenge=10; ... swap2(Name[0],Name[1]); for (i=0;i<laenge;i++) { printf("%s\n",Name[i]); } mit dieser Funktion:void swap2(char *array1, char *array2) //tauscht Variable a und b { char *tmp; strcpy(tmp,array1); strcpy(array1,array2); strcpy(array2,tmp); return; }zu verwenden
  10. Bei mir hat sich gerade ein Problem ergeben, das zum Thema passt, und zwar möchte ich nach diesem Schema eine swap-Funktion für zweidimensionale char Arrays erstellen. Mein Beispiel: ich habe ein Array "char Bezeichnung[100][20]; und möchte in diesem Array nun Position Bezeichnung[0] und Bezeichnung[1] tauschen, der Kopf dafür sieht so aus: void swap(int *array1, int *array2) //tausche Array 1 und 2 Könnte mir an dieser Stelle bitte jemand beim basteln helfen, ich habe es nach dem Schema: int *tmp; strcpy(tmp,Bezeichnung[j]); strcpy(Bezeichnung[j],Bezeichnung[i]); strcpy(Bezeichnung[i],tmp);versucht, allerding erhalte ich dabei massenweise Fehlermeldungen, weiß jemand wie ich diese Funktion zum laufen kriege? Gruß Metalmind
  11. Vielen Dank, funktioniert!
  12. Moin, ich möchte eine swap-Funktion, die 2 Felder eines Arrays austauscht machen, meine Funktion: void swap(int *a, int * { int tmp; tmp =*a; *a =*b; *b =tmp; return; } ... int Nummer[100];[/code] mit dieser möchte ich nun die Felder Nummer[0] und Nummer[1] tauschen [CODE]swap(Nummer[0],Nummer[1]); bekomme allerdings den Fehler: "warning: passing arg 1 of `swap' makes pointer from integer without a cast", dasselbe für argument 2. Kann mir jemand sagen wie ich dieses Problem in den Griff bekomme? Danke und Gruß Metalmind
  13. Wenn ich also die Ausgabe der Variablen auch an ein If-Anweisung hänge, so dass sie nur ausgegeben wird wenn sie auch gebraucht wird müsste es trotzdem funktionieren? Warum hat das Programm den Fehler eigendlich nur bei TeileNr2 und nicht auch bei der Ausgabe von SerienNr bemängelt? Danke für deine Hilfe, und ab sofort werde ich mein Code in die Tags schreiben, das mit dem einrücken hat mich selbst schon gestört. Gruß Metalmind
  14. Hallo Leute, Ich habe einen merkwürdigen Fehler den ich mir nicht erklären kann, mein Code: int *SerienNr2; SerienNr2 = (int*) malloc(laenge*sizeof(int)); for(i=0;i<laenge;i++){ SerienNr2=SerienNr; } if(((strcmp(verfahren,"Bubblesort"))==0)&&((strcmp(kriterium,"Seriennummer"))==0)){ //Bubblesort für Seriennummer Bubblesort(SerienNr2); } int *TeileNr2; TeileNr2 = (int*) malloc(laenge*sizeof(int)); for(i=0;i<laenge;i++){ TeileNr2=TeileNr; } if(((strcmp(verfahren,"Bubblesort"))==0)&&((strcmp(kriterium,"Teilenummer"))==0)){ //Bubblesort für Seriennummer Bubblesort(TeileNr2); } Die Ausgabe: printf("%d %d %s %d %d %d %d\n",Nr,SerienNr,&Bezeichnung,TeileNr, Lagerbestand, SerienNr2, TeileNr2); } Soweit funktioniert alles, wenn ich nun aber die beiden Teile: TeileNr2 = (int*) malloc(laenge*sizeof(int)); for(i=0;i<laenge;i++){ TeileNr2=TeileNr; } SerienNr2 = (int*) malloc(laenge*sizeof(int)); for(i=0;i<laenge;i++){ SerienNr2=SerienNr; } in die If-Funktionen (vor das "Bubblesort...") schreibe, damit der Speicher nur belegt wird falls dies wirklich nötig ist, bekomme ich keinen Compiler Fehler, aber das Programm stürzt ab sobald ich bei der Ausgabe angekommen bin. Es funktioniert auch, wenn ich einfach die Ausgabe ",TeileNr" entferne. Kann sich das irgendjemand hier erklären? Ich habe das jetzt wie oben gezeigt gestaltet, allerdings ist das einfach nur eine Hilfslösung, die, soweit ich es verstanden habe, viel zu viel Speicher frisst.
  15. Danke, habs getestet und funktioniert!

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...