Wie funktioniert diese Schleife?

Hallo, rechne ne Klausur gerade durch, verstehe aber den Programmtext nicht. Wenn ich das so in Excel VBA eingebe bekomme ich folgende ergebnisse. Für „a“ wird der Wert „4“ eingegeben.

Nach der 1. Schleife: 1
Nach der 2. Schleife: 2
Nach der 3. Schleife: 3
Nach der 4. Schleife: 5
Nach der 5. Schleife: 8

Verstehe aber irgendwie nicht wie man die auf die Ergbenisse von Schleife 2. bis 5. kommt. Keine Ahnung wo mein Gedankenfehler ist.

Hoff mal ihr könnt mir helfen

Gruß

Hier der Programmtext:

Option Explicit

Sub berechnung()

Dim a As Integer
Dim b As Integer
Dim c As Integer
Dim d As Integer

a = InputBox(„Bitte a eingeben“)
b = 0
c = 0
d = 1

Do While c

Hallo,

Du schreibst für ‚a‘ wird 4 eingegeben.

a = InputBox(„Bitte a eingeben“)
b = 0
c = 0
d = 1

Do While c [Ausgabe, spring nach oben …]

C ist kleiner als 4, also zur zweiten Runde.

d = d + b -> d = 1; b = 0; d = 1 + 0; d ist immer noch 1
b = c -> b = 1
c = d -> c = 1

c ist immer noch kleiner als 4

d = 1 + 1 -> = 2
b = 1
c = 2

immer noch.

d = 2 + 1 -> =3
b = 2
c = 3

immer noch.

d = 3 + 2 -> = 5
b = 3
c = 5

c ist größer als 4, die 5 wird angezeigt und die Schleife beendet.

Gruß Rainer

Hallo Rainer,

c ist größer als 4, die 5 wird angezeigt und die Schleife
beendet.

:smile: erst nach Anzeige von 8 wird die Schleife verlassen.

@Lukesch, das ist schon verdammt übler Code, zwar winzig, aber sehr verschlungen in sich mit seinen von einander abhängigen Variablen.

Zur Lösung von sonem Unsinn, schnapp dir nen Zettel und einen Kugelschreiber, dann mache eine Tabelle wo oben die variablennamen, hier a,b,c usw. stehen

Dann trage untendrunter in der Zeile die Startwerte der Variablen ein wenn sie in deine while-Schleife reinkommen.

Danach achte einzig auf das was in der while-Schleife steht, hier ist das:

d = d + b
b = c
c = d
MsgBox (b + c)

Dann trägst du in der D-Saplte ein was der d-Wert und der B-Wert „obendrüber“ zusammen ergeben, dann in die b-Spalte den c-Weret von „obendrüber“, in der C-Spalte dann den d-Wert von „obendrüber“.
In der Spalte die dann dem MSGBOx entspricht, trägst du die Summe der b+c-Spalten ein.

Dies machste dann für den 2ten, 3ten usw. Durchlauf…

Dann hast du dieses Bild auf deinem Blatt:

Tabellenblatt: [Mappe1]!Tabelle1
 │ A │ B │ C │ D │ E │ F │
──┼───┼───┼───┼───┼───────────┼───────┤
1 │ a │ b │ c │ d │ Erg (b+c) │ │
──┼───┼───┼───┼───┼───────────┼───────┤
2 │ 4 │ 0 │ 0 │ 1 │ │ Start │
──┼───┼───┼───┼───┼───────────┼───────┤
3 │ 4 │ 0 │ 1 │ 1 │ 1 │ Ende1 │
──┼───┼───┼───┼───┼───────────┼───────┤
4 │ 4 │ 1 │ 1 │ 1 │ 2 │ ende2 │
──┼───┼───┼───┼───┼───────────┼───────┤
5 │ 4 │ 1 │ 2 │ 2 │ 3 │ Ende3 │
──┼───┼───┼───┼───┼───────────┼───────┤
6 │ 4 │ 2 │ 3 │ 3 │ 5 │ Ende4 │
──┼───┼───┼───┼───┼───────────┼───────┤
7 │ 4 │ 3 │ 5 │ 5 │ 8 │ Ende5 │
──┴───┴───┴───┴───┴───────────┴───────┘

Tabellendarstellung erreicht mit dem Code in FAQ:2363

Gruß
Reinhard

d = d + b -> d = 1; b = 0; d = 1 + 0; d ist immer noch 1
b = c -> b = 1
c = d -> c = 1

warum ist B = C --> B = 1 ??

im programmtext steht ja

