Descripción de la Representación de Valores




Descripción de la representación de valores en el mundo exterior

     Todo lenguaje de programación de alto nivel provee algún mecanismo para describir la representación de los valores en el mundo exterior.  En la operación de salida se describe como nos interesa que aparezcan escritos los valores seleccionados.  En el caso de la entrada se nos dice como fue preparado el archivo que contiene los valores que utiliza  nuestro programa.

     En términos generales esta descripción es lograda describiendo individualmente cada uno de los campos que componen el registro de entrada ó de salida.  La descripción de cada campo depende a su vez del tipo ó clase de valor que representa: punto fijo, punto flotante, no numérico y otros.  En la descripción del registro tenemos la flexibilidad de hacerlo del tamaño que queramos, pero debemos tomar en consideración las limitaciones físicas impuestas por cada unidad.

     Cada campo es descrito mediante una especificación de campo, de izquierda a derecha.  La codificación de cada especificación varía de un lenguaje de programación de alto nivel a otro.  La interpretación por la computadora de cada especificación depende de la actividad con la cual está relacionada; si es de entrada o de salida.

printf( a, lista de expresiones );

y

scanf( a, lista de variables precedidas del signo& );

donde: a => constante o variable de caracteres conteniendo el formato

Debe existir correspondencia tanto en cantidad como en el tipo entre las variables y sus correspondientes especificaciones.  Si se proveen más especificaciones que variables, el exceso es presentado con un valor indeterminado.  Si se proveen menos especificaciones que variables, los valores de las variables sin especificaciones no son presentados.  Si no existe correspondencia de tipo entre la variable y su especificación se obtienen resultados muy diferentes a la realidad; muy pocos compiladores verifican que exista esta correspondencia.













Especificaciones de campo para la salida

Punto fijo

  1. reserva la cantidad de columnas que comprenden el campo

  2. presenta el valor en ese espacio justificado a la derecha

  3. los ceros no significativos son cambiados a espacios en blanco

  4. si el valor es negativo, presenta la raya de negativo en la posición a la izquierda del dígito más significativo

  5. si el espacio provisto no es suficiente, realiza una acción que depende de cada lenguaje de programación de alto nivel.  C y C++ expanden el campo hacia la derecha

  • %wd

  • % => signo que identifica una especificación de campo

  • w => ancho del campo

  • d => letra que identifica la especificación de punto fijo

  • ( ld, i, li, o, lo, x, lx, X, lX, u, lu )


valorformatosalida
12345 %7dbb12345
-12345 %7db-12345
12345 %5d12345
12345 %3d12345















Punto flotante

  1. reserva la cantidad de columnas que comprenden el campo

  2. presenta el punto decimal en la posición a la izquierda de la cantidad de lugares decimales solicitados, si se solicitaron

  3. presenta los lugares decimales en el espacio reservado

    1. si el espacio reservado es exactamente igual a la cantidad de lugares decimales solicitados se dejan así

    2. si el espacio reservado es mayor que la cantidad de lugares decimales solicitados añade ceros a la derecha

    3. si el espacio reservado es menor que la cantidad de lugares decimales solicitados redondea al último dígito solicitado

  4. presenta la parte entera del valor en el espacio restante como con la especificación de punto fijo

  • %w.pf

  • % => signo que identifica una especificación de campo

  • w => ancho del campo

  • . => punto decimal

  • p => cantidad de lugares decimales deseados

  • f => letra que identifica la especificación de punto flotante

  • ( g, lf, Lf, Lg )


valorformatosalida
123.45f %8.2f bb123.45
123.45f %8.3f b123.450
123.45f %8.1f bbb123.5
123.45f %4.2f 123.45







Punto flotante en notación E

  1. reserva la cantidad de columnas que comprenden el campo

  2. presenta la letra e ó E, según se haya especificado, en la cuarta columna de derecha a izquierda

  3. presenta el punto decimal en la posición de la cantidad de lugares decimales solicitados a la izquierda de la letra e ó E

  4. presenta los dígitos significativos, menos el primero, en el espacio reservado

    1. si el espacio reservado es exactamente igual a la cantidad de dígitos significativos solicitados se dejan así
    2. si el espacio reservado es mayor que la cantidad de dígitos significativos solicitados añade ceros a la derecha
    3. si el espacio reservado es menor que la cantidad de dígitos significativos solicitados redondea al último dígito solicitado
  5. presenta el exponente correspondiente a la derecha de la letra e ó E precedido por su signo ( + ó - ) y utilizando dos (2) dígitos

  6. presenta el dígito más significativo a la izquierda del punto

  7. si el valor es negativo, presenta la raya de negativo en la posición a la izquierda del dígito más significativo

  8. si el espacio provisto no es suficiente, realiza una acción que depende de cada lenguaje de programación de alto nivel.  C y C++ expanden el campo hacia la derecha

  • %w.pe
  • % => signo que identifica una especificación de campo
  • w => ancho del campo
  • . => punto decimal
  • p => cantidad de lugares decimales deseados
  • e => letra que identifica la especificación de punto flotante en notación e
  • ( E, g, le, lE, Le, LE, Lg )

