Descargar

Pascal: Instrucciones y tipos de datos simples (página 2)

Enviado por Pablo Turmero


Partes: 1, 2, 3
edu.red

Ejemplo: La codificación ASCII para caracteres textuales

edu.red

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

edu.red

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

edu.red

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)

edu.red

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

edu.red

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

edu.red

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

edu.red

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

edu.red

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

edu.red

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

edu.red

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))

edu.red

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

edu.red

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 ::= “+” | “-”

edu.red

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

edu.red

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

edu.red

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”

edu.red

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…

edu.red

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’

edu.red

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)

edu.red

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

edu.red

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

edu.red

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

edu.red

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

edu.red

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

Partes: 1, 2, 3
 Página anterior Volver al principio del trabajoPágina siguiente