Html Schleife Berechnung

Neue Frage »

Auf diesen Beitrag antworten »
Mr.Kuhl Html Schleife Berechnung

Guten Tag erst einmal, ich bin hier der Neue und habe da so die ein oder andere Frage. Hoffe ihr könnt mir helfen. =)





Verstehe die Rechnung nicht ganz. Wenn i durch die erste Schleife läuft, kann sie das bis 4. ABer wie soll 7 noch durch die zweite laufen?

Habe absolut keine Ahnung traurig ,deswegen wäre eine detailierte Erklärung ganz gut.


Vielen Dank schon einmal. =)
 
Auf diesen Beitrag antworten »
Mr.Kuhl re

Auf diesen Beitrag antworten »
eulerscheZahl

Die Zeile 7+2 ist schon beim nächsten Schleifendurchlauf:
ich habe ein paar Ausgaben hinzugefügt:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
#include "stdio.h"

int main(void)
{
	int k=2;
	int i=1;
	while(i<5)
	{
		printf("i = %d\n",i);
		i++;
		printf("   i++ = %d\n",i);
		if(k<5)
		{
			k+=i;
			printf("   if(k<5): addiere %d\n", i);
		}
		else
		{
			k+=2;
				printf("   else: addiere 2\n");
		}
		printf("   k = %d\n",k);
	}
	printf("k = %d",k);
}

Ausgabe:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
i = 1
   i++ = 2
   if(k<5): addiere 2
   k = 4
i = 2
   i++ = 3
   if(k<5): addiere 3
   k = 7
i = 3
   i++ = 4
   else: addiere 2
   k = 9
i = 4
   i++ = 5
   else: addiere 2
   k = 11
k = 11
Auf diesen Beitrag antworten »
Mr.Kuhl

Vielen Vielen Dank, jetzt verstehe ich es. Wenn K zu Groß für (k<5) ist, macht es bei } else } weiter und das so lange bis, i an das Limit mit 5 kommt.
 
Auf diesen Beitrag antworten »
Mr.Kuhl Zwei weitere schleifen

Habe nun zwei weitere Schleifen. Bei dem ersten war das Ergebnis schon vor gegeben und ich konnte ein Schema erkennen. Die Zweite ist die selbe, nur dass "+add" einfach "*multipl"

Meine erste Frage ist nun, ob meine Ergebnisansätze denn so richtig wären? Nur halt bis 16 zu Ende (Siehe Aufgabe 2).

Ich gehe davon aus, dass es diese Funktion auch mit Subtrahieren und Dividieren gibt. Wie heißen diese Kürzel?

Bei GetResult(x,y) Wäre es dann also so, dass x(Add) der Ausgangswert ist mit welchem ich anfange und Y(Step) der jeweilige anstand. Also bei 1 der nächste und bei 3 halt 2 auslassen?

Die letze blöde Frage (vorerst) wäre dann noch: Was kann ich unter den a[0] a[i] oder a[i-1] verstehen?

Ich weiß, dass sind wahrscheinlich banale Fragen und mir ist es sehr unangenehm euch hier damit aus zu fragen, aber mir fehlt da irgendwie der Denkansatz.

Vielen Dank im Vorraus


Auf diesen Beitrag antworten »
eulerscheZahl

Jeder hat mal bei den Grundlagen angefangen, dafür musst du dich nicht schämen smile
Zitat:
Ich gehe davon aus, dass es diese Funktion auch mit Subtrahieren und Dividieren gibt. Wie heißen diese Kürzel?

Du kannst die Variable nennen, wie du willst, solange du dich an gewisse Regeln hältst (z.B. keine Ziffer an erster Stelle, keine Sonderzeichen). Feste Namen gibt es für sowas höchstens bei deinem Lehrer/Prof.

Zitat:
Was kann ich unter den a[0] a[i] oder a[i-1] verstehen?

Das ist ein Array, eine bequeme Variante, mehrere Variablen auf einmal zu definieren:
Wenn du 16 Variablen haben wolltest, müsstest du sonst schreiben:
a0, a1, a2, a3, ... und könntest sie dann auch nicht in der Schleife befüllen.
a[0] heißt dann einfach: nimm die erste Variable des Arrays (in den meisten Programmiersprachen beginnt man beim Durchzählen mit 0)
a[i] ist das i-te Element, wobei i Teil einer Schleife ist. Dadurch werden alle Variablen im Array durchlaufen.
a[i-1] ist beim Durchlaufen das vorherige Element.
Mit a[15] kriegst du die letzte Variable, bei a[16] kommt nur Unsinn heraus oder das Programm stürzt ganz ab.

Nun konkret zu den Aufgaben:
Aufgabe 1 sieht gut aus, sowohl bei den Zwischenschritten, als auch beim Ergebnis.

Bei Aufgabe 2 verstehe ich deine Anmerkungen nicht, hier mal meine Lösung (deren Richtigkeit ich geprüft habe):
code:
1:
2:
3:
4:
5:
6:
a[0] = 1
a[1] = a[0] * multipl = multipl
a[2] = a[1] * multipl = multipl * multipl
a[3] = a[2] * multipl = multipl * multipl * multipl
...
a[15] = multipl^15      // also multipl hoch 15

