Programm mit Pascal |
01.06.2015, 14:44 | Rivago | Auf diesen Beitrag antworten » | |||||||||||||||
Programm mit Pascal Aufgabe siehe Bild.. http://fs2.directupload.net/images/150601/6sxud3zn.png Mal ganz abgesehen davon dass mein Programm noch nicht läuft, habe ich wohl noch einen riesigen Denkfehler.. oder aber die Aufgabe bzw. die Ergebnisse in der Listbox in der Spalte t sind falsch. Es soll ja die Anzahl der Wertepaare (= Variable n) in das Edit-Feld eingegeben werden. Außerdem sollen die Funktionsschare für t = 0 bis t = 20n berechnet werden. In meiner Auffassung sind die Wertepaare doch Ganzzahlig, also vom Typ Integer. Denn es gibt ja nur ganzzahlige Wertepaare (ein Wertepaar, 2 Wertepaare, 3 ...), aber doch nicht "Kommazahlige" (einskommafünfte Wertepaar, .., ) Jetzt angenommen, der Benutzer gibt für n = 12 ein. Dann muss doch das Programm von t = 0 bis t = 20 * 12 = 240 laufen, oder nicht? Also bis Und bis Wie kann es also sein, dass für t in der Tabelle Kommazahlen rauskommen können? t = 20 * n(Integer) kann doch nie eine Kommazahl werden. Wo ist also mein Denkfehler? Oder hab ich keinen und der Screenshot von der Ausgabe ist so falsch? |
|||||||||||||||||
01.06.2015, 14:56 | Steffen Bühler | Auf diesen Beitrag antworten » | |||||||||||||||
RE: Programm mit Pascal
Nein, das ist ein Missverständnis. Die Zeit t soll immer von 0 bis 20 laufen, unabhängig von n. Wenn der Benutzer n=12 eingibt, erhält er also 12 Wertepaare, das erste für t=0, das letzte für t=20, die anderen äquidistant dazwischen. Viele Grüße Steffen |
|||||||||||||||||
01.06.2015, 14:56 | IfindU | Auf diesen Beitrag antworten » | |||||||||||||||
RE: Programm mit Pascal Dort steht . Dort steht soweit ich sehe nichts über Schrittweiten, d.h. über die Anzahl der t, sondern nur wie groß es werden darf. Edit: Steffens Version ergibt deutlich mehr Sinn |
|||||||||||||||||
01.06.2015, 15:03 | Rivago | Auf diesen Beitrag antworten » | |||||||||||||||
RE: Programm mit Pascal
Aber warum steht dann da t = 0 bis 20n? Oder ist das n da einfach nur reingerutscht?
Okay, soweit kann ich dir folgen. Aber mir ist immernoch nicht klar, wie es dann zum Beispiel zu 1,05 oder zu 6,32 für t kommen kann |
|||||||||||||||||
01.06.2015, 15:12 | Steffen Bühler | Auf diesen Beitrag antworten » | |||||||||||||||
RE: Programm mit Pascal
Nein, das n gehört da hin. Es ist nur nicht mit der 20 malzunehmen, sondern steht alleine. Der Satz ist ohnehin unglücklich formuliert. Es sollen einfach n Wertepaare für t=0 bis 20 berechnet werden.
Nehmen wir mal nur n=3 Paare. Das erste bei t=0, das dritte bei t=20. Für welchen t-Wert musst Du das zweite berechnen? Kannst Du nun eine allgemeine Formel für die zeitliche Schrittweite in Abhängigkeit von n angeben? |
|||||||||||||||||
01.06.2015, 15:20 | Rivago | Auf diesen Beitrag antworten » | |||||||||||||||
Jetzt hats Klick gemacht Hm.. Ich hätte jetzt gesagt, dass die Schrittweite t/n ist? |
|||||||||||||||||
Anzeige | |||||||||||||||||
|
|||||||||||||||||
01.06.2015, 15:23 | Steffen Bühler | Auf diesen Beitrag antworten » | |||||||||||||||
Hm. Schaun wir mal mein Beispiel an: Ich hätte den zweiten Wert bei t=10 erwartet, Du nicht auch? |
|||||||||||||||||
01.06.2015, 15:27 | Rivago | Auf diesen Beitrag antworten » | |||||||||||||||
Doch, das hatte ich mir danach auch gedacht Ich steh mal wieder aufm Schlauch. Keine Ahnung wie da die allgemeine Formel dafür lauten soll Die Schrittweite ist doch t? |
|||||||||||||||||
01.06.2015, 15:30 | Steffen Bühler | Auf diesen Beitrag antworten » | |||||||||||||||
Das ist das alte Problem mit Telegrafenkabel und Telegrafenmasten. Du hast 20 Meter Kabel und drei Masten. Hint: Programmierer verzählen sich maximal um Eins. |
|||||||||||||||||
01.06.2015, 15:32 | Rivago | Auf diesen Beitrag antworten » | |||||||||||||||
? |
|||||||||||||||||
01.06.2015, 15:35 | Steffen Bühler | Auf diesen Beitrag antworten » | |||||||||||||||
Genau! Allerdings solltest Du die Schrittweite nicht t nennen, das ist schon die Gesamtzeit t=20. Nimm lieber sowas wie . Und jetzt sind die krummen Zeitabstände auch verständlich, oder? |
|||||||||||||||||
01.06.2015, 15:40 | Rivago | Auf diesen Beitrag antworten » | |||||||||||||||
Jep, jetzt hab ichs glaub verstanden Find die Aufgabe allerdings wirklich etwas umständlich formuliert.. Naja, sei es drum. Mein Programm sieht nun bis hier hin so aus: (wichtig dabei wohl eher nur der Teil "Berechnung" in der Prozedur BU_EVAClick) implementation {$R *.lfm} { TForm1 } var y1 : Array [0..99] of Double; y2 : Array [0..99] of Double; procedure TForm1.FormCreate(Sender: TObject); begin Form1.Caption := 'Test der gui_unit_xyChart'; BU_EVA.Caption := 'Berechnung'; //Testdaten ED_Anzahl.Text := '20'; //Listbox leeren Form1.LB_Erg.Clear; //StringGrid leeren Form1.SG_Erg.Clear; end; //Ende Prozedur FormCreate procedure TForm1.BU_EVAClick(Sender: TObject); //Variablen deklarieren var Anz, //Anz = Anzahl der Wertepaare (mind. 10, max. 100) i: Integer; // i ist Zählvariable für for-Schleife sw : Double; //sw = Schrittweite begin //Eingabe von Anz in ED_Anzahl Anz := StrToInt(ED_Anzahl.Text); //Plausibilitätsprüfung, ob Anz ausreichend ist if (Anz < 10) or (Anz > 100) Then ShowMessage ('Wert muss >=10 und <=100 sein!'); //Edit-Feld ED_Anzahl zur erneuten Eingabe vorbereiten, falls Fehler bei //Plausibilitätsprüfung entstanden ist Ed_Anzahl.Clear; //Edit-Feld ED_Anzahl leeren Ed_Anzahl.SetFocus; //Cursor in Edit-Feld ED_Anzahl setzen //Berechnung i := 0; sw := 20/(Anz - 1); for i := 0 to Anz do begin y1[i] := sin(sw); y2[i] := exp(0.1*(sw)) * sin(sw); end; //Ende for-Schleife end; //Ende Prozedur BU_EVAClick end. Passt das soweit? Ich hab immer noch Probleme mit den Arrays. Ist das richtig, dass ich es von 0 bis 99 deklarier? Wäre nicht 1 bis 100 besser? Oder sogar 10 bis 100, denn in dem Bereich soll es ja liegen? Außerdem weiß ich dann immer nie, von wo an ich in der for-Schleife zählen soll. Von 0 oder 1? Magst du es mir mal versuchen zu erklären? Der Dozent ist bis jetzt daran gescheitert |
|||||||||||||||||
01.06.2015, 15:58 | Steffen Bühler | Auf diesen Beitrag antworten » | |||||||||||||||
Hier schreibst Du immer denselben Wert hinein. Siehst Du, warum? Was musst Du hier noch tun?
Ich hätte es dynamisch gemacht, je nach Eingabe nur so viel Speicher, wie gebraucht wird. Aber so geht's auch, die Anzahl darf ja nicht über 100 sein.
Das ist Geschmackssache. Ich bin es nicht gewohnt, und manche Programmiersprachen erlauben sowas gar nicht. Daher empfehle ich die andere Variante.
Dann deklarierst Du aber ein Array mit 91 Elementen, das wäre falsch.
Von Null, denn der erste Wert ist bei t=0. Und der kommt eben auch ins Arrayelement mit Index Null. |
|||||||||||||||||
01.06.2015, 16:06 | Rivago | Auf diesen Beitrag antworten » | |||||||||||||||
Das funktioniert wie? Ich hab es jetzt überarbeitet, schau mal
Allerdings kommt bei der Zeile " i := i+1; " ein Fehler. Und zwar "Error: illegal assignment to for-loop variable 'i' " Was bedeutet das? i muss ich doch um 1 erhöhen?! |
|||||||||||||||||
01.06.2015, 16:12 | Steffen Bühler | Auf diesen Beitrag antworten » | |||||||||||||||
Keine Ahnung, ob das bei Pascal überhaupt geht. Frag das besser die Informatiker nebenan.
Das macht die For-Schleife schon für Dich. Deshalb darfst Du die Loop-Variable i ja auch nicht anfassen. |
|||||||||||||||||
01.06.2015, 16:17 | Rivago | Auf diesen Beitrag antworten » | |||||||||||||||
Okay, bei C++ musste man das immer selbst machen.. Oder ich verwechsel es grad mit was anderem.. Passt der Code bis zu der Stelle jetzt, wenn ich die Zeile i := i+1 wieder raus lösch? Dann kann ich ja die Ausgabe machen |
|||||||||||||||||
01.06.2015, 16:19 | Steffen Bühler | Auf diesen Beitrag antworten » | |||||||||||||||
Ja, soweit ich das überblicke. |
|||||||||||||||||
01.06.2015, 16:28 | Rivago | Auf diesen Beitrag antworten » | |||||||||||||||
Dann wollte ich jetzt die Ausgabe machen, aber da kommt ein Fehler:
An der unterstrichenen Stelle bleibt er beim kompilieren hängen, "Error: Illegal qualifier" und "Fatal: There were 1 errors compiling module, stopping" |
|||||||||||||||||
01.06.2015, 16:35 | Steffen Bühler | Auf diesen Beitrag antworten » | |||||||||||||||
Du willst t[i] ausgeben, aber t ist kein Array, sondern einfach eine Zahl. |
|||||||||||||||||
01.06.2015, 16:40 | Rivago | Auf diesen Beitrag antworten » | |||||||||||||||
Stimmt.. Hmm, wie kann ich das dann ausgeben? Muss ich t also auch als Array deklarieren, damit ich jeweils t = t + sw ausgeben kann? |
|||||||||||||||||
01.06.2015, 16:43 | Steffen Bühler | Auf diesen Beitrag antworten » | |||||||||||||||
Nein, Du gibst einfach t aus, das enthält ja immer den aktuellen Wert. |
|||||||||||||||||
01.06.2015, 16:51 | Rivago | Auf diesen Beitrag antworten » | |||||||||||||||
Hab es jetzt. Danke für deine Hilfe |
|
Verwandte Themen
Die Beliebtesten » |
|
Die Größten » |
|
Die Neuesten » |
|