0 Daumen
665 Aufrufe



ich stehe vor folgender Aufgabe:

Wir haben eine Bilddatei - diese ist 1000 Pixel hoch. Auf dieser Bilddatei sind 10 Werte - 0 bis 9. Jedes Bild, bzw. jedes Feld einer Zahl ist 100 Pixel hoch.

Der Starwert liegt bei 0 - nun wird eine "random" Zahl ermittelt die zwischen 1000 und 1900 liegt, das ist die Zahl der Pixel um die sich das Bild verschiebt. Verschieben tut sich die Datei rückwärts, heißt nach der 0 kommt die 9, dann die 8 etc. wenn wir bei der 0 a nkommen, geht es wieder weiter mit der 9 etc . wir haben also einen Loop mit drin.

Zum Start liegt die 0 vor. Wir rufen also eine Funktion auf, mit der wir den Wert X ermitteln:

x=(randomNumber(0, 9) * 100) + 1000;  randomNumber ist in unserem Programm eine mitgelieferte Funktion, die aus der in der darauffolgenden Klammern angegebenen Spanne (0, 9) einen Wert ermittelt - dieser wird dann mit 100 multipliziert und 1000 dazu addiert, damit erhalten wir dann x.

Wir wissen also vorab, dass eine Zahl x ermittelt wird, die min 1000 und max 1900 ist.

Wir führen also einen ersten Durchlauf durch ermitteln die Zahl x mit einem Wert von 1600, die Datei fängt an durchzulaufen und wir erhalten eine Zahl y auf der die Datei stehen bleibt. y wäre nach diesem Durchlauf die 4, wir führen also einen erneuten Aufruf durch ermitteln die Zahl x mit einem Wert von 1800 die Datei fängt an durchzulaufen und bleibt wieder bei y stehen - wäre in diesem Fall die 6.

Nun benötige ich einen Weg, um diese Zahl y vorab berechnen zu können. Leider verzweifele ich an dieser Aufgabe.


Ich hoffe doch, dass ich die Aufgabe soweit korrekt und verständlich erklärt habe und wäre für jede Hilfe dankbar.


Liebe Grüße


Jan
Avatar von
Vielen lieben Dank für deine Antwort. Diese hat mir sehr geholfen und war gut nachvollziehbar.

Ich habe mich grad dran gemacht und das soweit alles in meine Programmsprache umgesetzt - mein vorläufiger Ansatz sieht so aus:

X = aktueller Wert

Z=randomNumber(0, 9)

s=X-Z

wenn s<0 dann ist X=s+10 sonst X=s

mit dieser "Gleichung" habe ich nun mehrere 100 Testläufe gemacht und die Ergebnisse stimmten ALLE.

Vielen lieben Dank!

1 Antwort

0 Daumen
 
Beste Antwort

Wenn ich das richtig verstehe ist x/100 die Anzahl der Verschiebungen. Da jeweils 10 Verschiebungen das gleiche Ergebnis haben kann ich das ganze Modulo 10 nehmen. Günstig wär es gleich gewesen sich die Zufallszahl von 0 bis 9 zu merken. Z.b.

z = randomNumber(0, 9);
x = (z * 100) + 1000;

Das heißt man hat als Startwert s = 0. Die erste Zufallszahl war die 6 woraus sich die 1600 ergab. Wir subtrahieren jetzt also vom Startwert 6. Sollte dieser Wert unter 0 liegen addieren wir einfach 10.

s = s - z;
wenn s < 0 dann s = s * 10;

Wir haben also

0 - 6 = -6
-6 + 10 = 4

Das nächste wäre z = 8 woraus sich die 1800 ergaben

4 - 8 = -4
-4 + 10 = 6

Kannst du das so nachvollziehen?

Avatar von 488 k 🚀

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Mathelounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community