Sunteți pe pagina 1din 30

Lenguaje d Programacin Estructurada

Integrantes: - Bazn Soto, Jos - Huraca Berrospi, Angelo - Urbina Quispe, Jaime Profesor: Crdova Neri Teodoro

20120153C 20122022C 20120319I

2013

INDICE
I. Introduccin Importancia del software II. Fundamento terico

2.1 Historia del Lenguaje c 2.2 Historia del Lenguaje C++ 2.3 Programacin estructurada 2.3.1 Estructuras de Control 2.3.2 Estructuras Repetitivas 2.3.3 Arreglos: *Arreglos *Cadena de Caracteres *Matrices 2.3.4. Archivos

III. Base de Datos

I. Introduccin
El avance en el campo de la Tecnologa de la informacin mejora realmente la vida de las personas. Las habilidades y el trabajo de Los profesionales de TI realmente han trado grandes cambios y las empresas estn disfrutando de los privilegios, que llegan a servir en el trabajo, realizado por los profesionales de TI. Usted ver que el software de innumerables se vende en el mercado, que han hecho la vida de los hombres de Negocios, ms fcil que nunca. Entre todos los otros tipos de software, Software mdico es uno de los ms prominentes y eficiente. Este software ha ayudado a mejorar la eficiencia en el trabajo y la funcionalidad de las instituciones mdicas, incluyendo clnicas y los hospitales. De software mdico pueden introducir cambios importantes y destacados en el trabajo constante de los mdicos y el personal, que trabajan en Hospitales y Clnicas. Las ventajas de este software puede ser igualmente proporcionada a los pacientes. Que puede traer la paz en la vida de los mdicos y pacientes y no habr posibilidades de bastante menos de cualquier tipo de problema, en el funcionamiento de hospitales y clnicas. Los mdicos llevan una vida ocupada y agitada. No tienen mucho tiempo para mantener el registro de sus pacientes y para registrar la historia de los pacientes es un trabajo de mucho tiempo. Si va a contratar a un empleado para mantener el registro de los pacientes, incluso en ese caso sera una prdida de tiempo y trabajo caro. En lugar de pagar a un empleado, slo para este trabajo, el que tiene que entender la importancia de la instalacin de software mdico. No slo va a ayudar en el mantenimiento de los datos de los pacientes, sino que tambin ayudar en el mantenimiento de la facturacin de su hospital o clnica.

II. Fundamento terico 2.1 Historia del lenguaje c


El lenguaje de programacin C fue creado por Brian Kernighan y Dennis Ritchie a mediados de los aos 70. La primera implementacin del mismo la realiz Dennis Ritchie sobre un computador DEC PDP-11 con sistema operativo UNIX. C es el resultado de un proceso de desarrollo que comenz con un lenguaje anterior, el BCPL, el cual influy en el desarrollo por parte de Ken Thompson de un lenguaje llamado B, el cual es el antecedente directo del lenguaje C. El lenguaje C es un lenguaje para programadores en el sentido de que proporciona una gran flexibilidad de programacin y una muy baja comprobacin de incorrecciones, de forma que el lenguaje deja bajo la responsabilidad del programador acciones que otros lenguajes realizan por s mismos. As, por ejemplo, C no comprueba que el ndice de referencia de un vector (llamado array en la literatura informtica) no sobrepase el tamao del mismo; que no se escriba en zonas de memoria que no pertenecen al rea de datos del programa, etc. El lenguaje C es un lenguaje estructurado, en el mismo sentido que lo son otros lenguajes de programacin tales como el lenguaje Pascal, el Ada o el Modula-2, pero no es estructurado por bloques, o sea, no es posible declarar subrutinas (pequeos trozos de programa) dentro de otras subrutinas, a diferencia de como sucede con otros lenguajes estructurados tales como el Pascal. Adems, el lenguaje C no es rgido en la comprobacin de tipos de datos, permitiendo fcilmente la conversin entre diferentes tipos de datos y la asignacin entre tipos de datos diferentes, por ejemplo la expresin siguiente es vlida en C: float a; /*Declaro una variable para nmeros reales*/ int b; /*Declaro otra variable para nmero enteros*/ b=a; /*Asigno a la variable para entera el nmero real*/ Todo programa de C consta, bsicamente, de un conjunto de funciones, y una funcin llamada main, la cual es la primera que se ejecuta al comenzar el programa, llamndose desde ella al resto de funciones que compongan nuestro programa. Desde su creacin, surgieron distintas versiones de C, que incluan unas u otras caractersticas, palabras reservadas, etc. Este hecho provoco la necesidad de unificar el lenguaje C, y es por ello que surgi un estndar de C, llamado ANSI-C, que declara una serie de caractersticas, etc., que debe cumplir todo lenguaje C. Por ello, y dado que todo programa que se desarrolle siguiendo el estndar ANSI de C ser fcilmente portable de un modelo de ordenador a otro modelo de ordenador, y de igual forma de un modelo de compilador a otro, en estos apuntes explicaremos un C basado en el estndar ANSI-C.

El lenguaje C posee un nmero reducido de palabras reservadas (tan solo 32) que define el estndar ANSI-C. Estas palabras reservadas pueden verse en la tabla siguiente:

2.2 Historia del lenguaje c++


El comit para el estndar ANSI C fue formado en 1983 con el objetivo de crear un lenguaje uniforme a partir del C original, desarrollado por Kernighan y Ritchie en 1972, en la ATT. Hasta entonces el estndar lo marcaba el libro escrito en 1978 por estos dos autores1. El lenguaje C++ se comenz a desarrollar en 1980. Su autor fue B. Stroustrup, tambin de la ATT. Al comienzo era una extensin del lenguaje C que fue denominada C with classes. Este nuevo lenguaje comenz a ser utilizado fuera de la ATT en 1983. El nombre C++ es tambin de ese ao, y hace referencia al carcter del operador incremento de C (++). Ante la gran difusin y xito que iba obteniendo en el mundo de los programadores, la ATT comenz a estandarizarlo internamente en 1987. En 1989 se form un comit ANSI (seguido algn tiempo despus por un comit ISO) para estandarizarlo a nivel americano e internacional. En la actualidad, el C++ es un lenguaje verstil, potente y general. Su xito entre los programadores profesionales le ha llevado a ocupar el primer puesto como herramienta de desarrollo de aplicaciones. El C++ mantiene las ventajas del C en cuanto a riqueza de operadores y expresiones, flexibilidad, concisin y eficiencia. Adems, ha eliminado algunas de las dificultades y limitaciones del C original. La evolucin de C++ ha continuado con la aparicin de Java, un lenguaje creado simplificando algunas cosas de C++ y aadiendo otras, que se utiliza para realizar aplicaciones en Internet. Hay que sealar que el C++ ha influido en algunos puntos muy importantes del ANSI C, como por ejemplo en la forma de declarar las funciones, en los punteros a void, etc. En efecto, aunque el C++ es posterior al C, sus primeras versiones son anteriores al ANSI C, y algunas de las mejoras de ste fueron tomadas del C++. El C++ es a la vez un lenguaje procedural (orientado a algoritmos) y orientado a objetos. Como lenguaje procedural se asemeja al C y es compatible con l, aunque ya se ha dicho que presenta ciertas ventajas (las modificaciones menores, que se vern a continuacin). Como lenguaje orientado a objetos se basa en una filosofa completamente diferente, que exige del programador un completo cambio de mentalidad. Las caractersticas propias de la Programacin Orientada a Objetos (Object Oriented Programming, u OOP) de C++ son modificaciones mayores que s que cambian radicalmente su naturaleza.