also [latex]a[i] = \text{multipl}^i[/latex]
die werden dann - zumindest zu Teilen - aufsummiert.
Für getResult(2, 1):
[latex]\text{ergebnis} = \sum\limits_{i=0}^{15}{2^i} = 2^{16}-1=65535[/latex]

Für getResult(2, 2):
folgende Formel musste ich auch nachschauen, alternativ kann man ja auch aufsummieren:
[latex]\sum\limits_{i=0}^k{n^{2\cdot i+1}} = \frac{n(n^{2\cdot k+2}-1)}{n^2-1}[/latex]
[latex]\text{ergebnis} = a[0] + \sum\limits_{i=0}^{7}{2^{2\cdot i+1}} =1 + \frac{2(2^{2\cdot 7+2}-1)}{2^2-1} = 43691[/latex]

Für getResult(-1, 2):
a[gerade]=1
a[ungerade]=-1
a[0] - 8*a[ungerade] = 1 - 8 = -7

Ach ja: es reicht, wenn du den Anhang hier im Board hochlädtst, du brauchst ihn nicht noch extern verlinken.
Auf diesen Beitrag antworten »
Mr.Kuhl oh mann

Ich dachte Anfangs ich hätte es endlich verstanden, aber jetzt verstehe ich noch weniger. =(((

Erst einmal müsste bei Aufgabe 1 doch noch ein Fehler sein, welche mir grade aufgefallen ist. Zwischen 4. und 5. müsste der doch von 35 auf 51 springen?!?

Ich bin grade vollkommen durcheinander. Ich dachte die ganze zeit, dass diese Zwei Schleifen für jeweils eine Spalte Stand (Links & Rechts).

Jetzt habe ich jedoch das Gefühl, die erste Schleife sei da, um die ersten beiden Startzahlen fest zu legen.

Wann starte ich denn nun mit i=1 und wann wird der "Step" aus der Klammer benutzt. Und wie kann ich das verstehen, dass der Step dafür sorgt, dass bei Aufgabe 1.2 nur die "Zweiten" weiter gerechnet werden?

Ich bin ziemlich am verzweifeln, es kann doch nicht so kompliziert sein.
Auf diesen Beitrag antworten »
eulerscheZahl

Ja, da sollte eine 51 stehen. Im letzten Schritt (328 + 46 = 376) hat sich derjenige dann nochmal in die andere Richtung verrechnet, weshalb das Endergebnis stimmt. Hatte ich übersehen.

Ich fange nochmal von Vorne an beim erklären:
code:
1:
var a = new Array(16)

reserviert dir Speicherplatz für 16 Variablen
code:
1:
a[0] = 1;

befüllt die erste Variable des Array mit einer 1

In der ersten Schleife werden dann nacheinander a[1] bis a[15] befüllt, jeweils mit a[vorher] + add

In der zweiten Schleife wird dann auf a[0] erst a[1] addiert, dann a[1+step], a[1+2*step], ...

Zitat:
Ich bin grade vollkommen durcheinander. Ich dachte die ganze zeit, dass diese Zwei Schleifen für jeweils eine Spalte Stand (Links & Rechts).
Jetzt habe ich jedoch das Gefühl, die erste Schleife sei da, um die ersten beiden Startzahlen fest zu legen.

Die linke Spalte (4, 7, 10, ...) ist der Inhalt von a nach der ersten Schleife.
rechts (5, 12, 22, ...) ist der Inhalt von a[0] - also die bisherige Summe - für i = ganzLinkeZahl (1,2,3,...)

Zitat:
Wann starte ich denn nun mit i=1 und wann wird der "Step" aus der Klammer benutzt. Und wie kann ich das verstehen, dass der Step dafür sorgt, dass bei Aufgabe 1.2 nur die "Zweiten" weiter gerechnet werden?

gestartet wird immer mit i=1 (direkt VOR der zweiten Schleife). Diese Stelle wird aber nur einmal durchlaufen, da sie eben vor und nicht in der Schleife steht.
Danach wird immer um step erhöht. Ja, deshalb wird bei 1.2 immer nur jede zweite Zahl genommen.

Schau mal, ob du dir einen Debugger besorgen kannst, mit dem du das Programm Zeile für Zeile durchgehen kannst und dir die Variableninhalte ausgeben lassen.
Von JavaScript habe ich nicht wirklich Ahnung, was es da so gibt. Hier ein paar Screenshots von Visual Studio für die Sprache C# (ist bei den Grundlagen recht ähnlich in der Syntax, gibt aber schon deutliche Unterschiede)
Auf diesen Beitrag antworten »
Mr.Kuhl langsam wird es

Ich glaube so langsam verstehe ich es. Habe Aufgabe 2 aufaddiert und die Lösungen im Anhang. Sie stimmen mit deinen überein, bis auf Aufgabe 2.2.

Hat das so seine Richtigkeit?
Auf diesen Beitrag antworten »
eulerscheZahl

Zu 2.2:
1+2 ist 3 und nicht 4

der Rest sieht gut aus Daumen hoch
Auf diesen Beitrag antworten »
Mr.Kuhl re

Ahh Fehler erkannt, danke.

Ich werde Morgen mal noch eine sehr ähnliche Schleife poste, damit ich wirklich sicher gehen kann, dass ich es verstanden habe.

Vielen Dank noch einmal.
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »