Programmierung Pascal

Neue Frage »

Rivago Auf diesen Beitrag antworten »
Programmierung Pascal
Wink

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 unglücklich

Wo ist da mein Fehler?
HAL 9000 Auf diesen Beitrag antworten »

Sollte da nicht eher sowas ähnliches wie

write(Format('x[%2d] = %f',[i,x[i]]));

stehen?
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 unglücklich
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).
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.
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 verwirrt
 
 
Rivago Auf diesen Beitrag antworten »

Okay, er bleibt bei der Suche nach y_max hängen. Aber da seh ich auch keinen Fehler unglücklich
Steffen Bühler Auf diesen Beitrag antworten »

Bei der zweiten Repeat-Schleife fehlt das Inkrement für i.

Viele Grüße
Steffen
Rivago Auf diesen Beitrag antworten »

Ah, genau smile

Danke smile

Jetzt gibt er mir die x-Werte allerdings nebeneinander aus. Wie krieg ich das untereinander hin, so wie auf dem Bild?
Steffen Bühler Auf diesen Beitrag antworten »

Vielleicht writeln statt write?
Rivago Auf diesen Beitrag antworten »

Gott


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?
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.
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 Hammer


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?
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:
code:
1:
2:
3:
4:
5:
6:
7:
8:

  for i:=1 to n do
  Begin
     write(Format('x[%2d] = %2f',[i, x[i]]);
     writeln(Format('       y[%2d] = %2f', [i, y[i]]);
  End;     
Rivago Auf diesen Beitrag antworten »

Zitat:
Original von Steffen Bühler
Heutzutage, wo schon C++ veraltet ist, noch mit Pascal rummachen? Was kriegen wir denn da für Ingenieure rein? Mein Gott.


Big Laugh



Also das geht so, wie du es gesagt hast smile Freude


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]));
Steffen Bühler Auf diesen Beitrag antworten »

Für double-Werte sollte hier besser %2f statt %2d genommen werden.
Rivago Auf diesen Beitrag antworten »

Sehr schön smile


Jetzt läuft es, so wie es soll. Der Rest funktioniert auch smile


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 Freude Wink
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
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »