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:
- La especificación de longitud de campo por omisión para los valores de tipo char es 1
- 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.
- 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.
- 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í:
- Para el caso de valores positivos ( R >= 0.0 ), el formato es:
bbn.nnnnnnnnnnEsnn
- 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:
Sentencias | Resultados |
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 FLORES | 90 | (Nótese la justificación de los nombres |
2.- | EGRID L. CASTRO | 100 | hacia la izquierda y los números hacia |
3.- | RAMON RAMIREZ | 99 | la 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;
Sentencias | Resultados | Comentario |
WriteLn (Valor); | 2.5077600000E+01 | |
WriteLn(Valor:2); | 2.5E+01 | |
WriteLn(Valor:2:1); | 25.1 | Notese 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); | _ _ Tec | Espacios vacios _ |