For-Schleife mit Array < Pascal < Programmiersprachen < Praxis < Informatik < Vorhilfe
|
Hallo :O)
Ich bräuchte mal eure Hilfe, da ich ein Verständnisproblem habe......
Also:
Die Aufgabe war es, die Fibonacci-Folge darzustellen, wobei die 1. und 2. Zahl festgelegt waren auf 1.
Beispiel der Ausgabe: 1,1,2,3,5,8,13 usw.....
Hier die Lösung, die auch funktioniert:
program test;
uses wincrt;
var i:integer
feld:array[1..25] of integer
....
....
Feld[1]:=1;
Feld[2]:=1;
{1} for i:=3 to 25 do
{2} feld[i]:=feld[i-1]+feld[i-2];
{3} for i:=1 to 25 do
{4} Write(feld[i],',');
zu {1} was wird hier ausgesagt?
zu {2} ich dachte, dass hier z.b. für "i" 5 steht: Rechnung:(5-1) + (5-2) =7 ,diese Zahl kommt aber in der Folge nicht vor.... ich versteh den ganzen Syntax irgendwie nicht
zu {3} hier wird doch gesagt, dass was unter {4} beschrieben wird, 25 mal ausgegeben wird, oder ?
zu {4} woher weiß das programm, dass er bei feld[i] die verschiedenen Zahlen auszugeben hat
Danke für eure Hilfe
gruß Tobias
|
|
|
|
Hallo Tobias! (mal wieder )
> Hallo :O)
>
> Ich bräuchte mal eure Hilfe, da ich ein Verständnisproblem
> habe......
>
> Also:
>
> Die Aufgabe war es, die Fibonacci-Folge darzustellen, wobei
> die 1. und 2. Zahl festgelegt waren auf 1.
>
> Beispiel der Ausgabe: 1,1,2,3,5,8,13 usw.....
> Hier die Lösung, die auch funktioniert:
>
> program test;
> uses wincrt;
>
> var i:integer
> feld:array[1..25] of integer
> ....
> ....
> Feld[1]:=1;
> Feld[2]:=1;
>
> {1} for i:=3 to 25 do
> {2} feld:=feld[i-1]+feld[i-2];
>
> {3} for i:=1 to 25 do
> {4} Write(feld,',');
>
> zu {1} was wird hier ausgesagt?
Laut deiner Deklaration oben hast du dir bei var einen array (also ein Feld) namens Feld (wie passend ) geschaffen. Dieses Feld besteht aus 25 Platzhaltern die von 1 bis 25 durchnummeriert sind. Willst du nun z.B. dem 15.Platzhalter den Wert 8 zuweisen, dann lautet die Syntax Feld[15]:=8.
Ein bildliches Beispiel dazu:
Man kann das mit einer Sammlung von 25 Dosen vergleichen. Auf den Dosen stehen die Nummern 1 bis 25 (quasi die Namen mit denen die Dosen angesteuert bzw. angesprochen werden). Wenn du nun auf die spontane Idee kommen würdest, in Dose 15 genau 8 Münzen zu werfen, dann würdest du doch zur Dose 15 gehen, die 8 Münzen reinwerfen und fertig. Genau dies macht im übertragenen Sinne der Befehl Feld[15]:=8 ('Der Platzhalter '15' des Feldes 'Feld' erhält den Wert '8' zugewiesen)
Klaro?
> zu {2} ich dachte, dass hier z.b. für "i" 5 steht:
> Rechnung:(5-1) + (5-2) =7 ,diese Zahl kommt aber in der
> Folge nicht vor.... ich versteh den ganzen Syntax irgendwie
> nicht
feld[i]:=feld[i-1]+feld[i-2];
Dieser Befehl weist dem i-ten Platzhalter die Summe aus den Inhalten der beiden vorherigen Platzhalter zu. Das heißt z.B. das für i=10 (also dem 10.Platzhalter) die Summe der Inhalte aus dem 9. und 8. Platzhalter zugewiesen wird. Wenn jetzt beipsielsweise im Platzhalter 8 die Zahl 20 steht und im Platzhalter 9 steht die Zahl 21, dann wird dem Platzhalter 10 die Zahl 41 zugewiesen (mit den Worten von oben ausgedrückt: in die 10.Dose werden 41 Münzen geworfen).
> zu {3} hier wird doch gesagt, dass was unter {4}
> beschrieben wird, 25 mal ausgegeben wird, oder ?
Es wird für i=1 bis zu i=25 jeweils der Inhalt der Platzhalter des Feldes ausgegeben.(bezogen auf das Beipsiel oben hieße das, daß du jetzt, nachdem du in alle 25 Dosen eine Anzahl Münzen geworfen hast, nochmal nach vorn zur ersten Dose gehst und nun der Reihe nach schaust, wieviel Münzen in den einzelnen Dosen sind und dir die Anzahl der Münzen aufschreibst)
> zu {4} woher weiß das programm, dass er bei feld die
> verschiedenen Zahlen auszugeben hat
Da der Befehl Write(feld[i],','); sofort nach der for-Schleife folgt, wird er mit jedem Durchlauf der Schleife mit verarbeitet. Das heisst:
Für i=1 wird der Inhalt von Platzhalter 1 ausgegeben (Im Fall der Fibunacci-Zahlen sollte dort ne '1' erscheinen).
Dann wird i um 1 erhöht (i hat nun schon den Wert 2) und der Wert von Platzhalter 2 ausgegeben (wieder eine '1').
Jetzt wird i wieder um 1 erhöht (i ist nun 3) und der Wert von Platzhalter 3 wird ausgegeben (das sollte nun ne '2' sein).
Bei i=4 wird '3' ausgegeben, bei i=5 eine '5', bei i=6 eine '8' usw.
>
>
> Danke für eure Hilfe
>
> gruß Tobias
>
Gruß,
Tommy
|
|
|
|
|
Hi :O)
Soweit habe ich es verstanden, sehr gutes Beispiel mit den Cola-Dosen, gefällt mir :O)
Aber nochmal zu Punkt 4:
Mein Problem ist, woher das Program weiß, dass es die Variable feld[i] um eins erhöhen muss.
Da steht doch:
for i:=1 to 25 do
Write(feld[i]).....
Das Programm könnte doch genauso gut einfach die letzte oder 3. oder 5. variable 25 mal hinschreiben, aber das Programm weiß, dass es die Werte nacheinander ausgeben soll, die für dose 1, dose 2 usw abgespeichert sind. Warum ist das so, sorry habs noch nicht geschnallt...
Gruß tobias
|
|
|
|
|
> Aber nochmal zu Punkt 4:
>
> Mein Problem ist, woher das Program weiß, dass es die
> Variable feld um eins erhöhen muss.
Das ist regulär so, daß i automatisch um 1 erhöht wird, sobald die for-Schleife durchlaufen wird.
Nur nebenbei: Es gibt, glaub ich, auch die Möglichkeit das i in der for-Schleife um einen anderen Wert als um 1 zu erhöhen. Die Syntax sieht dann beispielsweise so aus: for i:=1 to 25 by [mm] \red{24} [/mm] do .... In diesem Falle würden in deinem array, welcher ja mit Platzhaltern von 1 bis 25 besetzt ist, nur dem ersten Platzhalter (1) und dem letzten Platzhalter (25) Werte zugewiesen werden, da ja nachdem die Schleife mit i=1 einmal durchlief, das i um [mm] \red{24} [/mm] (also auf 25) erhöht wurde. Die Platzhalter von 2 bis 24 blieben demnach also leer.
>
> Da steht doch:
> for i:=1 to 25 do
> Write(feld).....
> Das Programm könnte doch genauso gut einfach die letzte
> oder 3. oder 5. variable 25 mal hinschreiben, aber das
> Programm weiß, dass es die Werte nacheinander ausgeben
> soll, die für dose 1, dose 2 usw abgespeichert sind. Warum
> ist das so, sorry habs noch nicht geschnallt...
Wie gesagt, das i wird immer um 1 erhöht, wodurch man quasi alle Platzhalter von vorn nach hinten durchschreitet und deren Werte einzeln ausliest.
Gruß,
Tommy
|
|
|
|