Delphi! Hilfe

Hallo Leute,

ich hab mal ne Frag. Ich hab hier mal ein ausschnitt einer programmier-ausgabe:

writeln;
writeln;
write('Wurfzeit: ‚,(2*Wurfgeschwindigkeit)/(g)*sin(Wurfwinkel):7:2, ‚s‘);
write(‘ Wurfweite: ',(sqr(Wurfgeschwindigkeit))/(g)*sin(2*Wurfwinkel):7:2, ‚m‘);

write(’ Wurfhoehe: ',(sqr(Wurfgeschwindigkeit))/(2*g)*sqr(sin(Wurfwinkel)):7:2, ‚m‘ );

readln;

end.

wisst ihr wie man das hinbekommt das man die Ergebnisse unter den Wörtern hat also sprich :

Wurfweite: wurfzeit: Wurfhöhe:
5.00m 4s 7m

??? wäre echt toll von euch hab schon vieles auspropiert wie mit dem 10#13# oder wie das geht aber da rutsch alles mit runter

BITTE .

Wenn rechtsbündige Formtierung für Dich OK ist, dann gibt es eine sehr einfache Lösung:

Const Spaltenbreite = 10;
Const NachKommaStellen=2;

begin
Writeln(‚Spalte 1‘:Spaltenbreite,‚Spalte 2‘:Spaltenbreite,‚Spalte 3‘:Spaltenbreite);
Writeln(1.234567:Spaltenbreite:NachKommaStellen,12345.234567:Spaltenbreite:NachKommaStellen,0.0:Spaltenbreite:NachKommaStellen);
Readln;
end.

Für linksbündige und zentrische Formatierungen müsstest Du Dir eine kleine FUnktion programmieren, die rechts bzw. vorne und rechts Leerzeichsn anängt bis eine bestimmte Länge erreicht ist.

Function TextFeldLinks(Var S:String,var Zeichen:Char, var Laenge:Integer):String;

Function TextFeldMitte(Var S:String,var Zeichen:Char, var Laenge:Integer:String);

Aufruf wäre dann:

Writeln(TextFeldLinks(‚Bla‘,10),TextFeldMitte(‚Bla‘));

Den Code der Funktion schreibe ich jetzt nicht mehr auf, das ist ausgesprochen simpel, und es gibt diverse Ansätze, meiner wäre vermutlich eine While Schleife (leicht zu lesen, kann man auch als Rekursion formulieren), die das übergebene Zeichen so lange hinten (für linksbündige Formatierung bzw. zentrisch: vorne und hinten) anhängt bis die Länge erreicht ist. Vorteil der eigenen Funktion ist auch, dass Du selbst bestimmen kannst was passieren soll, wenn der übergebene Text von vornherein zu lang ist.

Armin.
,

Ach ja, ignoriere bitte die beiden Const Deklarationen, die kamen aus einem anderen Denkansatz und passen hier nicht rein :smile:

Armin

write('Wurfzeit:
‚,(2*Wurfgeschwindigkeit)/(g)*sin(Wurfwinkel):7:2, ‚s‘);
write(‘ Wurfweite:
',(sqr(Wurfgeschwindigkeit))/(g)*sin(2*Wurfwinkel):7:2, ‚m‘);

write(’ Wurfhoehe:
',(sqr(Wurfgeschwindigkeit))/(2*g)*sqr(sin(Wurfwinkel)):7:2,
‚m‘ );

readln;

end.

wisst ihr wie man das hinbekommt das man die Ergebnisse unter
den Wörtern hat also sprich :

Wurfweite: wurfzeit: Wurfhöhe:
5.00m 4s 7m

Das sind 2 Probleme. Du benötigst zwei writeln. In dem ersten schreibst du die festen Texte und in dem zweiten hängst du die Ergebnisse, die hinter dem ersten Komma folgen aneinander.
Formatieren ist da schon etwas schwieriger. Du könntest mit #09, dem Tab, arbeiten, da du mit diesem den Text halbwegs mit Leerstellen füllen kannst und Toleranz bei unterschiedlichen Wertlängen hast. Du musst dann also zwischen die zusammengehängten Texte so viele Tabs packen, bis die Zahlen in den entsprechenden Positionen liegen. In der ersten Zeile füllst du die Bereiche entweder mit Tabs oder mit einfachen Leerzeichen auf.

Ich hab hier leider keine IDE, sonst hätte ich dir das direkter mitteilen können.

gegrüßt!

Hallo,

der folgende Tipp funktioniert nur,
wenn die Ausgabe mit „nichtproportionaler Schrift“ erfolgt.

Falls die Zahlen unterschiedliche Anzahl von Vor- und Nachkommastellen haben (je Spalte) müsste zuerst die Zahl in ein festes Format gebracht werden. Dazu gibt es die Funktion Format. Für Details dazu bitte in der Delphi-Hilfe oder im Web schauen.

Anschließend werden die Zahlen einer Zeile mit der Funktion LFill oder RFill auf die Anzahl Zeichen gebracht, welche die Spaltenweite werden soll. Danach noch zusammen ketten und fertig.

function LFill(s: string; c: Char; len: Integer): string;
Füllt einen String links mit Zeichen c bis zur Gesamtlaenge len auf

Gruß
Andy