Html Schleife Berechnung |
|
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 |
|
__________________ Syntax Highlighting fürs Board (Link)
|
|
11.09.2013 23:12 |
|
|
Mr.Kuhl
Grünschnabel
Dabei seit: 11.09.2013
Beiträge: 7
|
|
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.
|
|
11.09.2013 23:26 |
|
|
Mr.Kuhl
Grünschnabel
Dabei seit: 11.09.2013
Beiträge: 7
|
|
|
12.09.2013 00:02 |
|
|
|
Jeder hat mal bei den Grundlagen angefangen, dafür musst du dich nicht schämen
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
die werden dann - zumindest zu Teilen - aufsummiert.
Für getResult(2, 1):
Für getResult(2, 2):
folgende Formel musste ich auch nachschauen, alternativ kann man ja auch aufsummieren:
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.
__________________ Syntax Highlighting fürs Board (Link)
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von eulerscheZahl: 12.09.2013 08:13.
|
|
12.09.2013 08:11 |
|
|
Mr.Kuhl
Grünschnabel
Dabei seit: 11.09.2013
Beiträge: 7
|
|
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.
|
|
12.09.2013 23:02 |
|
|
|
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
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)
eulerscheZahl hat dieses Bild (verkleinerte Version) angehängt:
__________________ Syntax Highlighting fürs Board (Link)
|
|
13.09.2013 07:59 |
|
|
Mr.Kuhl
Grünschnabel
Dabei seit: 11.09.2013
Beiträge: 7
|
|
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.
|
|
13.09.2013 22:25 |
|
|
|