Ejemplo: La codificación ASCII para caracteres textuales
Conjunto de valores posibles que pueden tomar unos datos junto con las operaciones que se pueden realizar sobre ellos
Tipos básicos (o predefinidos) en Pascal
Integer
Real
Char
Boolean
Tipo de Datos
Todos son tipos simples
Integer y Real son tipos numéricos
Tipos de datos en Pascal
Integer (números enteros):
El rango de valores representable depende del entorno de desarrollo y la máquina que usemos
Ej: En Turbo Pascal, se reservan 2 bytes para almacenar cada entero en complemento a 2, con lo que el rango va:
desde -215 = -32768
hasta (215-1) = 32767
Otros tipos enteros en Turbo Pascal:
ShortInt -128..127
LongInt (4 bytes) –2147483648..2147483647
Byte 0..255
Word 0..65535
De momento utilizaremos solo el tipo Integer
Tipos de datos en Pascal
Real (números reales):
Rango de valores representable: usando 6 Bytes para almacenar los datos de tipo real, el rango va
desde 2.9 x 10-38
hasta 1.7 x 1038.
También tiene otra serie de tipos adicionales relacionados
Char (Caracteres):
Cualquier carácter de los 256 que forman la tabla ASCII
Boolean (Valores booleanos o lógicos):
Sólo pueden ser :Verdadero (TRUE) o Falso (FALSE)
El tipo Integer de Pascal
Tipo ordinal(sus elementos pueden organizarse de menor a mayor y hay una manera obvia de pasar al siguiente)
Sintaxis de los números enteros en EBNF:
V-entera ::= [“+” | “-”] Digito {Digito}
Digito ::= “0” | “1” | … | “9”
Constantes predefinidas en Pascal
maxint: Valor máximo para números enteros
minint: Valor mínimo para números enteros
Ej: En Turbo Pascal son 32767 y -32768, respectivamente
Operadores para datos enteros
Aridad Posición Operandos Resultado Operación (num. Operandos)
– 1 prefijo entero entero cambio de signo (operador por delante)
+ 2 infijo entero entero suma (operador entre medias)
– 2 infijo enteros entero resta
* 2 infijo enteros entero multiplicación
div 2 infijo enteros entero cociente de la división entera
mod 2 infijo enteros entero resto de la división entera
Expresiones aritméticas enteras
Ejemplos
var x: integer;
…
4 + 5 -17 * x
5 + 2 * 7 5 – 6 – 7
¿Cómo interpretar una expresión como 5 + 2 * 7? ¿Y 5 – 6 – 7?
La resolución de ambigüedades producidas por el uso de operadores infijos se lleva a cabo asociando a cada operador
Una prioridad o precedencia
Una asociatividad
Los paréntesis sirve normalmente para “llevar la contraria” a dichas prioridades y asociatividades, ya que las expresiones entre paréntesis siempre se evalúan primero
Prioridad
Un operador ? tiene prioridad sobre otro operador ? si, ante dos interpretaciones posibles de una expresión, se elige siempre aquélla que supone aplicar primero ?
Prioridad de los operadores aritméticos en Pascal
– (cambio de signo)
* div mod
+ – (resta)
¿Cómo se interpreta 5 + 2 * 7?
¿Qué podemos usar si se desea otra interpretación?
Evaluación de expresiones
Orden de
aplicación
Asociatividad
La expresión 5 – 6 – 7 sigue siendo ambigua porque estamos usando el mismo operador
Las reglas de asociatividad solucionan estas ambigüedades
Si un operador cualquiera (llamémosle ?) asocia a izquierdas, entonces a ? b ? c se interpreta como (a ? b) ? c
Si un operador cualquiera (llamémosle ?) asocia a derechas, entonces a ? b ? c se interpreta como a ? (b ? c)
En Pascal todos los operadores aritméticos infijos binarios asocian a izquierdas
¿Cómo se interpreta 5 – 6 – 7?
¿Qué podemos usar si se desea otra interpretación?
Evaluación de expresiones
Reglas para evaluar expresiones (en este orden):
Las subexpresiones entre paréntesis se evalúan primero. Si hay subexpresiones parentizadas anidadas (paréntesis dentro de paréntesis, etc.) se evalúan de dentro hacia fuera
Dentro de una expresión, los operadores se evalúan según su prioridad
Los operadores con igual prioridad que estén en una misma subexpresión se evalúan según la asociatividad de Pascal (siempre de izquierda a derecha)
Ejemplos
(4 + 6) * 3 div 5 vs 4 + 6 * 3 div 5
(4 + 6) * (10 – 5) mod 2 vs 4 + 6 * (10 – 5) mod 2
10 mod ((4 + 2) – (3 * 2)) vs 10 mod (4 + 2) – (3 * 2)
Evaluación de expresiones
Funciones sobre datos enteros
Funciones aritméticas predefinidas en Pascal
abs (x) ? Valor absoluto. Resultado entero
cos (x) ? Coseno de x (en radianes). Resultado real
sin (x) ? Seno de x (en radianes). Resultado real
exp (x) ? ex. Resultado real
ln (x) ? Logaritmo neperiano de x. Resultado real
sqr (x) ? x2. Resultado entero
sqrt (x) ? ?x. Resultado real
donde x es constante, variable o expresión entera
Ejemplos
var num: integer;
…
sqrt (4 * num) exp (num * 4 + 3)
cos (5 * abs (-2)) ln (num * (4 + 3))
Otras operaciones con enteros
Operadores relacionales (binarios)
> < >= <= = <>
Los operandos son constantes, variables o expresiones enteras
El resultado es un valor booleano (verdadero o falso)
Función Impar
odd (x)
donde x es constante, variable o expresión entera; el resultado es un valor booleano (verdadero si x es impar)
Predecesor y sucesor
pred (x)
succ (x)
donde x es constante, variable o expresión entera; el resultado es el número entero anterior y el siguiente, respectivamente
El tipo Real de Pascal
Tipo ordenado (sus elementos pueden organizarse de menor a mayor)
Sintaxis de los números reales en EBNF:
Vreal ::= Fnormal | Fcientifico
Fnormal ::= [Signo] Pentera “.” Pdecimal
Pentera ::= Digito {Digito}
Pdecimal ::= {Digito}
Fcientifico ::= Fnormal “E” Signo Pentera
Digito ::= “0” | “1” | … | “9”
Signo ::= “+” | “-”
Operadores para datos reales
Aridad Posición Operandos Resultado Operación
– 1 prefijo real real cambio de signo
+ 2 infijo reales real suma
– 2 infijo reales real resta
* 2 infijo reales real multiplicación
/ 2 infijo reales real cociente de la división real
Funciones sobre datos reales
Funciones aritméticas predefinidas
abs (x) ? Valor absoluto. Resultado real
cos (x) ? Coseno de x (en radianes). Resultado real
sin (x) ? Seno de x (en radianes). Resultado real
exp (x) ? ex. Resultado real
ln (x) ? Logaritmo neperiano de x. Resultado real
sqr (x) ? x2. Resultado real
sqrt (x) ? ?x. Resultado real
donde x es constante, variable o expresión real
Operadores relacionales (binarios)
> < >= <= = <>
Los operandos son constantes, variables o expresiones reales
El resultado es un valor booleano
Conversión explícita de tipo (de real a entero)
round (x) ? redondea al número entero más próximo
trunc (x) ? directamente elimina la parte decimal
donde x es constante, variable o expresión real
Ejemplos:
round (8.8)
round (-8.7)
trunc (8 + 0.8)
trunc (-2.4)
round (9 – 0.5)
Otras operaciones con datos reales
(Gp:) Por defecto en Pascal se redondea “al alza”
El tipo Char de Pascal
Tipo ordinal
El juego de caracteres varía de un estándar a otro
Dos estándares de uso común son ASCII y EBCDIC
Los juegos de caracteres incluyen dos clases de caracteres
Visibles: pueden editarse e imprimirsePor ejemplo: los dígitos, las letras, los símbolos de puntuación…
Invisibles (también llamados caracteres de control)Por ejemplo: el salto de línea, el fin de línea, el tabulador…
El tipo Char de Pascal
Internamente cada carácter del juego de caracteres está representado por un código numérico
ord (x) –> Obtención del código numérico asociado al carácter x
chr (x) –> Convierte el código numérico x en el carácter correspondiente según el juego de caracters
Por ejemplo, en el juego de caracteres ASCII, el código numérico del carácter ‘A’ es 65.
Es decir, el 65 es el código ASCII del carácter ‘A’
El tipo Char de Pascal
Predecesor y sucesor
pred (x)
succ (x)
donde x es una constante o una variable de tipo carácter
Operadores relacionales (binarios)
> < >= <= = <>
Los operandos son constantes o variables de tipo carácter
El resultado es un valor booleano
¡Ojo! Lo que realmente se compara son los códigos numéricos de los caracteres comparados (gracias a esto es Char es un tipo ordenado)
El tipo Boolean de Pascal
Tipo ordinal
Dos únicos valores: true y false
ord (false) es 0; ord(true) es 1
Expresiones booleanas simples
Operador relacional cuyos operandos son dos constantes, variables o expresiones del mismo tipo (o compatibles a nivel de comparación, es decir, que se pueden comparar)
x <= 0
x + y >= y – z
cos (r) * 5 <> valor * x
Expresiones booleanas compuestas
Operadores lógicos binarios: and (y-lógica) y or (o-lógica)
Operador lógico unario: not (negación lógica)
Prioridad de los operadores en Pascal (añadiendo los operadores lógicos y relacionales)
– (unario) not
* div mod / and
+ – (binario) or
< <= > >= = <>
El tipo Boolean de Pascal
Orden de
aplicación
Ejemplo
Escribe expresiones booleanas para representar las siguientes condiciones
Alguno de estos tres valores enteros i, j o k es par
Un valor entero j está en el intervalo [0, 100]
El tipo Boolean de Pascal
Ejemplo: Supón tres variables enteras A, B y C que tienen los valores 10, 15 y 20, respectivamente.
Evalúa, si es posible, las siguientes expresiones booleanas
A > 5
A + B = C
(C= 20) or (A > 5) and (B > C)
(C= 20) and (A > 5) or (B > C)
not (A > 5) or ((C = 20) or (A > 5)) and (B > C)
El tipo Boolean de Pascal
Instrucción básica de la programación imperativa para cambiar el estado en un programa
Sirve para cambiar el valor de una variable
El valor asignado debe ser compatible con el tipo de la variable
No se debe acceder a una variable antes de que se le haya asignado un valor ? ¡Prohibido usar variables con “basura”!
Sintaxis en diagrama sintáctico:
La asignación
Asignación
:=
Variable
Variable
Constante
Expresión
Página anterior | Volver al principio del trabajo | Página siguiente |