Frage von DarkLea, 28

For-schleife erklärung, hilfe?

Ich studier informatik und probier grad ne aufgabe zu lösen, wo ich ein array angegrben hab (mit 16zahlen) und da soll icu nun mit der for schleife den median und mittelwert ausrechnen. Kann mir jmd erklären wie genau die for-schleife funktioniert?

Antwort
von ProfFrink, 14

Eine For-Schleife ist zunächst einmal eine Wiederholungsanweisung mit eine fest eingestellten Anzahl von Wiederholungen. In Deine Fall sind es 16. Die Bildung des Mittelwertes ist einfach und verlangt nur die 16fache Addition von Einzelwerten mit anschliessender Division durch 16, was ausserhalb der For-Schleife zu erfolgen hat.

Die Auffindung des Medianwertes ist schon etwas anspruchsvoller. Ein einfacher Weg wäre aber einfach mit jeder neu eingelesenen Zahl zu fragen, wie oft sie grösser ist als der bereits eingelesen Zahlenbestand. Wenn diese Frage 8mal mit "Ja" beantwortet wurde, dann hast Du Deinen Medianwert und kannst auf weitere 'Mediansuchen' verzichten. - Aber hier hast Du bereits eine Schleife-in-Schleife-Konstruktion.

Kommentar von DarkLea ,

wieso denn 16 wiederholungen? ich habe sechzehn zahlen, die jedoch nur von 1-7 gehen. es kommen also manche auch doppelt vor. und für den median muss ich die zahlen ja nach größe geordnet haben odernichg?

Antwort
von Firas2, 11

[Notizen] In diesem Bsp. Wird die Schleife 10 mal widerholt

for [widerholt etwas mehrmals] (Variable = 0; Variable < 10 [Wenn die Variable unter 10 ist, dann raus aus der Schleife] ; Variable++ [Variable wird bei jeder Widerholung +1 größer [++=+1 --=-1 +10=+10 [wenn Variable++ nicht funktioniert, dann benutze Variable = ++]]]{ Befehle in der Schleife}

Antwort
von Tekumi, 10

Hallöchen DarkLea,

der grundsätzliche Aufbau einer normalen for-schleife ist beispielsweise folgender:

for(int i = 0; i <= arr.length(); i++)
{
     ...
}

Hierbei ist der Kopf unterteilt in:

  • int i = 0; - Hier wird eine Variable angelegt und ein Wert zugewiesen. Diesen Wert kannst du als deinen Startwert ansehen
  • i <= arr.Length(); - Dies ist die Abbruchbedingung der Schleife. Ist diese Ausdruck wahr, wird der Code nicht mehr ausgeführt und die Schleife ist zu Ende
  • i++ - Dies ist die standardmäßig auszuführende Aktion, sobald ein Schleifendurchlauf abgeschlossen ist.

Leider hast du nicht erwähnt, welche Sprache du nutzt, daher nehme ich jetzt einfach mal Java her, um dir ein Beispiel zu zeigen. Folgend der Inhalt einer Methode:

public double getMValue()
{
int[] arr = new int[16];
int mwert = 0; // For-Schleife, um das Array zu befüllen. Zahlenfolge ist dann: 0 1 4 9 16 25 ... for(int i = 0; i < arr.length(); i++) {    arr[i] = i*i; } // For-Schleife, um den Mittelwert zu errechnen for(int i = 0; i < arr.length(); i++) {    mwert += arr[i]; } mwert = mwert / arr.length(); return mwert; }

Ich hoffe ich konnte dir helfen. Bei Rückfragen antworte gerne auf meinen Kommentar!

Kommentar von DarkLea ,

ich programmier in c++. wie kommst du denn auf die zahlenfolge?

Kommentar von Tekumi ,

Ich rechne in jedem Schleifendurchlauf "i * i":

0 * 0 = 0
1 * 1 = 1
2 * 2 = 4
3 * 3 = 9
4 * 4 = 16
5 * 5 = 25

Kommentar von SirNik ,

Tekumi, Anmerkung zu Punkt "i <= arr.length". 1) length ist eine Variable bei einem Array in Java und keine Methode (bei String ist es eine Methode) und 2) du schriebst dass abgebrochen wird, wenn die es wahr ist, aber es wird natürlich abgebrochen, wenn def logische Ausdruck falsch ergibt. Dies ist eine Anmerkung um die Fragestellerin nicht zu verwirren, wenn Sie bei Tests Fehler entdeckt. und so :D

