Está en la página 1de 37

UNIVERSIDAD AUTNOMA DE SANTO DOMINGO

Primada de Amrica Fundada el 28 de Octubre de 1538

Facultad de Ciencias
ESCUELA DE INFORMATICA

Caso 4
Proyecto Final de la Materia Algoritmos Computacionales INF-322 Seccin 01 Presentado por Grupo No.4: Integrantes Giolany Brito B. Wendy Morel Gisell Portorreal Rabel Rodriguez CF-1869 93-9619 CB-7640 BH-6629

Instructora: M.A. Agustina De los Santos Rosario

Los conceptos emitidos en el presente proyecto son de la exclusiva responsabilidad de los/as sustentantes del mismo.

Santo Domingo, D. N. Diciembre 01 del 2010

NDICE
INTRODUCCIN...................................................................................................... i CAPITULO I: PLANTEAMIENTO DEL PROBLEMA................................................. 1 1.1 Descripcin de la situacin.................................................................................. 2 1.2 Describir la actividad principal de la empresa.................................................. 3 1.3 Posible solucin a la situacin............................................................................. 6 1.4 Identificacin de las variables y sus tipos............................................................ 7 1.5 Alcance del proyecto .. 8 CAPITULO II: MARCO CONCEPTUAL..................................................................... 9 2.1 Definicin de conceptos utilizados en este proyecto .......................................... 10 2.1.1 Estructura de datos.......................................................................................... 11 2.1.2 Tipo de archivo utilizado................................................................................... 11 2.1.3 Estrategia para el diseo del algoritmo ..................................................... 12 2.1.4 Objeto utilizado (Lista, Pilas, Filas, rbol) ............................................. 12 2.1.5 Mtodo de ordenacin y bsqueda.................................................................. 13 CAPITULO III: SOLUCIN DEL PROBLEMA........................................................ 14 3.1 Anlisis del problema........................................................................................... 15 3.2 Diseo del algoritmo............................................................................................. 15 3.3 Verificacin del algoritmo...................................................................................... 20 3.4 Codificacin del algoritmo y lenguaje de programacin....................................... 25 3.5 Ejecucin del programa........................................................................................ 30 3.6 Verificacin del programa..................................................................................... 31 3.7 Programa de trabajo............................................................................................. 32 CAPITULO IV: PRESENTACIN DE LA APLICACIN ................ 34 4.1 Pantalla principal y su descripcin........................................................................ 35 4.2 Pantalla de captura de datos................................................................................ 36 4.3 Pantalla de despliegue de informacin................................................................. 37 4.4 Muestra de los archivos creados.......................................................................... 38 CAPITULO V: EXPERIENCIA ADQUIRIDA............................................................... 39 CONCLUSIN............................................................................................................ 40 REFERENCIAS BIBLIOGRFICAS........................................................................... 41

INTRODUCCION

El proyecto que vamos a presentar a continuacin est basado en la automatizacin de una empresa la cual nos proponemos analizar con el fin de crear un software que contenga una base de datos en el cual se pueda tener mayor control sobre los datos del personal de dicha empresa. Para esto nos hemos basado en las diferentes tcnicas usadas para el anlisis y diseo de un algoritmo los cuales son: Planeacin del proyecto, anlisis del sistema de computacin, evaluacin y prueba del sistema para cumplir con los requerimientos necesarios de la empresa.

CAPITULO I PLANTEAMIENTO DEL PROBLEMA

* Descripcin de la situacin:
Esta empresa atraviesa por una situacin catica Ya que han tenido que contratar ms personal y el control de sus empleados se sale de las manos ya que tienen un sistema de archivo manual para el registro del personal.

* Describir la actividad principal de la empresa:


Esta empresa se dedica a la compra y distribucin de productos de ferreteros Consta de los siguientes departamentos compra, venta, contabilidad, administracin, recursos humanos, entre otros.

Misin

Ser la empresa de distribucin lder tanto en productos de consumo mayoritario como de venta al detalle.

Visin

Tenemos el compromiso de mejorar la calidad de vida del consumidor dominicano.

Valores
5

Somos una empresa que se asienta en unos slidos valores

Organigrama de la empresa

*Posible solucin a la situacin


Implementacin de un sistema computarizado para almacenar y / o registrar los empleados de la empresa para de esta forma facilitar el acceso inmediato a todo y cada uno de sus empleados.

