Los tipos de datos Pascal se dividen en: Pascal. Tipos de datos simples. Asignar y liberar memoria dinámica

Los datos son concepto general por todo con lo que opera computadora. Cualquier tipo de datos define el conjunto de valores que puede tomar una variable particular y las operaciones que se les pueden aplicar. Cada variable encontrada en un programa debe estar asociada a un solo tipo.

Hay dos tipos de tipos simples en Pascal: tipos ordinales y tipos reales. Un tipo ordinal lo define el programador (tipo de enumeración o tipo de rango) o se indica con el nombre de uno de los tres tipos ordinales predefinidos: booleano, entero o char. Un tipo real se indica con el nombre de tipo prescriptivo Real.

Un tipo enumerado se caracteriza por el conjunto de elementos incluidos en él. diferentes significados, entre los cuales se define un orden lineal. Los valores en sí se designan con nombres en la definición de este tipo.

Un tipo de rango (limitado) se especifica utilizando valores mínimos y máximos relacionados con un tipo ordinal descrito anteriormente. Así es como se genera un nuevo tipo ordinal.

Tipos de datos ordinales

Un tipo de datos ordinal describe un conjunto de valores finito y ordenado. Estos valores se asignan a la secuencia de números ordinales 0,1,2,...; se hace una excepción sólo para los números enteros ordinales, que se asignan a sí mismos. Cada tipo ordinal tiene un mínimo y valor máximo. Para todos los valores excepto el mínimo hay un valor anterior, y para todos los valores excepto el máximo hay un valor posterior.

Las funciones prescritas succ, pred y ord aceptan argumentos de cualquiera de los tipos ordinales:
succ(X) - da el siguiente valor ordinal después de X
pred(X) - da el valor ordinal que precede a X
ord(X) - da el número ordinal de X

Para todos los tipos ordinales, existen operadores relacionales = , = y > , suponiendo que ambos operandos son del mismo tipo.

tipo booleano

Un valor booleano es uno de dos valores de verdad, indicados por los nombres predefinidos falso y verdadero.

Existen los siguientes operaciones lógicas, dando un valor lógico cuando se aplica a operandos lógicos:
y - lógico Y
o - lógico O
no - lógico NO

Además, cualquiera de las operaciones relacionales (=, =, >, in) produce un resultado lógico.

Además tipo booleano definido de modo que falso

También se prescriben funciones lógicas(es decir, funciones que producen un resultado lógico):
impar(F) - verdadero si el número entero es F-impar y el resultado es falso si F-par
eoln(F) - verificación de fin de línea
eof(F) - verificación de fin de archivo

tipo entero

El tipo de número entero incluye una variedad de números enteros.

Cuando se trabaja con operandos enteros, lo siguiente operaciones aritméticas dar valores enteros:
* - multiplicación
div - parte entera de la división
mod - resto de la división
+ - suma
- - resta

Pascal también tiene una constante predefinida llamada MaxInt, que contiene el valor máximo de un número entero y es igual a 32767.

Todo el resultado Proporcionar cuatro importantes funciones prescritas:
abdominales(yo) - valor absoluto valor entero yo
sgr(I) - el valor entero de I al cuadrado dado que I trunc(R) - da la parte entera del número real R
round(R): devuelve un número entero redondeado. En este caso: para R>0 significa trunc(R+0.5), y para R

Si I es un valor entero, entonces:
succ(I) - da el siguiente valor entero (I+1)
pred(I) - da el valor entero anterior (I-1)

Tipo de carácter (Char)