2.3 Programacin estructurada


Orgenes de la programacin estructurada
A finales de los aos 1970 surgi una nueva forma de programar que no solamente daba lugar a programas fiables y eficientes, sino que adems estaban escritos de manera que facilitaba su mejor comprensin, no slo proveyendo ventajas durante la fase de desarrollo, sino tambin posibilitando una ms sencilla modificacin posterior. El teorema del programa estructurado, propuesto por Bhm-Jacopini, demuestra que todo programa puede escribirse utilizando nicamente las tres instrucciones de control siguientes:

Secuencia Instruccin condicional. Iteracin (bucle de instrucciones) con condicin al principio.

Solamente con estas tres estructuras se pueden escribir todos los programas y aplicaciones posibles. Si bien los lenguajes de programacin tienen un mayor repertorio de estructuras de control, stas pueden ser construidas mediante las tres bsicas citadas.

Historia
Fundamentacin terica
El teorema del programa estructurado proporciona la base terica de la programacin estructurada. Seala que tres maneras de combinar programas son suficientes para expresar cualquier funcin computable: secuencia, seleccin e iteracin. Esta observacin no se origin con el movimiento de la programacin estructurada. Estas estructuras son suficientes para describir el ciclo de instruccin de una unidad central de procesamiento, as como el funcionamiento de una mquina de Turing. Por lo tanto un procesador siempre est ejecutando un "programa estructurado" en este sentido, incluso si las instrucciones que lee de la memoria no son parte de un programa estructurado. Sin embargo, los autores usualmente acreditan el resultado a un documento escrito en 1966 por Bhm y Jacopini, posiblemente porque Dijkstra haba citado este escrito. El teorema del programa estructurado no responde a cmo escribir y analizar un programa estructurado de manera til. Estos temas fueron abordados durante la dcada de 1960 y principio de los aos 1970, con importantes contribuciones de Dijkstra, Robert W. Floyd, Tony Hoarey y David Gries.

2.3.1. Estructuras de control


Bloques if La sintaxis general de un bloque if es:

