Compendio de Ejercicios de Programación Versión 1.0 Esteban César Calabria 2006 Indice INDICE ...................................................................................................................................................2 PREFACIO .............................................................................................................................................3 1.EJERCICIOS CON ENTEROS Y FLOTANTES............................................................................4 2.EJERCICIOS CON CONSTANTES.................................................................................................5 3.EJERCICIOS CON ESTRUCTURAS ITERATIVAS.....................................................................7 4.EJERCICIOS CON PROCEDIMIENTOS Y FUNCIONES...........................................................9 5.EJERCICIOS PARA RESOLVER UTILIZANDO STRINGS.....................................................10 6.EJERCICIOS PARA RESOLVER UTILIZANDO VECTORES ................................................12 7.EJERCICIO PARA RESOLVER USANDO ARCHIVOS............................................................14 8.MANEJO DE PANTALLA Y VALIDACIONES...........................................................................15 9.EJERCICIOS SOBRE CÓDIGO EXISTENTE.............................................................................16 APENDICE A – TABLA DE CARACTERES ASCII.......................................................................18 APENDICE B – TIPOS DE DATOS Y OPERADORES ..................................................................20 APENDICE C – CONVERSIONES ENTRE TIPOS DE DATOS...................................................21 Prefacio Escribí este compendio de ejercicios de programación con el objetivo de que le sea de utilidad a un alumno que comienze un primer curso de algoritmos y programación utilizando el lenguaje Pascal. Traté de elegir los ejercicios teniendo en cuenta que resulten representativos en cuanto al tema en sí que tratan. Debajo de cada ejercicio se incluye entre paréntesis y negrita los conocimientos que considero que se tienen que tener para resolverlo y a veces se incluyen tips para proporcionar una sugerencia de resolución. Muchos ejercicios apuntan a familiarizar a quien los resuelva con el uso de enumerados y constantes para que se escriban códigos más legibles y mantenibles. Al final añadí algunos anexos con temas que en mi experiencia resultan recurrentes a la hora de dictar un curso y que los alumnos suelen consultar mucho como ser la conversion entre tipos de datos. Al momento de terminar la primera version de este escrito no me encuentro nada conforme con la cantidad de ejericios expuestos y espero ir completandolo a medida que pase el tiempo. Cualquier error o sugerencia para mejorar (corregir errores, agregar más ejercicios, proponer anexos nuevos) será bienvenida y me la pueden hacer llegar. Esteban César Calabria (accesosecuencial@yahoo.com.ar) 1. Ejercicios con Enteros y Flotantes 1.1 - Se pide codificar un programa que pida al usuario que ingrese dos numeros enteros seguidos por una operación y muestre por pantalla el resultado. Se debe poder permitir sumar, restar, multiplicar y hacer la division entera. (integer, operades) 1.2 - Extender el programa anterior para que ahora acepte numeros con punto flotante y acepte las operaciones de seno, coseno, raiz cuadrada, logaritmo (real, double, funciones matematicas) 1.3 - Codificar los programas suma, resta, multiplicación y división que reciba como parametro 2 valores enteros desde la linea de comando y muestre por pantalla el resultado de la operación. Como una mejora se propone que el programa valide que la cantidad de parametros ingresados sea la correcta (parametros, integer, operacodes) 1.4 - Se pide calcular por medio de un programa cuando dinero ganaremos con una inversion. Para ello se debe ingresar el monto inicial en pesos que queremos invertir, la cantidad de dias y un interes anual esperado. Para ello se debe aplicar la siguiente formula: (Monto Inicial * plazo en dias * tasa anual en porcentaje) / 36500 (double, operadores) 1.5 - Dados dos puntos en R2 que ingrese el usuario se pide informarle la distancia que existe entre ambos (operadores, funciones matematicas) 1.6 - Hacer una aplicación que sirva para tranformar de grados a radianes y viceversa. Se deben tener en cuenta grados minutos y segundos y los valores se deben almacenar en variables de punto flotante (operadores, double) 1.7 - Se pide detectar colisiones entre dos cuadrados que se encuentran en un espacio bidimensional. El usuario debe ingresar 4 puntos que corresponde los vertices del primer cuadrado y hara lo propio con el segundo. Se pide hacer los calculos correspondientes y decir si existe una colision entre ambos. (integer, if) 1.8 - Se pide modificar el caso anterior pero esta vez el usuario ingresará dos circulos incidando el centro y el radio de los mismos. (integer, if, funciones matematicas) 2. Ejercicios con constantes Para facilitar poder mostrar enumerados por pantallas es posible utililizarr un vector constante de strings cuyos indices esten definidos por un enumerado y contenga una descripción amigable del mismo para mostrar por pantalla. Por ejemplo: (.. type) Tcolor = (clRojo, clVerde, clAzul, clNegro) (..) const DescripcionColor:array[clRojo...clNegro] of string=(‘Rojo’,’Verde’,’Azul’,’Negro’); (...) var color : Tcolor; Descripcion Begin color := clRojo; (...) Writeln(‘El Color es: ‘,DescripcionColor[Color]); 2.1 - Se pide definir un enumerado, dos vectores constantes. Uno con la descripción amigable y otro con un string corto que representa cada elemento del enumerado. Mostrar al usuario todos los elementos del enumerado para que uno tecleando el string corta. La aplicación debe mostrar la descripción amigable correspondiente al elemento seleccionado. TIP: Se recomienda en forma optativa ayudarse de una funcion para convertir el string corto a un elemento del enumerado (enum, array of const, case, function) 2.2 - A partir de un array of const con un conjunto de preguntas y en otro con sus correspondiente respuestas efectuarle el cuestionario al usuario e informarle el numero de cuantas respuestas correctas. (array of const) 2.3 - Al programa anterior agregarle un segundo vector constante donde cada elemento del vector contenga ademas otro vector constante donde se indiquen 3 posibles opciones a la pregunta correspondiente donde una de ellas sea la correcta. Definir además una constante que indique la cantidad de respuestas correctas necesarias para aprobar el cuestionario (array of array of const) 2.4 Definir un registro de la siguiente forma: TRegistroPregunta = record Pregunta :string; Respuesta :string; Opcion1 :string; Opcion2 : string; End; Y modificar el ejemplo anterior para que en vez de tener 3 arrays of const tener un solo array of records constante TIP: El help del turbo pascal puede resultarle muy util a la hora de definir una estructura de este tipo (array of const records) 3. Ejercicios con estructuras Iterativas 3.1 - Dado un conjunto de números enteros que el usuario ingresara sucesivamente (finaliza cuando ingresa el número 0), informarle por la moda, la media y el desvio estandar de la muestra (iterativas) 3.2 - 5...4...3...2...1...Mostrarle al usuarioace un programa que muestre por pantalla una cuenta regresiva de N (N=10) a 0 y entre numero y numero haya una demora de algunos segundos (sleep, for, downto) 3.3 - Programar un juego en el cual el participante tenga una determinada cantidad de oportunidades (se sugieren 5 por defecto) de adivinar un número generado por la computadora al azar coprendido entre min y max (min=1 y max=100). Cada vez que el usuario ingresa un valor la computadora le indica si el valor a descubir es mayor o menor al ingresado. Al final se le informa al usuario que adivinó y en caso contrario que se le terminaron las oportunidades y cual era el número. (if, writeln, while, const) 3.4 - Dado un la representacion en base 10 de un ingresado por el usuario en base 10, muestre por pantalla su representacion en binario. TIP: Para este ejercicio puede asumir que los numeros son de 16 bits (gotoxy, writeln, for) 3.5 - Mostrar por pantalla todos los números primos y capicuas comprendidos entre 20 y N (N=50000). (for) 3.6 - Idem anterior pero esta vez el usuario ingresa la representación en base 16 del numero y espera que se le muestre tanto su representacion en binario como en base 10 (gotoxy, writeln, for) 3.7 - Hacer un algoritmo en el que se ingrese en binario un numero de 16 bits y se muestre el numero en base 10 por pantalla. (gotoxy, writeln, for) 3.8 - Mostrar por pantalla la tabla ascii en 4 columnas de la forma: codigo – Carácter codigo – Carácter codigo – Carácter codigo – Carácter codigo – Carácter codigo – Carácter codigo – Carácter codigo – Carácter (...) (for, ord, chr) 3.9 -Un programa que muestre todas las palabras que se pueden formar combinando los carácter sin repeticion ‘A’,‘G’,’W’,‘T’, ‘F’, ‘S’, R’,’G’. (for, wrtilen) 3.10 - Dada una palabra, encontrar los numeros que le correponderian según los dígitos de un teléfono. Ej: A ‘Hola’ le corresponde el 4652 (readkey, iterativas) 3.11 - Ahora se pide que a partir del número de telefono muestre todas las palabras posibles que se pueden formar con ellos (iterativas) 3.12 - Un programa que diga la cantidad de numeros que utilicen todas las cifras y los muestre por pantalla. Por ejemplo el ‘123456789’ (iterativas) 3.13 - De los números encontrados con el programa anterior encontrar aquellos que tengan la particularidad que al dividirlo por el ultimo digito sigua conservando todas las cifras. (iterativas) 3.14 - Dado un conjunto de caracteres alfabéticos ingresados por el usuario, se pide mostrar la combinación posible de palabras que se pueden mostrar con ellos. (iterativas) 4. Ejercicios con Procedimientos y funciones TIP: La implementación de las funciones y procedimiento debe ir acompañanda de un ejemplo de uso en un programa principal TIP: Si bien es opcional se recomienda tambien acompañar el ejemplo anterior con una muestra de lo que se vería por pantalla al ejecutarlo cuando corresponda 4.1 - Dada la declaración FUNCTION CANTIDADDIGITOS(INUMERO:INTEGER):INTEGER; Completar su implementación de modo que sea coherente con el nombre asignado a la función (function) 4.2 -Hacer una función que te devuelva el digito n de un número. En el caso de que n supere la cantidad de digitos que contiene el número, devolver ERROR. Elija un nombre acorde con lo que hace TIP: ERROR se trata de una constante cuyo valor sugerido es –1 TIP: Puede aprovechar la funcion del ejercicio anterior (function) 4.3 - Programar... procedure DivMod(Dividend: Integer; Divisor: Word; var Result, Remainder: Word) que devuelve el resto y el resultado de la division entera (function. div,mod) 4.4 - Completar con código la implementacióm de la siguiente función: function Capicua(iNumero:integer):boolean; 4.5 - Un programa que dado un número entero lo rebata. Por ejemplo el 123 pasaria a ser el 321. function iRebatir(iNumero:integer):integer 4.6 - Hacer un programa que calcule el factorial de un número de forma recursiva. TIP: Ojo que los numeros se van de rango muy rapidamente y aparece el error stack overflow 5. Ejercicios para resolver utilizando strings TIP: Estos ejercicios asumen que se poseen de antemano los conocimientos de sobre procedimientos y funciones. 5.1 - Dada la definición de la funcion PoxEx : function PosEx(sOrigen:string; sSubString:string; n:integer):integer; Sabiendo que indica la posicion de un substring dentro de un string origen a partir de una posición n especificada. Escriba su implemetación Ej: Invocar PosEx(‘HolaHola’,’Hola’,2) devolvería 4. (function, string, pos, delete) 5.2 - Implemente la función: function ReplaceString(sOrigen:string; sSubString:string):string; que devuelva un sting donde se reemplace todas las ocurrencias de un substring dentro de un string. Tip: puede utilizar la funcion del ejercicio anteror (function, string, pos) 5.3 - Modificar la funcion anterior para que no sea case sensitive, es decir, que no diferencie mayusculas de minusculas.(function, string, pos) 5.4 - Dado un string que contenga un texto se desea una función que provea la funcionalidad de determinar la cantidad de ocurrencias de una palabra recibida por parametro dentro del texto. Tambien se debe poder parametrizar si su comportamiento sera tanto case sensitive o no. (string) 5.5 - Dado un string y un delimitador (como por ejemplo el carácter espacio) se pide determinar la cantidad de palabras que hay en el string. Dos o más ocurrencias seguidas del delimitador se deben considerar igual que si el delimitador estuviera una sola vez. (string) 5.6 - Esta vez se pide una funcion que dado un string, un demilitador y un número i como parametros se pide devoler la palabra ubicada en la iesima posicion del string recibido como parametro (string) 5.7 - Pogramar la funcion... function UpperCase(sOrigin:string):string; QUE TRANSFORME TODOS LOS CARACTERES DEL STRING RECIBIDO COMO PARAMETRO A MAYUSCULAS Ej: UpperCase(‘HoLa’) devuelve ‘HOLA’ (string,function) 5.8 - Para este ejercicio se define a un string con formato a aquel que incluye el substring ‘%s’. Para trabajar con ellos se pretende contar con la funcion format string que reemplaza el ‘%s’. Se proponen dos declaraciones posibles para la funcion: function Format(sOrigin:string, sParameters:string):string; Ej: Format(‘Error %s’,’fecha invalida’) devuelve ‘Error fecha invalida’ (string, function) 5.9 - Implemente la funcion Rebatir que tome un string y lo devuelva rebatido. Ej: Rebatir(‘hola’) devuelve ‘aloh’ (string) 5.10 - El método de encriptación CAESAR consiste en reemplazar cada carácter de un string por su correspondiente carácter encriptado a partir de una clave numerica. Esta ultima indica la cantidad de posiciones que debe incrementase un carácter. Ej: Si la clave es 3, la ‘a’ se transforma en ‘d’, la ‘c’ en ‘f’, etc. E: Si la clave es 1, el string ‘abcd’ se transforma en’ bcde’ Proveer un par de funciones para encriptar y desencriptar un string dada una clave utilizando el metodo caesar (string, function) 5.11 - Dada la siguiente tabla de substitución a→4 e→3 f → ph i → 1 or | l → | or 1 m → |\/| n → |\| o→0 s→5 t → 7 or + b→8 c → ( or k or |< or /< d → <| g → 6 or 9 h → |-| k → |< or /< p → |2 u → |_| v → / or \/ w → // or \/\/ x → >< y → '/ Se pide hacer que dado un string se reemplacen los caracteres del mismo utilizando la tabla de substitución mostrada anteriormente. Ej: ‘Hola’ pasaria a ser ‘|-|014’ TIP: se sugiere usar arrays of const para codificar la tabla de reemplazos (string, array of const) 5.12 - Agregar a la tabla de substitucion anterior un valor que indique la posibilidad de que dicho carácter sea reemplazado. Modificar el programa anterior para que el reemplazo se haga dependiendo del resultado de un número al azar. EJ; si aparece una s podra ser remplazada por un 5 o dejar la s según el azar. (string, array of const, random, randomize) 6. Ejercicios para resolver utilizando vectores Tip: Los procedimientos que trabajen con arrays pueden tanto tomar como parametro un tipo especifico de array definido en la seccion type o bien un parametro del tipo array of. Para manipular estos ultimos se recomienda utilizar la funciones Low y High. 6.1 - Definir un procedimiento que inicialice los elementos de un array de enteros en un valor al azar (array) 6.2 - Implementar una función que devuelva el máximo elemento de un array de enteros recibido por parámetro (array) 6.3 - Modifique el punto anterior para que esta vez se determine el ranking de los N maximos del vector. TIP: En el caso de dos contar con el mismo valor, ambos deben figurar en el ranking (array) 6.4 - Definir un procedimiento que tome un arreglo de strings y lo muestre por pantalla Se sugiere la siguiente declaración procedure Mostrar( aStrArray : array of string); TIP: La implementación del metodo es libre de definir el formato en el que se desea mostrar el texto. Por ejemplo recuadrado. (array) 6.5 - Dado un conjunto de opciónes que puede elegir el usuario almacenadas en un vector de strings, se pide mostrar dicho conjunto de opciones por pantallas y permitir al usuario navegar por las mismas utilizando el teclado. Aclaracion: El imput corresponde al array con las opciones de menu y el output a la opcion seleccionada (array) 6.6 - Dada una matriz bidimensional de enteros recibida por parametro, definir e implementar una función que devuelva su determinante. (array) 6.7 - Definir un programa que permita a un usuario ingresar el contenido de una matriz bidimensional por pantalla. La logica que permite editar visualmente los elementos de la matriz debe poder reutilizarse en distintas aplicaciónes que deseen tener esta funcionalidad. TIP: Una opcion es que muestre la matriz por pantalla toda inicializada en 0 y el cursado pueda navegar por sus celdas con las el teclado e ingresarle el valor correspondiente (array) 6.8 - Dada una matriz que representa un sistema de ecuaciones, realizar un programa que la resuelva utilizando el metodo de los determinantes TIP: Puede utilizarse el ejercicio anterior para cargar los datos de la matriz (array) 6.9 - Dada una matriz tridimensional y 2 vectores que digan cuando tienen que sumar las filas y las columnas, hacer un programa que le asigne valores numericos a la celda de manera que la suma de las filas y las columnas coincida. TIP: Se recomienda usando dos for anidado que resuelva el problema por prueba y error. (array) 6.10 - Un programa que lea una secuencia de palabras desde un archivo y pregunte al usuario el ancho y el alto de una matriz y genere al azar y muestre por pantalla una sopa de letras 6.11 - Hacer un algoritmo que implemente una cola de prioridad en un array de n (n=100) posiciones (array, while) 7. Ejercicio para resolver usando archivos 7.1 - Hacer un programa que genere el archivo (NOMBRE ARCHIVO= out.bin) binario que contenga una secuencia de numeros (N=10) enteros generados al azar. (file,randomize,random,reset, archivo binario) 7.2 - Idem anterior pero esta que vez el archivo sea de texto y contenga un número por linea. Además debe preguntarle al usuario cual es el nombre del archivo a crear (file,randomize,random, reset, archivos texto) 7.3 - Codificar un el programa que permita elegir al usuario el nombre de uno un archivo generado anteriormente y ordenarlo. Puede suponer que todo el conenido de los archivos entra en memoria o bien utilizar algun método de ordenamiento de archivos (file) 7.4 - Tomar dos archivos ordenados y generar un tercer archivo con la información de ambos archivos ordenados (file) 7.5 - Un algoritmo que recorra los archivos del disco rigido y diga que porcentaje del disco utilizado ocupa cada directorio(file) 7.6 - Un algorimo que recorra todos los archivos del disco rigido (o una parte del disco) el archivo que ocupa mas espacio, el que ocupa menos expacio, el que fue modificado mas recientemente y el que hace mas tiempo que no se accede.(file) 7.7 - Un programa que cada XXX minutos se fije el contenido de archivos en un directorio. Hace lee los archivos en modo texto, va acumulando la cantidad de palabras que tiene y los copia a otro directorio.(file) 7.8 - Un chat pero que funcione en ves de por internet monitoreando la actividad de un directorio. Cada vez que se envia un mensaje, se escribe un archivo en un directorio destino. Al iniciar la aplicación se elije el directorio origen y destino (file) 7.9 - Una aplicación que permita dar de alta, baja y modificacion en un archivo contactos con nombre y telefono. (file) 7.10 - Un programa que lea de linea de comandos un nombre de una archivo de texto y lo muestre por pantalla centrado (file) 8. Manejo de Pantalla y validaciones 8.1 - Escribir el fragmento de código que vaya concatenando en un string los caracteres ingresados leidos mediante la funcion readkey hasta que se presione la tecla enter. (readkey) 8.2 - Hacer un programa que muestre un carácter ‘*’ en el centro de la pantalla y permita dezplazarlo con las teclas de movimiento. En el caso de sobrepasar a un extremo de la pantalla debe reaparecer en el extremo opuesto. (clrScr, readkey, write, gotoxy) 8.4 -Escribir un fragmento de código mediante el cual se lea el ingreso de valores enteros por parte del usuario teniendo en cuenta lo siguiente • Los dígitos se deben leer uno por uno mediante la funcion readkey y solo se aceptaran caracteres numéricos • El ingreso termina cuando el usuario presiona la tecla ENTER • En caso de presionarse un carácter no numerico llamar a la funcion beep • Para validar si un carácter es numérico o no se debe utilizar un set de caracteres numericos declarados en la seccion const. • Debe validarse que el número que ingrese el usuario se pueda almacenar en una variable entera: si el proximo carácter hace que el numero se me vaya de rango directamente no lo tomo y ejecuto un beep • Al finalizar el ingreso el numero debe terminar almacenado en una variable entera Tip : Para variables de tipo integer la funcion High(integer) me devuelve cual es el entero mas grande que puedo almacenar. (readkey, char, sets, beep, val) 8.4 - Escribir las lineas de código necesarias para validar que un string ingresado cumpla la siguientes condiciones: ¾ La primer posición puede contener los caracteres ‘-‘,’+’ o un carácter numérico ¾ El resto del string esta formado por caracteres numericos o un separador de decimales como ser ‘.’ o ‘,’ ¾ Solo se admite un separador de decimales ¾ Debe haber un carácter numérico antes del separador de decimales Escriba dos versiones del algoritmo: ¾ Una que valide el string una vez que se ingresados todos los caracteres e informe los errores ¾ Otro que vaya realizando las validaciones a medida que se ingresan los caracteres y no permita al usuario ingresar un carácter incorrecto TIP : Para el segundo algoritmo se sugiere consultar el ejercicio 1. (readkey, char) 8.5 - Dada una fecha ingresada por el usuario de la forma dia, mes y año determinar si corresponde a una fecha valida teniendo en cuenta años bisiestos. TIP: Se sugiere pensar que dicha validacion puede ser utilizada por diferentes aplicaciones. (fechas) 8.6 - Se pide tranformar un número entero entero en una fecha válida que contenga dias mes año sabiendo que dicho número corresponde a la cantidad de dias trancurrido a partir del 1/1/1800 De piden dos versiones del código: ¾ Una que almacene el resultado en un record ¾ Otra que almacene el resultado en un string de la forma ‘dia/mes/año’ (fechas) 8.7 - Dadas dos fechas determinar la cantidad de dias de diferencia que existen entre ambas. (fechas) 8.8 - Escriba el código necesario para que dada la fecha de nacimiento de una persona determinar su edad. (fechas) 9.Ejercicios sobre código existente TIP:En los ejercicios que se muestran a continuación se muestran fragmentos de código y se pide que se realicen correcciones sobre los mismos 9.1 - Dado el siguiente fragmento de codigo y suponiendo que funciona correctamente (..) if ltArchivoUsuarios in Archivos then begin if FileExists(‘usuarios.txt’) then Begin RefrescarContenido(‘usuarios.txt’); CargarArchivoEnArray(‘usuarios.txt’, arrayArchivo); CrearCopiaSeguridad(‘usuarios.txt’, CopiaSeg[ltArchivoUsuarios] ); End Else Begin InformarArchivoInexistente(‘usuarios.txt’); End; End; if ltArchivoContactos in Archivos then begin if FileExists(‘contactos.txt’) then Begin RefrescarContenido(‘contactos.txt’); CargarArchivoEnArray(‘contactos.txt’, arrayContactos); CrearCopiaSeguridad(‘contactos.txt’, CopiaSeg[ltArchivoContactos]); End Else Begin InformarArchivoInexistente(‘contactos.txt’); End; End; if ltArchivoContenido in Archivos then begin if FileExists(‘contenido.txt’) then Begin RefrescarContenido(‘contenido.txt’); CargarArchivoEnArray(‘contenido.txt’, arrayContenido); CrearCopiaSeguridad(‘contenido.txt’, CopiaSeg[ltArchivoContenido] ); End Else Begin InformarArchivoInexistente(‘contenido.txt’); End; End; (...) ¿Qué inconvenientes le detecta al código? ¿Cómo lo solucionaría? Proponga una solución alternativa que no contenta los inconvenientes que detectó 9.2 – Suponiendo que el fragmento de código funciona correctamente (...) iTipoMensaje := 16; MostrarMensaje(‘Mensaje de error’,16); ... If (iTipoMensaje=16) then Begin (..) End; (...) ¿Qué problemas le encuentra? Explique que cambios le haria y porqué. Apéndice A – Tabla de caracteres ASCII Apéndice A – Tabla de caracteres ASCII (Cont.) Apéndice B – Tipos de datos y operadores Se incluye a continuación un cuadro donde se muestran los operadores y las funciones y procedimientos más comunes asociadas a los tipos de datos de Pascal. Para una explicación mas detallada como ser los parametros que reciben y los valores de retorno de las funciones referirse a la ayuda del lenguaje. Tipo integer (shortint) (longint) (byte) (word) Operadores Asociados +,-,*,/ DIV MOD =, > , < , >= , <= real (single) (double) (extended) (comp) string +,-,*,/ =, > , < , >= , <= boolean NOT AND OR XOR + =, > , < , >= , <= enumerados Ord() Pred() Suc() Inc() Dec() High() Low() Abs() Int() Pos() Delete() Copy() Insert() Low() High() array set Métodos Asociados + (union) - (resta) * (intersección) Suc() Pred() Apéndice C – Conversiones entre tipos de datos Se presenta a continuación un cuadro con las funciones mas utilizadas a la hora de realizar conversiones entre tipos de datos. Referirse a la ayuda del lenguaje para una explicacion mas detallada de las funciones. De \ a integer integer ------ real Round() Trunc() Val() string enumerado ----- real Asignación directa := -----Hay que programarla uno ------ string str() str() enumerado --------- ------ utilizar un array of const utilizar un array of const ------