valorformatosalida
123.45f %11.4e b1.2345e+02
123.45f %11.5e 1.23450e+02
123.45f %11.3e bb1.235e+02
123.45f %8.4e 1.2345e+02





Caracteres

  1. reserva la cantidad de columnas que comprenden el campo

  2. presenta el valor justificado a la derecha

  3. presenta espacios en blanco a la izquierda

  4. si el espacio provisto no es suficiente, realizar una acción que depende de cada lenguaje de programación de alto nivel.  C y C++ expanden el campo hacia la derecha

  • %ws

  • % => signo que identifica una especificación de campo

  • w => ancho del campo

  • s => letra que identifica la especificación de caracteres

  • ( c )


valorformatosalida
"ABCDE" %5s ABCDE
"ABCDE" %10s bbbbbABCDE
"ABCDE" %3s ABCDE



Espacios en blanco


Se incluyen entre las especificaciones de los campos




Literales (títulos)


Se incluyen entre las especificaciones de los campos






Múltiples registros


Se incluyen \n entre las especificaciones de los campos




Caracteres especiales


Se preceden del símbolo \


Ejemplos : \\ \% \" \'

Ejemplo



























Especificaciones de campo para la entrada

En el proceso de entrada los lenguajes C y C++ utilizan los espacios en blanco, los tabuladores, y el final de un registro como delimitadores (separadores).



Punto fijo

  1. lee un máximo de w columnas

  2. verifica que entre los caracteres leídos sólo se encuentren: los dígitos del cero (0) al nueve (9), el signo positivo (+) ó el signo negativo (-) a la izquierda del dígito más significativo; la presencia de cualquier otro caracter causa que el valor no sea leído

  3. convierte el valor a binario

  4. deposita el valor en el espacio de memoria reservado para la variable

  • %wd

  • % => signo que identifica una especificación de campo

  • w => ancho del campo

  • d => letra que identifica la especificación de punto fijo

  • ( ld, hd, i, li, hi, o, lo, ho, x, lx, hx, X, lX, hX, u, lu, hu )


entradaformatovalor
12345 %7d 12345
-12345 %7d -12345
1234b5 %5d 1234
123456 %3d 123












Punto flotante

  1. lee un máximo de w columnas

  2. verifica que entre los caracteres leídos sólo se encuentren: los dígitos del cero (0) al nueve (9), el punto decimal (.), la letra e ó E, el signo positivo (+) ó el signo negativo (-) a la izquierda del dígito más significativo; la presencia de cualquier otro caracter causa que el valor no sea leído

  3. convierte el valor a binario

  4. deposita el valor en el espacio de memoria reservado para la variable

  • %wf

  • % => signo que identifica una especificación de campo

  • w => ancho del campo

  • f => letra que identifica la especificación de punto flotante

  • ( e, g, E, G, lf, le, lE, lg, lG, Lf, Le, Lg, LE, LG )


entradaformatovalor
12345 %8f 12345.0f
123.45 %8f 123.45f
123.e5 %8f 12300000.0f
123.45 %4f 123.0f





















Caracteres

  1. lee un máximo de w columnas

  2. si la cantidad de caracteres leídos excede el espacio reservado a la variable trunca a la derecha

  3. convierte el valor a binario

  4. deposita el valor en el espacio de memoria reservado para la variable

  • %ws

  • % => signo que identifica una especificación de campo

  • w => ancho del campo

  • s => letra que identifica la especificación de caracteres

  • ( c )


entradaformatovalor[5]
ABCDE %5s "ABCDE"
ABCDEFGHI %8s "ABCDE"
ABCDE %3s "ABCbb"
ABC DEF %7s "ABCbb"

Ejemplo




Última modificación : jueves 25 de junio de 1998

©Derechos Reservados - 1991 - Prof. H. D. A. Cabassa