Write(A[I , J]:12:4) - was macht die 12:4 da ?

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
laz78
Beiträge: 9
Registriert: Mi 26. Apr 2017, 21:44

Write(A[I , J]:12:4) - was macht die 12:4 da ?

Beitrag von laz78 »

eine ganz kurze frage :D

Write(A[I , J]:12:4);

das array ist nicht gepackt, was macht die 12:4 da?

precision und digits?

Code: Alles auswählen

  for J := 1 to Ub2 do Write(A[I , J]:12:4);
 
  WriteLn;
 
  for J := 1 to Ub2 do Write(FloatToStrF(A[I , J] , ffGeneral , 4 , 4) + ' ');


Code: Alles auswählen

    181.5000     16.8000    140.6000    902.0000
181,5 16,8 140,6 902
    181.4000     17.0000     74.3000   1150.0000
181,4 17 74,3 1150


erzeugt die selben werte (andere formatierung)?

danke vorab :wink:

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Write(A[I , J]:12:4) - was macht die 12:4 da ?

Beitrag von wp_xyz »

12:4 bedeutet: in der Konsolenausgabe werden für die Zahl 12 Zeichen reserviert, die rechtsbündig mit der Zahl aufgefüllt werden. Die Zahl wird mit 4 Dezimalstellen dargestellt.

Mit der FloatToStrF-Funktion bin ich nie auf einen grünen Zweig gekommen, weil Precision und Digits je nach Zahlenformat berücksichtigt/ignoriert werden. Ich nehme lieber Format. In deinem Beispiel ware das

Code: Alles auswählen

  for J := 1 to Ub2 do Write(Format('%12.4f', [A[I , J] ]));

Mathias
Beiträge: 6167
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Write(A[I , J]:12:4) - was macht die 12:4 da ?

Beitrag von Mathias »

12:4 bedeutet: in der Konsolenausgabe werden für die Zahl 12 Zeichen reserviert,

Nicht nur dort, auch bei der Umwandlung von einem Single in einen String:

Code: Alles auswählen

var
  s: string;
  f: single;
begin
  f := 123.456;
  Str(f: 12: 4, s);
  ShowMessage('*' + s + '*');
end;
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

laz78
Beiträge: 9
Registriert: Mi 26. Apr 2017, 21:44

Re: Write(A[I , J]:12:4) - was macht die 12:4 da ?

Beitrag von laz78 »

wow das ging schnell :shock: vielen lieben dank

Code: Alles auswählen

Mit der FloatToStrF-Funktion bin ich nie auf einen grünen Zweig gekommen, weil Precision und Digits je nach Zahlenformat berücksichtigt/ignoriert werden. Ich nehme lieber Format. In deinem Beispiel ware das

das ist witzig, bei mir ist's genau umgedreht, ich tue mich mit der anwendung von format irgendwie schwer, es wird (für mich) schlechter lesbar, wenns dann mal mehr ausgaben werden. ich glaube das ist einfach der persönliche stil, wichtig ist das man weiss was man da tippt und dieses 12:4 hat mich etwas aus dem konzept gebracht... :roll:

wie heisst der fachbegriff dafür - zeichernreservierung? da steht auf einmal ne 12:4 und ich stehe da, wie googelt man was die 12:4 da macht, da könnte ja auch 16:9 stehen :o

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Write(A[I , J]:12:4) - was macht die 12:4 da ?

Beitrag von wp_xyz »

Weiß nicht, wie man das nennt... Ich suche immer nach dem Befehl zusammen mit dem Wort "Pascal" oder "Lazarus".

http://www.freepascal.org/docs-html/rtl ... write.html
http://www.freepascal.org/docs-html/rtl/system/str.html
http://www.freepascal.org/docs-html/rtl ... ormat.html (hier heißen die Dezimalstellen plötzlich wieder "precision"...)

laz78
Beiträge: 9
Registriert: Mi 26. Apr 2017, 21:44

Re: Write(A[I , J]:12:4) - was macht die 12:4 da ?

Beitrag von laz78 »

ja befehle zu finden damit hab ich kein problem, gibt ja am ende zu jeder ordentlichen sprache irgendeine doku.

in dem fall gabs aber keinen befehl, deswegen war ich auf euch angewiesen :D hab ich so tatsächlich noch nie gesehen oder benutzt vorher

und da die arrays auch nicht packed waren wars nicht klar, aber man lernt ja nie aus.

nochmals danke ;)

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Write(A[I , J]:12:4) - was macht die 12:4 da ?

Beitrag von wp_xyz »

Du schreibst jetzt schon zum zweiten Mal von "packed array". Diese Syntax hat damit überhaupt nichts zu tun, du kannst sie auch bei einzelnen Variablen oder sogar Konstanten anwenden

Code: Alles auswählen

const
  ca = 1.0;
var
  va: Double;
...
  WriteLn(1.0:10:3);
  WriteLn(ca:10:3);
  va := 1.0;
  WriteLn(va:10:3);

laz78
Beiträge: 9
Registriert: Mi 26. Apr 2017, 21:44

Re: Write(A[I , J]:12:4) - was macht die 12:4 da ?

Beitrag von laz78 »

ich hab dich schon verstanden, mein denkfehler war, dass ich dachte das :12:4 bezieht sich direkt und nur auf das array, mir war nicht klar das die :12:4 formatierungsparameter von Write() sind.

mit dieser syntax leg ich zeichenbreite und anzahl der kommastellen für die ausgabe von Write() fest. nicht nur bei einem array sondern auch bei anderen arten von variablen oder konstanten.

unter Write() steht

Code: Alles auswählen

The format of the numerical conversions can be influenced through the following modifiers: OutputVariable: NumChars [: Decimals ] This will print the value of OutputVariable with a minimum of NumChars characters, from which Decimals are reserved for the decimals..... 


es ist also eine der möglichen formatierungsfunktion für die ausgabe von Write(), sorry kannte ich wie gesagt so mit dieser syntax nicht :roll:

ist klar jetzt :wink:

Jole
Beiträge: 114
Registriert: Fr 4. Jul 2014, 14:39
OS, Lazarus, FPC: Linux
CPU-Target: amd64

Re: Write(A[I , J]:12:4) - was macht die 12:4 da ?

Beitrag von Jole »

mit dieser syntax leg ich zeichenbreite und anzahl der kommastellen für die ausgabe von Write() fest. nicht nur bei einem array sondern auch bei anderen arten von variablen oder konstanten.

Damit kannst du nicht nur Zahlen Formatiert ausgeben, sondern auch Strings. Ohne Vorzeichen werden Zahlen und Strings rechtsbündig ausgegeben, mit einem Negativen Vorzeichen linksbündig. Beispiel:

Code: Alles auswählen

var
  f: single;
begin
  f:= 13.45;
  WriteLn ('Rechts ->', f:12:2);
  WriteLn ('Rechts ->', f:12:-2);
  WriteLn ('Links  ->', f:-12:2);
  WriteLn ('Rechtsbuendig':16);
  WriteLn ('Linksbuendig':-16);
end.
 

Mathias
Beiträge: 6167
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Write(A[I , J]:12:4) - was macht die 12:4 da ?

Beitrag von Mathias »

mit einem Negativen Vorzeichen linksbündig

Den kannte ich noch nicht. :idea:

Man lernt immer wieder dazu.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten