Tipo ordinal. Tipos de datos ordinales. tipos simples

Los tipos ordinales incluyen (ver Figura 4.1) tipos enteros, lógicos, de caracteres, enumerados y de rango. La función ORD(X) se puede aplicar a cualquiera de ellos, lo que devuelve número de serie valor de la expresión X. Para tipos enteros, la función ORD(X) devuelve el valor de X en sí, es decir ORD(X) = X para X que pertenece a cualquier tipo de shell. La aplicación de ORD(X) a tipos booleanos, de caracteres y de enumeración produce un entero positivo en el rango de 0 a 1 (booleano), de 0 a 155 (carácter), de 0 a 65535 (enumeración). Un tipo de rango conserva todas las propiedades del tipo ordinal subyacente, por lo que el resultado de aplicarle la función ORD(X) depende de las propiedades de ese tipo.

También puedes aplicar funciones a tipos ordinales:

PRED (X): devuelve el valor anterior del tipo ordinal (el valor que corresponde al número ordinal ORD(X) - 1), es decir

ORD(PRED(X)) = ORD(X) - 1;

SUCC (X): devuelve el siguiente valor ordinal que coincide con el número ordinal ORD(X) +1, es decir

ORD(SUCC(X)) = ORD(X) + 1.

Por ejemplo, si un programa define una variable

entonces la función PRED(C) devolverá el valor "4" y la función SUCC(C) devolverá el valor "6".

Si imaginamos cualquier tipo ordinal como un conjunto ordenado de valores, que aumenta de izquierda a derecha y ocupa un determinado segmento en el eje numérico, entonces la función PRED(X) no está definida para la izquierda y SUCC(X) para la derecha. final de este segmento.

Tipos enteros. Rango valores posibles Los tipos de números enteros dependen de su representación interna, que puede ser de uno, dos o cuatro bytes. en la mesa 4.1 muestra el nombre de los tipos de números enteros, la longitud de su representación interna en bytes y el rango de valores posibles.

Tabla 4.1

Cuando utilice procedimientos y funciones con parámetros enteros, debe guiarse por el "anidamiento" de tipos, es decir dondequiera que se pueda usar WORD, se puede usar BYTE (pero no al revés), LONGINT “incluye” INTEGER, que, a su vez, incluye SHORTINT.

Relación de procedimientos y funciones aplicables a tipos integrales, se da en la Tabla 4.2. Letras b, s, w, yo, l se designan expresiones de tipo BYTE, SHORTINT, WORD, INTEGER y LONGINT, respectivamente, x es una expresión de cualquiera de estos tipos; letras vb, vs, vw, vi, vl, vx denotar variables de los tipos correspondientes. EN corchetes se especifica un parámetro opcional.

Tabla 4.2

Procedimientos estándar y funciones aplicables a tipos completos
Apelar Tipo de resultado Acción
abdominales(x) incógnita Módulo de devoluciones x
chr(b) Carbonizarse Devuelve un carácter por su código
diciembre(vx[, i]) - Disminuye el valor de vx en i, y en ausencia de i, en 1
inc(vx[, yo]) - Aumenta el valor de vx en i, y en ausencia de i, en 1
Hola(yo) Byte Devuelve el byte alto del argumento.
Hola(w) Mismo Mismo
Lo(yo) " Devuelve el byte bajo del argumento.
Bajo) " Mismo
impar(l) Booleano Devuelve Verdadero si el argumento es un número impar
Aleatorio (w) Igual que el parámetro Devoluciones número pseudoaleatorio, distribuido uniformemente en el rango 0...(w-l)
sgr(x) incógnita Devuelve el cuadrado del argumento.
intercambiar(yo) Entero Intercambia bytes en una palabra
intercambiar(w) Palabra

Al operar con números enteros, el tipo de resultado corresponderá al tipo de los operandos, y si los operandos son de diferentes tipos de enteros, al tipo del operando que tiene máxima potencia (máximo rango de valores). No se controla de ningún modo un posible desbordamiento del resultado, lo que puede dar lugar a malentendidos, por ejemplo:

a:= 32767; (Valor ENTERO máximo posible)

x:= a + 2; (Desbordamiento al evaluar esta expresión !}

y:= Int Largo(a)+2; (No hay desbordamiento después de convertir la variable a más tipo poderoso}

EscribirLn(x:10:0, y:10:0)

Como resultado de ejecutar el programa obtenemos

tipo booleano. Los valores booleanos pueden ser una de las constantes predeclaradas FALSO o VERDADERO. Se les aplican las reglas:

FALSO< True;

succ(Falso)= Verdadero;

pred(Verdadero) = Falso.

Dado que el tipo booleano es un tipo ordinal, se puede utilizar en un operador de tipo contable, por ejemplo:

para 1:= Falso a Verdadero haz....

Tipo de personaje. El valor de un tipo de carácter es el conjunto de todos los caracteres de la PC. A cada carácter se le asigna un número entero en el rango de 0...255. Este número sirve como código para la representación interna del símbolo; lo devuelve la función ORD.

El código ASCII se utiliza para codificar ( Americano Código estándar para información Intercambio- Americano código estándar para el intercambio de información). Este es un código de 7 bits, es decir. sólo puede codificar 128 caracteres en el rango de 0 a 127. Al mismo tiempo, en el byte de 8 bits asignado para almacenar un carácter en Turbo Pascal, puede codificar el doble de caracteres en el rango de 0 a 255. La primera mitad de los caracteres PC con códigos 0...127 corresponde al estándar ASCII (Tabla 4.3). La segunda mitad de los caracteres con códigos 128...255 no está limitada por el marco rígido del estándar y se puede cambiar en una PC. diferentes tipos(El Apéndice 2 muestra algunas opciones de codificación comunes para estos caracteres).