if( expresion ) { statement ; ... } La expresion debe ir entre parntesis y dar un valor numrico. Si el valor es no cero, las expresiones que van entre llaves son ejecutadas. Tambin se puede utilizar un bloque if-else: if( expresion ) { contenidos bloque 1 ; } else { contenidos bloque 2 ; } Bucles En C++ hay tres clases de bucles: Bucle while while( expresion ) { statement ; // cuerpo del bucle ... } El bucle while ejecuta el cuerpo del bucle repetidamente mientras la expresion sea distinta de cero (sea verdadera). El test se hace antes de ejecutar el cuerpo del bucle, lo que significa que se este se ejecuta cero o ms veces. Se debe utilizar un bucle while cuando es posible que el cuerpo del bucle no sea ejecutado. Por ejemplo, para leer y procesar el contenido de un fichero de tamao desconocido. Bucle do-while do { statement ; // cuerpo del bucle do-while ... } while ( expresion ); El cuerpo del bucle se ejecuta repetidamente mientras la expresion es distinta de cero (verdadera). El test se hace despus de ejecutar el cuerpo del bucle, por lo que este se ejecuta al menos una vez. Debe utilizarse este tipo de bucles cuando el cuerpo debe ser ejecutado al menos una vez. En particular, en aquellos casos en que el bucle calcula un valor que es necesario para la condicin de terminacin. Por ejemplo, los clculos iterativos que terminan cuando se da una condicin de convergencia, cuando una expresion calculada dentro del bucle es menor que un determinado valor. Bucle for for ( init-statement; expresion de continuacin; expresion de incremento ) { statement ; // cuerpo del bucle for ... }

break y continue break termina la ejecucin del bucle en que se encuentra. continue hace que el bucle pase directamente a la siguiente iteracin. Ambos comandos deben utilizarse lo menos posible

2.3.2 Estructuras repetitivas


Introduccin
Un ciclo es una estructura que nos permite representar un conjunto de instrucciones que debe repetirse una cantidad limitada de veces, normalmente dependiente de una condicin o de una cantidad determinada de repeticiones o iteraciones. Los ciclos permiten iterar todo un proceso tantas veces como el programador (o el usuario) lo determine. Es comn, que en la solucin de muchos problemas algortmicos, se requiera realizar la repeticin de cierto bloque de instrucciones, con el fin de obtener el objetivo buscado por el algoritmo. Para implementar repeticin de bloques de instrucciones se utilizan las estructuras de control llamadas ciclos o estructuras repetitivas.

Concepto General
Un ciclo puede definirse como una estructura que nos permite repetir o iterar un conjunto de instrucciones y que tiene las siguientes caractersticas:

El conjunto de instrucciones a repetir dentro del ciclo debe ser finito La cantidad de veces que se repita dicho conjunto de instrucciones tambin debe ser finita. En algunos casos esta cantidad de veces va a depender de una condicin explcita y en otros casos va a depender de una condicin implcita. Una condicin es explcita cuando depende solamente de la misma ejecucin del programa sin que sea importante la participacin del usuario. Asimismo una condicin es implcita cuando depende solamente de la voluntad del usuario y por lo tanto la cantidad de iteraciones o repeticiones del ciclo podra llegar a ser diferente cada vez pues sera posible que cambiara con cada usuario. Deben estar claramente demarcados el inicio y el fin del ciclo. En los casos en los cuales solo exista una instruccin a iterar, no sern necesarias dichas marcas. Dentro de un ciclo podr ir cualquiera de las otras estructuras, incluyendo otros ciclos.

Tipos de Ciclos
A continuacin se describe la estructura de construccin de cada uno de los ciclos tal como son concebidos por la mayora de lenguajes de programacin y

posteriormente se utilizaran para representar el mismo algoritmo con cada una de las estructuras.

Ciclo while (Mientras)


El ciclo while representa el esquema general de trabajo para todos los ciclos, esto quiere decir que si se entiende claramente la lgica de funcionamiento de este ciclo se facilita entender no solo los otros ciclos. Es til saber que este ciclo tambin es llamado en algunos libros el Ciclo Mientras Que.

Su forma de ejecucin es muy sencilla: Mientras se cumpla que la condicin sea Verdadera entonces se ejecutar el Cuerpo del Ciclo. De igual forma tambin se podra decir que el Cuerpo del Ciclo se repetir tantas veces como lo permita la condicin o mientras dicha condicin sea Verdadera. En condiciones normales la cantidad de veces que se repita el cuerpo del ciclo ser siempre una cantidad finita y deber existir, dentro del mismo cuerpo del ciclo, una o ms instrucciones que hagan que en algn momento la condicin sea Falsa. El ciclo while se puede describir de la siguiente forma: cuando el computador encuentra la estructura while verifica la condicin del ciclo, si la condicin es verdadera se ejecutan las instrucciones al interior del ciclo, luego de ejecutar la ltima condicin del ciclo se vuelve a evaluar la condicin, s contina siendo cierta se vuelve a ejecutar el bloque de instrucciones del ciclo. Cuando la condicin se hace falsa el computador se salta el bloque de instrucciones del ciclo y contina con la ejecucin del resto de instrucciones del programa.

2.3.3 Arreglos
Arreglos y Matrices 1. Arreglos
Un arreglo es una estructura de datos, o ms tcnicamente, un espacio de memoria que permite almacenar una coleccin de elementos, todos del mismo tipo. Conviene imaginar un arreglo como una secuencia contigua de celdas (espacios de memoria), o casillas, en cada una de las cuales se puede guardar un elemento de la coleccin. Adems, es usual dibujarlo como lo ilustra la figura siguiente: |0|1|2|3|4|5|6| Esta figura representa un arreglo de siete casillas cada una de las cuales se puede utilizar para guardar un dato. La dimensin o tamao de un arreglo es el nmero de casillas que lo conforman. Debe ser claro, entonces, que la figura anterior corresponde a un arreglo de dimensin 7.

Cada una de las casillas de un arreglo tiene asociado un nmero que la identifica de manera nica. A este nmero se le llama ndice o direccin. En la figura anterior, debajo de cada casilla, aparece su ndice. En lenguajes como C, C++ y java, la primera casilla del arreglo tiene ndice 0, la segunda tiene ndice 1, la tercera ndice 2, y as sucesivamente. Es muy importante tener presente que si el arreglo es de dimensin N, la ltima casilla tiene ndice N-1. Los lenguajes de programacin, permiten que el programador declare arreglos de cualquier tipo y prcticamente de cualquier tamao. En el seudolenguaje, un arreglo se declara usando el siguiente formato o plantilla: <NOMBRE>: arreglo [<N>] de <TIPO> En este formato aparecen en maysculas y entre los caracteres < y > los componentes que el programador debe determinar. As por ejemplo, si se quiere declarar un arreglo con nombre letras, de dimensin 15 y que pueda almacenar datos de tipo caracter, se debe escribir la siguiente lnea. letras : arreglo [15] de caracter Volviendo al formato anterior, el programador debe bautizar el arreglo (ponerle un nombre significativo), debe decir cul es su dimensin, y tambin debe decir de qu tipo son los elementos que almacenar ese arreglo. Enseguida se dan algunos ejemplos de declaraciones de arreglos. Si se necesita guardar las ventas diarias de una tienda durante la ltima semana, se puede declarar el siguiente arreglo: ventas : arreglo [7] de real Si se quiere guardar las notas que ha sacado un estudiante en los cinco talleres y en los cinco laboratorios del curso de Programacin de Computadores se pueden declarar los siguientes arreglos: talleres : arreglo [5] de real laboratorios : arreglo [5] de real Si se quiere guardar el valor de las ltimas 12 facturas telefnicas de una casa, se puede declarar el siguiente arreglo: facturasTel : arreglo [12] de real Los ndices se crearon para permitir que el programador se pueda referir, de forma especfica, a una cualquiera de las casillas del arreglo, tanto para guardar un dato en esa casilla, como para obtener el dato guardado. Para referirse a una casilla particular de un arreglo se debe seguir el siguiente formato: <NOMBRE>[<INDICE>] es decir, se debe escribir el nombre del arreglo seguido por el ndice de la casilla entre parntesis cuadrados. Para los siguientes ejemplos, suponga que se declara el arreglo cifras, de la siguiente manera: cifras : arreglo [10] de entero

La siguiente instruccin asigna o guarda el nmero 100 en la primera casilla de este arreglo: cifras[0]:= 100 La siguiente instruccin iterativa guarda 550 en cada una de las ltimas 5 casillas de este arreglo: i:=5 MIENTRAS (i<10) HACER cifras[i]:= 550 i:=i+1 FIN-MIENTRAS

2. Cadenas de caracteres
Los elementos del tipo caracter (tipo char en lenguaje C) se pueden agrupar para formar secuencias que se denominan cadenas de caracteres, o simplemente cadenas. En este texto, y tambin en el texto de un programa en C, las cadenas se delimitan por dobles comillas. Por ejemplo, CH?*$A7! y soy cadena son dos cadenas, la primera formada por 8 caracteres y la segunda por 10. En la memoria del computador una cadena se guarda en un arreglo de tipo caracter, de tal manera que cada smbolo de la cadena ocupa una casilla del arreglo. Sin embargo, se utiliza una casilla adicional del arreglo para guardar un carcter especial que se llama terminador de cadena. En C y en el seudolenguaje este carcter especial es \0. Como lo indica su nombre, la funcin de este carcter especial es indicar que la cadena termina. La longitud de una cadena se define como el nmero de smbolos que la componen, sin contar el terminador de cadena. Es muy importante tener en cuenta que aunque el terminador de cadena no hace parte de la cadena, s ocupa una casilla de memoria en el arreglo. Dado que la representacin de cadenas es mediante arreglos de tipo caracter, aplican todos los conceptos que ya explicaron para esta estructura de datos. Por otra parte, por el hecho de que las cadenas son de uso muy frecuente y generalizado en programacin, en muchos lenguajes se dispone de muchas operaciones (funciones) sobre estas. La siguiente es una lista corta de estas operaciones para el seudolenguaje, en la cual debe suponerse que cad, cad1 y cad2 son nombres de arreglos de tipo caracter. Para determinar si una cadena es menor que otra se usa el orden lexicogrfico, es decir, el mismo que usan los diccionarios. As por ejemplo, casa es menor casita, y esta a su vez es menor que caza. De otra parte, la operacin leerCadena pone automticamente el terminador de cadena, lo mismo que las operaciones copiarCadena y concatenarCadena.

3. Matrices
Una matriz es una estructura de datos, o ms tcnicamente, un espacio de memoria que permite almacenar una coleccin de elementos, todos del mismo tipo. La

diferencia con los arreglos est en que, en las matrices, los elementos no estn organizados linealmente sino que su organizacin es bidimensional, es decir, en filas y columnas. Conviene imaginar una matriz como una organizacin de celdas de memoria, o casillas, en cada una de las cuales se puede guardar un elemento de la coleccin. Adems, es usual dibujarla como lo ilustra la figura siguiente:

Esta figura representa un matriz de cuatro filas (numeradas verticalmente de 0 a 3) y seis columnas (numeradas horizontalmente de 0 a 5). En cada una de las 24 celdas o casillas se puede guardar un dato. La dimensin o tamao de una matriz es el nmero filas por el nmero de columnas. Debe ser claro entonces que la figura anterior es la grfica de una matriz de dimensin 4x6. La numeracin de las filas y las columnas determina que cada una de las casillas de una matriz tiene asociados dos nmeros que la identifican de manera nica. A estos nmeros se les llama ndice de fila e ndice de columna, respectivamente. En el seudolenguaje, y tambin en C y C++, las filas y las columnas se numeran desde 0. Los lenguajes como C y C++, permiten que el programador declare matrices de cualquier tipo y prcticamente de cualquier tamao. En el seudolenguaje, un matriz se declara usando el siguiente formato: <NOMBRE> : matriz [<N>][<M>] de <TIPO> En este formato aparecen en maysculas y entre los caracteres < y > los componentes que el programador puede determinar. As por ejemplo, si se quiere declarar una matriz con nombre mat, de dimensin 15x4 y que pueda almacenar datos de tipo caracter, se debe escribir la siguiente lnea. mat : matriz [15][4] de caracter Segn el formato anterior, el programador debe bautizar la matriz (ponerle un nombre significativo), debe decir cul es su dimensin, y tambin debe decir de qu tipo son los elementos que almacenar. Enseguida se dan algunos ejemplos de declaraciones de matrices.

Si se necesita guardar la informacin relacionada con el tablero de un juego de tic tac toe (el tradicional triqui), se puede declarar la siguiente matriz: tablero: matriz [3][3] de caracter Si se requiere guardar las notas que han sacado 35 estudiantes en los 5 talleres y en los 5 laboratorios del curso de Programacin de Computadores se pueden declarar las siguientes matrices. talleres : matriz [35][5] de real laboratorios : matriz [35][5] de real Note que, en ambas matrices, cada fila guarda las notas de un estudiante del curso. Si se quiere guardar las letras que conforman una sopa de letras, como aquellas que vienen en los pasatiempos, se puede declarar la siguiente matriz. sopa : matriz [10][15] de caracter Note que la sopa de letras ms grande que se puede guardar es de 10 filas por 15 columnas. Los ndices se crearon para permitir que el programador se pueda referir, de forma especfica y directa, a una cualquiera de las casillas de la matriz, tanto para guardar un dato en esa casilla, como para obtener el dato almacenado en ella. En el seudolenguaje, para referirse a una casilla particular de una matriz se debe seguir el siguiente formato: <NOMBRE> [<INDICE-DE-FILA>][<INDICE-DE-COLUMNA>] es decir, se debe escribir el nombre de la matriz seguido por el ndice de fila y por el ndice de columna, ambos entre parntesis cuadrados, de la casilla que se quiere consultar. Para los siguientes ejemplos, suponga que se declara la matriz montos, de la siguiente manera: montos : matriz [6][10] de real La siguiente instruccin asigna o guarda el nmero 10,4 en la casilla de la esquina superior izquierda de esta matriz: montos[0][0]:= 10,4 La siguiente instruccin iterativa guarda 5,5 en cada una de las casillas de la ltima fila de esta matriz: k:=0 MIENTRAS (k<10) HACER montos[5][k]:= 5,5 k:=k+1
FIN-MIENTRAS

2.3.4. Archivos
Muy a menudo necesitamos almacenar cierta cantidad de datos de forma ms o menos permanente. La memoria del ordenador es voltil, y lo que es peor, escaso y caro. De modo que cuando tenemos que guardar nuestros datos durante cierto tiempo tenemos que recurrir a sistemas de almacenamiento ms econmicos, aunque sea a costa de que sean ms lentos. Durante la historia de los ordenadores se han usado varios mtodos distintos para el almacenamiento de datos. Al principio se recurri a cintas de papel perforadas, despus a tarjetas perforadas. A continuacin se pas al soporte magntico, empezando por grandes rollos de cintas magnticas abiertas. Hasta aqu, todos los sistemas de almacenamiento externo eran secuenciales, es decir, no permitan acceder al punto exacto donde se guardaba la informacin sin antes haber partido desde el principio y sin haber ledo toda la informacin, hasta el punto donde se encontraba la que estbamos buscando. Con las cintas magnticas empez lo que con el tiempo sera el acceso aleatorio a los datos. Se poda reservar parte de la cinta para guardar cierta informacin sobre la situacin de los datos, y aadir ciertas marcas que hicieran ms sencillo localizarla. Pero no fue hasta la aparicin de los discos magnticos cuando sta tcnica lleg a su sentido ms amplio. En los discos es ms sencillo acceder a cualquier punto de la superficie en poco tiempo, ya que se accede al punto de lectura y escritura usando dos coordenadas fsicas. Por una parte la cabeza de lectura/escritura se puede mover en el sentido del radio del disco, y por otra el disco gira permanentemente, con lo que cualquier punto del disco pasa por la cabeza en un tiempo relativamente corto. Esto no pasa con las cintas, donde slo hay una coordenada fsica. Con la invencin y proliferacin de los discos se desarrollaron los ficheros de acceso aleatorio, que permiten acceder a cualquier dato almacenado en un fichero en relativamente poco tiempo. Actualmente, los discos duros tienen una enorme capacidad y son muy rpidos, aunque an siguen siendo lentos, en comparacin con las memorias RAM. El caso de los CD es algo intermedio. En realidad son secuenciales en cuanto al modo de guardar los datos, cada disco slo tiene una pista de datos grabada en espiral. Sin embargo, este sistema, combinado con algo de memoria RAM, proporciona un acceso muy prximo al de los discos duros. En cuanto al tipo de acceso, en C y C++ podemos clasificar los archivos segn varias categoras: 1. Dependiendo de la direccin del flujo de datos: De entrada: los datos se leen por el programa desde el archivo. De salida: los datos se escriben por el programa hacia el archivo. De entrada/salida: los datos pueden se escritos o ledos. 2. Dependiendo del tipo de valores permitidos a cada byte: De texto: slo estn permitidos ciertos rangos de valores para cada byte.

Algunos bytes tienen un significado especial, por ejemplo, el valor hexadecimal 0x1A marca el fin de fichero. Si abrimos un archivo en modo texto, no ser posible leer ms all de un byte con ese valor, aunque el fichero sea ms largo. Binarios: estn permitidos todos los valores para cada byte. En estos archivos el final del fichero se detecta de otro modo, dependiendo del soporte y del sistema operativo. La mayora de las veces se hace guardando la longitud del fichero. Cuando queramos almacenar valores enteros, o en coma flotante, o imgenes, etc., deberemos usar este tipo de archivos. 3. Segn el tipo de acceso: Archivos secuenciales: imitan el modo de acceso de los antiguos ficheros secuenciales almacenados en cintas magnticas y Archivos de acceso aleatorio: permiten acceder a cualquier punto de ellos para realizar lecturas y/o escrituras. 4. Segn la longitud de registro: Longitud variable: en realidad, en este tipo de archivos no tiene sentido hablar de longitud de registro, podemos considerar cada byte como un registro. Tambin puede suceder que nuestra aplicacin conozca el tipo y longitud de cada dato almacenado en el archivo, y lea o escriba los bytes necesarios en cada ocasin. Otro caso es cuando se usa una marca para el final de registro, por ejemplo, en ficheros de texto se usa el carcter de retorno de lnea para eso. En estos casos cada registro es de longitud diferente. Longitud constante: en estos archivos los datos se almacenan en forma de registro de tamao contante. En C usaremos estructuras para definir los registros. C dispone de funciones de librera adecuadas para manejar este tipo de ficheros. Mixtos: en ocasiones pueden crearse archivos que combinen los dos tipos de registros, por ejemplo, dBASE usa registros de longitud constante, pero aade un registro especial de cabecera al principio para definir, entre otras cosas, el tamao y el tipo de los registros. Es posible crear archivos combinando cada una de estas categoras, por ejemplo: archivos secuenciales de texto de longitud de registro variable, que son los tpicos archivos de texto. Archivos de acceso aleatorio binarios de longitud de registro constante, normalmente usados en bases de datos. Y tambin cualquier combinacin menos corriente, como archivos secuenciales binarios de longitud de registro constante, etc. En cuanto a cmo se definen estas propiedades, hay dos casos. Si son binarios o de texto o de entrada, salida o entrada/salida, se define al abrir el fichero, mediante la funcin fopen en C o mediante el mtodo open de fstream en C++. La funcin open usa dos parmetros. El primero es el nombre del fichero que contiene el archivo. El segundo es en modo que es una cadena que indica el modo en que se abrir el archivo: lectura o escritura, y el tipo de datos que contiene: de texto o binarios. En C, los ficheros admiten seis modos en cuanto a la direccin del flujo de datos: l r: slo lectura. El fichero debe existir.

l w: se abre para escritura, se crea un fichero nuevo o se sobrescribe si ya existe. l a: aadir, se abre para escritura, el cursor se sita al final del fichero. Si el fichero no existe, se crea. l r+: lectura y escritura. El fichero debe existir. l w+: lectura y escritura, se crea un fichero nuevo o se sobrescribe si ya existe. l a+: aadir, lectura y escritura, el cursor se sita al final del fichero. Si el fichero no existe, se crea. En cuanto a los valores permitidos para los bytes, se puede aadir otro carcter a la cadena de modo: l t: modo texto. Normalmente es el modo por defecto. Se suele omitir. l b: modo binario. En ciertos sistemas operativos no existe esta distincin, y todos los ficheros son binarios. En C++ es algo diferente, el constructor de las clases ifstream, ofstream y fstream admite los parmetros para abrir el fichero directamente, y tambin disponemos del mtodo open, para poder crear el stream sin asociarlo con un fichero concreto y hacer esa asociacin ms tarde.

Tipos, funciones y clases usados frecuentemente con ficheros


Funciones y tipos C estndar:

Tipo FILE:
C define la estructura de datos FILE en el fichero de cabecesa "stdio.h" para el manejo de ficheros. Nosotros siempre usaremos punteros a estas estructuras. La definicin de sta estructura depende del compilador, pero en general mantienen un campo con la posicin actual de lectura/escritura, un buffer para mejorar las prestaciones de acceso al fichero y algunos campos para uso interno.

Funcin fopen:
Sintaxis: FILE *fopen(char *nombre, char *modo); sta funcin sirve para abrir y crear ficheros en disco. El valor de retorno es un puntero a una estructura FILE. Los parmetros de entrada son: 1. nombre: una cadena que contiene un nombre de fichero vlido, esto depende del sistema operativo que estemos usando. El nombre puede incluir el camino completo. 2. modo: especifica en tipo de fichero que se abrir o se crear y el tipo de datos que puede contener, de texto

o binarios: r: slo lectura. El fichero debe existir. w: se abre para escritura, se crea un fichero nuevo o se sobrescribe si ya existe. a: aadir, se abre para escritura, el cursor se sita al final del fichero. Si el fichero no existe, se crea. r+: lectura y escritura. El fichero debe existir. w+: lectura y escritura, se crea un fichero nuevo o se sobrescribe si ya existe. a+: aadir, lectura y escritura, el cursor se sita al final del fichero. Si el fichero no existe, se crea. t: tipo texto, si no se especifica "t" ni "b", se asume por defecto que es "t" b: tipo binario.

Funcin fclose:
Sintaxis: int fclose(FILE *fichero); Es importante cerrar los ficheros abiertos antes de abandonar la aplicacin. Esta funcin sirve para eso. Cerrar un fichero almacena los datos que an estn en el buffer de memoria, y actualiza algunos datos de la cabecera del fichero que mantiene el sistema operativo. Adems permite que otros programas puedan abrir el fichero para su uso. Muy a menudo, los ficheros no pueden ser compartidos por varios programas. Un valor de retorno cero indica que el fichero ha sido correctamente cerrado, si ha habido algn error, el valor de retorno es la constante EOF. El parmetro es un puntero a la estructura FILE del fichero que queremos cerrar.

Funcin fgetc:
Sintaxis: int fgetc(FILE *fichero); Esta funcin lee un carcter desde un fichero. El valor de retorno es el carcter ledo como un unsigned char convertido a int. Si no hay ningn carcter disponible, el valor de retorno es EOF. El parmetro es un puntero a una estructura FILE del fichero del que se har la lectura.

Funcin fputc:
Sintaxis: int fputc(int caracter, FILE *fichero); Esta funcin escribe un carcter a un fichero. El valor de retorno es el carcter escrito, si la operacin fue completada con xito, en caso contrario ser EOF. Los parmetros de entrada son el carcter a escribir, convertido a int y un puntero a una estructura FILE del fichero en el que se har la escritura.

Funcin feof:

Sintaxis: int feof(FILE *fichero); Esta funcin sirve para comprobar si se ha alcanzado el final del fichero. Muy frecuentemente deberemos trabajar con todos los valores almacenados en un archivo de forma secuencial, la forma que suelen tener los bucles para leer todos los datos de un archivo es permanecer leyendo mientras no se detecte el fin de fichero. Esta funcin suele usarse como prueba para verificar si se ha alcanzado o no ese punto. El valor de retorno es distinto de cero slo si no se ha alcanzado el fin de fichero. El parmetro es un puntero a la estructura FILE del fichero que queremos verificar.

Funcin rewind:
Sintaxis: void rewind(FILE *fichero) Es una funcin heredada de los tiempos de las cintas magnticas. Literalmente significa "rebobinar", y hace referencia a que para volver al principio de un archivo almacenado en cinta, haba que rebobinarla. Eso es lo que hace sta funcin, sita el cursor de lectura/escritura al principio del archivo. El parmetro es un puntero a la estructura FILE del fichero que queremos rebobinar. Ejemplos: // ejemplo1.c: Muestra un fichero dos veces. #include <stdio.h> int main() { FILE *fichero; fichero = fopen("ejemplo1.c", "r"); while(!feof(fichero)) fputc(fgetc(fichero), stdout); rewind(fichero); while(!feof(fichero)) fputc(fgetc(fichero), stdout); fclose(fichero); getchar(); return 0; }

Funcin fgets:
Sintaxis: char *fgets(char *cadena, int n, FILE *fichero); Esta funcin est diseada para leer cadenas de caracteres. Leer hasta n-1 caracteres o hasta que lea un retorno de lnea. En este ltimo caso, el carcter de retorno de lnea tambin es ledo. El parmetro n nos permite limitar la lectura para evitar desbordar el espacio disponible en la cadena.

El valor de retorno es un puntero a la cadena leda, si se ley con xito, y es NULL si se detecta el final del fichero o si hay un error. Los parmetros son: la cadena a leer, el nmero de caracteres mximo a leer y un puntero a una estructura FILE del fichero del que se leer.

Funcin fputs:
Sintaxis: int fputs(const char *cadena, FILE *stream); La funcin fputs escribe una cadena en un fichero. No se aade el carcter de retorno de lnea ni el carcter nulo final. El valor de retorno es un nmero no negativo o EOF en caso de error. Los parmetros de entrada son la cadena a escribir y un puntero a la estructura FILE del fichero donde se realizar la escritura.

Funcin fread:
Sintaxis: size_t fread(void *puntero, size_t tamao, size_t nregistros, FILE *fichero); Esta funcin est pensada para trabajar con registros de longitud constante. Es capaz de leer desde un fichero uno o varios registros de la misma longitud y a partir de una direccin de memoria determinada. El usuario es responsable de asegurarse de que hay espacio suficiente para contener la informacin leda. El valor de retorno es el nmero de registros ledos, no el nmero de bytes. Los parmetros son: un puntero a la zona de memoria donde se almacenarn los datos ledos, el tamao de cada registro, el nmero de registros a leer y un puntero a la estructura FILE del fichero del que se har la lectura.

Funcin fwrite:
Sintaxis: size_t fwrite(void nregistros, FILE *fichero);
*puntero, size_t tamao, size_t

Esta funcin tambin est pensada para trabajar con registros de longitud constante y forma pareja con fread. Es capaz de escribir hacia un fichero uno o varios registros de la misma longitud almacenados a partir de una direccin de memoria determinada. El valor de retorno es el nmero de registros escritos, no el nmero de bytes. Los parmetros son: un puntero a la zona de memoria donde se almacenarn los datos ledos, el tamao de cada registro, el nmero de registros a leer y un puntero a la estructura FILE del fichero del que se har la lectura. Ejemplo:

// copia.c: Copia de ficheros // Uso: copia <fichero_origen> <fichero_destino> #include <stdio.h> int main(int argc, char **argv) { FILE *fe, *fs; unsigned char buffer[2048]; // Buffer de 2 Kbytes int bytesLeidos; if(argc != 3) { printf("Usar: copia <fichero_origen> <fichero_destino>\n"); return 1; } // Abrir el fichero de entrada en lectura y binario fe = fopen(argv[1], "rb"); if(!fe) { printf("El fichero %s no existe o no puede ser abierto.\n", argv[1]); return 1; } // Crear o sobrescribir el fichero de salida en binario fs = fopen(argv[2], "wb"); if(!fs) { printf("El fichero %s no puede ser creado.\n", argv[2]); fclose(fe); return 1; } // Bucle de copia: while((bytesLeidos = fread(buffer, 1, 2048, fe))) fwrite(buffer, 1, bytesLeidos, fs); // Cerrar ficheros: fclose(fe); fclose(fs); return 0; }

Funcin fprintf:
Sintaxis: int fprintf(FILE *fichero, const char *formato, ...); La funcin fprintf funciona igual que printf en cuanto a parmetros, pero la salida se dirige a un fichero en lugar de a la pantalla.

Funcin fscanf:
Sintaxis: int fscanf(FILE *fichero, const char *formato, ...); La funcin fscanf funciona igual que scanf en cuanto a parmetros, pero la entrada se toma de un fichero en lugar del teclado.

Funcin fflush:

Sintaxis: int fflush(FILE *fichero); Esta funcin fuerza la salida de los datos acumulados en el buffer de salida del fichero. Para mejorar las prestaciones del manejo de ficheros se utilizan buffers, almacenes temporales de datos en memoria, las operaciones de salida se hacen a travs del buffer, y slo cuando el buffer se llena se realiza la escritura en el disco y se vaca el buffer. En ocasiones nos hace falta vaciar ese buffer de un modo manual, para eso sirve sta funcin. El valor de retorno es cero si la funcin se ejecut con xito, y EOF si hubo algn error. El parmetro de entrada es un puntero a la estructura FILE del fichero del que se quiere vaciar el buffer. Si es NULL se har el vaciado de todos los ficheros abiertos.

Funciones C especficas para ficheros de acceso aleatorio

Funcin fseek:
Sintaxis: int fseek(FILE origen);
*fichero, long int desplazamiento, int

Esta funcin sirve para situar el cursor del fichero para leer o escribir en el lugar deseado. El valor de retorno es cero si la funcin tuvo xito, y un valor distinto de cero si hubo algn error. Los parmetros de entrada son: un puntero a una estructura FILE del fichero en el que queremos cambiar el cursor de lectura/escritura, el valor del desplazamiento y el punto de origen desde el que se calcular el desplazamiento. El parmetro origen puede tener tres posibles valores: 1. SEEK_SET el desplazamiento se cuenta desde el principio del fichero. El primer byte del fichero tiene un desplazamiento cero. 2. SEEK_CUR el desplazamiento se cuenta desde la posicin actual del cursor. 3. SEEK_END el desplazamiento se cuenta desde el final del fichero.

Funcin ftell:
Sintaxis: long int ftell(FILE *fichero); La funcin ftell sirve para averiguar la posicin actual del cursor de lectura/escritura de un fichero. El valor de retorno ser esa posicin, o -1 si hay algn error. El parmetro de entrada es un puntero a una estructura FILE del fichero del que queremos leer la posicin del cursor de lectura/escritura.

Clases para manejar ficheros en C++


Existen tres clases para manejar ficheros: ifstream, ofstream y fstream. La primera est orientada a ficheros de entrada, la segunda a ficheros de salida, y la tercera puede manejar cualquiera de los dos tipos o ficheros de entrada y salida. Clase ifstream: El constructor est sobrecargado para poder crear streams de varias maneras: ifstream(); ifstream(const char *name, int mode = ios::in, int = filebuf::openprot); El primero slo crea un stream de entrada pero no lo asocia a ningn fichero. El segundo lo crea, lo asocia al fichero con el nombre "name" y lo abre Los parmetros son: el nombre del fichero, el modo, que para ifstream es ios::in por defecto. El tercer parmetro se refiere al buffer, y no nos preocupa de momento.

Clase ofstream:
Lo mismo pasa con ofstream, salvo que los valores por defecto de los parmetros son diferentes: ofstream(); ofstream(const char *name, int mode = ios::out, int = filebuf::openprot);

Clase fstream:
fstream(); fstream(const char *name, int mode = ios::in, int = filebuf::openprot);

Mtodo open:
Todas estas clases disponen adems del mtodo "open", para abrir el fichero a lo largo de la ejecucin del programa. void open(const char *name, int mode, int prot=filebuf::openprot);

"name" es el nombre del fichero, mode es el modo en que se abrir, puede ser uno o una combinacin del tipo enumerado open_mode, de la clase "ios": enum open_mode { in, out, ate, app, trunc, nocreate, noreplace, binary }; Cada uno de los valores se pueden combinar usando el operador de bits OR (|), y significan lo siguiente: l in: modo de entrada. l out: modo de salida. l ate: abre el fichero y sita el cursor al final. l app: modo append, parecido al anterior, pero las operaciones de escritura siempre se hacen al final del fichero. l trunc: si se aplica a ficheros de salida, se crear el fichero si no existe previamente, o se truncar con un tamao de 0 bytes, si existe. l nocreate: impide crear un fichero si no existe, en ese caso, la funcin falla. l noreplace: lo ignoro. l binary: abre el fichero en modo binario. Los tres ltimos modos probablemente no son estndar, y es posible que no existan en muchos compiladores.

Mtodo close:
void close();

Sencillamente, cierra el fichero asociado a un stream.

Operador >>:
Igual que sucede con el stream estndar cout, el operador de flujo de salida >> se puede usar con streams de salida cuando trabajemos con texto.

Operador <<:
Del mismo modo, al igual que sucede con el stream estndar cin, el operador de flujo de entrada << se puede usar con streams de entrada cuando trabajemos con texto.

Mtodo de salida put:


iostream& put(char ch); Sirve para cualquier stream de salida, e inserta un carcter en el stream.

Mtodo de entrada get:


int get(); istream& get(char*, int len, char = '\n'); istream& get(char&); istream& get(streambuf&, char = '\n'); La primera forma no se recomienda y se considera obsoleta, lee un carcter desde el stream de entrada. La segunda lee caracteres y los almacena en el buffer indicado en el primer parmetro hasta que se leen "leen" caracteres o hasta que se encuentra el carcter indicado en el tercer parmetro, que por defecto es el retorno de lnea.

La tercera forma extrae un nico carcter en la referencia a char proporcionada. La cuarta no nos interesa de momento.

Mtodo de entrada getline:


iostream& getline(char*, int, char = '\n'); Extrae caracteres hasta que se encuentra el delimitador y los coloca en el buffer, elimina el delimitador del stream de entrada y no lo aade al buffer. Mtodo eof: int eof(); Verifica si se ha alcanzado el final del fichero, devuelve un valor nulo si no es as.

Mtodo clear:
void clear(iostate state=0); Cada vez que se produzca una condicin de error en un stream es necesario eliminarla, ya que en caso contrario ninguna operacin que se realice sobre l tendr xito. Por ejemplo, si llegamos hasta el final de fichero, el stream quedar en estado "eof" hasta que se elimine explcitamente ese estado. Eso se hace mediante el mtodo "clear", sin parmetros dejar el estado en 0, es decir, sin errores.

Los estados posibles se definen en un enumerado: enum io_state { goodbit, eofbit, failbit, badbit }; l goodbit: indica que el estado es correcto. l eofbit: indica que se ha detectado fin de fichero. l failbit: indica que una operacin sobre el stream ha fallado. l badbit: se activa si falla una operacin de escritura de buffers.

Mtodo bad:
int bad(); Devuelve el estado del bit "badbit".

Mtodo fail:
int fail(); Devuelve el estado del bit "failbit".

Mtodo good:
int good(); Devuelve el estado del bit "goodbit". Ejemplo: Veamos el ejemplo anterior de mostrar dos veces un fichero, pero esta vez escrito para C++ usando streams: // ejemplo1.cpp: Muestra un fichero dos veces. #include <iostream> #include <fstream> using namespace std; int main() { ifstream fichero("ejemplo1.cpp"); char c; while(fichero.get(c)) cout.put(c); fichero.clear(); // (1) fichero.seekg(0);

while(fichero.get(c)) cout.put(c); fichero.close(); cin.get(); return 0; } Como vemos en (1), es necesario eliminar el bit de eof, que se ha activado al leer hasta el final del fichero, cuando el ltimo intento de llamar a "get" ha fallado, porque se ha terminado el fichero.

