Universidad Simón Bolívar Departamento de Computación y Tecnología de la Información CI­2126 Computación II Septiembre Diciembre 2006 Prelaboratorio 1 Archivos Entrega: Semana 4 (uno por equipo, al inicio del laboratorio cerrado) Objetivo: Resolver problemas usando archivos. Se desea que usted escriba un programa en lenguaje que C que lea de un archivo una lista de valores enteros y produzca como resultado un segundo archivo con la lista ordenada ascendentemente. La lista de datos tendrá un tamaño máximo de 30 valores reales que no están ordenados. Para ordenar la lista el programa debe usar el algoritmo de ordenamiento conocido como "Selección Directa" el cual toma un arreglo de enteros y devuelve el arreglo ordenado. Veamos como funciona el algoritmo. Este método se basa en dos principios: seleccionar el objeto con valor mínimo, e intercambiarlo con el primero. A continuación se repite el proceso con los n­1 objetos restantes, luego con n­2 y así sucesivamente hasta que quede un único objeto (el mayor). Ejemplo: Arreglo inicial : 44 55 12 42 94 18 06 67 Primera selección: 06 55 12 42 94 18 44 67 Segunda selección: 06 12 55 42 94 18 44 67 Tercera selección: 06 12 18 42 94 55 44 67 Cuarta selección: 06 12 18 42 94 55 44 67 Quinta selección: 06 12 18 42 44 55 94 67 Sexta selección: 06 12 18 42 44 55 94 67 Última selección: 06 12 18 42 44 55 67 94 A continuación se describe el algoritmo de “Selección directa” en seudo código: Para i desde 1 hasta n­1 hacer k←i x←a[i] Para j desde i+1 hasta n hacer if a[j]<x entonces k←j x←a[j] finif finPara a[k]←a[i] a[i]←x finPara Ejercicios Específicos: 1. Escriba una función que dado el nombre del archivo y un arreglo de 30 enteros devuelve un entero con la cantidad de valores leídos desde el archivo que fueron colocados en el arreglo. Si hubo algún error devuelve ­1. Esta función cheque si el archivo existe. La función tiene el siguiente prototipo: int LeerDatos(char nom[], int A[30]); /* PARAMETROS: nom (entrada) contiene el nombre del archivo A (salida) almacena los datos leídos del archivo PRE: nom no vacío que indica el nombre de un archivo existente POST: LeerDatos devuelve un entero n<=30 que indica el número de datos leidos, es decir tamaño(A)=n o devuelve ­1 si hubo un error Se han leido n números enteros de la entrada estándar y han sido almacenados en A desde A[0] hasta A[n­1] */ 2. Escriba una función que implemente en C el algoritmo de Selección Directa. El prototipo de la función sería void SelecciónDirecta(int A[], int tam); Escriba las pre y post condiciones. 3. Escriba una función que dado un arreglo de enteros escriba su contenido en un archivo. El prototipo de la función es el siguiente: void GuardarArreglo (char nom[], int A[], int n); /* PARAMETROS: nom (entrada) contiene el nombre del archivo donde se almacenará el arreglo A (entrada) contiene los datos a almacenar en el archivo n (entrada) contiene el número de datos de A PRE: nom no vacío y 0<n<=30 POST: Se han almacenado en el archivo nom los n datos contenidos en A. Si el archivo no existe lo crea. */ 4. Escriba el programa principal que estará formado por dos archivos: el prelab1.h donde se colocan todos los prototipos de las funciones junto con sus comentarios y el prelab1.c donde se colocan las definiciones de las funciones sin los comentarios respectivos. El programa debe realizar lo siguiente: - leer el nombre del archivo donde están los datos y el nombre del archivo donde quedarán los datos ordenados - llenar el arreglo con los datos leídos desde el archivo - ordenar el arreglo - guardar el arreglo ordenado en el archivo indicado 5. En un editor de texto, debe crear un archivo de prueba con al menos 15 datos. NOTA: debe asegurarse que el archivo de texto tenga solamente números separados por un espacio en blanco y que después del último número no debe colocar otro caracter. DEBE ENVIAR POR CORREO ELECTRÓNICO A SU PROFESOR, ANTES DE INICIAR EL LABORATORIO : 1. LOS ARCHIVOS FUENTES DEL PROGRAMA (prelab1.c y prelab1.h) 2. EL ARCHIVO CON EL PROGRAMA EJECUTABLE (COMPILADO Y QUE FUNCIONE) 3. EL ARCHIVO DE DATOS USADO EN SUS PRUEBAS