Ich habe die Aufgabe, eine zufällige natürliche Zahl zu nehmen und die collatz-Vermutung von der letzten Zahl zum Eingang auszudrucken. Die Schritte zur Collatz-Vermutung sind: (a) Beginnen Sie mit irgendeiner positiven ganzen Zahl N. (b) Wenn N ungerade ist, multiplizieren Sie es mit 3 und addieren Sie 1. (dh N ← 3N + 1) (c) Wenn N ist gerade, dividiere es durch 2. (dh N ← N/2) (d) Wiederholen. und es endet immer in 4 -> 2-> 1-> 4-> 2-> 1 ... Mein Computer sagt mir, dass (Projektname) .exe funktioniert nicht mehr nach Eingabe der Ganzzahl.Realloc, dynamische Speicherzuweisung
Der wichtigste Punkt ist wahrscheinlich, dass wir Platz für die Vermutung reservieren und es verdoppeln sollten, wenn es vollständig verwendet wird.
mein Code:
int main()
{
unsigned long int input =0;
int max =16;
long int *collatz;
collatz = malloc(max*sizeof(long int));
long int *n = NULL;
long int *u = NULL;
int counter=0;
printf("Please enter a natural number:");
scanf("%lu", input);
printf("%lu\n",input);
if (input <1)
{
printf ("ERROR, not a natural number");
return 1;
}
n = collatz;
*n = input;
while (*n!=1)
{
if (counter == max)
{
max = max*2;
collatz = realloc (collatz,max*sizeof(long int));
}
if ((*n)%2 == 1)
{
*n=(3*(*n))+1;
}
else if ((*n)%2 == 0)
{
*n=(*n)/2;
}
*u=*n;
n=n+1;
*n=*u;
counter++;
int *i =0;
for (i=n;*i!=input;i--)
{
printf("%lu\t",*i);
}
}
return 0;
}
Ich glaube, ich habe die realloc falsch, die meisten anderen Sachen ist kein großes Geheimnis für mich (das dort nicht bedeuten, sind keine Fehler, thereprobably sind).
Danke für Ihre Hilfe!
Tun Sie niemals 'x = realloc (x, ...);' – 0andriy
warum? Wir wurden ermutigt, es zu benutzen ... @ 0andriy –
Denken Sie nur darüber nach. Es ist leicht zu beheben. Dein Code enthält momentan einen ernsthaften Fehler. – 0andriy