DMarlon Studio

Lección 4 · 4 de 20

Formatear la salida · Pascal

Dé forma a los números en Pascal: WriteLn con :ancho:decimales y la función Format de SysUtils para alinear las columnas del tique de una cafetería.

Pascal · Formatear la salida en DMarlon Studio: el código del ejemplo y su salida en la terminal

Sin indicaciones, WriteLn escribe un real en notación científica: 3.4560000000000000E+000. Con `:0:2` detrás del valor sale con dos decimales y redondeado, 3.46. El primer número es el ancho mínimo y el segundo, los decimales.

Si el ancho es mayor que el valor, se rellena con espacios por la izquierda: price:8:2 ocupa 8 caracteres, y 42:6 y 'tea':6 ocupan 6, alineados a la derecha. Es la forma más rápida de hacer columnas.

Para tener más control está `Format`, de la unit `SysUtils` (por eso el programa empieza con uses SysUtils;). Recibe un patrón y, entre corchetes, los valores que lo rellenan: %s es una cadena, %d un entero y %.2f un real con dos decimales.

Entre el % y la letra va el ancho: %4d ocupa 4 caracteres a la derecha y %-10s ocupa 10 a la izquierda, por el signo menos. Así quedan alineadas las columnas del tique. Para escribir un % de verdad se pone %%.

Código · main.pas

program main;uses  SysUtils;var  price: Double;begin  price := 3.456;  // With no format, a real number comes out in scientific notation.  WriteLn(price);  // :0:2 means as wide as needed, with two decimals.  WriteLn(price:0:2);  // :8:2 fills up to 8 characters, aligned to the right.  WriteLn('[', price:8:2, ']');  WriteLn('[', 42:6, ']', '[', 'tea':6, ']');  // Format, from SysUtils, builds a string from a pattern.  WriteLn(Format('%-10s%4s%9s', ['Item', 'Qty', 'Euros']));  WriteLn(Format('%-10s%4d%9.2f', ['Coffee', 2, 2.40]));  WriteLn(Format('%-10s%4d%9.2f', ['Croissant', 3, 4.65]));  WriteLn(Format('%-10s%4d%9.2f', ['Juice', 1, 2.10]));  WriteLn(Format('%-14s%9.2f', ['Total', 9.15]));  WriteLn(Format('VAT included: %d%%', [10]));end.

Salida · fpc main.pas && ./main

 3.4560000000000000E+000
3.46
[    3.46]
[    42][   tea]
Item       Qty    Euros
Coffee       2     2.40
Croissant    3     4.65
Juice        1     2.10
Total              9.15
VAT included: 10%

Para recordar

  • valor:ancho:decimales da formato en WriteLn.
  • :0:2 escribe dos decimales sin espacios de más.
  • Format('patrón', [valores]) está en SysUtils.
  • %d, %s y %.2f; con - se alinea a la izquierda.

Ejercicio

Añada al tique una columna Unit con el precio de cada unidad (1.20, 1.55 y 2.10) y una línea más con dos tostadas a 1,80; corrija el total.