b = 0
c = 0

Musste somit doch wie bei der ersten Schleife 0 ergeben.

Das ist im grunde mein problem wie du an die 1 in dieser schleife kommst. bzw an die anderen ergebnisse in den nächste schleifen.

gruß

Tabellenblatt: [Mappe1]!Tabelle1
│ A │ B │ C │ D │ E
│ F │
──┼───┼───┼───┼───┼───────────┼───────┤
1 │ a │ b │ c │ d │ Erg
(b+c) │ │
──┼───┼───┼───┼───┼───────────┼───────┤
2 │ 4 │ 0 │ 0 │ 1 │
│ Start │
──┼───┼───┼───┼───┼───────────┼───────┤
3 │ 4 │ 0 │ 1 │ 1 │
1 │ Ende1 │
──┼───┼───┼───┼───┼───────────┼───────┤
4 │ 4 │ 1 │ 1 │ 1 │
2 │ ende2 │
──┼───┼───┼───┼───┼───────────┼───────┤
5 │ 4 │ 1 │ 2 │ 2 │
3 │ Ende3 │
──┼───┼───┼───┼───┼───────────┼───────┤
6 │ 4 │ 2 │ 3 │ 3 │
5 │ Ende4 │
──┼───┼───┼───┼───┼───────────┼───────┤
7 │ 4 │ 3 │ 5 │ 5 │
8 │ Ende5 │
──┴───┴───┴───┴───┴───────────┴───────┘

genau so eine tabelle is auch in der klausur. als muster zum eintragen

aber wie gesagt , wie ihr an die werte b, c und d in der 2. Schleife kommt bleibt mir schleierhaft

Ach ich vollidiot, jetzt hab ich es auch wie man an die werte der 2. schleife kommt. hab den vorherigen beitrag leider nicht richtig und komplett durch gelesen. aber das mit der tabelle is echt ne riesen hilfe. danke für eure hilfe. gott sei dank hab ich es jetzt auch kapiert

gruß

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

d = d + b -> d = 1; b = 0; d = 1 + 0; d ist immer noch 1
b = c -> b = 1
c = d -> c = 1

warum ist B = C --> B = 1 ??

im programmtext steht ja

b = 0
c = 0

im ersten Durchlauf wird ‚c‘ mit 1 gefüllt, den Inhalt hat es natürlich, wenn die Schleife zum zweiten mal durchlaufen wird.
Der Programmzeiger springt zum Kopf der Schleife, nicht weiter nach oben, wo c mit Null gefüllt wird.

Hast Du denn Excel, um Dir das mal anzusehen? Weißt Du, wie der Debugger funktioniert? Der erklärt Dir das ganz genau.

Gruß Rainer

Hallo Reinhard,

c ist größer als 4, die 5 wird angezeigt und die Schleife
beendet.

:smile: erst nach Anzeige von 8 wird die Schleife verlassen.

Stimmt, angezeigt wird ja gar nicht c. :smile: C ist 5, aber 8 wird angezeigt.

Gruß Rainer

Aber wie siehts denn mit dieser Schleife aus:

Option explicit

Sub test()

Dim a As Integer
dim i as integer
dim z1 as integer
dim z2 as integer
dim e as string

a = inputbox(„Bitte eine ganze Zahl eingeben!“)

e = „ja“

for i = 2 to sqr(a+1)
z1 = int(a/i)*i
z2 = a - z1
if z2 = 0 then
e = „nein“
end if
next i

MsgBox "Die Antwort ist " + e, , „Ergebnis“

end sub

für „a“ wird 35 eingesetzt

Mache gerade die erste Schleife.
a = 35
i = 8
z1 = 32
z2 = 27
e = ja

Das sind meine ergebnisse für die erste schleife. Stimmt die bis jetzt? Bin mir bei dem „i“ wert nicht sicher weil ich nicht weiß was „2 to sqr(a+1)“ bedeutet. sqr(a+1) heißt ja --> wurzel aus (35+1). also 6. was bedeutet „2 to“? einfach „2 + sqr(35+1)“ ??

gruß

Hi,

was bedeutet „2 to“? einfach „2 + sqr(35+1)“ ??

nein, das ist eine Zählschleife. Daß Wurzel aus 36 sechs ist hast Du ja schon geschrieben. Für den Fall könnte da auch stehen:

For i = 2 To 6
'…
Next

Das ist die Anweisung, der Variablen ‚i‘ den Wert 2 zuzuweisen, die Schleife zu durchlaufen und bei ‚Next‘ zum Kopf der Schleife zu springen. Dann wird zu ‚i‘ eins dazugezählt, wenn wie hier nichts anderes da steht und der Code wieder abgearbeitet. Das passiert so lange, bis ‚i‘ größer als sechs ist.

Noch mal die Frage nach dem Debugger. Warum siehst Du Dir das nicht einfach an?

Gruß Rainer

Das ist die Anweisung, der Variablen ‚i‘ den Wert 2
zuzuweisen, die Schleife zu durchlaufen und bei ‚Next‘ zum
Kopf der Schleife zu springen. Dann wird zu ‚i‘ eins
dazugezählt, wenn wie hier nichts anderes da steht und der
Code wieder abgearbeitet. Das passiert so lange, bis ‚i‘
größer als sechs ist.

versteh ich nicht. könntest du mir das vielleicht anhand einer tabelle wie vorhin nochmal zeigen?

Noch mal die Frage nach dem Debugger. Warum siehst Du Dir das
nicht einfach an?

weil der mir leider nicht die einzelen ergebnisse anzeigt. also welchen wert a , i, z1, usw. hat.

der debugger zeigt mir ja nur an an welcher stelle ein fehler vorliegt. in diesem fall liegt ja keiner vor. oder laber ich gerade völligen unsinn?

Hi,

versteh ich nicht. könntest du mir das vielleicht anhand einer
tabelle wie vorhin nochmal zeigen?

erst mal der Debugger, dann erledigt sich das von selbst. :smile:

weil der mir leider nicht die einzelen ergebnisse anzeigt.
also welchen wert a , i, z1, usw. hat.

Irrtum, das tut er.

der debugger zeigt mir ja nur an an welcher stelle ein fehler
vorliegt. in diesem fall liegt ja keiner vor. oder laber ich
gerade völligen unsinn?

Na ja, nicht so hart. :smile:

Klick links neben dem Code mal auf den etwas breiteren grauen Rand, dafür ist der da. Ist das neben einer Zeile mit Befehlen, dann steht da anschließend ein Punkt, ein Stoppunkt. Setze den möglichst weit oben im Code.

Führst Du das Programm dann aus, wird es an dieser Stelle angehalten.

Du kannst dann den Mauszeiger über eine Variable halten, dann wird Dir der Inhalt der Variablen als ToolTippText angezeigt.

Mit F8 kannst Du den Code dann Schritt für Schritt abarbeiten, der Programmzeiger wird Dir als gelber Pfeil angezeigt, den Du auch mit der Maus verschieben kannst.

So kannst Du Schritt für Schritt Das Programm verfolgen und die Veränderung der Inhalte der Variablen beobachten. Genau, was Du brauchst.

Gruß Rainer

ah, es klappt, cool. danke für den tip.

ich guck mal morgen warum in der ersten schleife i = 0 ist. das will ich mir jetzt nicht mehr an tun :wink:

auf jeden fall danke für die hilfe. nacht

Hi,

ah, es klappt, cool. danke für den tip.

ich guck mal morgen warum in der ersten schleife i = 0 ist.

Nein, der Wert ändert sich erst, nachdem der Befehl ausgeführt wurde.
Wenn der Pfeil vor der Zeile steht, bedeutet das, diese Zeile wird als nächste ausgeführt. Der erste Wert für i ist 2.

das will ich mir jetzt nicht mehr an tun :wink:

auf jeden fall danke für die hilfe. nacht

Ja, klar. N8

Gruß Rainer

klausur heute geschrieben, super geil gelaufen. der erste programmtext in diesem thread kam genauso vor. natürlich volle punktzahl abgeräumt. danke eurer hilfe! danke nochmal. endlich, nie wieder bauinformatik!!

Hi,

klausur heute geschrieben, super geil gelaufen. der erste
programmtext in diesem thread kam genauso vor. natürlich volle
punktzahl abgeräumt.

das freut mich sehr! So etwas lese ich immer wieder gern! :smile:

Gruß Rainer

Hallo!
Falls es jemanden interessiert - das ist die klassische Berechnung der Fibonacci-Zahlen, wobei sich die nächste Zahl jeweils durch die Summe der zwei vorherigen ergibt.

Gruß,
Martin

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Martin,

Falls es jemanden interessiert - das ist die klassische
Berechnung der Fibonacci-Zahlen, wobei sich die nächste Zahl
jeweils durch die Summe der zwei vorherigen ergibt.

ja, danke, das hat mich interessiert. :smile: Der mathematische Hintergrund hilft doch sehr oft.

Gruß Rainer