ESPECIFICACIÓN DEL LENGUAJE ALGORÍTMICO UPSAM
1. ELEMENTOS DEL
LENGUAJE
Identificadores
v
Longitud
: máximo 32 caracteres
v
Se
admiten todos los caracteres alfabéticos (estándar y extendido), dígitos y el
símbolo de subrayado.
v
No se
hace distinción entre mayúsculas y minúsculas
v
Se debe
empezar siempre por un carácter alfabético
v
Se
recomienda el uso de la doble barra inclinada (//) al comienzo. Puede ir al
principio de una línea del pseudocodigo, o después de alguna
instrucción.
v
Para
comentarios multinea, se puede encerrar el comentario entre llaves ({}).
v
Numerico
(entero y real).
v
Lógicos
(logico).
v
Caracteres
(caracterer)
v
Cadenas
(cadena). Se recomienda como un dato estandar, pero estructurado, es decir, como
un array de caracteres acabado en un carácter nulo.
v
Se
admiten cadenas o limitadas a un numero detrminado de caracteres, de la forma
cadena nombre_variable[n].
v
Numéricas
enteras; estan compuestas por los digitos (0..9), y el signo
(+,-)
v
Reales
en como fija: estan compuestas por los digitos (0..9), el signo (+,-) y la coma
decimal (,).
v
Reales
de coma flotante: estan compuestas por los digitos (0.. 9), el signo (+,-) y la
coma decimal (,) de la mantisa, la letra E, antes del exponente y los digitos
(0..9), el signo (+,-) y la coma decimal (,) del
exponente.
v
Lógicos:
son las constantes que representan a verdadero (Verdad) y falso
(Falso).
v
Caracteres:
cualquier carácter del juego de caracteres utilizando, delimitado por el
separador de caracteres (‘).
Operadores
aritmético
-
menos usuario
*
multiplicación
/
división real
exponenciacion
+
adición
-
resta
mod
modulo de la división entera
div
división entera
Tipos
de resultados de las expresiones aritméticas :
La
división real siempre da un resultado real. Los operadores mod y div sólo operan
con enteros y el resultado es entero. El menos usuario devuelve el mismo tipo
que el operando. En el resto de operadores aritmétricos, si alguno de los
operadores es real, el resultado es real.
Operadores
de relación
=
igual a
<>
distinto de
<
menor que
>
mayor que
<=
menor o igual que
>=
menor o igual que
Tipos
de resultados de expresiones de relación :
Siempre
devuelven un dato de tipo lógico . los operadores deben ser del mismo
tipo.
Operadores
lógicos
No
negación logica
Y
multiplicación lógica
O
suma logica
O_x
o exclusivo
Eqv
equivalencia
Imp
implicación
Tipos
de resultados de expresiones lógicas :
Siempre
devuelven un dato de tipo lógico. Los operadores deben ser del mismo tipo
lógico.
Prioridad
de los operadores
Paréntesis
()
Exponenciacion
Operadores unarios
no, -
Operadores multiplicativos
* /, div, mod, y ,
Operadores auditivos
+, -, o, o_x
Operadores de relacion
=, <, >, <>, >=, >=
Las
operaciones se evaluan siempre de izquierda a derecha.
Operador
de asignación :( ) .
Sólo se pueden asignar datos del mismo tipo.
v
Registros:
Registro
:<nombre_del_tipo>_
<tipo>:
<nombre_del_campo>
. .
. .
fin_registro
Una
linea por campo.
v
Archivos
de organización secuencial
Archivo_s
de
<tipo_de_dato> :
<nombre_del_tipo>
v
Archivos
de organización relativa
Archivo_d
de <tipo_de_dato> :
<nombre_del_tipo>
v
Array
array[diemnsiones] de
<tipo_de_dato> : <nombre__de_tipo>
dimensiones seia
un subrango
v
Conjunto
Conjunto
de
<tipo_de_dato> : <nombre_del_tipo> [es
(<lista de valores>)]
v
Emumerados
<nombe_de_tipo>
es (<lista de valores>)
v
Subrangos
Subrango
de <tipo_de_dato>
: <nombre_del_tipo> es [<inf>...<sup>]
v
<tipo_de_dato>
: <lista_de_variables>
Funciones
aritméticas de biblioteca
Abs()
valor absoluto de un numero
Ent()
valor
entero (se redondea al entero menor)
trunc()
valor
entero (se trunca los decimales)
Redondeo()
redondea
un numero
In()
logaritmo
neperiano (base e)
Log10()
logaritmo
decimal (base 10)
Raiz2()
raiz
cuadrada
Cuadrado()
cuadrado
de
Sen()
seno
Cos()
coseno
Arctan()
arco
tangente
Tipo()
convierte
la expresión en el tipo base especificado
Longitud()
longitud de cadena
Posición
(<c>,<cb>)
posicon
de cadena de c
Sudcadena(<c>,<ini>[<long>])
Extrae de c a partir de caracteres ini una
Subcadena de longitud long
Funciones
de conversión de numero de cadena
Codigo() devuelve el
codigo ASCII de un carácter
Car()
devuelve el carácter asociado a un codigo ASCII
valor()
convierte una cadena en un valor numerico
cad()
convierte un numero en cadena
Funciones
de informacion
tamaño_de
devuelve la longitud en bytes de una
variable o tipo de dato
Estructura de un programa
algoritmo
<nombre_algoritmo>
[incluir<modulo>]...
//declaraciones
de constantes, tipo y variables
[const
<declaraciones de constantes>]
[tipo
<declaraciones de tipos de datos>]
[var
<declaraciones de variables>]
// se
recomienda declarar primero las constantes,
//
luego los tipos y por ultimo las variables
//
cualquier objeto debe ser declarado antes de ser utilizado
inicio
...
fin
[declaraciones
de procedimientos y funciones]
Estructura de control
Estructuras
selectivas
si
condicion entonces
<acciones>
[si_no
<acciones>]
fin_si
según_sea
<expresiones_ordinal>hacer
<lista_de_valores_ordinal> : <acciones>
[si_no
<acciones>]
fin_según
v la expresión que se ecalua debe ser de tipo ordinal
v las lista de valores, son uno o mas valores ordinales separados por comas.
Mientras
<expresión_logica> hacer
<acciones>
fin_mientras
repetir
<acciones>
hasta_que
<expresiones_logica>
desde <variable_ordinal>
<valor_final>
incrmento/decremento <valor> hacer
<acciones>
fin_desde
iterar
<acciones>
[salir_si]
fin_iterar
v incluir
<modulo>, permite incluir archivos con subprogramsa.
v declaración
procedimiento
<nombre_proc>[lista_de_parámetros_formales)]
[declaraciones locales]
inicio
...
fin_procedimiento
<lista_de_argumentos>
es uno o mas argumentoas de las siguientes forma:
{{E | S | E / S}
<tipo_de_dato> :
<lista_de_argumentos>}...
v el tipo de dato debe
estar dafinido por anticipado
v llamada a un
procedimiento:
[llamas_a] <nom_proc> [lista de
parámetros_actuales) ]
v los parámetros deben
coincidir en posición, tipo y
numero.
v declaración
<tipo_de_dato> funcion
<nombre_fun>[(lista_de_parámetro_formales)]
[declaraciones locales]
inicio
...
decolver <expresión>
fin_funcion
v lista de parámetros es
igual que en os procedimientos
v devolver nos dice el
valor de retorno d la funcion
v solo se pueden
devolver datos estandar
v el ambito de las
variables es igual que en pascal
v todas las variables
locales, para el uso de variables globales utilizar el modificador global,
global entero a.
v No se admiten
subprogramas animados
v los archivos se pasan
siempre como E/S.
v leer
(<lista_de_variables>)
v escribir
([<lista_de_expresiones>])
v leercar
(<variables_tipo_carácter>)
Archivos
secuenciales (texto)
v crear y abrir es
distinto. Para abrir es necesario tener creado el archivo (esto tambien es
valido para indexados y directos). Crear iniciualiza el archivo;abrir, permite
acceder a un archivo existente.
v Crear
(<var_tipo_archivo>.<nombre_fisico>), nombre fisico es una expresión
de cadena.
v Abrir
(<var_tipo_archivo>,<modo>, <nombre_fisico>), nombre fisico es
una expresión de cadena.
v <modo> en
archivos secuenciales pueden ser: lectura (coloca el punterto de dtos al inicio
del archivo y abre para la lectura) o escritura (coloca el puntero de datos al
final del archivo y abre para escritura).
v Escritura : escribir
(<var_tipo_archivos>, <lista_de_expresiones>).
v Lectura : leer
(<var_tipo_archivo>, <var_tipo_carácter>).
v Fin de linea : fdl
[(<var_tipo_archivo>]
v Fin de archivo: fda
[(var_tipo_archivo)]. Es verdadero si se ha intentado la lectura después del
ultimo registro.
v Cerrar un arhivo
cerrar (<lista var_tipo archivo>).
v Otros procedimientos
utiles pueden ser borrar (<nombre_fisico>), que borrar un archivo que debe
estar cerrado, y renombrar (<nombre fisico>, <nombre_fisico>), que
renombrar el archivo primero por el nombre del segundo. Ambos deben estar
cerrados.
v Otra funcion util
puede ser lda (<nombre_fisico>), que devuelve la longitud del archivo en
bytes.
Archivos
Directos (Relativos)
v Crear
(<var_tipo_archivo>.<nombre_fisico>), nombre fisico es una expresión
de cadena.
v Abrir
(<var_tipo_archivo>,<modo>, <nombre_fisico>), nombre fisico es
una expresión de cadena.
v <modo> en
archivos directos solo es l_e para lectura y ecritura.
v Escritura: escribir
(<var_tipo_archivo>, <var_tipo_base>, <posición>). Escribir
una variable del tipo base del archivo en la posición relativa
especificada.
v Lectura: leer
(<var_tipo_archivo>,<var_tipo_base>, >posocion>). Lee una
variable del tipo base del archivo en la posicon relativa
especificada.
v Fin de linea y fin de
archivo, no tienen efecto en archivos relativos (si consideramos la lectura
secuencia, fin de archivos si tendra sentido).
v Tambien se admiten los
procedimientos borraro y renombrar, asi como la funcion
lda.
v El numero de registros
del archivo se puede obtener con
Lda(<var_tipo_archivo>) / tamaño_de
(var_tipo_base_del_archivo).
v DEFINICIÓN
Archivo_i de <tipo_dato> :
<nombre_del_tipo>
clave_p<lista_de_campos>// clave primaria sin
duplicados
[clave_s <lista_de_campos> [duplicada]]...
v Crear
(<var_tipo_asrchivo>, <nombre_fisico>), nombre fisico es una
expresión de cadena.
v Abrir
(<var_tipo_archivo>, <modo>, <nombre_fisico>), nombre fisico
es una expresión de cadena.
v <modo> en
archivos indexados solo puede aer l_e
v escritura: escribir
(<var_tipo_archivo>, >var_tipo_base>). Escribe el registro en la
posición que tenga en ese momento la clavwe primaria. Da error si existe, o si
tiene claves secundaraias sin duplicados.
v Lectura disdreta: leer
(<var_tipo_archivo>, <var_tipo_base>, [<campo clave]). Pro
omisión lee el registro cuyo valor coincida con el que ese momento tenga la
clave primaria. Para leer por claves altrnativas se incluira el argumento
<campo_clave>.
v Una funcion Existe
(<var_tipo_archivo>) devolvera verdadero si la lectura ha sido
correcta.
v Lectura secuencial:
leersec (<var_tipo_archivo>, <var_tipo_base>, [<campo clave]) .
lectura secuencial del siguiente registro de la clave especificada. Por omisión
, lee la siguiente clave secuencial.
v Fin de archivo: fda
[(var_tipo_archivo)]. Es verdadero si se ha intentado la lectura después del
ultimo registro.
v Otros procedimientos
utiles pueden ser borrar (<nombre_fisico>), que borrar un archivo que debe
estar cerrado, y renombrar (<nombre fisico>, <nombre_fisico>), que
renombrar el archivo primero por el nombre del segundo. Ambos deben estar
cerrados.
v Otra funcion util
puede ser ida (<nombre_fisico>), que devuelve la longitud del archivo en
bytes.
v Declaraciones de tipos
dinamicos.
puntero_a <tipo_de_dato> :
<nombre_del_tipo>
v Acceso al contenido de
una variable
<var_tipo_ptr> ->
v Asignar memoria a una
variable de tipo puntero: reservar (<var_tipo_ptr>)
v Liberar memoria de una
variable de tipo puntero: liberar (<var_tipo_ptr>).
v Puntero nulo:
nulo
PALABRAS RESERVADAS, OPERADORES, CARACTERES ESPECIALES, FUNCIONES Y PROCEDIMIENTOS ESTÁNDAR.
Palabras reservadas, símbolos y
operadores
'
delimitador de caracteres
variable apuntada
asignacion
*
multiplicación
+
suma, contatanacion
+
signo
positivo
-
signo negativo
, (coma decimal)
-
menos usuario
-
resta
/
división real
//
inicio de comentario
:
dos puntos
<
menor que
< =
menor o igual que
< >
distinto de
=
igual a
>
mayor que
> =
mayor o igual a
^
exponenciación
{
inicio de comentario
}
fin de comentario
&
cancatenacion
abrir
open
abs()
abs
aleatorio()
random
algoritmo
program
arctan()
atm
archivo_d
definición de archivos directos
archivo_i
definición de indexados
archivo_s
definición de archivos secuenciales
array
array
borrar
delete
cad()
str
cadena
string
car()
chr
caracter
char
clave_p
clave primaria de archivos indexados
clave_s
clave secundaria de archivos indexado
codigo()
asc
conjunto
set
const
const
cos()
cos
crear()
inicializa un archivo
cuadrado()
sqr
de
of
decremento
decremento para bucles desde
desde
for
devolver
return
div
div
duplicada
se admiten duplicados en claves secundarias de
archivos
indexados
E
inicio del exponente en un real e coma flotante
E
modo de apertura de archivos para escritura
E
parámetro de entrada
E / S
parámetro de entrada /
salida
Ent ()
int
Entero
nteger
Entonces
then
Eqv
eqv
Es
is
Escribir
write
Existente()
indica en archivos indexados si una operación de lectura ha sido
correcta
Exp()
exp
Falso
false
Fda
eof
Fdl
eoln
Fin
end
Fin_desde
next, end for
Fin_funcion
end function
Fin_iterar
loop
Fin_mientras
end while
Fin_procedimiento
end sub
Fin_según
end select
Fin_si
end if
Funcion
fuction
Hacer
do
Hasta
to
Hasta_que
until
Imp
imp
Incremento
para bucles desde
Inicio
bejín
Iterar
do
L /d
I – O
Lda
lof
L
input
Leer
read
Leercar
readkey, input$
Leersec
lectura secuencial en archivos indexados
Liberar
dispose
In()
log
Lod10()
log10
Lógico
bolean
Longitud()
len, lengeth
Llamar_a
call
Mientras
while
Mod
mod
No
not
Nulo
nil
O
or
O_x
xor
Posición (<c>, <cb>)
pos, index, instr
Procedimiento
procedure
Puntero_a
declaración de tipos de puntero
Raiz2
sqrt
Real
real
Redondeo()
round()
Registro
record, struct
Renombrar
rename
Repetir
repeat
Reservar
new
S
parametro de salida
Salir
exit
Según_sea
case of
Sen ()
sin
Si
if
Si_no
else
Subcadena
mid, copy
Subrango
declaración de subrangos
Tamaño_de
sizeof
Tipo
type
Trunc ()
trunc
Var
var
Valor()
val
Verdad
rue
Y
and