Mtodo is_open:
int is_open(); Devuelve un valor no nulo si el fichero est abierto.

Mtodo flush:
iostream& flush(); Realiza las operaciones de escritura pendientes que an se han realizado slo en el buffer.

Mtodos relacionados con acceso aleatorio.


Disponemos de otro tipo enumerado en ios para indicar movimientos relativos dentro de un stream de acceso aleatorio: enum seek_dir { beg, cur, end}; l beg: relativo al principio del fichero. l cur: relativo a la posicin actual del cursor dentro del fichero. l end: relativo al final del fichero.

Mtodo seekg:
Cambia la posicin del cursor en streams de entrada. iostream& seekg(streampos pos); istream& seekg(streamoff offset, seek_dir dir); La primera forma es para cambiar la posicin de modo absoluto. La segunda para cambios relativos, en la que se indica el salto en el primer parmetro y el punto de partida en el segundo, que puede ser cualquiera de los indicados anteriormente: ios::beg, ios::cur o ios::end.

Mtodo seekp:
Cambia la posicin del cursor en streams de salida. iostream& seekp(streampos pos); iostream& seekp(streamoff offset, seek_dir); Lo mismo que seekg, pero aplicado a stream de salida.

Mtodo tellg:
streampos tellg(); Devuelve la posicin actual del cursor dentro de un stream de entrada.