*Identificacin de las variables y sus tipos


Variables
Tipos

Cdigo Nombre Direccin Sueldo

Int Char Char Float

*Alcance del proyecto

Con este proyecto lo que se pretende es crear un sistema para organizar los datos de los empleados y as poder lograr un pronto acceso a la base de datos del control del personal de la empresa.

*Estrategia para el diseo del algoritmo


Pseudocdigos y algoritmos y pruebas de escritorio.

CAPITULO II MARCO CONCEPTUAL

*Definicin de conceptos utilizados en este proyecto

Archivos:

Tambin denominados ficheros (file); es una coleccin de informacin (datos relacionados entre s), localizada o almacenada como una unidad en alguna parte de la computadora.

Archivo directo:

Se dice que un archivo es de acceso u organizacin directa cuando para acceder a un registro n cualquiera no se tiene que pasar por los n-1 registros anteriores. Los archivos directos tienen una gran ventaja (son mucho ms rpidos) cuando se comparan con los archivos de acceso u organizacin secuencial estudiados en la.

Registros: Estructura de datos formada por uno o ms elementos denominados "Campos" y estos pueden estar compuestos a su vez por "subcampos". Claves Se denomina a un campo especial del registro que sirve para identificarlo

Arreglos

10

Es un conjunto de datos o una estructura de datos homogneos que se encuentran ubicados en forma consecutiva en la memoria RAM (sirve para almacenar datos en forma temporal). Bsqueda secuencial Tambin se le conoce como bsqueda lineal. Supongamos una coleccin de registros organizados como una lista lineal. El algoritmo bsico de bsqueda secuencial consiste en empezar al inicio de la lista e ir a travs de cada registro hasta encontrar la llave indicada (k), o hasta al final de la lista.

Estticos Casi todos los tipos de datos son estticos, la excepcin son los punteros. Que un tipo de datos sea esttico quiere decir que el tamao que ocupa en memoria no puede variar durante la ejecucin del programa. Es decir, una vez declarada una variable de un tipo determinado, a sta se le asigna un trozo de memoria fijo, y este trozo no se podr aumentar ni disminuir. Transformacin de claves El mtodo de transformacin de clave consiste en transformar un numero de orden (clave) en direcciones de almacenamiento por medio de un algoritmo de conversin. Cuando las altas se realizan por mtodo transformacin de clave, la direccin donde introducir un determinado registro se conseguir por la aplicacin de la clave del algoritmo de conversin (HASH). Si encontramos que dicha direccin ya est ocupada, el nuevo registro deber ir a la zona de sinnimos o de excedentes.

Colisiones

11

En informtica, una colisin de hash es una situacin que se produce cuando dos entradas distintas a una funcin de hash producen la misma salida.

*Estructura de datos
La estructura de los datos utilizado en este programa es el esttico ya que usamos arreglos, archivos y registro, aqu el tamao de la memoria no puede variar.

*Tipo de archivo utilizado


Archivo directo ya que podemos acceder al archivo directamente sin tener que recorrer todos los archivos.

* Objeto utilizado (Lista, Pilas, Filas, rbol)


En este utilizamos Lista

* Mtodo de ordenacin y bsqueda


Utilizamos el mtodo por transformacin de clave.

12

CAPITULO III SOLUCIN DEL PROBLEMA

*Anlisis del problema


13

Mediante el estudio del problema pudimos observar que nuestra empresa estudiada tenia la necesidad de una base de datos computarizada en la cual se puedan almacenar los datos de los empleados de una forma ordenada para as poder tener un acceso rpido a cada uno de los registros de la base de datos.

*Diseo del algoritmo


CONNSULTA SECUENCIAL

14

Alias= open (Empleado.dat ) Red V Alias= null F Cdigo de Empleado El archivo no existe

return Siclo mientras no se encuentre el final del archivo

Read Registro, alias R F While Not (alias) No se encontr el registro CLOS E ALIAS

Registro.c odigo=codi go F

Registro.codigo Registro.nombre Registro.departamento Registro.sueldo Registro.fijo Lectura del siguiente registro completo

* Verificacin del algoritmo

15

Este programa se puede verificar atreves de una prueba de escritorio aplicando cada una de las condiciones a ejecutar en dicho algoritmo y comprobando que los datos insertados por el teclado son correctos.