Los valores char son los elementos de un conjunto de caracteres finito y ordenado. Los valores de este tipo están representados por un solo carácter encerrado entre comillas simples (apóstrofes). Si se necesita el apóstrofe, se escribe dos veces.
Ejemplos: "*" "G" "3" """" "X"

    Para el tipo Char, se aplican los siguientes supuestos mínimos:
  1. Los dígitos decimales del 0 al 9 están ordenados según sus valores numéricos y se suceden entre sí (por ejemplo, succ("5") = "6").
  2. puede existir letras mayúsculas de "A" a "Z"; Si es así, entonces se ordenan en orden alfabético, pero no necesariamente se suceden (por ejemplo, "A"
  3. Puede haber letras minúsculas de la "a" a la "z"; si es así, entonces están ordenados alfabéticamente, pero no necesariamente están seguidos uno del otro (por ejemplo, "a"

Para asignar un conjunto determinado de caracteres a números de serie y viceversa, existen dos funciones predefinidas:
ord(C): proporciona el número ordinal del carácter C en el conjunto ordenado de caracteres mencionado
chr(I) - da un carácter con número de serie I

Para argumentos de tipo Char, las funciones predefinidas pred y succ se pueden definir de la siguiente manera:
pred(C) = chr(ord(C)-I)
succ(C) = chr(ord(C)+I)

Comentario. El símbolo anterior o siguiente depende del conjunto de símbolos especificado, por lo que ambas relaciones son válidas sólo si el símbolo anterior o siguiente existe.

tipo real

Los valores de tipo real son los elementos de un subconjunto definido por la implementación. números reales.

Todas las operaciones con cantidades reales son aproximadas, su precisión está determinada por la implementación (máquina) con la que se está tratando. El tipo real es un tipo simple, no es un tipo ordinal. Los valores reales no tienen número ordinal y no existe ningún valor anterior o siguiente para ninguno de ellos.

Si al menos uno de los operandos es de tipo real (el otro puede ser un número entero), las siguientes operaciones dan un resultado real:
* - multiplicación
/ - división (ambos operandos pueden ser números enteros, pero el resultado siempre es real)
+ - suma
- - resta

Hay funciones prescritas que dan un resultado real dado un argumento real:
abs(R) - valor absoluto de R
sqr(R) - R al cuadrado si el resultado está dentro del rango de números reales

Y estas funciones prescritas dan un resultado real con un argumento entero o real:
sin(X) - da el seno de X; X se expresa en radianes
cos(X) - da el coseno de X; X se expresa en radianes
arctan(X) - da la arcotangente de X expresada en radianes
ln(X) - da el valor del logaritmo natural (base e) para X, X>0
exp(X) - da el valor función exponencial(es decir, a la potencia de X)
sqrt(X) - da el valor de la raíz cuadrada de X, X>=0

Advertencia. Las funciones pred, succ no se pueden usar para argumentos reales. No se pueden usar valores de tipo real al indexar matrices, para controlar en un bucle con un parámetro, para determinar. tipo básico conjuntos, para indexar en el operador variante.

El concepto de tipo es uno de los conceptos fundamentales de cualquier lenguaje de programación. Los objetos (constantes, variables, funciones, expresiones) sobre los que opera el programa pertenecen a un tipo específico.

Tipo es un conjunto de valores que los objetos del programa pueden tomar y un conjunto de operaciones permitidas sobre estos valores.

Por ejemplo, los valores 1 y 2 son de tipo entero, se pueden sumar, multiplicar y otras operaciones aritméticas. Los significados "monitor" y "Pascal" son de naturaleza lingüística; tienen su propio conjunto de operaciones válidas. En los lenguajes más utilizados, sólo se pueden utilizar tipos preconocidos y estrictamente definidos. Pascal, junto con los tipos estándar que se encuentran en otros idiomas. alto nivel, permite al programador crear sus propios tipos.

Todos los tipos permitidos en el lenguaje Pascal se dividen en dos: grupos grandes: simple y complejo (estructurado).

Tipo Rango Mantisa, signos Memoria requerida (bytes)
REAL 2.9*10E-39..1.7*10E38 11-12
SOLTERO 1.5*10E-45..3.4*10E38 7-8
DOBLE 5.0*10E-324..1.7*10E308 15-16
EXTENDIDO 1.9*10E-4951..1.1*10E4932 19-20
COMP -2E+63+1..2E+63-1 10-20

El uso efectivo de los tipos SINGLE, DOUBLE, EXTEND, COMP solo es posible cuando la directiva ($N+) está habilitada. Por defecto está desactivado. Para resolver problemas económicos y de ingeniería son suficientes valores del tipo REAL.

Ejemplo

Var Res, Summa, Itog: real;

Booleano el tipo de datos se describe mediante el identificador BOOLEAN. Las variables y constantes de este tipo pueden tomar sólo uno de dos valores: VERDADERO (verdadero) o FALSO (falso).

Ejemplo

Var Sel1, Sel2: booleano;

A,B,C,D: booleano;

Expresiones tipo booleano Ocupan 1 byte en memoria y se utilizan en expresiones lógicas y expresiones relacionales, así como para controlar el orden en que se ejecutan las declaraciones del programa.

Literal (carácter) el tipo se describe mediante el identificador CHAR estándar. Las constantes y variables de este tipo pueden tomar uno de los valores del código. tablas ASCII. El significado de una constante o variable de este tipo está encerrado entre apóstrofes.

Por ejemplo, Var Bukva, Znak, Símbolo: char;

Bukvá:='A'; Znak:='+'; Símbolo: ='!'

Las variables de tipo carácter ocupan 1 byte en la memoria. Usando el tipo de datos char en expresiones aritméticas prohibido. Las operaciones de comparación se pueden aplicar a valores literales, y el resultado depende del número de la variable literal o constante en la tabla de códigos.

Excepto tipos estándar datos, Pascal admite tipos escalares, definido por el usuario. Estos incluyen enumerable Y intervalo tipos. Este tipo de datos ocupan 1 byte en la memoria, por lo que cualquier tipo personalizado no puede contener más de 255 elementos. Su uso mejora significativamente la visibilidad del programa, lo hace más búsqueda fácil errores y ahorra memoria.

Tipo de enumeración se especifica directamente enumerando todos los valores que la variable puede tomar de este tipo. Valores individuales se indican separados por comas y la lista completa está entre paréntesis.

Formato

Tipo<имя типа>=(<значение1, значение2, ..., значениеN>);

var<идентификатор, ...>: < имя типа>;

Ejemplo

Tipo Temporada =(Primavera, Verano, Otoño, Invierno);

Var T1, T2: Temporada;

Otoño: (septiembre, octubre, noviembre);

EN en este ejemplo Se muestra el tipo de datos descrito explícitamente del usuario de Season. Se determinan sus significados: designaciones de las estaciones. Las variables S1 y S2 solo pueden tomar uno de los valores enumerados. Un intento de asignarles cualquier otro valor provocará una interrupción del software. El tercer tipo de enumeración es anónima (no tiene nombre) y se especifica enumerando valores en la sección Var. El otoño es una variable de este tipo y puede tomar los valores septiembre, octubre, noviembre. Por tanto, se puede especificar cualquier tipo, pero esto no siempre es aceptable. El primer método es ciertamente más comprensible y más coherente con la naturaleza del lenguaje Pascal.

tipo de intervalo le permite especificar dos constantes que definen los límites del rango de valores para una variable determinada. Para cada operación en una variable de intervalo, el compilador genera rutinas de verificación para determinar si el valor de la variable permanece dentro de su rango especificado. Ambas constantes deben pertenecer a uno de los tipos estándar distintos del real. El valor de la primera constante debe ser requerido. menos que el valor segundo.

Formato

Tipo<имя типа> = <константа1> .. <константа2>;

var<идентификатор>: < имя типа>;

Ejemplo

Tipo Días = 1.. 31;

Var Work_d, Free_d: Días;

En este ejemplo las variables Trabajo_d, Libre_d tener tipo Días y puede tomar cualquier valor del rango 1. . 31.

Salir del rango causa interrupción de software.

Puede definir un tipo de intervalo definiendo los límites del rango no por los valores de las constantes, sino por sus nombres:

constante mínima = 1; Máximo = 31;

Tipo Días = Mín.. Máx;

Var Work_d, Free_d: Días;

tipos estructurados Los datos se basan en tipos escalares y pueden contenerlos. varias combinaciones. Definen una colección ordenada de elementos escalares y se caracterizan por el tipo de sus componentes. El lenguaje Pascal proporciona los siguientes tipos de datos estructurados:

línea - una secuencia de caracteres encerrados entre apóstrofes;

matriz - un tipo de datos estructurados que consta de un número fijo de elementos del mismo tipo, al que se accede por índice ;

muchos - un conjunto de objetos seleccionados según alguna característica o grupo de características que pueden considerarse como un todo;

registro - un conjunto de un número fijo de componentes de diferentes tipos;

archivo- una secuencia de componentes del mismo tipo y de la misma longitud.

dos mas tipos estructurados- tipo procesal y de objeto: es difícil hacer coincidir los datos en la representación habitual.

Figura 1- Un conjunto de tipos básicos del lenguaje Pascal.

Conocer y comprender los tipos de datos es una parte integral de la programación.

En esta lección aprenderemos sobre los tipos de datos en el lenguaje de programación Turbo Pascal.

En el lenguaje Pascal, cualquier objeto, es decir. las constantes, variables, valores de funciones o expresiones se caracterizan por sus tipos. El tipo define el conjunto valores aceptables de tal o cual objeto, así como muchas operaciones que se aplican a él. Además, el tipo determina el formato de representación interna de los datos en la memoria de la computadora. En términos de tipos de objetos, Pascal es un lenguaje estático. Esto significa que el tipo de un objeto, por ejemplo una variable, se determina cuando se declara y no se puede cambiar más adelante.

Estructura de tipos de datos en Pascal:

Tipos simples de lenguaje
A tipos simples Incluye tipos ordinales, reales, de cadena y de dirección (puntero). Todos definen el tipo de un solo valor.

tipos ordinales caracterizado por el hecho de que cada uno de ellos tiene un número finito valores posibles, entre los cuales se establece un orden lineal. Cada uno de los valores se puede asociar con algún número entero: su número de serie.

tipos de enteros - denota conjuntos de números enteros en diferentes rangos. Hay cinco tipos de números enteros, que se diferencian en el rango de valores aceptables y el tamaño del espacio ocupado. RAM. Los tipos de enteros se designan mediante identificadores: Byte, ShortInt, Word, Integer, LongInt; sus características se muestran en la siguiente tabla.

Los valores de tipos enteros se escriben en el programa de la forma habitual:
123 4 -3 +345 -699
La presencia de un punto decimal en la notación de un número entero es inaceptable. Sería un error escribir un número entero como este:
123.0
Además de la forma decimal habitual de notación, es posible escribir números enteros en formato hexadecimal utilizando el prefijo $, por ejemplo:
$01AF $FF $1A $F0A1B
Registro letras A, B, ..., F no importa.

Operaciones válidas:

  • - asignación;
  • - toda aritmética: +, - ,*, /, div, mod (¡con división ordinaria [/] el resultado es real!);
  • - comparación<, >, >=, <=, <>, =.
tipo booleano- consta de solo dos valores: False (falso) y True (verdadero). Las palabras Falso y Verdadero están definidas en el lenguaje y, de hecho, son constantes lógicas. El caso de las letras en su escritura no tiene importancia: FALSO = falso. Los valores de este tipo son el resultado de la evaluación de expresiones condicionales y lógicas y participan en todo tipo de operadores condicionales del lenguaje.
Operaciones válidas:
  • - asignación;
  • - comparación:<, >, >=, <=, <>, =;
  • - operaciones lógicas: NOT, OR, AND, XOR
Tipo de carácter (Char)- este es un tipo de datos que consta de un carácter (signo, letra, código). Un valor Char puede ser cualquier carácter del juego de caracteres ASCII. Si un símbolo tiene una representación gráfica, en el programa se escribe entre comillas simples (apóstrofes), por ejemplo:
"w" "s" "." "*" " "-(espacio)
Para representar el apóstrofe propiamente dicho, se duplica su imagen: """".
Si el carácter no tiene una representación gráfica, por ejemplo, un carácter de tabulación o un carácter de retorno de carro, entonces puede utilizar una forma equivalente de escribir el valor del carácter, que consta del prefijo # y el código ASCII del carácter:
#9 #32 #13
Operaciones válidas:
  • - asignación;
  • - comparación:<, >, >=, <=, <>, =. El carácter más grande es el que tiene un número ASCII mayor.