Mtodo tellp:
streampos tellp(); Devuelve la posicin actual del cursor dentro de un stream de salida.

Mtodo read:
istream& read(char*, int); Lee el nmero de caracteres indicado en el segundo parmetro dentro del buffer suministrado por el primero.

Mtodo gcount:
int gcount(); Devuelve el nmero de caracteres sin formato de la ltima lectura. Las lecturas sin formato son las realizadas mediante las funciones get, getline y read.

Mtodo write:
iostream& write(const char*, int); Escribe el nmero de caracteres indicado en el segundo parmetro desde el buffer suministrado por el primero. Ejemplo:

De nuevo haremos el ejemplo de copiar ficheros, pero esta vez usando streams. // copia.cpp: Copia de ficheros // Uso: copia <fichero_origen> <fichero_destino> #include <iostream> #include <fstream> using namespace std; int main(int argc, char **argv) { ifstream entrada; ofstream salida; char buffer[2048]; // Buffer de 2 Kbytes int bytesLeidos; if(argc != 3) { printf("Usar: copia <fichero_origen> <fichero_destino>\n"); return 1; } // Abrir el fichero de entrada en lectura y binario entrada.open(argv[1]); if(!entrada.good()) { printf("El fichero %s no existe o no puede ser abierto.\n", argv[1]); return 1; } // Crear o sobrescribir el fichero de salida en binario salida.open(argv[2]); if(!salida.good()) { printf("El fichero %s no puede ser creado.\n", argv[2]); entrada.close(); return 1; }