* Codificacin del algoritmo y lenguaje de programacin


/* DIRECTOS.CPP Rutinas de... 1.- Altas 2.- Consultas 3.- Modificaciones 4.- Bajas logicas 5.- Listado registros en un archivo binario relativo o de acceso directo Curso: "Algoritmo Computacionales" Instructor: Agustina de los Santos */ #include <stdio.h> // Para el manejo de archivos #include <string.h> // Para el manejo de cadenas #include <conio.h> // Para el manejo de clrscr #include <iostream.h> // Para el manejo de cout #include <ctype.h> // Para el uso de toupper struct tipo_registro { int codigo; char nombre[30]; 16 // Campos: // Codigo de Empleado // Nombre del Empleado

char departamento[15]; // Cantidad disponible en almacen float sueldo; char fijo ; }; struct tipo_registro Registro; // Declaracion global de la variable // "Registro" de tipo struct tipo_registro FILE *alias; // Declaracion global de la variable "alias" (apuntador a un // archivo long int dir_fisica; // Declaracion global de la variable para calcular // la direccion fisica void ALTA_DIRECTA(void); // Declaracion global de la rutina de Altas void CONSULTA_DIRECTA(void); // Declaracion global de la rutina de Consultas void MODIFICACION_DIRECTA(void); // Declaracion global de la rutina de Modificaciones void BAJA_LOGICA_DIRECTA(void); // Declaracion global de la rutina de Baja Logica void LISTADO_SECUENCIAL(void); // Declaracion global de la rutina de Listado void main(void) { int op; do { clrscr(); cout << "\n\n\r Programa de control de EMPLEADO en un ARCHIVO DIRECTO"; cout << "\n\n\r Curso: \"Algoritmo Computacional\""; cout << "\n\r Sustentantes :Wendy, Gisell, Giolany, Rabel"; cout << "\n\n\n\r 1.- Altas directas"; 17 // Sueldo del Empleado // Estatus fijo o provisional? [S/N]

cout << "\n\r 2.- Consultas directas"; cout << "\n\r 3.- Modificaciones directas"; cout << "\n\r 4.- Bajas de Empleado directas"; cout << "\n\r 5.- Listado Secuencial"; cout << "\n\r 0.- Salir"; cout << "\n\n\n\r Seleccione su opcion ---> "; cin >> op; switch(op) { case 1 : ALTA_DIRECTA(); break; break; case 2 : CONSULTA_DIRECTA();

case 3 : MODIFICACION_DIRECTA(); break; case 4 : BAJA_LOGICA_DIRECTA(); break; case 5 : LISTADO_SECUENCIAL(); break; } }while(op!=0); return; }