Tipo de cadena (Cadena, Cadena[n])- Este tipo de datos define secuencias de caracteres - cadenas. El parámetro n especifica el número máximo de caracteres por línea. Si no se especifica, se supone n=255. Un valor de tipo “cadena” en un programa se escribe como una secuencia de caracteres entre comillas simples (apóstrofes), por ejemplo
"Esto es una cuerda"
"1234" también es una cadena, no un número
"" - cadena vacía

Operaciones válidas:
  • - asignación;
  • - adición (concatenación, fusión); por ejemplo, S:= "Invierno"+" "+"¡ha llegado!";
  • - comparación:<, >, >=, <=, <>, =. Las cadenas se consideran iguales si tienen la misma longitud y son equivalentes carácter por carácter.
tipos reales- denota conjuntos de números reales en diferentes rangos. Hay cinco tipos reales, que se diferencian en el rango de valores permitidos y el tamaño de la RAM ocupada. Los tipos reales se designan mediante identificadores: Real, Simple, Doble, Extendido, Comp; sus características se muestran en la siguiente tabla.

tipo de compensación aunque está clasificado como un tipo real, en realidad es un número entero con una gama muy amplia de valores.
Los valores de tipos reales se pueden escribir en un programa de varias formas:
1.456 0.000134 -120.0 65432
+345 0 -45 127E+12
-1.5E-5 -1.6E+12 5E4 0.002E-6