// Bucle de copia: do { entrada.read(buffer, 2048); bytesLeidos = entrada.gcount(); salida.write(buffer, bytesLeidos); } while(bytesLeidos > 0); // Cerrar ficheros: entrada.close(); salida.close(); return 0; }

3 Archivos secuenciales
En estos archivos, la informacin slo puede leerse y escribirse empezando desde el principio del archivo. Los archivos secuenciales tienen algunas caractersticas que hay que tener en cuenta: 1. La escritura de nuevos datos siempre se hace al final del archivo. 2. Para leer una zona concreta del archivo hay que avanzar siempre, si la zona est antes de la zona actual de lectura, ser necesario "rebobinar" el archivo. 3. Los ficheros slo se pueden abrir para lectura o para escritura, nunca de los dos modos a la vez. Esto es en teora, por supuesto, en realidad C no distingue si los archivos que usamos son secuenciales o no, es el tratamiento que hagamos de ellos lo que los clasifica como de uno u otro tipo. Pero hay archivos que se comportan siempre como secuenciales, por ejemplo los ficheros de entrada y salida estndar: stdin, stdout, stderr y stdaux. Tomemos el caso de stdin, que suele ser el teclado. Nuestro programa slo podr abrir ese fichero como de lectura, y slo podr leer los caracteres a medida que estn disponibles, y en el mismo orden en que fueron tecleados. Lo mismo se aplica para stdout y stderr, que es la pantalla, en estos casos slo se pueden usar para escritura, y el orden en que se muestra la informacin es el mismo en que se enva. Un caso especial es stdaux, que suele ser el puerto serie. Tambin es un archivo secuencial, con respecto al modo en que se leen y escriben los datos. Sin embargo se un fichero de entrada y salida. Trabajar con archivos secuenciales tiene algunos inconvenientes. Por ejemplo, imagina que tienes un archivo de este tipo en una cinta magntica. Por las caractersticas fsicas de este soporte, es evidente que slo podemos tener un fichero abierto en cada unidad de cinta. Cada fichero puede ser ledo, y tambin sobrescrito, pero en general, los archivos que haya a continuacin del que escribimos se perdern, o bien sern sobrescritos al crecer el archivo, o quedar un espacio vaco entre el final del archivo y el principio del siguiente. Lo normal cuando se quera actualizar el contenido de un archivo de cinta aadiendo o modificando datos, era abrir el archivo en modo lectura en una unidad de cinta, y crear un nuevo fichero de escritura en una unidad de cinta distinta. Los datos ledos de una cinta se editan o modifican, y se copian en la otra secuencialmente.