void ALTA_DIRECTA(void) { int codigo; // Variable local para el numero de producto clrscr(); cout << "\n\rALTAS DE REGISTROS DE EMPLEADO"; alias=fopen("CONTROL.DAT","rb+"); // Intenta abrir el archivo CONTROL.DAT // en modo de lectura/escritura if(alias==NULL) alias=fopen("CONTROL.DAT","wb"); // Crea el archivo en caso de no existir

18

cout << "\n\n\n\rCodigo de Empleado: "; cin >> codigo;

dir_fisica=codigo*sizeof(Registro); // Calculo de la dir. fisica fseek(alias,dir_fisica,SEEK_SET); //Posicionar el apuntador del archivo fread(&Registro,sizeof(Registro),1,alias); // Lee el "Registro", de tamano=sizeof(Registro) del archivo "alias" if(Registro.codigo==codigo) { cout << "\n\n\n\rRegistro duplicado !!!"; fclose(alias); getch(); return; } cout << "\n\rNombre: "; gets(Registro.nombre); cout << "\n\rDepartamento : "; cin >> Registro.departamento; cout << "\n\rSueldo do { cout << "\n\rFijo : "; Registro.fijo=toupper(getche()); }while(Registro.fijo!='S' && Registro.fijo!='N'); Registro.codigo=codigo; fseek(alias,dir_fisica,SEEK_SET); //Posicionar el apuntador del archivo fwrite(&Registro,sizeof(Registro),1,alias); // Grabar el Registro completo fclose(alias); // Cierra el archivo cout << "\n\n\n\rEmpleado Registrado !!!"; 19 : "; cin >> Registro.sueldo;

cout << "\n\r<<< Oprima cualquier tecla para continuar >>>"; getch(); return; } void CONSULTA_DIRECTA(void) { int codigo; // Variable local para el numero de producto que desea consultar clrscr(); cout << "\n\rCONSULTA DE REGISTROS DE EMPLEADO"; alias=fopen("CONTROL.DAT","rb"); // Intenta abrir el archivo CONTROL.DAT // en modo de solo lectura if(alias==NULL) { cout << "\n\n\n\rNo existe el archivo !!!"; cout << "\n\r<<< Oprima cualquier tecla para continuar >>>"; getch(); return; } cout << "\n\n\n\rCodigo de Empleado: "; cin >> codigo; dir_fisica=codigo*sizeof(Registro); // Calculo de la dir. fisica fseek(alias,dir_fisica,SEEK_SET); //Posicionar el apuntador del archivo fread(&Registro,sizeof(Registro),1,alias); // Lee el "Registro", de tamano=sizeof(Registro) del archivo "alias" if(Registro.codigo==codigo) { cout << "\n\rCodigo Nombre Departamento Sueldo Fijo"; cout << "\n\r---------------------------------------------------------------------------";

20

printf("\n\r%3d\t%30s\t%3s\t\t$%4.2f\t %c",Registro.codigo,Registro.nombre,Registro.departamento,Registro.sueldo,Regi stro.fijo); } else { cout << "\n\n\n\rNo existe ese registro !!!"; } fclose(alias); cout << "\n\n\n\n\r<<< Oprima cualquier tecla para continuar >>>"; getch(); return; } void MODIFICACION_DIRECTA(void) { int codigo; // Variable local para el numero de producto que desea modificar clrscr(); cout << "\n\rMODIFICACION DE REGISTROS DE EMPLEADO"; alias=fopen("CONTROL.DAT","rb+"); // Intenta abrir el archivo PRODUCTO.DIR // en modo de lectura/escritura if(alias==NULL) // Valida la existencia del archivo { cout << "\n\n\n\rNo existe el archivo !!!"; cout << "\n\r<<< Oprima cualquier tecla para continuar >>>"; getch(); return; } cout << "\n\n\n\rCodigo de Empleado: "; cin >> codigo;

21

dir_fisica=codigo*sizeof(Registro); // Calculo de la dir. fisica fseek(alias,dir_fisica,SEEK_SET); //Posicionar el apuntador del archivo fread(&Registro,sizeof(Registro),1,alias); // Lee el "Registro", de tamano=sizeof(Registro) del archivo "alias" if(Registro.codigo==codigo) { cout << "\n\rCodigo Nombre Departamento Sueldo Fijo"; cout << "\n\r------------------------------------------------------------------------"; printf("\n\r%3d\t%30s\t%3s\t\t$%4.2f\t %c",Registro.codigo,Registro.nombre,Registro.departamento,Registro.sueldo,Regi stro.fijo); cout << "\n\n\n\rAnote los nuevos datos ..."; cout << "\n\rNombre: "; gets(Registro.nombre); cout << "\n\rDepartamento : "; cin >> Registro.departamento; cout << "\n\rSueldo do { cout << "\n\rFijo : "; Registro.fijo=toupper(getche()); }while(Registro.fijo!='S' && Registro.fijo!='N'); // Es necesario reposicionar el apuntador del archivo al principio del // registro que desea modificar, ya que al leer un registro, el // apuntador se posiciona en el registro siguiente // La funcion ftell(alias) devuelve la posicion donde se encuentra el // apuntador fseek(alias,dir_fisica,SEEK_SET); //Posicionar el apuntador del archivo fwrite(&Registro,sizeof(Registro),1,alias); // Graba el registro con // los nuevos campos fclose(alias); // Cierra el archivo cout << "\n\n\n\rRegistro modificado !!!"; cout << "\n\r<<< Oprima cualquier tecla para continuar >>>"; 22 : "; cin >> Registro.sueldo;

getch(); return; } else { cout << "\n\n\n\rNo se encuentra ese registro !!!"; } fclose(alias); // Cierra el archivo cout << "\n\n\n\n\r<<< Oprima cualquier tecla para continuar >>>"; getch(); return; } void BAJA_LOGICA_DIRECTA(void) { int codigo; // Variable local para el numero de producto que desea eliminar char op; clrscr(); cout << "\n\rBAJA LOGICA DE REGISTROS DE EMPLEADO"; alias=fopen("CONTROL.DAT","rb+"); // Intenta abrir el archivo PRODUCTO.DIR // en modo de lectura/escritura if(alias==NULL) // Valida la existencia del archivo { cout << "\n\n\n\rNo existe el archivo !!!"; cout << "\n\r<<< Oprima cualquier tecla para continuar >>>"; getch(); return; } cout << "\n\n\n\rNumero de Codigo: "; cin >> codigo;

