Zum Inhalt springen

pointer funktioniert im sortierlgorithmus nicht??


K.T.

Empfohlene Beiträge

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;

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

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]

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

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