Download Apendice3_2009

Document related concepts

Tipo de dato wikipedia , lookup

Tipo de dato lógico wikipedia , lookup

Cálculo lambda wikipedia , lookup

Lógica binaria wikipedia , lookup

Corchete Iverson wikipedia , lookup

Transcript
Cátedra de Computación
Apéndice 3: Expresiones, fórmulas y formatos para escritura
Apéndice 3: Expresiones, fórmulas, funciones predefinidas y
formatos para la escritura en el lenguaje Pascal
1 – Expresiones y operadores
Pascal incluye los siguientes tipos de expresiones, de acuerdo con los operadores que intervienen en
las mismas:
- aritméticas
- relacionales
- lógicas y
- carácter (o cadena de caracteres)
A continuación se describen los operadores básicos, los resultados que se obtienen de su
aplicación y el orden de precedencia para un correcto funcionamiento.
1.1- Operadores aritméticos básicos
Los operadores aritméticos (+, -, *) pueden ser utilizados con tipos enteros o reales. Si ambos son
enteros, el resultado es entero; si alguno de ellos es real, el resultado es real.
Ejemplo:
2+5 =7
2+5.0 =7.0
2.0+5 =7.0
2.0+5.0=7.0
El operador / produce un resultado de tipo real, independientemente del tipo de los operandos.
Ejemplo:
7/2
=3.5
7.0 / 2
=3.5
7.0 / 2.0 =3.5
Los operadores mod y div sólo pueden utilizarse con números enteros. El operador div calcula
el cociente entero de la división de dos números enteros, y el operador mod calcula el resto de dicha
división.
Formato:
a div b
a mod b
con a y b enteros, y b0
con a y b enteros, y b0
Ejemplo:
7 div 2 = 3
7 mod 2 = 1
7
1
2
3
Resultado de div
Resultado de mod
Existe una diferencia entre el Álgebra tradicional y cuando se opera con un a<0.
Veamos un ejemplo:
Para el álgebra
-5
2
+6
-3
1
Para Pascal
-5
2
+4
-2
-1
COMPUTACION – Apéndice3
1
Cátedra de Computación
Apéndice 3: Expresiones, fórmulas y formatos para escritura
-8
+9
1
-3
3
-8
+6
-2
-3
+2
Algebraicamente, el resto de una división tiene que ser siempre positivo, mientras que acá puede no
serlo.
Otros ejemplos:
3
3
-5
-5
Expresión
div
mod
div
mod
-1
-1
2
2
Resultado
-3
0
-2
-1
Expresión
-3
div
-3
mod
-2
div
-2
mod
-8
-8
7
7
Resultado
2
-2
-3
1
1.2 - Operadores de relación
Los operadores de relación (o relacionales) se utilizan para expresar condiciones y describen
una relación entre dos valores. El resultado de una expresión relacional es de tipo lógico (boolean), es
decir devuelve un valor Verdad (TRUE) o Falso (FALSE).
Los operadores relacionales son:
=(igual) <>(distinto) >(mayor) <(menor) <=(menor o igual) >=(mayor o igual)
Los operandos pueden ser del tipo escalar (numérico, char o boolean) o cadena de caracteres (con la
misma longitud)
Ejemplos:
Expresión
6.3< 6.3
7>=7
5+4 < 2*4
‘A’<‘B’
‘abc’=‘abc’
2<8 = 5>6
Resultado
FALSE
TRUE
FALSE
TRUE
TRUE
FALSE
1.3 - Operadores lógicos:
Las expresiones lógicas pueden combinarse para formar expresiones más complejas utilizando
los operadores lógicos: and (conjunción), or (disyunción) y not (negación).
Las expresiones lógicas devuelven un valor de tipo booleano. Los dos valores standard tipo
Boolean están definidos por los identificadores TRUE y FALSE.
Los operadores booleanos de conjunción, disyunción y negación están representados en la
siguiente tabla, donde p y q representan dos operandos lógicos.
p
q
p and q
p or q
not p
TRUE
TRUE
FALSE
FALSE
TRUE
FALSE
TRUE
FALSE
TRUE
FALSE
FALSE
FALSE
TRUE
TRUE
TRUE
FALSE
FALSE
FALSE
TRUE
TRUE
Ejemplos:
Expresión
(3<4) and (4=4)
(1<=0) or (3>5)
not (3=3)
Resultado
TRUE
FALSE
FALSE
COMPUTACION – Apéndice3
2
Cátedra de Computación
Apéndice 3: Expresiones, fórmulas y formatos para escritura
1.4 - Operador carácter:
El Pascal permite concatenar caracteres (o cadena de caracteres) utilizando el operador de
concatenación (+).
Ejemplos:
Expresión
‘z’+’z
‘hola’+’que’+ ‘tal’
Resultado
‘zz’
‘holaquetal’
A continuación se muestra una tabla con los conceptos explicados:
OPERADORES
ARITMETICOS
*
/
div
mod
+
RELACIONALES
= <> < > <= >=
LOGICOS
not
and
or
CARACTER
+
OPERACION
TIPOS de OPERANDOS
multiplicación
reales, enteros
división
reales, enteros
div.entera
enteros
módulo (resto de la enteros
división)
suma
reales, enteros
resta
reales, enteros
TIPO de RESULTADO
real, entero
real
entero
entero
real, entero
real, entero
escalares, cadena de caracteres booleano
negación
conjunción
disyunción
booleano
booleano
booleano
booleano
booleano
booleano
concatenación
caracter , cadena de caracteres
cadena de caracteres
1.5 - Prioridad de operadores
Cuando el lenguaje evalúa una expresión de más de dos operandos, sigue las siguientes reglas para
encontrar el valor del resultado:
OPERADOR
not
*, /, div, mod, and
+, -, or
<,<=,=,<>,>=,<
PRIORIDAD
1ra (Más alta , se evalúa primero)
2da
3ra
4ta (Más baja, se evalúa último)
 Todas las expresiones entre paréntesis se evalúan primero. Si hay paréntesis anidados, se evalúan