23

dir_fisica=codigo*sizeof(Registro); // Calculo de la dir. fisica fseek(alias,dir_fisica,SEEK_SET); //Posicionar el apuntador del archivo fread(&Registro,sizeof(Registro),1,alias); // Lee el "Registro", de tamano=sizeof(Registro) del archivo "alias" if(Registro.codigo==codigo) { cout << "\n\rCodigo Nombre Departamento Sueldo Fijo"; cout << "\n\r------------------------------------------------------------------------"; printf("\n\r%3d\t%30s\t%3s\t\t$%4.2f\t %c\n\n\n\n\r",Registro.codigo,Registro.nombre,Registro.departamento,Registro.su eldo,Registro.fijo); Registro.codigo=0; strcpy(Registro.nombre,""); Registro.departamento,""; Registro.sueldo=0.0; Registro.fijo=' '; // Es necesario reposicionar el apuntador del archivo al principio del // registro que desea modificar, ya que al leer un registro, el // apuntador se posiciona en el registro siguiente // La funcion ftell(alias) devuelve la posicion donde se encuentra el // apuntador do { cout << "\n\rEsta seguro que desea eliminar este registro? [S/N] ---> "; op=toupper(getche()); }while(op!='S' && op!='N'); if(op=='S') { fseek(alias,dir_fisica,SEEK_SET); //Posicionar el apuntador del archivo fwrite(&Registro,sizeof(Registro),1,alias); // Graba el registro con 24

// los nuevos campos cout << "\n\n\n\rRegistro eliminado logicamente !!!"; } else { cout << "\n\n\n\rRegistro NO eliminado !!!"; } fclose(alias); // Cierra el archivo cout << "\n\r<<< Oprima cualquier tecla para continuar >>>"; getch(); return; } else { cout << "\n\n\n\rNo se encuentra ese registro !!!"; } fclose(alias); // Cierra el archivo cout << "\n\n\n\n\r<<< Oprima cualquier tecla para continuar >>>"; getch(); return; } void LISTADO_SECUENCIAL(void) { clrscr(); cout << "\n\rLISTADO DE REGISTROS DE CODIGO"; alias=fopen("CONTROL.DAT","rb"); // Intenta abrir el archivo PRODUCTO.DIR // en modo de solo lectura if(alias==NULL) { cout << "\n\n\n\rNo existe el archivo !!!"; 25

cout << "\n\r<<< Oprima cualquier tecla para continuar >>>"; getch(); return; } cout << "\n\rCodigo Nombre Departamento Sueldo Fijo";

cout << "\n\r---------------------------------------------------------------------------"; fread(&Registro,sizeof(Registro),1,alias); // Lee el "Registro", de tamano=sizeof(Registro) del archivo "alias" while(!feof(alias)) // Ciclo mientras no se encuentre el final del archivo { printf("\n\r%3d\t%30s\t%3s\t\t$%4.2f\t %c",Registro.codigo,Registro.nombre,Registro.departamento,Registro.sueldo,Regi stro.fijo); fread(&Registro,sizeof(Registro),1,alias); } fclose(alias); // Cierra el archivo cout << "\n\r----------------------------------------------------------------------------"; cout << "\n\rFin del listado !!!"; cout << "\n\r<<< Oprima cualquier tecla para continuar >>>"; getch(); return; }

Lenguaje de programacin El lenguaje de programacin usado es el c++ en borlan

26

*Ejecucin del programa


Utilizamos comandos en c++ para compilar el programa y luego creamos el objeto en un archivo punto dat y por ultimo llamamos el programa. Su corrida fue satisfactoria.

*Verificacin del programa


El programa se compilo varias veces donde se introdujeron archivos y se hicieron todos las rutinas necesarias para comprobar de que todo esta correcto.

