Programmierung Pascal |
22.02.2015, 21:54 | Rivago | Auf diesen Beitrag antworten » | |||||
Programmierung Pascal Kann von euch jemand die Programmiersprache Pascal? http://fs2.directupload.net/images/150222/kgmc8plh.png Mein Programm sieht so aus: program min_max_sum; {$mode objfpc}{$H+} uses SysUtils; const n_max = 10; var y, x : Array[1..n_max] of Single; n: Byte; i: Integer; y_min, x_ymin, y_max, x_ymax, S: double; begin //Überschrift ausgeben writeln('Ermittlung des minimalen und maximalen Sinuswertes y = sin(x) von max. 10 Winkeln x sowie der Summe der Funktionswerte'); writeln; //Eingabe write('Anzahl der Winkel (mind. 2, max. 10)? '); readln(n); for i:=1 to n do Begin write(Format('Eingabe des %2d . Winkel in Grad ',[i])); readln(x[i]); end; //Ende for-Schleife //Verarbeitung for i:=1 to n do Begin y[i] := sin(x[i] * (pi/180)); end; //Ende for-Schleife //y_min suchen i:=1; y_min := y[i]; x_ymin := x[i]; repeat i := i + 1; if (y_min > y[i]) Then Begin y_min := y[i]; x_ymin := x[i]; end; //Ende if-Anweisung until i = n ; //y_max suchen i := 1; y_max := y[i]; x_ymax := x[i]; repeat if (y_max < y[i]) Then Begin y_max := y[i]; x_ymax := x[i]; end; //Ende if-Anweisung until i = n; //summieren S := 0; for i:=1 to n do Begin S := S + y[i]; end; //Ende for-Schleife //Ausgabe writeln('x-Werte in Grad Funktionswerte y = sin(x)'); for i:=1 to n do Begin write(Format('x[%2d] = %2d',[x[i]])); End; //Ende for-Schleife end. Das Programm läuft, aber es wird einfach nichts ausgegeben. Ich kann die Winkel eingeben, aber danach passiert nichts Wo ist da mein Fehler? |
|||||||
22.02.2015, 22:00 | HAL 9000 | Auf diesen Beitrag antworten » | |||||
Sollte da nicht eher sowas ähnliches wie write(Format('x[%2d] = %f',[i,x[i]])); stehen? |
|||||||
22.02.2015, 22:01 | Rivago | Auf diesen Beitrag antworten » | |||||
Also so? writeln('x-Werte in Grad Funktionswerte y = sin(x)'); for i:=1 to n do Begin write(Format('x[%2d] = %2f',[i, x[i]])); End; //Ende for-Schleife Aber dann passiert auch nichts |
|||||||
22.02.2015, 22:04 | HAL 9000 | Auf diesen Beitrag antworten » | |||||
Dann weiß ich auch nicht weiter. Hab das letzte Mal Pascal vor mehr als 15 Jahren programmiert, dann war es für mich irgendwie tot (C/C++ hatte einfach mehr Zukunft). |
|||||||
22.02.2015, 22:06 | IfindU | Auf diesen Beitrag antworten » | |||||
Solltest du keinen Debugger habe, setze in jedem Block mal einen Write-Befehl mit "Ich bin im Block ...". Dann siehst du wo er hängen bleibt. Es riecht ein wenig nach Endlosschleife. |
|||||||
22.02.2015, 22:06 | Rivago | Auf diesen Beitrag antworten » | |||||
Hmm schade.. Siehst du irgendwo einen Logikfehler? Denn er gibt mir ja nicht mal das hier aus: writeln('x-Werte in Grad Funktionswerte y = sin(x)'); Und das hat ja noch nichts mit der Schleife zu tun. Selbst wenn in der Schleife was falsch ist, müsste er mir wenigstens noch diese Zeile ausgeben. Aber es passiert einfach gar nichts. Ich geb die Winkel im DOS-Fenster ein, und dann blinkt einfach der Cursor vor sich hin. Keine Fehlermeldung, gar nichts, bis ich halt das Programm schließe |
|||||||
Anzeige | |||||||
|
|||||||
22.02.2015, 22:10 | Rivago | Auf diesen Beitrag antworten » | |||||
Okay, er bleibt bei der Suche nach y_max hängen. Aber da seh ich auch keinen Fehler |
|||||||
22.02.2015, 22:12 | Steffen Bühler | Auf diesen Beitrag antworten » | |||||
Bei der zweiten Repeat-Schleife fehlt das Inkrement für i. Viele Grüße Steffen |
|||||||
22.02.2015, 22:17 | Rivago | Auf diesen Beitrag antworten » | |||||
Ah, genau Danke Jetzt gibt er mir die x-Werte allerdings nebeneinander aus. Wie krieg ich das untereinander hin, so wie auf dem Bild? |
|||||||
22.02.2015, 22:25 | Steffen Bühler | Auf diesen Beitrag antworten » | |||||
Vielleicht writeln statt write? |
|||||||
22.02.2015, 22:30 | Rivago | Auf diesen Beitrag antworten » | |||||
Nun muss ich aber auch noch das y in der gleichen Zeile ausgeben. Jetzt hab ich es so hier: //Ausgabe writeln('x-Werte in Grad Funktionswerte y = sin(x)'); for i:=1 to n do Begin writeln(Format('x[%2d] = %2f',[i, x[i]]),' y[%2d] = %2f', [i, y[i]]); End; //Ende for-Schleife Aber das geht so nicht. Wie macht man das am besten? Auch so, damit der Abstand dazwischen bleibt, also damit es so ist wie im Bild? |
|||||||
22.02.2015, 22:38 | Steffen Bühler | Auf diesen Beitrag antworten » | |||||
Ich kenne diesen Format-Kram nicht, aber der sieht so aus, als ob er die Formatierung zuerst, und dann die Variablen will. Du übergibst es aber abwechselnd. Ich würde in der Schleife erste eine write-, dann in der nächsten Zeile eine writeln-Anweisung nehmen, und mich schlau machen, wie man hier mit Tabulatoren arbeiten kann. |
|||||||
22.02.2015, 22:45 | Rivago | Auf diesen Beitrag antworten » | |||||
Ich finde es auch sehr ungeschickt.. Hatte vorher mit C++ zu tun gehabt beim Abi. Jetzt arbeitet unserer Dozent mit Pascal und verharrt auf diesem Formatkram Wie du das mit "write-, dann in der nächsten Zeile eine writeln-Anweisung nehmen" meinst kann ich leider gerade nicht nachvollziehen, wie ich das schreiben soll. Wie würdest du es denn schreiben, wenn du nicht mit Format arbeitest? |
|||||||
22.02.2015, 22:54 | Steffen Bühler | Auf diesen Beitrag antworten » | |||||
Heutzutage, wo schon C++ veraltet ist, noch mit Pascal rummachen? Was kriegen wir denn da für Ingenieure rein? Mein Gott. Ich meinte es so:
|
|||||||
22.02.2015, 23:03 | Rivago | Auf diesen Beitrag antworten » | |||||
Also das geht so, wie du es gesagt hast Jetzt brauch ich ja noch die Ausgabe von y_min, y_max und der Summe. Ich hab das mit y_min jetzt so gemacht, aber auch das geht natürlich wieder nicht.. writeln(Format('%2d fuer %2d Grad', [y_min, x_ymin])); |
|||||||
22.02.2015, 23:12 | Steffen Bühler | Auf diesen Beitrag antworten » | |||||
Für double-Werte sollte hier besser %2f statt %2d genommen werden. |
|||||||
22.02.2015, 23:19 | Rivago | Auf diesen Beitrag antworten » | |||||
Sehr schön Jetzt läuft es, so wie es soll. Der Rest funktioniert auch Wann man f statt d nimmt usw (gibt ja auch noch andere Buchstaben), und wann man eine 2 oder 3 oder 4 usw davor schreibt, hab ich allerdings noch nicht gerafft. Gibt es dazu irgndwo eine gute Zusammenfassung? Ich werde mal den Laptop ausmachen. Gute Nacht und danke noch mal für die Hilfe |
|||||||
22.02.2015, 23:24 | Steffen Bühler | Auf diesen Beitrag antworten » | |||||
Kurzes Gugln nach Stringformatierung in Pascal ergibt z.B. http://www.freepascal.org/docs-html/rtl/sysutils/format.html |
|
Verwandte Themen
Die Beliebtesten » |
|
Die Größten » |
|
Die Neuesten » |
|