Sería un error escribir un número real como este:
.5 (correcto 0.5)
12. (correctamente 12.0 o 12)

Un número real en forma de coma flotante (forma científica) se escribe como un par
<мантисса>mi<порядок>
Esta designación se entiende como “la mantisa multiplicada por diez a una potencia igual al orden”. Por ejemplo,
-1,6E+12 corresponde a -1,6 1012

Operaciones válidas:
- asignación;
- toda aritmética: +, - ,*, /;
- comparación:<, >, >=, <=, <>, =.

Al comparar números reales, debe recordarse que debido a la inexactitud de su representación en la memoria de la computadora (debido a la inevitabilidad del redondeo), se debe evitar intentar determinar la estricta igualdad de dos valores reales. Existe la posibilidad de que la igualdad sea falsa, aunque en realidad no lo sea.

Un rango o (tipo restringido) no es un tipo de lenguaje predefinido (como Integer o Char) y, por lo tanto, no tiene ningún identificador asociado. Este tipo es entrada del usuario. Usándolo podemos definir un nuevo tipo que contendrá valores solo de un subrango limitado de algún tipo base. El tipo base solo puede ser un tipo entero, un tipo Char (carácter) y cualquiera de los tipos de enumeración introducidos por el programador.

Para introducir un nuevo tipo, un rango, debe indicar en el bloque de descripción del tipo TIPO el nombre del tipo ingresado y los límites del rango mediante el símbolo de rango especial ".." (dos puntos seguidos):
TIPO
Siglo = 1..21; (subrango de tipo entero)
LetrasMayúsculas = "A". "Z"; (subrango de tipo Char)

Tipos de lenguaje estructurado

Los tipos estructurados incluyen: matriz, registro, conjunto, archivo, etc. Todos ellos definen el tipo (o tipos) de alguna estructura de datos.

Formación- una estructura ordenada de datos del mismo tipo que los almacena secuencialmente. La matriz debe tener dimensiones que determinen cuántos elementos se almacenan en la estructura. Se puede acceder a cualquier elemento de una matriz mediante su índice.

El tipo de matriz está determinado por la construcción:
Matriz [rango] de ElementType;

El rango entre corchetes indica los valores de índice del primer y último elemento de la estructura. Ejemplos de declaraciones de tipos y variables:

TIPO Vector = matriz de Real; VAR V1: Vectorial;
V2: matriz de Byte;

Aquí la variable V1 se define utilizando el tipo Vector descrito anteriormente; el tipo de variable V2 se construye directamente en la etapa de su descripción.
Como tipo de elemento de matriz, también puede especificar una matriz, formando así estructuras multidimensionales. Por ejemplo, una descripción de una estructura bidimensional (matriz) se verá así:
VAR M1: matriz de matriz de Byte; Lo mismo se puede escribir de forma mucho más compacta: VAR M2: matriz de Byte;

Aquí las matrices M1 y M2 tienen exactamente la misma estructura: una matriz cuadrada de tamaño 3x3.

Se accede a un elemento de matriz especificando su índice, por ejemplo:
Con esto concluye la lección sobre tipos de datos, el texto fue copiado y pegado casi por completo (el enlace estará a continuación), porque No veo el sentido de contar este material con mis propias palabras. Si la diferencia entre los tipos de datos es al menos un poco clara, entonces esto ya es bueno.

CONFERENCIA 2

Conceptos básicos de programación.

Introducción a Pascal. Tipos de datos. Operaciones.

Alfabeto de idiomaPascal

Cualquier lenguaje natural consta de elementos como símbolos, palabras, frases y oraciones. Un lenguaje de programación también tiene elementos similares: símbolos, palabras, expresiones (frases), operadores (frases).

Las palabras se forman a partir de una colección de símbolos. Expresiones - Estos son grupos de palabras y operadores. - Estas son combinaciones de palabras y expresiones. Los símbolos del lenguaje son signos elementales (letras) que se utilizan para componer algunos textos. Entonces, el conjunto de estos símbolos forma el alfabeto de la lengua.

El alfabeto Pascal consta de:

1. Letras mayúsculas y minúsculas del alfabeto latino, que incluye los siguientes caracteres:

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z - letras mayúsculas;

A b c d e f g h i j k l m n o p q r s t u v w x y z - letras minúsculas;

2. números arábigos decimales: 0 1 2 3 4 5 6 7 8 9;

3. dígitos hexadecimales (construidos a partir de dígitos decimales y letras de la A a la F);

4. 32 letras mayúsculas y minúsculas del alfabeto ruso;

5. caracteres especiales:

Las combinaciones de caracteres especiales pueden formar caracteres compuestos:

: = asignación;

< >no igual;

>= mayor o igual que;

<= меньше или равно;

Rango de valores;

(* *) o ( ) - comentario.

Estructura del programa Pascal

Para que el compilador Passal comprenda correctamente exactamente qué acciones se esperan de él, su programa debe diseñarse en total conformidad con la sintaxis (reglas de construcción de programas) de este lenguaje.

Cualquier programa Pascal puede constar de los siguientes bloques (las partes opcionales se marcan entre corchetes a continuación):

programa<имя_программы>;

[usa<имена_подключаемых_модулей>;]

[ etiqueta<список_меток>;]

[ constante<имя_константы> = <значение_константы>;]

[ tipo<имя_типа> = <определение_типа>;]

[var<имя_переменной> : <тип_переменной>;]

[ procedimiento<имя_процедуры> <описание_процедуры>;]

[ función<имя_функции> <описание_функции>;]

comenzar (comienzo del cuerpo principal del programa)

<операторы>

fin. (*fin del cuerpo principal del programa*)

Las versiones posteriores de los compiladores del lenguaje Pascal ya no requieren especificar el nombre del programa, es decir, la línea del programa.<имя_программы>; se puede omitir. Pero esto sólo es posible si todo el programa está contenido en un archivo de módulo. Si el programa consta de varias partes independientes: módulos, entonces cada uno de ellos debe tener un encabezado (programa o unidad).

