Registriert seit: 21. Mär 2009
9 Beiträge
|
Re: auflisten + Graf
22. Mär 2009, 10:16
Zitat von BAMatze:
Also mal zum Begriffe des Intevalls: Intevall stellt einen Mengentaum dar. Ein Intervall kann z.B. 2Pi sein. Damit ist also kein Anfangswert oder Endwert gesetzt. Es stellt ganz schlicht einen Zahlen weite dar! mit t0 legst du eigentlich nur fest, WO sich dieser Zahlraum befindet. Wenn du z.B. ein Intervall hast [a,b] sagen wir mal a=4 und b=8, dann ist dein Intervall T=5 groß (4,5,6,7,8) und der Anfangswert ist 4 und der Endwert 8. Wenn du also dieses intervall in 5 gleiche Teile möchtest, dann Teilst du einfach das Intervall durch die gewollte Anzahl von Teilen, also: 5/5 = 1. Wenn du jetzt aberrechnest (T-t0)/n=h dann bekommst du (5-4)/5 = 0,2. Ich denke die Auswirkungen anhand dieses einfachen Beispielst siehst du schon.
Richtig ist natürlich bei einem Intervall von 5 und 5 gleichen Teilen, dass die Teillänge h 1 ist oder?
Mein Programm hat das vor deiner Änderung auch so gemacht.
Das solltest du nochmal prüfen!!!
Deine Werte sind falsch, weil du nicht beachtet hast, dass du Punktrechnung vor Strichrechnung durchführen MUSST!!! deswegen hab ich dir bei meiner Rechnung auch Zwischenschritte angegeben, damit du siehst, welche Werte du zuerst berechnen musst und welche danach.
MfG
BAMatze
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
if trystrtofloat(ED_Intervall.Text, Inter) and trystrtoint(ED_AnzTeilintervalle.Text, n) and
trystrtofloat(ED_Y.Text, dBuffer1) and trystrtofloat(ED_T.Text, dBuffer2) then
begin
Setlength(y, n);
Setlength(t, n);
Inter:=strtofloat(ED_Intervall.Text);
h := Inter/n;
y[0] := strtofloat(ED_Y.Text);
maxY := y[0];
minY := y[0];
t[0] := strtofloat(ED_T.Text);
Memo1.Lines.Add('t0 = ' + floattostr(t[0]) + ' y0 = ' + floattostr(y[0])); // <-- diese Zeile musst du ändern, so wie ich sie hier hab
for j := 1 to n-1 do
begin
t[j] := t[j-1] + h;
y[j] := y[j-1] + h* k * y[j-1];
Memo1.Lines.Add('t' + inttostr(j) + ' = ' + floattostr(t[j]) + ' y' + inttostr(j) + ' = ' + floattostr(y[j])); // <-- diese Zeile musst du ändern, so wie ich sie hier hab
if y[j] > maxY then maxY := y[j];
if y[j] < minY then minY := y[j];
end;
Koordinatensystem_zeichnen;
Graph_zeichnen;
end
else Showmessage('Bitte überprüfen sie die eingegebenen Werte. Vergewissern Sie sich, dass alle Felder befüllt sind. Anzahl der Teilintervalle muss eine ganze Zahl sein.');
end;
Alles sehr beispielhaft erklärt, danke dir vielmals.
Du solltest Lehrer werden
Ich habe alles korrigiert, Fehler behoben, Denkfehler beseitigt und nun stehe ich stolz da
Ich versuche jetzt mal die Hauptprozedur zu kommentieren.
edit1:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
if trystrtofloat(ED_Intervall.Text, Inter) and trystrtoint(ED_AnzTeilintervalle.Text, n) and //Wenn die Editfelder nicht in den Datentyp Float
trystrtofloat(ED_Y.Text, dBuffer1) and trystrtofloat(ED_T.Text, dBuffer2) then // (Dezimalzahl) umgewandelt werden, dann springe zu else
begin
Setlength(y, n); //?
Setlength(t, n); //?
Inter:= StrToFloat(ED_Intervall.Text); //Variable Inter (Intervall T) vom Editfeld ED_Intervall.Text übernehmen
h := Inter/n; //Schrittweite h berechnen: Inter/Intervallteile n
y[0] := StrToFloat(ED_Y.Text); //Startwert y0 vom Editfeld ED_Y.Text übernehmen
maxY := y[0]; //?
minY := y[0]; //?
t[0] := StrToFloat(ED_T.Text); //Startwert t0 vom Editfeld ED_T.Text übernehmen
Memo1.Lines.Add('t0 = ' + floattostr(t[0]) + ' y0 = ' + floattostr(y[0])); //Schreibe 3. Zeile der Ergebnistabelle: Anfangswerte
for j := 1 to n-1 do //Index der y- und t-Werte
begin
t[j] := t[j-1] + h; //Berechne die t-Werte
y[j] := y[j-1] + h* k * y[j-1]; //Berechne die y-Werte
Memo1.Lines.Add('t' + inttostr(j) + ' = ' + floattostr(t[j]) + ' y' + inttostr(j) + ' = ' + floattostr(y[j])); //Schreibe alle weiteren Ergebnise in die Tabelle
if y[j] > maxY then maxY := y[j]; //?
if y[j] < minY then minY := y[j]; //?
end;
Koordinatensystem_zeichnen; //Führe Prozedur Koordinatensystem_zeichnen aus: Beginne das Koordinatensystem zu zeichnen
Graph_zeichnen; //Führe Prozedur Graph_zeichnen aus: Zeichen den Graphen aus den berechneten Werten
end
else Showmessage('Bitte überprüfen sie die eingegebenen Werte. Vergewissern Sie sich, dass alle Felder befüllt sind. Anzahl der Teilintervalle muss eine ganze Zahl sein.');
end;
play
|
|
Zitat
|