Cuando trabajemos con archivos secuenciales en disco haremos lo mismo, pero en ese caso no necesitamos dos unidades de disco, ya que en los discos es posible abrir varios archivos simultneamente. En cuanto a las ventajas, los archivos secuenciales son ms sencillos de manejar, ya que requieren menos funciones, adems son ms rpidos, ya que no permiten moverse a lo largo del archivo, el punto de lectura y escritura est siempre determinado. En ocasiones pueden ser tiles, por ejemplo, cuando slo se quiere almacenar cierta informacin a medida que se recibe, y no interesa analizarla en el momento. Posteriormente, otro programa puede leer esa informacin desde el principio y analizarla. Este es el caso de archivos "log" o "diarios" por ejemplo, los servidores de las pginas WEB pueden generar una lnea de texto cada vez que alguien accede a una de las pginas y las guardan en un fichero secuencial.

III. Base de Datos.


Uno de los objetivos fundamentales de un sistema de informacin es contar no slo con recursos de informacin, sino tambin con los mecanismos necesarios para poder encontrar y recuperar estos recursos. De esta forma, las bases de datos se han convertido en un elemento indispensable no slo para el funcionamiento de los grandes motores de bsqueda y la recuperacin de informacin a lo largo y ancho de la Web, sino tambin para la creacin de sedes web, Intranets y otros sistemas de informacin en los que se precisa manejar grandes o pequeos volmenes de informacin. La creacin de una base de datos a la que puedan acudir los usuarios para hacer consultas y acceder a la informacin que les interese es, pues, una herramienta imprescindible de cualquier sistema informativo sea en red o fuera de ella.

