Procedimientos Write Y Writeln en Pascal

La salida estándar se realiza en base a estos procedimientos predefinidos, y las instrucciones para invocarlos toman las siguientes formas:

Write(lista_de_salida);
WriteLn(lista_de_salida);


donde:

lista_de_salida es una lista de variables, expresiones y/o constantes, cuyos valores van a ser desplegados en la pantalla.

El procedimiento Write permite que la siguiente instrucción se realice en la misma línea , mientras que WriteLn alimenta una nueva línea, antes de finalizar.

Por ejemplo, las instrucciones:

Write ('! HOLA ');
WriteLn('AMIGOS !');

producirán la salida:

! HOLA AMIGOS ! 
cursor en la siguiente línea.

Mientras que:

Write('TECLEE <CTRL> F PARA FINALIZAR ==> ');

desplegará:

TECLEE <CTRL> F PARA FINALIZAR ==>  CURSOR

Para producir un renglón en blanco, se debe escribir:

WriteLn ;

Un valor booleano desplegará cualquiera de las cadenas : TRUE o FALSE,
así:

Write('20 + 30 = ', 20 + 30 ,' ES ', 20 + 30 = 50);

producirá:

20 + 30 = 50 ES TRUE 

dejando el cursor en la misma línea, al final de TRUE.

Cuando un valor de salida se escribe sin una especificación de longitud de campo, se utilizará la especificación de campo por omisión.

La especificación de longitud de campo por omisión dependerá del tipo de valor de salida y de la implementación de Pascal.

Así tenemos que, para todas las implementaciones:

  1. La especificación de longitud de campo por omisión para los valores de tipo char es 1
  2. Si el valor a ser desplegado requiere menos del número de caracteres especificado, se imprimirán tantos caracteres blancos como sean necesarios para completar dicho número.
  3. Si el valor a ser desplegado requiere un número de caracteres mayor que el especificado, se usa la mínima especificación de longitud de campo que se requiera para representar un valor de tipo real o entero, pero lascadenas serán truncadas ajustándolas al campo especificado y desechará los caracteres en exceso que se encuentren más a la derecha.
  4. En el caso de valores de tipo real, se puede utilizar una especificación de longitud de fracción.

Por omisión en Turbo Pascal, los valores de tipo real se desplegarán en formato de punto flotante (también llamado exponencial), así:

  1. Para el caso de valores positivos ( R >= 0.0 ), el formato es:
   bbn.nnnnnnnnnnEsnn
  1. Para valores negativos ( R < 0.0 ), el formato es :
 b-n.nnnnnnnnnnEsnn

donde:

b = blanco
n = número ( 1-9 )
s = signo ( + ó – )
E = letra «E» para exponente

La especificación de campo mínima aceptada es:

  • para R >= 0.0 , SIETE caracteres.
  • para R < 0.0 , OCHO caracteres.

Ejemplos:

SentenciasResultados
WriteLn (‘Hola Mundo’);Hola Mundo
WriteLn(’22’ + ’20’);2220
WriteLn(pi);3.1415926536E+00
WriteLn(3.0);3.0000000000E+00

Debido a que Pascal alinea (justifica) las impresiones hacia la derecha del campo correspondiente, cuando es necesario acomodar tabularmente los caracteres de cadenas que no ocupan la totalidad de columnas especificadas.

Por ejemplo, suponiendo que nombre es un identificador de tipo string[20](cadena con formato de 20 caracteres), para que la impresión de todos los valores de nombre empiece en la misma columna, podemos utilizar la instrucción:

WriteLn(numero,'.- ',nombre,
' ':20-length(nombre),calif:3);

y, al ejecutar el programa se tendrá algo parecido a:

1.-JUAN FLORES90(Nótese la justificación de los nombres
2.-EGRID L. CASTRO100hacia la izquierda y los números hacia
3.-RAMON RAMIREZ99la derecha)

Formatos de salida

Formato 1 : WriteLn (ítem:anchura…);

Anchura: Expresión entera (literal, constante, variable o llamada a función) que especifíca la anchura total del campo en que se escribe ítem.

Formato 2 : WriteLn (ítem:anchura:dígitos…);

Dígitos: dígitos decimales de un número real Anchura: Total de dígitos del número real contando parte entera, punto decimal y dígitos decimales.

Ejemplos:

Valor:= 25.0776;

SentenciasResultadosComentario
WriteLn (Valor);2.5077600000E+01
WriteLn(Valor:2);2.5E+01
WriteLn(Valor:2:1);25.1Notese el redondeo
WriteLn(Valor:2:4);25.0776
WriteLn(Valor:2:8);25.07760000
WriteLn(‘Tec’:1);Tec
WriteLn(‘Tec’:3);Tec
WriteLn(‘Tec’:5);_ _ TecEspacios vacios _