Tabla 4.3

Codificación de caracteres según el estándar ASCII.
Código Símbolo Código Símbolo Código Símbolo Código Símbolo
NUL LICENCIADO EN DERECHO. ® "
ZON ! A a
STX " EN b
ETX # CON Con
EOT $ D d
ENQ % mi mi
PREGUNTAR & F F
BEL " GRAMO gramo
BS ( h h
Nuevo Testamento ) I i
LF * j j
Vermont + k k
FF , l i
CR - METRO metro
ENTONCES . norte norte
SI. / ACERCA DE
DEL pag PAG
DC1 q q
DC2 R r
DC3 S s
DC4 t t
N.A.K. Ud. tu
SINC V V
ETB w w
PODER incógnita incógnita
E. M. Ud. Ud.
SUB : z z
ESC / [ {
FS < \ yo
G.S. = ] }
R.S. > ^ ~
A NOSOTROS ? - norte

Los caracteres con códigos 0...31 se refieren a códigos de servicio. Si estos códigos se utilizan en el texto de caracteres del programa, se consideran espacios en blanco. Cuando se utilizan en operaciones de E/S, pueden tener el siguiente significado independiente:

Símbolo Código Significado
BEL Llamar; La visualización de este símbolo va acompañada de señal de sonido
Nuevo Testamento tabulación horizontal; cuando se muestra en la pantalla, mueve el cursor a una posición que es múltiplo de 8 más 1 (9, 17, 25, etc.)
LF avance de línea; al mostrarlo en la pantalla, todos los caracteres siguientes se mostrarán comenzando desde la misma posición, pero en siguiente línea
Vermont Pestaña vertical; cuando se muestra en la pantalla se reemplaza señal especial
FF Ejecución de página; cuando se envía a una impresora, forma una página; cuando se envía a la pantalla, se reemplaza con un carácter especial.
CR Retorno de carro; ingresado presionando Introducir clave(cuando se ingresa con usando LEER o READLN significa el comando "Entrar" y no cabe en el búfer de entrada; cuando se genera significa el comando "Continuar la salida desde el principio de la línea actual")
SUB Fin del expediente; ingresado desde el teclado presionando Ctrl-Z; cuando se emite, se reemplaza con un signo especial
CSS Fin del trabajo; ingresado desde el teclado presionando Tecla ESC; cuando se emite, se reemplaza con un signo especial

Las operaciones relacionales, así como las funciones integradas, son aplicables al tipo CHAR: СНR(В) - función del tipo CHAR; convierte una expresión B de tipo BYTE en un carácter y lo devuelve con su valor;

UPCASE(CH) - función de tipo CHAR; regresa mayúscula, si CH está en minúscula letra latina; de lo contrario, devuelve el carácter CH en sí, por ejemplo:

cl:= UpCase("s") ;

c2:= UpCase ("Ф") ;

EscribirLn(cl," ",c2)

Dado que la función UPCASE no procesa cirílico, el resultado de ejecutar este

Los programas se mostrarán en la pantalla.

Tipo de enumeración. Un tipo enumerado se especifica mediante una enumeración de los valores que puede recibir. Cada valor recibe un nombre mediante algún identificador y se ubica en una lista entre paréntesis, por ejemplo:

colores =(rojo, blanco, azul);

El uso de tipos enumerados hace que los programas sean más visuales. Si por ejemplo el programa utiliza datos asociados a los meses del año, entonces el siguiente fragmento del programa:

TypeMonth=(enero, febrero, marzo, abril, mayo, junio, julio, agosto, septiembre, octubre, noviembre, diciembre);

mes: TipoMes;

si mes = agosto entonces WriteLn("¡Sería bueno ir al mar!");

Verás, sería muy claro. ¡Ay! En Turbo Pascal no puedes usar cirílico en los identificadores, por lo que nos vemos obligados a escribir así:

TypeMonth=(ene,feb,mar,may,jun,jul,aug,sep,oct,nov,dic);

mes: TipoMes;

si mes = agosto entonces WriteLn("¡Sería bueno ir al mar!");

La correspondencia entre los valores de un tipo enumerado y los números ordinales de estos valores se establece mediante el orden de enumeración: el primer valor de la lista recibe el número ordinal 0, el segundo - 1, etc. La capacidad máxima de un tipo enumerado es 65536 valores, por lo que, de hecho, un tipo enumerado define un determinado subconjunto de todo el tipo WORD y puede considerarse como una declaración compacta de un grupo de constantes enteras con valores 0, 1, etc.

El uso de tipos enumerados aumenta la confiabilidad de los programas al permitirle controlar los valores que reciben las variables correspondientes. Por ejemplo, supongamos que se den los siguientes tipos enumerados:

colores = (negro, rojo, blanco);

ordenal= (uno, dos, tres);

días = (lunes, martes, miércoles);

En términos de poder y representación interna, los tres tipos son equivalentes:

ord(negro)=0, ..., ord(blanco)=2,

ord(uno)=0, ...ord(tres)=2,

ord(lunes)=0, ...ord(miércoles)=2.

Sin embargo, si las variables se definen

col:colores; número:ordenal;

entonces los operadores pueden

num:= succ(dos);

día:= pred(martes);

pero inaceptable

Como ya se mencionó, existe una correspondencia uno a uno entre los valores de un tipo enumerado y el conjunto de números enteros especificados por la función ORD(X). Turbo Pascal también permite la conversión inversa: cualquier expresión de tipo WORD se puede convertir a un valor de un tipo de enumeración, siempre que el valor de la expresión entera no exceda la potencia1™ del tipo de enumeración. Esta conversión se logra mediante el uso de una función declarada automáticamente con el nombre del tipo enumerado (ver sección 4.4). Por ejemplo, para la declaración de tipo analizada anteriormente, las siguientes asignaciones son equivalentes:

