Welche Bedeutung haben folgende Zeilen im Quellcode (Informatik)?

3 Antworten

Laenge der Folge a

nicht "Folge", sondern "Array".

Das Array enthält mehr als einen Wert. Und um auf die einzelnen Werte zugreifen zu könnnen, spricht man den Index davon an.

Der Index beginnt bei 0 für den ersten Wert.

damit hat merker den Wert 11

damit hat die Variable "merker" den Wert zugewiesen bekommen, der im Array "a" an Index 0 steht.

Laenge der Folge a

genauer -> Länge des Arrays "a", was gleichbedeutend mit der Anzahl der darin enthaltenen Werte (und somit auch der enthaltenen Indizes) ist.

Leider erschließt sich der Sinn hinter dieser Bedingung nicht.

Der weitere Code innerhalb der While-Wend-Schleife soll nur dann ausgeführt werden, wenn i kleiner ist als die Anzahl der in a enthaltenen Werte ist.

Und kann mir jemand sagen wofür "a[i]" in Zeile 8 steht 

i stellt den Index dar, dessen zugehörigen Wert man in dem Array a abrufen möchte.

und welche Bedeutung die Zeile 10 hat.

i wird um den Wert 1 erhöht, damit im nächsten Durchlauf auf den nächsten Index in dem Array a zugegriffen werden kann. Und genau hier dürfte dann auffallen, warum die Bedingung der While-Wend-Schleife prüft, ob i kleiner als n ist. Ist i größer, würdest du auf einen nicht existierenden Index in dem Array zugreifen und bekommst dafür einen Laufzeitfehler.


Lewandolski 
Beitragsersteller
 12.07.2025, 22:06

Vielen Dank für deine Erklärung, das hilft mir weiter. Was mich noch verwirrt ist, wenn ich "int i = 2" im Code eingebe, müsste die Prüfung doch eigentlich beim 2. Element (der 7) starten, das ist aber nicht der Fall. Habe ich da einen Denkfehler?

a[i] ist der Inhalt des Arrays "a" an der Stelle "i".

Die Zeile: int[] a = {11,7,8,3,15,13,9,19,18,10,4};

erzeugt das Array "a". Das ist wie eine Tabelle mit nur einer Spalte (oder einer Zeile wie auch immer man das betrachten möchte). und a[i] ist der i-te Eintrag, von 0 beginnend gezählt.

a[0] wäre hier 11, a[1] wäre 7 und a[2] 8 und so weiter.

a.length ist die Anzahl der Elemente in a, also 11 wenn ich mich nicht verzählt habe.

a[a.length - 1] wäre also 4, weil von 0 beginnend gezählt

-----

n wird auf a.length gesetzt.

while (i < n) bedeutet also "solange i kleiner ist, als das Array a lang ist.

Gleichzeitig wird mit i = i + 1 Der Wert von i um 1 erhöht.

Also im ersten Schritt ist i 1, dann 2, dann 3 und am Ende n.

Das wird beides gemacht, um in der Schleife mit a[i] Jeden Eintrag des Arrays auszulesen (außer den an an Stelle 0, denn den Wert hat man sich in Merker gespeichert.

-----

Insgesamt sucht der Code im Array a nach dem kleinsten Wert und gibt diesen aus.

-----

Schau dir am besten Tutorials auf Youtube an, das ist besser als zu versuchen einfach Code Snippets zu verstehen. Oder nutze w3schools.

Im Zweifel ein "langsameres" Tutorial suchen


Lewandolski 
Beitragsersteller
 12.07.2025, 22:06

Vielen Dank für deine Erklärung, das hilft mir weiter. Was mich noch verwirrt ist, wenn ich "int i = 2" im Code eingebe, müsste die Prüfung doch eigentlich beim 2. Element (der 7) starten, das ist aber nicht der Fall. Habe ich da einen Denkfehler?

R4c1ngCube  12.07.2025, 22:18
@Lewandolski

Wenn du int i = 2 machst, ist der erste Vergleich der in der Zeile 8 passiert, der von a[2], (also der 8, denn es wird von 0 beginnend gezählt, siehe meine Antwort) mit marker, welcher zuvor auf a[0] (der 11) gesetzt wurde.

Also ist der erste Vergleich von

 if (a[i]<merker) in Wahrheit

if (8 < 11)

Lewandolski 
Beitragsersteller
 13.07.2025, 08:35
@R4c1ngCube

Danke dir. Klingt logisch und verstehe ich auch, funktioniert nur leider nicht. Wenn ich in der Zahlenfolge an erste Stelle eine 1setze und dann int i = 2 mache, wird mir als Ergebnis trotzdem 1 angegeben obwohl er die eigentlich überspringen müsste. Hast du dafür eine Erklärung?

Lewandolski 
Beitragsersteller
 13.07.2025, 08:38
@Lewandolski

Ok ich habe das Problem selbst gelöst, a[0] speichert ja das erste Element und die beiden Zahlen danach werden übersprungen 😀

R4c1ngCube  13.07.2025, 08:48
@Lewandolski

Also eigentlich sollte nur a[1] übersprungen werden

a[0], also die 1, wird betrachtet wegen Zeile 4 (marker = a[0])

Und a[2] und Folgende werden wegen Zeilen 8/9 betrachtet

---

Du könntest versuchen den Code mal auf dem Papier durchzugehen, also für jede Variable aufschreiben was der aktuelle Wert ist und dann mitschreiben wenn sich etwas verändert.

Dann sieht man am besten wie sich der Code verhält

R4c1ngCube  13.07.2025, 08:52
@R4c1ngCube

if (a[i] < marker) entspricht im ersten Durchlauf

if (a[2] < a[0]) bzw hier

if (8 < 1)

n wird Zeile 6 auf die Anzahl der Elemente in a (11) gesetzt. i auf 1 in Zeile 5. Solange i kleiner ist als n, wird die Schleife ausgeführt. Da 1 < 11 ist, wird das ausgeführt. Jetzt wird geschaut, ob a[i] kleiner ist als der "merker" und wenn ja, der merker auf den Wert von a[i] gesetzt. a[i] bedeutet dabei das i-te Element von a, wobei die Zählung bei 0 beginnt. Oben hast du ja schon a[0], wo die 11 im merker gespeichert wird. Da i 1 ist, wird jetzt das 2. Element von a, die 7, mit merker verglichen und da diese kleiner ist als der merker, in dem merker gespeichert.

In Zeile 10 wird dann zu i eins addiert (1+1=2) und das Ergebnis wieder in i gespeichert. Dann geht es wieder mit der while-Bedingung oben weiter, es wird verglichen, ob i (jetzt 2) kleiner als 11 ist, etc... bis nach etlichen Durchläufen dann i 11 ist und die Bedingung nicht mehr erfüllt ist. Dann kommt die Zeile nach der Schleife und der merker wird ausgegeben. In dem merker steht dann die kleinste der Zahlen aus a drin.

Woher ich das weiß:Berufserfahrung – Softwareentwickler & Admin

Lewandolski 
Beitragsersteller
 12.07.2025, 22:05

Vielen Dank für deine Erklärung, das hilft mir weiter. Was mich noch verwirrt ist, wenn ich "int i = 2" im Code eingebe, müsste die Prüfung doch eigentlich beim 2. Element (der 7) starten, das ist aber nicht der Fall. Habe ich da einen Denkfehler?

iQa1x  12.07.2025, 22:10
@Lewandolski

Die Zählung beginnt bei 0. Bei i=2 beginnt der daher bei der 8, dem 3. Element.