*Programa de trabajo
Implementar las rutinas necesarias para la gestin de un archivo directo con transformacin de claves para control de personal que contenga los campos Cdigo, Nombre del empleado, Departamento y Sueldo. El archivo est diseado para contener 100 registros (mas un 20% extra para colisiones). Se supone que el programa principal tiene las declaraciones principales y est abierto.

27

CAPITULO IV PRESENTACIN DE LA APLICACIN

*Pantalla principal y su descripcin

28

Descripcin
En la pantalla principal se despliega un men de opciones donde nos pide la opcin que queremos elegir, entre las que tenemos:

1- Altas: edicin de un registro. 2- Consulta visualizar la informacin contenida en el archivo. 3- Modificacin Cambiar total o parcial un archivo. 4- Baja Lgica es la accin de eliminar un registro de un archivo. 5- Listado secuencial muestra una lista de los todos los registros introducidos.

* Pantalla de captura de datos

29

Aqu se nos pide que editemos un registro llamado cdigo de empleado que es nuestro campo clave, luego nos pide el nombre, el departamento, el sueldo, y estatus que es fijo temporero.

En esta pantalla despus de haber introducido los datos, los datos son capturados y nos pide que presionemos cualquier tecla para continuar.

30

*Pantalla de despliegue de informacin


Aqu elegimos la opcin 5 y nos muestra una lista de todos los registros en forma secuencial

31

*Muestra de los archivos creados

32

CAPITULO V EXPERIENCIA ADQUIRIDA

33

*Experiencia de los integrantes del grupo *Giolani Brito Butista


Muchos compaeros valiosos e inteligente tambin puedo hacer mencin de lo aprendido de la materia y la flexibilidad de la profesora para los estudiante si ex cesin de nadie lo malo de este curso solo es que es incomodo trabajar en algo que tu desconoce y obligado tener que hacerlo ah pero nada espero en dios que todo lo aprendido en este curso pueda ser puesto es tenido una vasta experiencia en este curso ya que he conocido n prctica nada que dios le bendiga mucho siempre.

*Wendy Morel Rojas


Este trabajo nos ha costado mucho sacrificio y esfuerzo pero me ha servido de mucho ya que he extrado la parte ms sustancial que es la de la enseanza, porque atreves de este he aprendido a manejar archivos directos y no solo eso sino que me ha servido de base para la programacin en c ya que no tenia conocimientos sobre este lenguaje de programacin.

*Gisell Potorreal
Mi experiencia en este trabajo fue bastante fructfera porque pude aprender muchas terminologas que yo conoca y al mismo tiempo pude compartir conocimientos con mis compaeros y aprend a conocerlos mas afondo

*Rabel Rodrguez
Este trabajo me ha servido de mucho, ya que he recibido de el la enseanza y aprendizaje para seguir avanzando en lo que es el lenguaje de programacin y parte de mi carrera a seguir, aunque nos tomo mucho sacrificio para llevarlo a cabo me llena de satisfaccin por que obtuve los conocimientos necesarios para El desarrollo de la meta a seguir. 34

Conclusin
Los nuevos sistemas de informacin son costosos en tiempos y recursos, la solucin moderna de sistemas de informacin exigen nuevas herramientas y metodologas para resolver rpida, econmica y eficiente los problemas de informacin planteados por las organizaciones. Aun ms el pleno potencial del hardware no es aprovechado plenamente y existe un considerable retraso con el software y sus aplicaciones, generando lo que se conoce como crisis del software. La creacin de este programa ha sido de gran satisfaccin ya que cumple con los requerimientos de la empresa y arroja el resultado esperado. una forma ms rpida sin necesidad de recorrer todo el dato En este se almacenan los datos en un archivo directo para as poder acceder a los datos de

35

Bibliografa
Fundamentos de programacin Algoritmos, estructura de Datos y objetos Tercera edicin. Autor: Luis Joyanes Aguilar

Como programar en C,C++ y Java


Harvey M. Deitel; Paul J. Deitel, (aut.) Prentice Hall

Registros y archivos directos en: http://www.programacionfacil.com/cpp:creacion_archivos_directos Colisin en:


http://www.google.com.do/search? hl=es&biw=800&bih=264&defl=es&q=define:Colisi %C3%B3n+&sa=X&ei=jK71TMaMG8Kclgfc7NieBg&ved=0CBgQkAE Sistemas de Archivos en: http://www.monografias.com/trabajos6/sistar/sistar.shtml

36

37