K.T. Geschrieben 10. Mai 2005 Geschrieben 10. Mai 2005 Hallo ich hab ein "kleines" Problem.. :confused: mein Sortieralgorithmus funktioniert mit zeiger statt arrays nicht mehr. -->meine aufgabe war es 3 array mit zufallszahlen befüllen, dann sollte man sich einen aussuchen,(ein zeiger soll auf die basisadresse dieses arrays zeigen) dieser soll dann sortiert werden und die anderen beiden unsortiert ausgegeben... er gibt nun alles aus und anstatt den array zu sortiern werden die zahlen nur durchgemischt und es kommt eine Fehlermeldung Bitte helft mir muss den es morgen abgeben:( gruß kati Hier mein Qulltext: #include <stdio.h> #include <time.h> #include <stdlib.h> #define ANZAHL 4 #define ANFANG -100 #define ENDE 100 void initzufallsgenerator(); int zufallszahl(int iANFANG, int iENDE); void main() { int i=0, j=0, IndexMin=0, Temp=0, iEingabe=0; int *piZeiger=NULL; int AiSort1[ANZAHL]; int AiSort2[ANZAHL]; int AiSort3[ANZAHL]; initzufallsgenerator(); //Schleifen für drei Arrays, zufallszahlen werden zugewiesen printf ("Array 1:\n"); for (i=0; i<=ANZAHL; i++) { AiSort1=zufallszahl(ANFANG, ENDE); printf ("%i\t",AiSort1); } printf ("\n\nArray 2:\n"); for (i=0; i<=ANZAHL; i++) { AiSort2=zufallszahl(ANFANG, ENDE); printf ("%i\t",AiSort2); } printf ("\n\nArray 3:\n"); for (i=0; i<=ANZAHL; i++) { AiSort3=zufallszahl(ANFANG, ENDE); printf ("%i\t",AiSort3); } printf("\n\n\n"); printf("Welchen Array moechten Sie sortiert haben??? Geben sie 1,2 oder 3 ein!!\t"); scanf("%i", &iEingabe); if(iEingabe ==1) piZeiger = AiSort1; else if(iEingabe ==2) piZeiger = AiSort2; else if(iEingabe ==3) piZeiger = AiSort3; for(i=0; i<=ANZAHL; i++) { IndexMin=i; for(j=0; j<=ANZAHL; j++) { if(*(piZeiger+j)<*(piZeiger+IndexMin)) { IndexMin=j; } } Temp = *(piZeiger+IndexMin); // *(piZeiger+IndexMin) = *(piZeiger+i); //Zahlen werden getauscht *(piZeiger+i) = Temp; } for(i=0; i<ANZAHL+1; i++) printf("%i\t", AiSort1); printf("\n\n"); for(i=0; i<ANZAHL+1; i++) printf("%i\t", AiSort2); printf("\n\n"); for(i=0; i<ANZAHL+1; i++) printf("%i\t", AiSort3); printf("\n\n"); } void initzufallsgenerator() { srand ( (unsigned) time (NULL) ); } int zufallszahl(int iANFANG, int iENDE) { int Zahl; Zahl=ANFANG+(rand()%(ENDE-ANFANG+1)); return Zahl; } Zitieren
Manfred.Becker Geschrieben 10. Mai 2005 Geschrieben 10. Mai 2005 Hi kati, dein Ansatz ist ganz in Ordnung. Das Problem liegt im Detail: 1.) Du definierst ein Array mit ANZAHL Feldern. Das bedeutet aber, dass der Indexzugriff immer nur von 0 bis ANZAHL-1 gehen darf. Alle for-Schleifen müssen deshalb so aussehen: for (i=0; i<ANZAHL; i++) 2.) Die Zahlenpaare für den Vergleich werden über zwei for-Schleifen ermittelt. Dabei läuft die erste Schleife von 0 bis ANZAHL-1 und die innere Schleife von i+1 bis ANZAHL for(i=0; i<ANZAHL-1; i++) //i von 0 bis ANZAHL-1 { for(j=i+1; j<ANZAHL; j++) //j von i+1 bis ANZAHL { } } [/PHP] 3.) Die Vertauschen zweier Zahlenpaare darf nur dann erfolgen, wenn zuvor festgestellt wurde, dass Zahl1<Zahl2 ist! [PHP] if (IndexMin != i) //Getauscht wird nur dann, wenn kleiner Zahl entdeckt wurde { Temp = *(piZeiger+IndexMin); // *(piZeiger+IndexMin) = *(piZeiger+i); //Zahlen werden getauscht *(piZeiger+i) = Temp; } Hier mein Korrekturvorschlag: int main(int argc, char* argv[]) { int i=0, j=0, IndexMin=0, Temp=0, iEingabe=0; int *piZeiger=NULL; int AiSort1[ANZAHL]; int AiSort2[ANZAHL]; int AiSort3[ANZAHL]; initzufallsgenerator(); //Schleifen für drei Arrays, zufallszahlen werden zugewiesen printf ("Array 1:\n"); for (i=0; i<ANZAHL; i++) { AiSort1[i]=zufallszahl(ANFANG, ENDE); printf ("%i\t",AiSort1[i]); } printf ("\n\nArray 2:\n"); for (i=0; i<ANZAHL; i++) { AiSort2[i]=zufallszahl(ANFANG, ENDE); printf ("%i\t",AiSort2[i]); } printf ("\n\nArray 3:\n"); for (i=0; i<ANZAHL; i++) { AiSort3[i]=zufallszahl(ANFANG, ENDE); printf ("%i\t",AiSort3[i]); } printf("\n\n\n"); piZeiger=NULL; do { printf("Welchen Array moechten Sie sortiert haben??? Geben sie 1,2 oder 3 ein!!\t"); scanf("%i", &iEingabe); if(iEingabe ==1) piZeiger = AiSort1; else if(iEingabe ==2) piZeiger = AiSort2; else if(iEingabe ==3) piZeiger = AiSort3; } while (piZeiger==NULL); for(i=0; i<ANZAHL-1; i++) //i von 0 bis ANZAHL-1 { IndexMin=i; for(j=i+1; j<ANZAHL; j++) //j von i+1 bis ANZAHL { if(*(piZeiger+j)<*(piZeiger+IndexMin)) { IndexMin=j; } } if (IndexMin != i) //Getauscht wird nur dann, wenn kleiner Zahl entdeckt wurde { Temp = *(piZeiger+IndexMin); // *(piZeiger+IndexMin) = *(piZeiger+i); //Zahlen werden getauscht *(piZeiger+i) = Temp; } } for(i=0; i<ANZAHL; i++) printf("%i\t", AiSort1[i]); printf("\n\n"); for(i=0; i<ANZAHL; i++) printf("%i\t", AiSort2[i]); printf("\n\n"); for(i=0; i<ANZAHL; i++) printf("%i\t", AiSort3[i]); printf("\n\nDas war's!\n"); return 0; } [/PHP] Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.