col:= colores(0);

Por supuesto, tarea

será inaceptable.

Las variables de cualquier tipo enumerado se pueden declarar sin descripción preliminar este tipo, por ejemplo:

col: (negro, blanco, verde);

Rango de tipos. Un tipo de rango es un subconjunto de su tipo base, que puede ser cualquier tipo ordinal excepto un tipo de rango. Un tipo de rango se define por los límites de sus valores dentro del tipo base:

<мин.знач.>..<макс.знач.>

Aquí<мин.знач. >- valor mínimo del rango de tipos;

<макс.знач.>- su valor máximo.

Por ejemplo:

dígito = "0".."9";

El tipo de rango no tiene que describirse en la sección TIPO, pero se puede especificar directamente al declarar una variable, por ejemplo:

Ichr: "A".."Z";.

Al determinar un tipo de rango, debe seguir las siguientes reglas:

  • dos caracteres ".." se tratan como un solo carácter, por lo que no se permiten espacios entre ellos;
  • el borde izquierdo del rango no debe exceder su borde derecho. Un tipo de rango hereda todas las propiedades de su tipo base, pero con las limitaciones de su menor potencia. En particular, si se define una variable

días = (mes,tu,we,th,fr,sa,su);

Fin de semana = sa .. su;

entonces ORD(W) devolverá el valor 5, mientras que PRED(W) dará como resultado un error.

La biblioteca estándar Turbo Pascal incluye dos funciones que admiten trabajar con tipos de rango:

ALTO(X): devuelve el valor máximo del tipo de rango al que pertenece la variable X;

BAJO(X): devuelve el valor mínimo del tipo de rango.

Próximo programa corto mostrará la línea

WriteLn(Bajo(k),"..",Alto(k))

El conjunto de los números enteros es infinito, pero siempre podemos elegir un número de bits para representar cualquier número entero que surja al resolver tarea especifica. El conjunto de números reales no sólo es infinito, sino también continuo, por lo que no importa cuántos bits tomemos, inevitablemente encontraremos números que no tienen una representación exacta. Los números de coma flotante son uno de los formas posibles representación de números reales, que es un equilibrio entre precisión y rango de valores aceptados.

Un número de coma flotante consta de un conjunto de dígitos individuales, divididos convencionalmente en signo, exponente y mantisa. El exponente y la mantisa son números enteros que, junto con el signo, dan la siguiente representación de un número en coma flotante:

Matemáticamente se escribe así:

(-1) s × M × B E, donde s es el signo, B es la base, E es el exponente y M es la mantisa.

La base determina el sistema numérico de dígitos. Se ha demostrado matemáticamente que los números de coma flotante con base B=2 ( representación binaria) son más resistentes a los errores de redondeo, por lo que en la práctica solo se encuentran las bases 2 y, con menos frecuencia, 10. Para una presentación más detallada, siempre asumiremos B = 2, y la fórmula para un número de coma flotante se verá así:

(-1) s × M × 2 E

¿Qué es mantisa y orden? mantisa es un número entero de longitud fija que representa los bits más significativos numero real. Digamos que nuestra mantisa consta de tres bits (|M|=3). Tomemos, por ejemplo, el número “5”, que sistema binario será igual a 101 2. El bit más significativo corresponde a 2 2 =4, el bit del medio (que es igual a cero) es 2 1 =2 y el bit menos significativo es 2 0 =1. Orden– esta es la potencia de la base (dos) del dígito más alto. En nuestro caso E=2. Es conveniente escribir tales números en el llamado formato "científico". forma estándar, por ejemplo "1.01e+2". Inmediatamente queda claro que la mantisa consta de tres signos y el orden es dos.

Digamos que queremos conseguir numero fraccionario, usando los mismos 3 bits de la mantisa. Podemos hacer esto si tomamos, digamos, E=1. Entonces nuestro número será igual

1.01e+1 = 1×2 1 +0×2 0 +1×2 -1 =2+0.5=2.5

Evidentemente, de esta forma un mismo número se puede representar de diferentes formas. Consideremos un ejemplo con la longitud de la mantisa |M|=4. El número “2” se puede representar de la siguiente manera:

2 = 10 (en binario) = 1.000e+1 = 0.100e+2 = 0.010e+3.

Por lo tanto, ya en las primeras máquinas, los números estaban representados en el llamado forma normalizada, cuando siempre se suponía que el primer bit de la mantisa era igual a uno.