de adentro hacia afuera (la expresión encerrada en el paréntesis interior se evalúa primero).
 Los operadores en una misma expresión con igual nivel de prioridad (tal como * y / ) se evalúan de
izquierda a derecha.
2 – Estructura de las fórmulas matemáticas en Pascal
En Pascal, las fórmulas matemáticas se deben escribir en una línea. Esto obliga al uso frecuente
de paréntesis, para su correcta evaluación.
Ejemplos:
Fórmulas matemáticas
a = bc
b2 – 4ac
Expresión Pascal
a := b * c
b*b-4*a*c
COMPUTACION – Apéndice3
3
Cátedra de Computación
Apéndice 3: Expresiones, fórmulas y formatos para escritura
m=
x-y
xy
m:=(x-y)/(x+y)
3 – Funciones predefinidas
El lenguaje Pascal incluye un número determinado de funciones estándar predefinidas que se
encuentran ya incorporadas y no necesitan ser declaradas y codificadas en el programa. Se hallan
disponibles funciones matemáticas, funciones de cadenas y otras específicas que permiten resolver
problemas numéricos, de simulación, estadísticos, números de bytes ocupados por los argumentos, etc.
A continuación se describen las funciones predefinidas más utilizadas:
3.1 - Funciones aritméticas y trigonométricas.
Nombre
Abs(x)
ArcTan(x)
Cos(x)
Exp(x)
Frac(x)
Int(x)
Ln(x)
Round(x)
Sin(x)
Sqr(x)
Sqrt(x)
Trunc(x)
Pi
Tipo del argumento
Real o Integer
Real o Integer
Real o Integer
Real o Integer
Real
Real
Real o Integer
Real o Integer
Real o Integer
Real o Integer
Real o Integer
Real
no posee
Resultado
el valor absoluto del argumento
el arco tangente del argumento
el coseno del argumento
el exponencial del argumento
la parte decimal del argumento
la parte entera del argumento
el logaritmo natural del argumento
el entero más próximo al argumento
el seno del argumento
el cuadrado del argumento
la raíz cuadrada del argumento
la parte entera del argumento
3.1415926535897932385
Tipo del resultado
Real o Integer
Real
Real
Real
Real
Real
Real
Integer
Real
Real
Real
Integer
Real
Nota 1: El argumento de las funciones trigonométricas está expresado en radianes.
Nota 2: No existe operador exponencial en Pascal. Para calcular x a la i-ésima potencia,
se emplea : exp(i*ln(x))
3.2 - Funciones ordinales
Función
Resultado
Ord(x)
devuelve el número ordinal correspondiente al argumento.
Chr(x)
devuelve el carácter en el código ASCII correspondiente al argumento
Succ(x)
devuelve el sucesor del argumento, produce error si no tiene sucesor
Pred(x)
devuelve el predecesor del argumento.
Nota: El argumento de las funciones ordinales es de tipo ordinal así como su resultado.
3.3 - Funciones especiales
Función de paridad Odd(x)
Odd verifica si el argumento de la función es un número impar. Recibe un argumento entero y
devuelve un resultado lógico (el resultado es True si x es impar y False si x es par).
Función Random [ (n) ]
Random genera números aleatorios.
El argumento es opcional. Si no existe, la función devuelve un número aleatorio real entre 0 y
1. Si existe, la función devuelve un número entero aleatorio entre 0 y n -1.
La sentencia Randomize
La primera vez que Random se ejecuta, Pascal genera, resolviendo operaciones matemáticas
muy complejas, una serie de números aleatorios a partir de un número inicial denominado semilla.
Cada semilla genera una serie diferente. Esto significa que las series se repetirán cada vez que el
programa se ejecute, a menos que cambie el valor de la semilla.
COMPUTACION – Apéndice3
4
Cátedra de Computación
Apéndice 3: Expresiones, fórmulas y formatos para escritura
La sentencia Randomize es la encargada de reinicializar la semilla y debe ejecutarse antes de llamar a
la función Random.
3.4 - Funciones de cadenas de caracteres:
Además de las funciones predefinidas para el tratamiento de cadena de caracteres que se
describen a continuación, existen procedimientos predefinidos que hacen que el tratamiento de las
cadenas sea muy versátil. Por su utilidad se anexan en esta tabla.
Función
Concat (S1...Sn)
Length (S)
Pos (S1, S2)
Argumentos
Si: cadenas de caracteres
S: cadena de caracteres
S1 y S2: cadenas de caracteres
Copy (S, p, n)
S: cadena de caracteres
n y p : números enteros
Procedimiento
Delete (S,p,n)
Argumentos
S: cadena de caracteres
p y n : expresiones enteras
C y S: cadenas de caracteres
p: expresión entera
Insert (C,S, p)
Descripción
Concatena las Si
Proporciona la longitud lógica de S
Devuelve la posición donde
comienza la cadena S1 en la cadena
S2; si no existe, devuelve el valor 0.
Devuelve la cadena de longitud n
extraída de la cadena S a partir de la
posición p .
Descripción
Borra de la cadena S a partir de la
posición p, n caracteres
Inserta en la cadena S, a partir de la
posición p, la cadena C
4 – Escritura con formato
Turbo Pascal permite controlar en cierta medida las instrucciones de salida que presentan
resultados. Es posible especificar el número de posiciones del campo de escritura. Para los números
reales se puede precisar la cantidad de decimales deseada .
Writeln(ítem : ancho);
Ancho es una expresión entera que especifica la cantidad de caracteres total del campo en que se
escribe el ítem
Writeln(expresión real : ancho: dígitos);
Ancho es una expresión entera que especifica la cantidad total de dígitos del número real
(contando parte entera, punto decimal y dígitos decimales)
Dígitos es una expresión entera que especifica la cantidad de decimales con que se escribirá el
número real.
Ejemplos:
S A L I D A
C O L U MN A S
a:= 3.456 ;
b:=8 ;
Write(a: 8:2) ;
Write(b:10) ;
Write(a:2:4) ;
1
2
3
4
5
6
7
8
9
10
3 . 4 5
8
3 . 4 5 6 0
COMPUTACION – Apéndice3
5