Diese Aufgabe entspricht im Wesentlichen dem hier:

https://programmieraufgaben.ch/aufgabe/zahlensumme-1/3uy94fbo

Dort sind schon 4 Lösungen offengelegt.


Dabei gibt es generell drei Lösungsansätze

Die Iterative Methode ist in anderen Lösungen hier auf Gutefrage bereits genannt worden (mit for- bzw. while-Schleife). Die Frage war ja explizit nach einer FOR-Schleife. Daneben gibt es aber meist noch zwei andere Wege, die ich hier aufzeigen will:

1. Die Methode mit einer Formel:

summe := höchsteZahl * (höchsteZahl + 1) / 2

Diese Methode hat gegenüber der for-Schleife den Vorteil, dass sie immens schneller ist. Also: In der Praxis sowas nie mit for-Schleife lösen. Zum Lernen der For-Schleife ist das ja ok.

2. Die Methode vermittelst Rekursion ist zwar nicht die schnellste, aber meist die am schnellsten entwickelte:

summe(höchsteZahl) := 1, genau dann, wenn höchsteZahl schon 1 ist

oder aber

summe(höchsteZahl) := höchsteZahl + summe(höchsteZahl - 1).


...zur Antwort

Bei einem Algorithmus muss man davon ausgehen, dass das Resultat eindeutig ist. Ebenso ist dies der Fall bei den meisten eingesetzten Pseudozufallszahl-Generatoren. Diese liefern eine Reihe von Zahlen nach einem genau festgelegten Muster. Es wird für Simulationen sogar so eingesetzt, dass dieses Muster (gesteuert von einer Startzahl, Seed genannt) immer dieselben Zahlen durchläuft und bei der selben Zahl beginnt.

In der Praxis wird meist die lineare Kongruenzmethode verwendet. https://www.programmieraufgaben.ch/aufgabe/lineare-kongruenzmethode/qqrcbps2

Diese Methode hat den Vorteil, dass man die Anzahl vorkommender Zahlen und die Streuung vorab gut simulieren und testen kann. Da sich diese Methode für große Zahlenreihen eignet, wird sie in den meisten Programmiersprachen eingesetzt. Für uns Menschen scheint die Reihenfolge der Zahlen auf den ersten Blick zufällig und so sprechen wir Informatiker hier lediglich von Pseudozufallszahlen. Der Nachteil an Pseudozufallszahlen ist eben, dass sie nicht zufällig sind, sondern nur so scheinen.

Echte Zufallszahlen erhalten wir z. B. vom radioaktiven Zerfall oder von anderen in der Natur gemessenen Ereignissen, wie z. B. die Anzahl Sonnenstunden an einem häufig bedeckten Ort oder das Auf und Ab von Wechselkursen an der Börse. Solche Messresultate sind z. B. auf "random.org" erhältlich. Hier sprechen wir dann aber nicht von einem Algorithmus, sondern von einer Messreihe zufälliger Werte. Der Nachteil hier ist jedoch immer, dass die Messung durch physikalische Einflüsse (Messgeräte, Temperaturen) beschränkt sein kann und es schwierig ist, die Zahlen so zu "eichen", dass sie echt gleichverteilt (normalverteilt oder poissonverteilt) werden.

...zur Antwort

Kommt etwas darauf an, was bei negativen Zahlen geschehen soll.

Für positive Zahlen ist das Folgende wohl am schnellsten:

double ausgangszahl ;
int gerundeteZahl;
ausgangszahl = komplizierteRechnung(...) ;
gerundeteZahl = (int) (ausgangszahl + 0.5);

Bei negativen Zahlen will man aber oft nicht auf die nächst höhere Zahl runden, sondern manchmal auch auf die nächst kleinere. Obige Formel ergäbe für -3.7 die ganze Zahl -3. Hingegen wird -3.1 nun auf -2 aufgerundet!

-3.7 z. B. soll wie erwähnt oft auf -4 gerundet werden. Die folgende Formel verhält sich bei positiven Zahle exakt wie die obige Formel, doch negative Zahlen werden auch abgerundet.

gerundeteZahl = (int) (ausgangszahl + (ausgangszahl > 0 ? 0.5 : -0.5));

...zur Antwort
Weitere Inhalte können nur Nutzer sehen, die bei uns eingeloggt sind.