Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

pointer funktioniert im sortierlgorithmus nicht??

Empfohlene Antworten

Veröffentlicht

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;

}

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]

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.