3.1. Definicin de Bases de Datos


Es una coleccin de datos referentes a una organizacin estructurada segn un modelo de datos de forma que refleja las relaciones y restricciones existentes entre los objetos del mundo real, y consigue independencia, integridad y seguridad de los datos. Lo que debemos tener claro es la diferencia entre Base de Datos y Sistema Gestor de Bases de Datos (SGBD). La base de datos es el almacenamiento donde residen los datos. El SGBD es el encargado de manipular la informacin contenida en ese almacenamiento mediante operaciones de lectura/escritura sobre la misma. Adems las bases de datos no slo contendrn las tablas (ficheros) de datos, sino que tambin almacenar formularios (interfaces para edicin de datos), consultas sobre los datos, e informes. El SGBD se encargar de manipular esos datos,

controlar la integridad y seguridad de los datos, reconstruir y reestructurar la base de datos cuando sea necesario.

3.2. Definicin de Modelo de Datos.


Un modelo de datos es un conjunto de conceptos y reglas que nos llevarn a poder reflejar la estructura de datos y operaciones aplicables sobre ellos de un sistema informtico. Modelo Relacional. Existen multitud de modelos de datos aplicables para el diseo de bases de datos, pero el modelo relacional es el ms usado y extendido; actualmente los SGBD ms implantados utilizan este modelo de datos. La representacin grfica de este modelo es la tabla. Una tabla se compone de filas y columnas. Las filas se corresponden con los registros y las columnas se corresponden con los campos. Un campo ser la unidad mnima de informacin. A partir de ste se formarn los registros. Para entender estos conceptos partamos de un tpico fichero de alumnos. Cada una de las fichas incluidas en l sera un registro y cada apartado de informacin (DNI, nombre, apellidos, direccin, telfono,) que se rellena referente al alumno sera un campo. Como norma general, una tabla siempre dispondr de un campo o conjunto de ellos denominado clave primaria, que permitir identificar de forma nica cada registro de una tabla. Se podrn aplicar ndices sobre las tablas, lo que permitir acceder a la informacin ms rpidamente. Las tablas las podremos relacionar de forma que se evitar redundancia de informacin y la informacin ser ms correcta. Estas relaciones se establecern entre uno o varios campos de una tabla (clave ajena) contra la clave primaria de otra tabla, por lo que una vez establecida la relacin, los valores que se introduzcan debern existir en la tabla relacionada.

3.3. Ventajas de las Bases de Datos:


Control sobre la redundancia de datos: Los sistemas de ficheros almacenan varias copias de los mismos datos en ficheros distintos. Esto hace que se desperdicie espacio de almacenamiento, adems de provocar la falta de consistencia de datos. Consistencia de datos: Si un dato est almacenado una sola vez, cualquier actualizacin se debe hacer una sola vez, y est disponible para todos los usuarios inmediatamente. Si algn

dato esta duplicado y el sistema reconoce esta redundancia, el mismo sistema se encarga de garantizar que todas las copias se mantengan consistentes. Comparticin de datos: Los ficheros pertenecen a las personas o a los departamentos que los utilizan. Pero en los sistemas de bases de datos, la base de datos pertenece a la empresa y puede ser compartida por todos los usuarios que estn autorizados. Mantenimiento de Estndares: Gracias a la integracin, es ms fcil respetar los estndares necesario, tanto los establecidos a nivel de empresa como los nacionales e internacionales. Estos estndares pueden establecerse sobre el formato de los datos para facilitar su intercambio, pueden ser estndares de documentacin, procedimientos de actualizacin y tambin reglas de acceso. Mejora la integridad de datos: La integridad de las bases de datos se refiere a la validez y la consistencia de los datos almacenados. Normalmente, la integridad se expresa mediante restricciones o reglas que no se pueden violar. Estas restricciones se pueden aplicar tanto a los datos, como a sus relaciones, y es Sistema de Gestin de Bases de Datos quien se debe de encargar de mantenerse. Mejora los servicios de copias de seguridad: Muchos sistemas de ficheros dejan que sea el usuario quien proporcione las medidas necesarias para proteger los datos ante fallos en el sistema o en las aplicaciones. Los usuarios tienen que hacer copias de seguridad cada da, y si ocurre algn fallo, utilizar las copias para restaurarlos.

3.4. Desventajas de las Bases de Datos


Complejidad: Los Sistemas de Gestin de Bases de Datos son conjuntos de programas que pueden llegar a ser complejos con una gran funcionalidad. Es preciso comprender muy bien esta funcionalidad para poder realizar un buen uso de ellos. Vulnerable a Fallos: El hecho de que todo este centralizado en el Sistema de Gestin de Bases de Datos hace que el sistema sea ms vulnerable ante los fallos que pueden producirse. Es por ello que deben tenerse copias de seguridad (Backup).

S-ar putea să vă placă și