Kommentar von Tekumi ,

SirNik, da hast du auf jeden Fall recht! Ich hatte erst ein Beispiel für ein String-Array geschrieben, wollte aber dann doch direkt auf den konkreten Fall eingehen. Vielen Dank für die Anmerkung!

Antwort
von lillian92, 13

Ist die Array-Länge nur ein Beispiel oder hat das Array immer 16 zahlen?

Ich würde es so machen – allgemein formuliert (array.length, sollte sich auch durch eine fixe Zahl ersetzen lassen):

mittelwert = 0;

for  i <- 0 bis array.length {
mittelwert = mittelwert + array[i]
}

mittelwert = mittelwert / array.length;

if ( array.lenght modulo 2 == 0) {
median = array[array.lenght/2 -1] + array[array.lenght/2];
median = median / 2;
}

else {
median = array[array.lenght/2 - 0.5]
}


Kommentar von DarkLea ,

ist nur ein beispiel. was genau macht den die for-schleife und welche drei werte (initialisierung, bedingungen, inkrement) muss man eintragen? also woher weiß ich was ich da reinschreiben muss?

Kommentar von lillian92 ,

Eine Schleife führt die selbe Operation immer wieder aus. In der Initialisierung wird eine Art Zähler angelegt, der sich immer mehr der (Abbruchs-)Bedinung annähert. In welchen Schritten er sich annähert, legt das Inkrement fest.

for (int i = 0; i <= 20, i++) würde zum Beispiel eine Operation 21(!) mal ausführen. Die Initialisierung legt hier i mit dem Wert 0 fest, während, die Abbruchbedingung sagt, dass die Schleife so oft ausgeführt wird, bis i = 20 (<= entspricht in der Programmierung ≤ und durch das muss es bei 20 noch ein Mal ausgeführt werden, deshalb 21 Operationsausführungen). i++ besagt, dass am Ende jedes Schleifendurchlaufs i um 1 erhöht wird, sprich es wird 0,1,2,3…19, 20 gezählt.

Die Abbruchsbedinung muss aber in jedem Fall erreichbar sein, sonnst erhältst du eine Endlosschleife! ZB würde die Bedingung in for (float i = 100; i < 0, i/2) niemals erreicht werden können, da man mit einer Division nicht unter 0 kommt (je nach Programmiersprache durch fehlende Genauigkeit bei der Nachkommazahlenberechnung irgendwann vielleicht auf 0 aber niemals darunter). 

Also Kurzfassung: die Initialisierung setzt einen Wert, die Bedingung sagt, welchen Wert die in der Initialisierung festgelegte Variabel maximal/minimal erreichen kann und das Inkrement ist eine Rechen-Operation die auf den Wert aus der Initialisierung ausgeführt wird.

Antwort
von 2015hannes, 9

Eine For-schleife kann man benutzen, wenn man eine Aktion für jedes einzelne Objekt in einer Liste oder einem Array ausführen will.

Wie du eine for bzw. foreach-Schleife verwendest, könntest du herausfinden, indem du einfach bei YouTube nach der for-Schleife mit der Benutzen Programmiersprache suchst.

In C# würde das so aussehen:

int a;
int Mittelwert;
foreach(int i in Array)
{
a = a + i;
}
Mittelwert = a / 16

Keine passende Antwort gefunden?

Fragen Sie die Community