Cualquiera de las secciones opcionales enumeradas puede aparecer más de una vez en el texto del programa, su secuencia general también puede cambiar, pero siempre se debe seguir la regla principal del lenguaje Pascal: antes de usar un objeto, se debe declarar y describir.

Los compiladores Pascal no distinguen entre letras minúsculas y mayúsculas e ignoran los espacios en blanco, por lo que el texto del programa se puede estructurar de tal manera que sea más conveniente para leer y depurar.

Directivas del compilador

La línea que comienza con los símbolos ($ no es un comentario, sino una directiva del compilador, un comando especial del que depende el proceso de compilación y ejecución del programa. Consideraremos las directivas en aquellas secciones a las que se refieren "por significado".

Por ejemplo, la línea ($I-,Q+) deshabilita la validación de E/S pero habilita el control de desbordamiento de cálculo.

Identificadores

Los nombres dados a los objetos del programa (constantes, tipos, variables, funciones y procedimientos, y el programa completo) se denominan identificadores. Solo pueden consistir en números, letras latinas y el signo "_" (guión bajo). Sin embargo, un número no puede comenzar con un nombre. Los identificadores pueden tener cualquier longitud, pero si dos nombres tienen los mismos primeros 63 caracteres, entonces los nombres se consideran idénticos.

Puede darle cualquier nombre a los objetos de su programa, pero debe asegurarse de que sean diferentes de las palabras reservadas utilizadas por Pascal, porque el compilador aún no aceptará variables con nombres "extraños".

Aquí hay una lista de las palabras reservadas más comunes:

implementación de matriz shl

cadena de interfaz de caso

etiqueta constante entonces

usos del puntero de archivo

procedimiento lejano var

para programa mientras

registro directo con

función repetir xor

Variables y tipos de datos

Una variable es un objeto de programa cuyo valor puede cambiar mientras el programa se está ejecutando.

Un tipo de datos es una característica del rango de valores que pueden tomar las variables pertenecientes a ese tipo de datos.

Todas las variables utilizadas en el programa deben describirse en una sección var especial utilizando la siguiente plantilla:

var<имя_переменной_1> [, <имя_переменной_2, _>] : <имя_типа_1>;

<имя_переменной_3> [, <имя_переменной_4, _>] : <имя_типа_2>;

El lenguaje Pascal tiene un gran conjunto de tipos de datos diferentes, pero ahora indicaremos sólo algunos de ellos. Hablaremos más sobre todos los tipos de datos.

Constantes

Una constante es un objeto cuyo valor se conoce antes de que el programa comience a ejecutarse.

Las constantes son necesarias para el diseño de programas visuales, son indispensables cuando se utilizan valores repetidos repetidamente en el texto de un programa y son convenientes si es necesario cambiar estos valores a lo largo de todo el programa a la vez.

Hay tres tipos de constantes en Pascal:

Constantes sin nombre (dígitos y números, símbolos y cadenas, conjuntos);

Constantes sin tipo con nombre;

Constantes escritas con nombre.

Constantes sin nombre

Las constantes sin nombre no tienen nombre y, por lo tanto, no es necesario declararlas.

El tipo de constante sin nombre se determina automáticamente, de forma predeterminada:

El compilador percibe cualquier secuencia de números (quizás precedida por un signo "-" o "+", o dividida por un solo punto) como una constante sin nombre: un número (entero o real);

Cualquier secuencia de caracteres encerrados entre apóstrofes se trata como una constante sin nombre: una cadena;

Cualquier secuencia de números enteros o símbolos separados por comas, enmarcados por corchetes, se percibe como una constante sin nombre: un conjunto.

Además, existen dos constantes especiales verdadero y falso relacionadas con el tipo de datos booleanos.

Ejemplos de uso de constantes sin nombre incluyen los siguientes operadores:

real2:= 12.075 + x;

cadena4:= "abc" + cadena44;

conjunto5:= * conjunto55;

booleano6:= verdadero;

Constantes sin tipo

Las constantes con nombre, como su nombre indica, deben tener un nombre. Por lo tanto, estos nombres deben informarse al compilador, es decir, describirse en una sección constante especial.

Si no especifica el tipo de una constante, entonces, por su apariencia, el propio compilador determinará a qué tipo (base) se le debe asignar. Cualquier constante ya descrita se puede utilizar al declarar otras constantes, variables y tipos de datos. A continuación se muestran algunos ejemplos de descripción de constantes con nombre sin tipo:

Constantes escritas

Las constantes con nombre escritas son variables (!) con un valor inicial que ya se conoce cuando se inicia el programa. Por lo tanto, en primer lugar, las constantes escritas no se pueden utilizar para definir otras constantes, tipos de datos y variables y, en segundo lugar, sus valores se pueden cambiar mientras el programa se está ejecutando.

Las constantes escritas se describen utilizando la siguiente plantilla:

constante<имя_константы> : <тип_константы> = <начальное_значение>;

Los siguientes ejemplos muestran cómo hacer esto:

constante n: entero = -10;

b: booleano = verdadero;

Proporcionaremos ejemplos de constantes tipificadas de otros tipos a medida que estudiemos los tipos de datos correspondientes.

Tipos de datos pascales

Los compiladores Pascal requieren que se proporcione información sobre la cantidad de memoria necesaria para ejecutar un programa antes de ejecutarlo. Para hacer esto, en la sección de descripción de variables (var), debe enumerar todas las variables utilizadas en el programa. Además, también es necesario indicarle al compilador cuánta memoria ocupará cada una de estas variables.

Todo esto se puede comunicar al programa simplemente indicando el tipo de la variable futura. Al tener información sobre el tipo de variable, el compilador "comprende" cuántos bytes se le deben asignar, qué acciones se pueden realizar con ella y en qué construcciones puede participar.

Para comodidad de los programadores, Pascal tiene muchos tipos de datos estándar y, además, la capacidad de crear nuevos tipos de datos basados ​​​​en los existentes (estándar o nuevamente definidos por el programador), que se denominan construidos.

La división en tipos de datos básicos y construidos en Pascal se muestra en la tabla:

Tipos de datos ordinales (discretos)

Tipos de datos de dirección

Tipos de datos estructurados

Tipos de datos aritméticos

Tipos de datos básicos

Lógico

Simbólico

Real

Netipizi

índice indexado

Tipos construidos

Listable

semana = (do, mes, tu, we, th, fr,sa);

puntero escrito

Formación

cadena de cuerda

registro registro

Procesal

Objeto

Intervalo (rango)

Tipos de datos construidos por el programador

Tipos de datos ordinales

Entre los tipos de datos básicos destacan los tipos ordinales. Este nombre se puede justificar de dos formas:

1. Cada elemento de un tipo ordinal se puede asociar con un número único (ordinal). La numeración de valores comienza desde cero. La excepción son los tipos de datos shortint, integer y longint. Su numeración coincide con los valores de los elementos.

2. Además, sobre elementos de cualquier tipo ordinal se define un orden (en el sentido matemático de la palabra), que depende directamente de la numeración. Por tanto, para dos elementos cualesquiera de tipo ordinal, se puede decir exactamente cuál de ellos es menor y cuál es mayor.

Rutinas estándar que manejan tipos de datos ordinales

Las siguientes funciones y procedimientos se definen sólo para tipos ordinales:

1.La función ord(x) devuelve el número ordinal del valor de la variable x (relativo al tipo al que pertenece la variable x).

2.La función pred(x) devuelve el valor que precede a x (no aplicable al primer elemento del tipo).

3.La función succ(x) devuelve el valor que sigue a x (no aplicable al último elemento del tipo).

4.El procedimiento inc(x) devuelve el valor que sigue a x (para tipos de datos aritméticos esto es equivalente al operador x:=x+1).

5.El procedimiento inc(x,k) devuelve el k-ésimo valor después de x (para tipos de datos aritméticos esto es equivalente al operador x:=x+k).

6.El procedimiento dec(x) devuelve el valor que precede a x (para tipos de datos aritméticos esto es equivalente al operador x:=x-1).

7.El procedimiento dec(x,k) devuelve el valor k-e que precede a x (para tipos de datos aritméticos esto es equivalente al operador x:=x-k).

A primera vista, parece que el resultado de usar el procedimiento inc(x) es exactamente el mismo que el resultado de usar la función succ(x). Sin embargo, la diferencia entre ellos aparece en los límites del rango permitido. La función succ(x) no es aplicable al elemento máximo de un tipo, pero el procedimiento inc(x) no producirá ningún error, sino que, actuando según las reglas de la suma automática, sumará la siguiente unidad al número del elemento. . El número, por supuesto, saldrá del rango y, debido al truncamiento, se convertirá en el número del valor mínimo del rango. Resulta que los procedimientos inc() y dec() perciben cualquier tipo ordinal como si estuviera “cerrado en un anillo”: inmediatamente después del último valor viene nuevamente el primer valor.

Expliquemos todo lo dicho con un ejemplo. Para tipo de datos

escriba dieciséis = 0..15;

intentar sumar 1 al número 15 dará el siguiente resultado:

La unidad inicial se cortará y, por lo tanto, resulta que inc(15)=0.

Una situación similar en el límite inferior del rango permitido de un tipo de datos ordinal arbitrario se observa para el procedimiento dec(x) y la función pred(x):

dec(min_elemento)= max_elemento

Tipos de datos relacionados con ordinal

1. El tipo booleano tiene dos valores: falso y verdadero, y para ellos se cumplen las siguientes igualdades:

orden(falso)=0, orden(verdadero)=1, falso

pred(verdadero)=falso, succ(falso)=verdadero,

inc(verdadero)=falso, inc(falso)=verdadero,

dec(verdadero)=falso, dec(falso)=verdadero.

2. El tipo de carácter char contiene 256 caracteres ASCII extendidos (por ejemplo, "a", "b", "i", "7", "#"). El número de carácter devuelto por la función ord() es el mismo que el número de carácter en la tabla ASCII.

3. Resumamos los tipos de datos enteros en una tabla:

tipo de datos

Número de bytes

Rango

2147483648..2147483647

4. Los tipos de datos enumerados se especifican en la sección de tipo enumerando explícitamente sus elementos. Por ejemplo:

tipo semana =(dom,lun,mar,mié,jue,vier,sáb)

Recuerde que para este tipo de datos:

inc(sáb) = sol, dism(sol) = sáb.

5. Los tipos de datos de intervalo se especifican únicamente por los límites de su rango. Por ejemplo:

tipo mes = 1..12;

budni = lun..vie;

6. Los tipos de datos construidos por el programador se describen en la sección de tipos de acuerdo con el siguiente patrón:

tipo<имя_типа> = <описание_типа>;

Por ejemplo:

escriba lat_bukvy = "a".."z","A".."Z";

Los tipos de datos básicos son estándar, por lo que no es necesario describirlos en la sección de tipos. Sin embargo, si se desea, esto también se puede hacer, por ejemplo, dando definiciones largas y nombres cortos. Digamos introduciendo un nuevo tipo de datos.

escriba int = entero;

Puedes acortar un poco el texto del programa.

Tipos de datos reales

Recuerde que estos tipos de datos son aritméticos, no ordinales.

tipo de datos

Número de bytes

Rango (valor absoluto)

1.5*10-45..3.4*1038

2.9*10-39..1.7*1038

5.0*10-324..1.7*10308

3.4*10-4932..1.1*104932

Tipos de datos construidos

Consideraremos estos tipos de datos (junto con las operaciones definidas para ellos) a lo largo de varias conferencias.

Operaciones y expresiones

Operaciones aritméticas

Hablemos de operaciones: acciones estándar permitidas para variables de uno u otro tipo de datos básicos. La base serán las operaciones aritméticas y lógicas.

Nota: Todos los operadores enumerados a continuación (excepto "-" unario y not) requieren dos operandos.

1. Las operaciones lógicas (y - Y lógico, o - O lógico, no - NO lógico, xor - O exclusivo) son aplicables únicamente a valores de tipo booleano. También dan como resultado valores booleanos. A continuación se muestran tablas de valores para estas operaciones:

verdadero falso verdadero

falso falso falso

verdadero falso falso

2. Operaciones de comparación (=,<>, >, <, <=, >=) se aplican a todos los tipos básicos. Sus resultados también son valores booleanos.

3. Las operaciones de aritmética de números enteros son aplicables sólo a tipos de números enteros. Su resultado es un número entero cuyo tipo depende de los tipos de operandos.

a div b - división completa de a por b (probablemente no sea necesario recordarle que la división por 0 está prohibida, por lo que en tales casos la operación genera un error). El resultado será de un tipo de datos común a los tipos a los que pertenecen los operandos.

Por ejemplo, (shortint div byte = entero). Esto se puede explicar de esta manera: el número entero es un tipo mínimo del cual tanto el byte como el shortint son subconjuntos.

a mod b - tomando el resto al dividir a por b. El tipo de resultado, como en el caso anterior, está determinado por los tipos de operandos, y 0 es un valor ilegal para b. A diferencia de la operación matemática mod, cuyo resultado es siempre un número no negativo, el signo del resultado de la operación mod "programador" está determinado por el signo de su primer operando. Así, si en matemáticas (-2 mod 5) = 3, entonces tenemos (-2 mod 5) = -2.

a shl k: desplaza el valor de a en k bits hacia la izquierda (esto equivale a multiplicar el valor de la variable a por 2k). El resultado de la operación será del mismo tipo que su(s) primer(es) operando(s).

a shr k: desplaza el valor de a en k bits hacia la derecha (esto equivale a dividir completamente el valor de la variable a por 2k). El resultado de la operación será del mismo tipo que su(s) primer(es) operando(s).

y, o no, xor: operaciones aritméticas binarias que trabajan con bits de la representación binaria de números enteros, de acuerdo con las mismas reglas que las operaciones lógicas correspondientes.

4. Las operaciones aritméticas generales (+, -, *, /) se aplican a todos los tipos de aritmética. Su resultado pertenece a un tipo de datos común a ambos operandos (la única excepción es la operación de división fraccionaria /, cuyo resultado es siempre un tipo de datos real).

Otras operaciones

Existen otras operaciones específicas para los valores de algunos de los tipos de datos estándar de Pascal. Consideraremos estas operaciones en las secciones correspondientes:

#, in, +, *, : ver lección 5 “Símbolos. Pauta. Multitudes"

@, ^: ver lección 7 “Direcciones y punteros”

Funciones aritméticas estándar

Las operaciones aritméticas también incluyen funciones aritméticas estándar. Proporcionamos una lista de ellos con una breve descripción en la tabla.

Función

Descripción

Tipo de argumento

Tipo de resultado

Valor absoluto (módulo) de un número

Aritmética

Igual que el tipo de argumento

Arctangente (en radianes)

Aritmética

Real

Coseno (en radianes)

Aritmética

Real

Exponente (ex)

Aritmética

Real

Tomando la parte fraccionaria de un número.

Aritmética

Real

tomando la parte entera de un numero

Aritmética

Real

Logaritmo natural (base e)

Aritmética

Real

Comprobar si un número es impar

Significado del número

Real

Redondear al entero más cercano

Aritmética

Redondear hacia abajo - al número entero más pequeño más cercano

Aritmética

Seno (en radianes)

Aritmética

Real

cuadratura

Aritmética

Real

Raíz cuadrada

Aritmética

Real

Expresiones aritméticas

Todas las operaciones aritméticas se pueden combinar entre sí, teniendo en cuenta, por supuesto, los tipos de datos permitidos para sus operandos.

Los operandos de cualquier operación pueden ser variables, constantes, llamadas a funciones o expresiones construidas sobre la base de otras operaciones. Todo junto se llama expresión.

Ejemplos de expresiones aritméticas:

(incógnita<0) and (y>0) - una expresión cuyo resultado es de tipo booleano;

z shl abs(k): el segundo operando es una llamada a la función estándar;

(x mod k) + min(a,b) + trunc(z) - una combinación de operaciones aritméticas y llamadas a funciones;

odd(round(x/abs(x))) - expresión de "varios pisos".

Orden de cálculo

Si la expresión contiene paréntesis, los cálculos se realizan en el siguiente orden: cuanto menor sea la profundidad de anidamiento de los paréntesis, más tarde se calculará la operación contenida en ellos. Si no hay paréntesis, primero se calculan los valores de las operaciones con mayor prioridad y luego las de menor prioridad. Se calculan en secuencia varias operaciones consecutivas de la misma prioridad de izquierda a derecha.

Tabla 2.1. Prioridades (para todas) Operaciones Pascal

Conceptos básicos de programación
Todo profesional alguna vez fue una tetera. Seguramente estás familiarizado con ese estado en el que “no sabes cómo empezar a pensar para llegar a tal cosa”. Probablemente te hayas encontrado con una situación en la que simplemente no sabes por dónde empezar. Este libro está dirigido precisamente a aquellas personas que quisieran convertirse en programadores, pero no tienen la menor idea de cómo iniciar este camino.

...

Casi todos los tipos de datos enteros son . Estos tipos de datos representan números enteros dentro de un rango determinado. Los nombres específicos de los tipos de números enteros y los rangos de valores dependen del lenguaje de programación específico, el compilador y el modo de compilación. Puede obtener más información sobre esto en la documentación del compilador. Por ejemplo, tipo de datos Entero Por ejemplo, tipo de datos en Delphi tiene un rango de -2147483648…2147483647, mientras que en Turbo Pascal el tipo de datos Por ejemplo, tipo de datos representa números en el rango -35768…32767. En Free Pascal, el rango de valores de tipo

determinado por el modo seleccionado.

Dado que Lazarus utiliza el compilador Free Pascal, todo lo dicho sobre los tipos de datos en relación con Free Pascal también es válido para Lazarus.

Entonces, los tipos de datos enteros de Free Pascal se enumeran en la Tabla 13.1.

Tipo Tabla 13.1. Tipos de datos enteros de Pascal gratuitos (Lazarus). Tamaño, bytes
Rango de valores 1 0…255
Byte 1 -128…127
punto corto 2 -35768…32767
Pequeño 2 0…65535
Por ejemplo, tipo de datos Palabra 2 o 4
Depende del modo de compilación 4 0…4294967295
Cardenal 4 -2147483648…2147483647
punto largo 4 0...4294967295
palabra larga 8 -9223372036854775808...9223372036854775807
Int64 8 0...18446744073709551615

Palabra Q
NOTA palabra larga Y Int64 Tipos en Pascal libre

no lo son! Esto significa que no puede utilizarlos, por ejemplo, para variables de índice en bucles. Sin embargo, los presenté aquí para no describirlos por separado en el futuro y para recopilar todos los tipos de enteros de Free Pascal en un solo lugar. Si no entiendes algunas palabras, no te alarmes. A su debido tiempo os contaré todo con más detalle.

Y ahora unas cuantas explicaciones sobre la tabla. en la columna TIPO

Y ahora unas cuantas explicaciones sobre la tabla. Se proporcionan identificadores de tipo de datos (palabras clave que indican al compilador a qué tipo pertenece un dato en particular). Aprenderá a utilizar estos identificadores en las siguientes lecciones. Indica el tamaño que ocupa el tipo de datos en la memoria de la computadora. Por ejemplo, un número entero positivo se puede representar mediante diferentes tipos: Rango de valores, Pequeño, Depende del modo de compilación etc. Sin embargo, un número como Depende del modo de compilación ocupará 4 bytes en la memoria, mientras que un número como Rango de valores– sólo 1 byte. Por lo tanto, si sabes con certeza que el número con el que estás trabajando nunca tomará un valor mayor a 255, entonces es mejor definirlo como un tipo. Rango de valores, ya que esto ahorrará espacio en la memoria de tu computadora. Aunque aquí no todo es tan sencillo (los matices de la distribución de la memoria y otros recursos de la computadora están fuera del alcance).

Y ahora unas cuantas explicaciones sobre la tabla. RANGO especifica el rango de valores en el que opera el tipo de datos. Por ejemplo, un número como Rango de valores Puede tomar valores de 0 a 255.

Ahora a practicar. Escribamos un programa que muestre los rangos de valores de todos los tipos de datos enteros. El código fuente de este programa se proporciona a continuación:

Listado 13.1. Un programa para mostrar rangos de números enteros. programa td; ($mode objfpc)($H+) usa ($IFDEF UNIX)($IFDEF UseCThreads) cthreads, ($ENDIF)($ENDIF) Clases (puede agregar unidades después de esto); comenzar Writeln("Byte: ", Bajo(Byte), "..", Alto(Byte));

Writeln("Shortint: ", Bajo (Shortint), "..", Alto (Shortint)); Writeln("Smallint: ", Bajo(Smallint), "..", Alto(Smallint)); Writeln("Palabra: ", Bajo(Palabra), "..", Alto(Palabra)); Writeln("Entero: ", Bajo (Entero), "..", Alto (Entero)); Writeln("Cardenal: ", Bajo(Cardenal), "..", Alto(Cardenal)); Writeln("Entero largo: ", Bajo (Entero largo), "..", Alto (Entero largo)); Y Writeln("Palabra larga: ", Bajo (Palabra larga), "..", Alto (Palabra larga)); Writeln("Int64: ", Bajo(Int64), "..", Alto(Int64));

Writeln("QWord: ", Bajo(QWord), "..", Alto(QWord));

10
178
35278

Leer; fin.

Función estándar

  1. Bajo define el valor mínimo del tipo de datos. funtskia
  2. Alto define el valor máximo. Con funciones
  3. Notación octal. Un número con el prefijo &. Por ejemplo, octal &10 es igual a decimal 8.
  4. Notación binaria. Un número con el prefijo %. Por ejemplo, el número binario %10 es igual al número decimal 2.

Tarea:

Cree un programa que muestre rangos de valores enteros (Listado 13.1). Compile el programa y ejecútelo. Asegúrese de que estos valores correspondan a los que se muestran en la Tabla 13.1.

En el código fuente del programa, busque la línea que establece el modo de compilación:

($modo objfpc)($H+)

En esta línea, en lugar de la palabra objfpc escribe la palabra tp. Es decir, la línea final debería verse así:

($modo tp)($H+)

Inicie el programa. Mira el rango de valores de tipo. Por ejemplo, tipo de datos. Extraer conclusiones.

Aprende a pensar como un programador, es decir, de forma lógica. Nadie se encargará de todo por ti hasta la jubilación, como lo hago yo ahora. Tienes que acostumbrarte a pensar por ti mismo. De lo contrario, caerá en el “principio de aprendizaje del mono” y entonces sus posibilidades de convertirse en un gran programador serán cercanas a cero. Para ayudarte a no caer en el nivel de “estudiar”, periódicamente dejaré lagunas en tu aprendizaje para que intentes descubrir algunas cosas por ti mismo.

Es mucho mejor si lo descubres tú mismo. decisión equivocada, encontrará el error usted mismo y lo corregirá usted mismo, en lugar de utilizar siempre las soluciones correctas de otras personas y copiarlas estúpidamente.




Arriba