Professional Documents
Culture Documents
Introduccin
El Intrprete de Algoritmos ALGOR ha sido desarrollado con la finalidad de brindar a los estudiantes del curso de Algoritmos una herramienta simple, y fcil de usar que les permita probar los algoritmos que realizan en clase. Para ello utilizan, no un lenguaje de programacin convencional, como el C, Basic, Pascal, sino un pseudocdigo en el que usan palabras del lenguaje espaol y siguen una sintaxis relativamente simple y natural. Dado que el objetivo no es crear un nuevo lenguaje de programacin, el mismo tiene muchas limitaciones, en comparacin a otros lenguajes. Recordamos que el objetivo es disponer de una herramienta para probar algoritmos sencillos. Las caractersticas principales del lenguaje son: Utilizacin de tipos de datos simples: enteros, reales, cadenas y lgicos, as como arreglos de una o ms dimensiones de los tipos de datos simples. Uso de las estructuras de control: entrada, salida, asignacin, condicional simple, condicional completa, mientras, repetir-hasta y para. Las expresiones permiten los operadores aritmticos de suma, resta, multiplicacin, divisin, divisin entera, resto de la divisin entera, potencia, y negativo. Los operadores relacionales, mayor, menor, mayor o igual, menor o igual, igual y diferente. Y los operadores lgicos de disyuncin, conjuncin y negacin. Se permite adems la definicin de funciones. El intrprete desarrollado permite la ejecucin de los algoritmos en dos modos. Modo normal en el que el algoritmo se ejecuta completamente desde el inicio hasta el final. Y el modo Paso a Paso, en el que se va mostrando cada instruccin que se va a ejecutar y el contenido de las variables del algoritmo. Este programa ha sido desarrollado por el Mag. Eduardo F. Alonso Prez, profesor e investigador de la Universidad Catlica Santo Toribio de Mogrovejo, Chiclayo, Per. El programa est en su fase de evaluacin por lo que de presentarse problemas pueden reportarlos a: ealonso@usat.edu.pe . Enviar adems de la descripcin del problema, el algoritmo que origin el mismo. En los siguientes captulos se describen los detalles del lenguaje y uso del intrprete. Este manual, no pretende ensear algoritmos, sino simplemente cmo escribir los algoritmos en el lenguaje implementado, as cmo utilizar el intrprete.
Seccin de Encabezamiento
El encabezamiento es simplemente la palabra algoritmo seguido de un nombre Ejemplo: algoritmo promedio Los nombres, que en trminos de compiladores, se les llama identificadores, estn formados por secuencias de letras y/o dgitos que debe comenzar por letra. Tambin puede usarse el carcter _ (underscore). Ejemplo: algoritmo calculo_del_promedio
Las variables que se declaren en la funcin son locales a la misma. Su alcance es slo para la funcin y no interfieren con otras variables, posiblemente con igual nombre, que estn definidas en otras funciones o en el programa principal. Para ver mas detalles de las declaraciones ver la Seccin de Variables. Las instrucciones constituyen el cuerpo de la funcin y deben siempre terminar con la sentencia retornar expresin, la cual indica el valor que devuelve la funcin. La sentencia retornar slo puede aparecer como ltima sentencia dentro de la funcin. En la versin actual slo se permite llamar a funciones definidas anteriormente. No permitindose as llamadas recursivas. Ejemplo: funcion entero mayor( a: entero, b: entero ) variables m: entero inicio si a > b entonces m <- a sino m <- b finsi retornar m fin
Seccin de Variables
Las variables que se usan en un algoritmo deben ser declaradas, lo cual significa, que se les deber especificar el tipo que tendrn. En un principio habamos considerado no incluir esta seccin en el lenguaje y trabajar con tipos dinmicos, o sea, que las variables tomasen el tipo durante la ejecucin y de acuerdo al tipo de las expresiones que se le asignasen, pero finalmente decidimos incorporarlo, adems de razones tcnicas de implementacin, porque consideramos conveniente que los estudiantes se vayan familiarizando con el concepto de tipo de los lenguajes de programacin. La estructura de sta seccin es la siguiente. Comienza con la palabra variables seguida de una lista de una o ms declaraciones. Cada declaracin es una secuencia de una o ms variable separadas por coma, seguida de dos puntos, seguida del tipo. Ejemplos: variables i, contador, N : entero suma, dato: real mensaje: cadena continuar: logico Los tipos permitidos en la versin actual son simples. entero, real, cadena y logico. Adems se permite definir arreglos de cualquiera de los tipos simples. Los arreglos pueden tener cualquier cantidad de dimensiones. De cada dimensin se especifica en la
declaracin, cuntos elementos tendr. Cada elemento de la dimensin tendr una posicin entre 1 y el total de elementos de la dimensin. Ejemplos: variables a arreglo [10] : entero b arreglo [5,8] : real c arreglo [15,10,25] : cadena d arreglo [20] : logico Con respecto a los tipos de datos simples: Los Enteros permiten almacenar valores numricos enteros (de 32 bits). Los Reales permiten almacenar valores numricos reales de doble precisin (64 bits). Las Cadenas permiten almacenar secuencias de caracteres, para mensajes, etc. Las secuencias de caracteres se encierran entre comillas. En la versin actual no se permiten caracteres especiales dentro de las cadenas, ni tampoco la propia comilla. Los Lgicos permiten almacenar los valores lgicos FALSE y TRUE.
Seccin de Instrucciones
Esta seccin contiene las instrucciones ejecutables del algoritmo. Comienza con la palabra inicio, le siguen las instrucciones y termina con la palabra fin Las instrucciones permitidas son las siguientes: Entrada Salida Asignacin Condicional Simple Condicional Completa Mientras Repetir-Hasta Para
Instruccin de Entrada
Permite que el algoritmo lea datos ingresados por el usuario. Su sintaxis es la palabra leer seguida de una o ms variables separadas por coma. Ejemplos: leer N leer sexo, edad leer b[i,j] Se pueden ingresar variables de tipo entero, real cadena, pero no lgicas. Adems elementos de arreglo.
Instruccin de Salida
Permite que el algoritmo imprima valores en la pantalla. Su sintaxis es la palabra imprimir seguida de una o ms expresiones. Ejemplos: imprimir promedio imprimir "Ingrese el dato numero ", i, " = " imprimir "El promedio es = ", suma / N Las expresiones pueden ser de cualquier tipo, incluso lgicas, en cuyo caso se imprimir la palabra true false de acuerdo al resultado. Adems de la palabra imprimir se puede usar imprimirln, la cual incluye un cambio de lnea la final de los datos impresos. La instruccin imprimirln puede utilizarse sin expresiones en cuyo caso simplemente agrega un cambio de lnea en la salida del algoritmo. Ejemplo: imprimirln "El resultado es: ", resultado es equivalente a: imprimir "El resultado es: ",resultado imprimirln
Instruccin de asignacin
Permite asignarle a una variable simple a un elemento de arreglo el resultado de una expresin. Su sintaxis es la variable seguida de <- seguida de la expresin. Ejemplos: impuesto <- precio * 0.19 a[i] <- 0.0 c[i,j,k] <- 1 Algunas consideraciones: A las variables de tipo entero se le pueden asignar expresiones de tipo entero de tipo real. En el ltimo caso se convierte de real a entero antes de la asignacin. Ejemplo: Considerando a i, declarada como entero, la instruccin i <- 1.5 Le asigna 1 a la variable i. A las variables de tipo real se le pueden asignar expresiones de tipo entero de tipo real. A las variables de tipo cadena, solo se le pueden asignar cadenas. En la versin actual del lenguaje no hay operadores para cadenas. A las variables de tipo logico se le pueden asignar expresiones de tipo logico.
La siguiente tabla muestra todos los operadores del lenguaje, la precedencia de los mismos, los tipos de los operandos y el tipo del resultado. Estn ordenados en orden decreciente de precedencia. Tabla de operadores del lenguaje, ordenados en orden decreciente de precedencia.
precedencia 1 2 3 3 3 4 5 5 5 5 5 5 6 7 8 operador ^ * / DIV MOD + < > <= >= = <> NOT AND OR operando1 numrico numrico numrico numrico entero numrico numrico numrico numrico numrico cualquiera cualquiera lgico lgico lgico operando2 numrico numrico numrico entero numrico numrico numrico numrico numrico cualquiera cualquiera lgico lgico resultado igual al operando ver nota debajo ver nota debajo real entero ver nota debajo lgico lgico lgico lgico lgico lgico lgico lgico lgico observaciones negativo, slo tiene un operando
Notas: En el caso de los operadores de potencia ^, *, + y los operandos son numricos, o sea, enteros o reales, y el resultado estar en funcin de si ambos operandos son del mismo tipo o no. Si son del mismo tipo entonces el resultado sigue siendo de ese mismo tipo. Si uno de los operandos es real y el otro entero, entonces el entero se convierte a real y resultado es real. El operador de divisin / siempre realiza una divisin real, independientemente de si sus operandos lo son o no. En el caso de los operadores relacionales = y <> sus operandos pueden ser ambos: numricos, cadenas lgicos. Asociatividad de los operadores: Los operadores (negativo) y NOT, tienen un solo operando y se evalan de derecha a izquierda. El resto de los operadores tienen dos operandos, y se evalan de izquierda a derecha, para el caso de los que tienen igual precedencia. Los parntesis pueden ser utilizados para agrupar subexpresiones y alterar el orden de evaluacin de una expresin. En las expresiones pueden utilizarse llamadas a funciones, escribiendo el nombre de la funcin y la lista de parmetros entre parntesis. Los parntesis son obligatorios an cuando la funcin no tenga parmetros. Ejemplos: termino <- x / factorial(i) m3 <- Mayor( a, Mayor(b, c ) )
Los elementos de arreglo se escriben especificando el nombre del arreglo y luego entre corchetes las expresiones correspondientes a cada ndice del arreglo. Las expresiones que sirven como ndice deben ser de tipo entero y el valor de las mismas debe estar en el rango de 1 hasta el total de elementos de la dimensin correspondiente. Se produce un error de ejecucin en caso de que el valor del ndice est fuera de rango.
Comentarios
En los algoritmos se puede incluir comentarios (texto que se ignora durante el anlisis y la ejecucin). Los comentarios comienzan con el carcter punto y coma ; y tienen un alcance hasta el fin de la lnea: Ejemplo: ; algoritmo para calcular el promedio de dos ; numeros ingresados por el usuario
algoritmo promedio_2 variables n1, n2, suma, prom: real inicio ; ingresa los datos imprimir "Ingrese dos numeros: " leer n1, n2 ; realiza los calculos suma <- n1 + n2 ; calcula la suma de los dos numeros prom <- suma / 2 ; imprime el resultado imprimirln "El promedio es = , prom fin
10
Mensajes de errores
Los algoritmos para poder ser ejecutados, primero son analizados sintctica y semnticamente, para detectar posibles errores. Los errores sintcticos son los que se producen la escribir mal alguna lnea del algoritmo. El intrprete al detectar un error sintctico muestra un mensaje de: "Error sintctico en la linea # Lexema: palabra o smbolo" Mostrando el nmero de lnea del algoritmo donde se ha detectado el error y la palabra smbolo que dio origen al mismo. Los errores semnticos se producen al utilizar inadecuadamente las instrucciones del programa. Se producen por ejemplo: -Al intentar declarar mas de una vez una misma variable -Al utilizar una variable sin haberla declarado -Al utilizar una variable en una expresin sin haberle asignado valor previamente
11
-Al aplicar operadores a operandos para los cuales no est definida la operacin. Por ejemplo, si se intenta sumar un entero con una cadena, o si se le intenta asigna un valor lgico a una variable real -Al escribir expresiones que no sean de tipo lgico, como condiciones, en las instrucciones si-entonces, mientras-hacer y repetir-hasta El mensaje que muestra el intrprete es: "Error semntico en la linea # descripcin del error" Mostrando el nmero de lnea del algoritmo donde se ha detectado el error y una breve descripcin del error. Solamente en caso de que no haya errores es que el algoritmo puede ser ejecutado. Durante la ejecucin tambin pueden producirse errores de ejecucin. Por ejemplo al ejecutarse una instruccin de leer y el usuario ingresa un dato de tipo incorrecto de acuerdo a lo que espera el algoritmo.
Versiones futuras
En las versiones futuras del intrprete se incluirn las siguientes caractersticas: -Sentencia condicional selectiva (tipo CASE) -Arreglos unidimensionales y multidimensionales.
12