Esto ahorra un bit (ya que no es necesario almacenar el implícito en la memoria) y garantiza que el número esté representado de forma única. En nuestro ejemplo, “2” tiene una única representación (“1.000e+1”) y la mantisa se almacena en la memoria como “000”, porque la unidad principal está implícitamente implícita. Pero en la representación normalizada de números surge nuevo problema- Es imposible representar el cero de esta forma.

  • Análisis de datos utilizando los comandos de selección de parámetros y búsqueda de soluciones.
  • Análisis e interpretación de datos de investigaciones psicológicas experimentales.
  • Análisis de datos fuente. Normas técnicas para vías urbanas.
  • ANÁLISIS DE DATOS OBTENIDOS. TOMAR UNA DECISIÓN SOBRE LA SUFICIENCIA O INSUFICIENCIA DE LAS CARACTERÍSTICAS DEL SUMINISTRO DE AGUA PARA LAS NECESIDADES DEL SISTEMA DE RIEGO.
  • Equipos de línea de comunicación: equipos de transmisión de datos, equipos terminales, equipos intermedios.

  • Los tipos simples incluyen tipos ordinales, reales y de fecha y hora.

    tipos ordinales Se diferencian en que cada uno de ellos tiene un número finito de valores posibles. Estos valores se pueden ordenar de cierta manera (de ahí el nombre de los tipos) y, por lo tanto, cada uno de ellos se puede asociar con algún número entero: el número ordinal del valor.

    Los tipos reales, estrictamente hablando, también tienen un número finito de valores, que está determinado por el formato de la representación interna de un número real. Sin embargo, el número de valores posibles de tipos reales es tan grande que no es posible asociar un número entero (su número) a cada uno de ellos.

    El tipo datetime está diseñado para almacenar la fecha y la hora. De hecho, utiliza el formato real para estos fines.

    tipos ordinales

    Los tipos ordinales incluyen (ver Figura 1.1) tipos enteros, lógicos, de caracteres, enumerados y de rango. A cualquiera de ellos se le puede aplicar la función Ord(x), que devuelve el número ordinal del valor de la expresión X.

    Arroz. 1.1

    Para tipos enteros, la función ord(x) devuelve el valor de x en sí, es decir, Ord(X) = x para x que pertenece a cualquier tipo entero. La aplicación de Ord(x) a tipos booleanos, de caracteres y de enumeración produce un entero positivo en el rango de 0 a 1 (booleano), de 0 a 255 (carácter), de 0 a 65535 (enumeración). Un tipo de rango conserva todas las propiedades del tipo ordinal subyacente, por lo que el resultado de aplicarle la función ord(x) depende de las propiedades de ese tipo.

    También puedes aplicar funciones a tipos ordinales:

    pred(x) - devuelve el valor anterior del tipo ordinal (el valor que corresponde al número ordinal ord(x) -1, es decir, ord(pred(x)) = ord(x) - 1;

    succ(x) - devuelve el siguiente valor del tipo ordinal, que corresponde al número ordinal ord(x) +1, es decir, ord(Succ(x)) = ord(x) + 1.

    Por ejemplo, si un programa define una variable

    entonces la función PRED(c) devolverá el carácter "4" y la función SUCC(c) devolverá el carácter "6".

    Si imaginamos cualquier tipo ordinal como un conjunto ordenado de valores, que aumenta de izquierda a derecha y ocupa un determinado segmento en el eje numérico, entonces la función pred(x) no está definida para la izquierda y succ (x) para la derecha. final de este segmento.

    Tipos enteros. El rango de valores posibles de los tipos enteros depende de su representación interna, que puede ser de uno, dos, cuatro u ocho bytes. en la mesa 1.1 muestra los nombres de los tipos de números enteros, la longitud de su representación interna en bytes y el rango de valores posibles.

    Tabla 1.1 - Tipos de números enteros

    Nombre

    Longitud, bytes

    Rango de valores

    0. .. 2 147 483 647

    32 768...+32 767

    2 147 483 648...+2 147 483 647

    9*1018...+9*1018

    0. . .4 294 967 295

    Los tipos LongWord e Int64 se introdujeron por primera vez en la versión 4, pero los tipos Smallint y Cardinal estaban ausentes en Delphi 1. El tipo entero para esta versión ocupa 2 bytes y tiene un rango de valores de -32768 a +32767, es decir, lo mismo que Pequeño.

    Cuando utilice procedimientos y funciones con parámetros enteros, debe guiarse por el "anidamiento" de tipos, es decir dondequiera que se pueda usar palabra, se permite Byte (pero no al revés), Longint "incluye" Smallint, que, a su vez, incluye Shortint.

    La lista de procedimientos y funciones aplicables a tipos de números enteros se proporciona en la tabla. 1.2. Las letras b, s, w, i, l denotan expresiones de tipo Byte, Shortint, Word, Integer y Longint, respectivamente.

    x es una expresión de cualquiera de estos tipos; las letras vb, vs, vw, vi, vl, vx denotan variables de los tipos correspondientes. Un parámetro opcional se indica entre corchetes.

    Tabla 1.2 - Procedimientos y funciones estándar aplicables a tipos completos

    Apelar

    Tipo de resultado

    Acción

    Módulo de devoluciones x

    Devuelve un carácter por su código

    Disminuye el valor de vx en i, y en ausencia de i, en 1

    Aumenta el valor de vx en i, y en ausencia de i, en 1

    Devuelve la reverencia más alta del argumento.

    Devuelve el tercer byte

    Devuelve el byte bajo del argumento.

    Devuelve Verdadero si el argumento es un número impar

    Igual que el parámetro

    Devuelve un número pseudoaleatorio distribuido uniformemente en el rango 0...(w-l)

    Devuelve el cuadrado del argumento.

    Intercambia bytes en una palabra

    Al operar con números enteros, el tipo de resultado corresponderá al tipo de los operandos, y si los operandos son de diferentes tipos de enteros, un tipo común que incluya ambos operandos. Por ejemplo, cuando se trabaja con shortint y word, el tipo común será un número entero. EN configuración estándar el compilador Delphi no produce código que controle posible verificación el valor está fuera del rango aceptable, lo que puede dar lugar a malentendidos.

    Tipos lógicos. Los tipos booleanos incluyen Boolean, ByteBool, Bool, wordBool y LongBool. En Pascal estándar, solo se define el tipo booleano, los tipos lógicos restantes se introducen en Object Pascal para compatibilidad con Windows: los tipos booleano y ByteBool ocupan un byte cada uno, Bool y WordBool - 2 bytes, LongBool - 4 bytes. Los valores booleanos pueden ser una de las constantes predeclaradas Falso o Verdadero.

    Dado que el tipo booleano es un tipo ordinal, se puede utilizar en una declaración de bucle de tipo contable. En Delphi 32 para valor booleano

    Ord(True) = +1, mientras que para otros tipos (Bool, WordBool, etc.)

    Ord(True) = -1, por lo que este tipo de operadores deben usarse con precaución. Por ejemplo, para la versión Delphi 6, la declaración ejecutable showMessage(" --- ") en el siguiente para bucle nunca será ejecutado:

    para L:= Falso a Verdadero

    MostrarMensaje("--);

    Si cambia el tipo de parámetro de bucle L en el ejemplo anterior a booleano, el bucle se ejecutará y el mensaje aparecerá en la pantalla dos veces. [Para las versiones 1 y 2 de Delphi o (Verdadero) =+1 para cualquier tipo booleano.]

    Tipo de personaje. El valor de un tipo de carácter es el conjunto de todos los caracteres de la PC. A cada carácter se le asigna un número entero en el rango de 0...255. Este número sirve como código para la representación interna del símbolo; lo devuelve la función ord.

    Para codificar en Windows, se utiliza el código ANSI (llamado así por el American National Standard Institute, el instituto de estandarización estadounidense que propuso este código). La primera mitad de los caracteres de PC con códigos 0...127 corresponde a la Tabla 1.3. La segunda mitad de los caracteres con códigos 128...255 cambia para varias fuentes. Las fuentes estándar de Windows Arial Cyr, Courier New Cyr y Times New Roman utilizan los últimos 64 códigos (de 192 a 256) para representar caracteres cirílicos (sin las letras “ё” y “Ё”): “A”... “Z” están codificados los valores 192..223, “a”... “i” - 224...255. Los símbolos “Ё” y “е” tienen los códigos 168 y 184, respectivamente.

    Tabla 1.3 - Codificación de caracteres según el estándar ANSI

    Los caracteres con códigos 0...31 se refieren a códigos de servicio. Si estos códigos se utilizan en el texto de caracteres del programa, se consideran espacios en blanco.

    El tipo char aplica operaciones relacionales, así como funciones integradas:

    Сhar (в) - función de tipo char; convierte una expresión de tipo Byte en un carácter y la devuelve con su valor;

    UpCase(CH) - función de tipo char; devuelve una letra mayúscula si сн es una letra latina minúscula; en caso contrario, devuelve el símbolo сн (para cirílico, devuelve el carácter original).

    Tipo enumerado. Un tipo enumerado se especifica mediante una enumeración de los valores que puede recibir. Cada valor recibe un nombre mediante algún identificador y se ubica en una lista entre paréntesis, por ejemplo:

    colores = (rojo, blanco, azul);

    El uso de tipos enumerados hace que los programas sean más visuales.

    La correspondencia entre los valores de un tipo enumerado y los números ordinales de estos valores se establece mediante el orden de enumeración: el primer valor de la lista recibe el número ordinal 0, el segundo - 1, etc. La cardinalidad máxima de un tipo enumerado tiene 65536 valores, por lo que, de hecho, el tipo enumerado define algún subconjunto de la palabra de tipo completa y puede considerarse como una declaración compacta de un grupo de constantes enteras con valores 0, 1, etc.

    El uso de tipos enumerados aumenta la confiabilidad de los programas al permitirle controlar los valores que reciben las variables correspondientes. Object Pascal permite la conversión inversa: cualquier expresión de un tipo Word se puede convertir a un valor de un tipo enum, siempre y cuando el valor de la expresión entera no exceda la cardinalidad de ese tipo. Esta conversión se logra mediante el uso de una función declarada automáticamente con el nombre del tipo enumerado.

    Rango de tipos. Un tipo de rango es un subconjunto de su tipo base, que puede ser cualquier tipo ordinal excepto un tipo de rango.

    Un tipo de rango se define por los límites de sus valores dentro del tipo base:

    <мин.знач.>..<макс.знач.>

    Aquí<мин. знач. >- valor mínimo del rango de tipos;<макс. знач. >- su valor máximo.

    No es necesario describir el tipo de rango en la sección de tipo, pero se puede especificar directamente al declarar la variable.

    Al determinar un tipo de rango, debe seguir las siguientes reglas:

    dos caracteres “..” se tratan como un solo carácter, por lo que no se permiten espacios entre ellos; el borde izquierdo del rango no debe exceder su borde derecho.

    Un tipo de rango hereda todas las propiedades de su tipo base, pero con las limitaciones de su menor potencia. En particular, si se define una variable.

    La biblioteca estándar de Object Pascal incluye dos funciones que admiten trabajar con tipos de rango:

    Alto(x): devuelve el valor máximo del tipo de rango al que pertenece la variable x;

    Bajo (x): devuelve el valor mínimo del tipo de rango.

    tipos reales

    A diferencia de los tipos ordinales, cuyos valores siempre se asignan a una serie de números enteros y, por lo tanto, se representan de manera absolutamente exacta en PC, los valores de los tipos reales definen un número arbitrario solo con cierta precisión finita dependiendo del formato interno del número real. .

    Tabla 1.4 - Tipos reales

    EN versiones anteriores Delfos 1...3 tipo real ocupaba 6 bytes y tenía un rango de valores desde 2,9*10-39 hasta 1,7*1038. En las versiones 4 y 5, este tipo equivale al tipo Doble. Si desea (por razones de compatibilidad) utilizar Reals de 6 bytes, debe especificar una directiva del compilador (SREALCOMPATIBILITY ON).

    Como se puede ver en la tabla. 1.4, un número real en Object Pascal ocupa de 4 a 10 bytes contiguos y tiene la siguiente estructura en la memoria de la PC.

    Aquí s es el dígito de signo del número; e - parte exponencial; contiene orden binario; m es la mantisa del número.

    La mantisa m tiene una longitud de 23 (para dígitos simples) a 63 (para extendidos) dígitos binarios, lo que garantiza una precisión de 7...8 para dígitos simples y de 19...20 para dígitos decimales extendidos. El punto decimal (coma) está implícito delante del dígito izquierdo (el más significativo) de la mantisa, pero cuando se opera con un número, su posición se desplaza hacia la izquierda o hacia la derecha de acuerdo con el orden binario del número almacenado en la parte exponencial. , por lo tanto, las operaciones con números reales se denominan aritmética de coma flotante (coma).

    Tenga en cuenta que el coprocesador aritmético siempre procesa números en formato extendido, y los otros tres tipos reales en este caso se obtienen simplemente truncando los resultados a tamaños requeridos y se utilizan principalmente para ahorrar memoria.

    Una posición especial en Object Pascal la ocupan los tipos comp y Moneda, que se tratan como números reales con partes fraccionarias de longitud fija: en comp parte fraccionaria tiene una longitud de 0 dígitos, es decir simplemente está ausente en la moneda, la longitud de la parte fraccionaria es de 4 decimales; De hecho, ambos tipos definen un entero grande con signo que almacena de 19 a 20 dígitos decimales significativos (internamente ocupan 8 bytes contiguos). Al mismo tiempo, en las expresiones comp y moneda son completamente compatibles con cualquier otro tipos reales: todas las operaciones reales están definidas en ellos, pueden usarse como argumentos funciones matemáticas etc. El área de aplicación más adecuada para estos tipos es la contabilidad.

    tipos ordinales

    Tema 3. Estructura de tipos de datos. Procedimientos y funciones estándar aplicables a números enteros, números reales. Lógico, de carácter, tipos enumerados, tipo de rango. Ejemplos.

    Tipos de datos

    Cualquier dato, es decir las constantes, variables, valores de funciones o expresiones se caracterizan por sus tipos. El tipo define el conjunto valores aceptables, que puede tener tal o cual objeto, así como el conjunto de operaciones válidas que se le aplican. Además, el tipo también determina el formato de representación interna de los datos en la memoria del PC.

    Turbo Pascal se caracteriza por una estructura ramificada de tipos de datos.

    tipos simples

    1. Los tipos ordinales se distinguen por el hecho de que cada uno de ellos tiene un número finito de valores posibles. Estos valores se pueden ordenar de una determinada manera y, por tanto, a cada uno de ellos se le puede asociar un determinado número: el número ordinal del valor.

    2. Los tipos reales, estrictamente hablando, también tienen un número finito de valores, que está determinado por el formato de la representación interna de un número real.

    tipos ordinales

    Los tipos ordinales incluyen tipos enteros, lógicos, de caracteres, de enumeración y de rango. La función ORD(X) devuelve el valor ordinal de la expresión X y se aplica a cualquier tipo ordinal. Para tipos enteros, la función devuelve el valor de X en sí, es decir ORD(X)=X para X que pertenece a cualquier tipo de entero.

    ORD(X) para un tipo de carácter proporciona un número entero en el rango de 0 a 255, para un tipo enumerado ORD(X) proporciona un número en el rango de 0 a 65535. El tipo de rango conserva todas las propiedades del tipo ordinal base , por lo que el resultado de aplicarle la función ORD es (X) depende de las propiedades de este tipo. También puedes aplicar funciones a tipos ordinales:

    PRED (X): devuelve el valor anterior del tipo ordinal, es decir ORD(PRED (X))= ORD(X)-1;

    SUCC(X) - devuelve el siguiente valor ordinal (que corresponde al número ordinal ORD (X)+1), es decir

    tipos simples

    Ordinal

    Real

    Fecha-hora

    Lógico

    Simbólico

    Listable

    rango de tipos

    Figura 1 – Tipos de datos simples

    tipos ordinales

    Los tipos ordinales se diferencian en que cada uno tiene un número finito de valores posibles. Estos valores pueden ordenarse de cierta manera y, por lo tanto, asociarse con algún número entero: el número ordinal del valor.

    Las funciones diseñadas para funcionar con tipos ordinales se muestran en la Tabla 1.

    Tabla 1 – Funciones para trabajar con tipos ordinales.

    tipos de enteros

    El rango de valores posibles de los tipos enteros depende de su representación interna, que puede ser de uno, dos, cuatro u ocho bytes. La Tabla 2 enumera los principales tipos de números enteros.

    Tabla 2 - Tipos de números enteros

    Nombre

    Longitud, bytes

    Rango de valores

    2147483648 … +2147483647

    0 … 2147483647

    0 … 4294967295

    263 … 263 -1

    tenga en cuenta que Object Pascal realiza la conversión de tipos automática. Por ejemplo, cuando es aceptable utilizar una variable de tipo Word como argumento, también es aceptable utilizar una variable de tipo Byte, pero no al revés. regla general Entonces, en lugar de un tipo de variable entera, puedes usar otro tipo de variable entera si sus rangos de valores están anidados.

    en un amigo.

    La Tabla 3 muestra algunas funciones para trabajar con variables enteras.

    Tabla 3 - Funciones para trabajar con números enteros

    Al operar con números enteros, el tipo de resultado corresponderá al tipo de los operandos, y si los operandos son de diferentes tipos de enteros, el tipo general corresponderá a ambos operandos. Por ejemplo, para los tipos ShortInt y Word tipo general será un número entero.

    De forma predeterminada, el compilador no genera código de verificación para verificar posibles valores fuera de rango, lo que podría provocar Funcionamiento defectuoso programas. Por ejemplo, cuando ejecuta el programa del Listado 1, la pantalla mostrará cero en lugar de 65536.

    Listado 1

    ($IFDEF FPC) ($MODO DELPHI)

    ($CONSOLA TIPO APLICACIÓN) programaInOutPrg; varx: Palabra; comenzar

    Para habilitar el control de desbordamiento, debe especificar una directiva del compilador ($Q+) para deshabilitar el control - ($Q-).

    En lugar de ($Q+) puedes usar ($OVERFLOWCHECKS ON) y en lugar de ($Q-) ($OVERFLOWCHECKS OFF)

    Modifique el programa en el Listado 1 para colocar la directiva ($Q+) en la primera línea. Ejecútelo, el programa debería fallar.

    Para variables enteras, es más seguro usar el tipo Integer, ya que el rango

    Los valores de este tipo son lo suficientemente grandes para una amplia clase de problemas. Es mejor desactivar la verificación de fuera de rango en la versión final del programa, ya que reduce el rendimiento del programa.

    tipos booleanos

    Una variable booleana sólo puede tomar dos valores: Verdadero y Falso. Los tipos lógicos se muestran en la Tabla 4.

    Tabla 4 - Tipos lógicos

    para trabajar con tipos lógicos use el tipo booleano, se agregaron otros tipos a Object Pascal para compatibilidad con programas escritos en otros lenguajes de programación.

    Tipo de personaje

    El tipo de carácter, como su nombre indica, está diseñado para almacenar el código de un carácter. La estructura interna del tipo es la misma que la estructura interna de los enteros sin signo. Object Pascal admite dos tipos de caracteres: AnsiChar y WideChar. Las características de estos tipos se muestran en la Tabla 5.

    Tabla 5 - Tipos de caracteres

    Descripción

    Código de caracteres ANSI. Tabla de símbolos de esta norma.

    consta de 256 caracteres, siendo los primeros 128 caracteres estrictamente

    están definidos por el estándar, y los 128 restantes pueden contener cualquier

    símbolos. La segunda parte de la tabla de códigos generalmente se coloca

    simbolos alfabetos nacionales. La desventaja de esto

    representación de personajes es que es imposible mostrarlos

    más personajes a la vez

    de 2 alfabetos.

    Carácter en formato UNICODE. La tabla de símbolos contiene 65536.

    personajes. Esta tabla contiene símbolos de todos los alfabetos.

    Char1

    Es un alias para el tipo AnsiChar.

    Para convertir un código de carácter en un carácter, debe utilizar la siguiente función

    función chr(X:byte):char

    Para conversión inversa se utiliza la función

    1 En objeto tipo Pascal Char es básico. EN próximas versiones el tipo Char puede convertirse en un alias para el tipo WideChar.

    función orden(X:char):byte;

    Una constante de tipo de carácter se puede especificar de dos maneras. Establecer carácter en comillas simples o especificar el código de carácter. Las siguientes dos entradas son equivalentes.

    ch:="A";

    canal:=#97; //97 – código de carácter "A".

    Por ejemplo

    varch:char; código: byte;

    comenzar ch:="A";

    canal:=chr(32); //32 - corresponde al código de la tecla espacio

    fin.

    Tipo de enumeración

    Un tipo enumerado se especifica mediante una enumeración de los valores que puede recibir. Cada valor recibe su nombre mediante algún identificador y se encuentra en una lista entre paréntesis.

    <имя типа>= (identificación, identificación, identificación,...);

    Aquí "nombre de tipo" es el identificador de Object Pascal, "id" es el identificador de Object Pascal.

    Por ejemplo, un tipo que describe un conjunto fijo de colores.

    El uso de tipos enumerados hace que los programas sean más visuales y aumenta la confiabilidad de los programas. Definamos los siguientes tipos:

    tipo TColors = (rojo, verde, blanco, amarillo);

    TDays=(lunes, martes, miércoles);

    Variables definidas

    var col:TColores;

    entonces se permiten los siguientes operadores

    col:=Succ(verde);

    día:=Pred(martes);

    pero no aceptable

    El número máximo de valores enumerados depende de la implementación. Actualmente, el tamaño de una variable de tipo de enumeración es de 4 bytes, lo que corresponde a 232 valores diferentes, lo que significa que el tipo de enumeración es internamente LongWord.

    Como se mencionó anteriormente, puede colocar la definición de tipo inmediatamente después de los dos puntos, por ejemplo

    var col: (rojo, verde, blanco, amarillo); día: (lunes, martes, miércoles);

    rango de tipos

    Un tipo de rango es un subconjunto de algún tipo ordinal subyacente. Un tipo de rango se define por los límites de sus valores.

    <мин. зн.> .. <макс. зн.>

    En idioma pascal Las variables se caracterizan por su tipo. Un tipo es una propiedad de una variable por la cual una variable puede tomar muchos valores permitidos por ese tipo y participar en muchas operaciones permitidas en ese tipo.

    Un tipo define el conjunto de valores válidos que puede tomar una variable de un tipo determinado. También define el conjunto de operaciones válidas sobre una variable de un tipo dado y define representaciones de datos en RAM computadora.

    Por ejemplo:

    n:entero;

    Pascal es un lenguaje estático, lo que significa que el tipo de una variable se determina cuando se declara y no se puede cambiar. El lenguaje Pascal tiene un sistema de tipos desarrollado: todos los datos deben pertenecer a un tipo de datos previamente conocido (ya sea un tipo estándar creado durante el desarrollo del lenguaje o un tipo personalizado definido por el programador). El programador puede crear sus propios tipos con una estructura de complejidad arbitraria basada en tipos estándar, o tipos ya definidos por el usuario. Cantidad tipos creados ilimitado. Tipos personalizados en el programa se declara en la sección TIPO según el formato:

    [nombre] = [tipo]

    El sistema de tipos estándar tiene una estructura jerárquica ramificada.

    Los principales en la jerarquía son tipos simples. Estos tipos están presentes en la mayoría de los lenguajes de programación y se denominan simples, pero en Pascal tienen una estructura más compleja.

    tipos estructurados se construyen de acuerdo con ciertas reglas a partir de tipos simples.

    Señales están formados a partir de tipos simples y se utilizan en programas para establecer direcciones.

    Tipos procesales son una innovación en el lenguaje Turbo Pascal, y permiten acceder a las subrutinas como si fueran variables.

    Objetos También son una innovación y están destinados a utilizar el lenguaje como un lenguaje orientado a objetos.

    En el lenguaje Pascal, existen 5 tipos de tipos de enteros. Cada uno de ellos caracteriza el rango de valores aceptados y el espacio que ocupan en la memoria.

    Al usar números enteros debe guiarse por el anidamiento de tipos, es decir Los tipos con un rango más pequeño se pueden anidar dentro de tipos con un rango más grande. El tipo Byte se puede anidar dentro de todos los tipos que ocupen 2 y 4 bytes. Al mismo tiempo, el tipo Short Int, que ocupa 1 byte, no se puede anidar en tipo de palabra, ya que no tiene valores negativos.

    Hay 5 tipos reales:

    Los tipos de números enteros se representan con absoluta precisión en un ordenador. A diferencia de los tipos enteros, el valor de los tipos reales define un número arbitrario sólo con cierta precisión finita, dependiendo del formato del número. Los números reales se representan en una computadora como punto fijo o flotante.

    2358.8395

    0.23588395*10 4

    0,23588395*E 4

    El tipo Comp ocupa una posición especial en Pascal; de hecho, es un entero grande con signo. Este tipo es compatible con todos los tipos reales y se puede utilizar para un número entero grande. Al presentar números reales Con punto flotante, el punto decimal siempre está implícito antes de la mantisa izquierda o superior, pero cuando se opera con un número se desplaza hacia la izquierda o hacia la derecha.

    tipos ordinales

    Los tipos ordinales combinan varios tipos simples. Estos incluyen:

    • todos los tipos de números enteros;
    • tipo de personaje;
    • tipo booleano;
    • rango de tipos;
    • tipo enumerado.

    Las características comunes de los tipos ordinales son: cada tipo tiene un número finito de valores posibles; el valor de estos tipos se puede ordenar de una determinada manera y se puede asociar un determinado número, que es un número de serie, a cada número; Los valores adyacentes de tipos ordinales difieren en uno.

    Para valores de tipo ordinal, se puede aplicar la función IMPAR(x), que devuelve el número ordinal del argumento x.

    Función PRED(x): devuelve el valor anterior de un tipo ordinal. PRED(A) = 5.

    Función SUCC(x): devuelve el siguiente valor ordinal. SUCC(A) = 5.

    Tipo de personaje

    Los valores del tipo de carácter son 256 caracteres del conjunto de válidos. tabla de códigos la computadora que estás usando. El área inicial de este conjunto, es decir, el rango de 0 a 127, corresponde al conjunto de códigos ASCII, donde se cargan los caracteres del alfabeto, números arábigos y caracteres especiales. Los caracteres del área de inicio siempre están presentes en el teclado de la PC. El área para personas mayores se llama alternativa, contiene símbolos de los alfabetos nacionales y varios personajes especiales y caracteres pseudográficos no ASCII.

    Un valor de tipo de carácter ocupa un byte en la RAM. En el programa, los significados están encerrados entre apóstrofes. Los valores también se pueden especificar en forma de código ASCII. En este caso, debe colocar un signo # delante del número con el código del símbolo.

    C:= 'A'

    Tipo lógico (booleano)

    Hay dos significados tipo booleano: Verdadero y Falso. Se especifican variables de este tipo. palabra oficial BOOLEANO. Los valores booleanos ocupan un byte en la RAM. Los valores Verdadero y Falso corresponden a los valores numéricos 1 y 0.

    rango de tipos

    Hay un subconjunto de su tipo base, que puede ser cualquier tipo ordinal. Un tipo de rango está definido por los límites dentro del tipo base.

    [valor-mínimo]…[valor-máximo]

    El tipo de rango se puede especificar en la sección Tipo como cierto tipo, o puedes hacerlo directamente en la sección Var.

    Al determinar el rango de tipos, debe guiarse por:

    • el borde izquierdo no debe exceder el borde derecho;
    • un tipo de rango hereda todas las propiedades del tipo base, pero con limitaciones asociadas con su menor potencia.

    Tipo de enumeración

    Este tipo pertenece a los tipos ordinales y se especifica enumerando los valores que puede enumerar. Cada valor se denomina identificador determinado y se ubica en la lista, enmarcado entre paréntesis. El tipo enumerado se especifica en Tipo:

    Pueblos = (hombres, mujeres);

    El primer valor es 0, el segundo valor es 1, etc.

    Potencia máxima 65535 valores.

    Tipo de cadena

    El tipo cadena pertenece al grupo de tipos estructurados y consta del tipo base Char. El tipo de cadena no es un tipo ordinal. Define muchas cadenas de caracteres de longitud arbitraria hasta 255 caracteres.

    En un programa, un tipo de cadena se declara con la palabra Cadena. Dado que la cadena es tipo básico, se describe en el lenguaje y la declaración de variables. tipo cadena realizado en Var. Al declarar una variable de tipo cadena como String, es recomendable indicar la longitud de la cadena entre corchetes. Se utiliza un número entero de 0 a 255 para indicar.

    Familia: Cuerda;

    Especificar la longitud de la cadena permite al compilador asignar el número especificado de bytes en RAM para esta variable. Si no se especifica la longitud de la cadena, el compilador asignará el número máximo posible de bytes (255) para el valor de esta variable.



    
    Arriba